ng-firebase-table-kxp 1.2.7 → 1.2.9

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.
@@ -5,7 +5,7 @@ import { MatSort } from '@angular/material/sort';
5
5
  import { MatTableDataSource } from '@angular/material/table';
6
6
  import { getDisplayValue, getNestedValue, isString, trackByProperty, getImageKey, } from '../../utils/table.utils';
7
7
  import { debounceTime, firstValueFrom, Subject, takeUntil, BehaviorSubject, } from 'rxjs';
8
- import { FormControl, FormArray } from '@angular/forms';
8
+ import { FormControl, FormArray, } from '@angular/forms';
9
9
  import * as i0 from "@angular/core";
10
10
  import * as i1 from "@angular/router";
11
11
  import * as i2 from "../../services/table.service";
@@ -100,19 +100,20 @@ function TableComponent_div_0_div_2_div_9_div_1_div_1_Template(rf, ctx) { if (rf
100
100
  i0.ɵɵtemplate(5, TableComponent_div_0_div_2_div_9_div_1_div_1_mat_option_5_Template, 5, 4, "mat-option", 38);
101
101
  i0.ɵɵelementEnd()()();
102
102
  } if (rf & 2) {
103
- const ctx_r24 = i0.ɵɵnextContext(5);
103
+ const filterGroup_r22 = i0.ɵɵnextContext().$implicit;
104
+ const ctx_r24 = i0.ɵɵnextContext(4);
104
105
  i0.ɵɵadvance(5);
105
- i0.ɵɵproperty("ngForOf", ctx_r24.getAvailableFilterOptions());
106
+ i0.ɵɵproperty("ngForOf", ctx_r24.getAvailableFilterOptions(filterGroup_r22));
106
107
  } }
107
108
  function TableComponent_div_0_div_2_div_9_div_1_div_2_Template(rf, ctx) { if (rf & 1) {
108
- const _r35 = i0.ɵɵgetCurrentView();
109
+ const _r36 = i0.ɵɵgetCurrentView();
109
110
  i0.ɵɵelementStart(0, "div", 34)(1, "mat-form-field", 35)(2, "mat-label", 21);
110
111
  i0.ɵɵelement(3, "i", 48);
111
112
  i0.ɵɵelementStart(4, "span");
112
113
  i0.ɵɵtext(5);
113
114
  i0.ɵɵelementEnd()();
114
115
  i0.ɵɵelementStart(6, "input", 49, 50);
115
- i0.ɵɵlistener("keyup.enter", function TableComponent_div_0_div_2_div_9_div_1_div_2_Template_input_keyup_enter_6_listener($event) { i0.ɵɵrestoreView(_r35); const ctx_r34 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r34.search($event)); });
116
+ i0.ɵɵlistener("keyup.enter", function TableComponent_div_0_div_2_div_9_div_1_div_2_Template_input_keyup_enter_6_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r35 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r35.search($event)); });
116
117
  i0.ɵɵelementEnd()()();
117
118
  } if (rf & 2) {
118
119
  const filterGroup_r22 = i0.ɵɵnextContext().$implicit;
@@ -125,10 +126,10 @@ function TableComponent_div_0_div_2_div_9_div_1_div_3_mat_option_5_Template(rf,
125
126
  i0.ɵɵtext(1);
126
127
  i0.ɵɵelementEnd();
127
128
  } if (rf & 2) {
128
- const item_r38 = ctx.$implicit;
129
- i0.ɵɵproperty("value", item_r38);
129
+ const item_r39 = ctx.$implicit;
130
+ i0.ɵɵproperty("value", item_r39);
130
131
  i0.ɵɵadvance(1);
131
- i0.ɵɵtextInterpolate1(" ", item_r38.label, " ");
132
+ i0.ɵɵtextInterpolate1(" ", item_r39.label, " ");
132
133
  } }
133
134
  function TableComponent_div_0_div_2_div_9_div_1_div_3_Template(rf, ctx) { if (rf & 1) {
134
135
  i0.ɵɵelementStart(0, "div", 34)(1, "mat-form-field", 35)(2, "mat-label");
@@ -147,14 +148,14 @@ function TableComponent_div_0_div_2_div_9_div_1_div_3_Template(rf, ctx) { if (rf
147
148
  i0.ɵɵproperty("ngForOf", (tmp_1_0 = filterGroup_r22.get("selectFilter")) == null ? null : tmp_1_0.value.items);
148
149
  } }
149
150
  function TableComponent_div_0_div_2_div_9_div_1_div_4_Template(rf, ctx) { if (rf & 1) {
150
- const _r41 = i0.ɵɵgetCurrentView();
151
+ const _r42 = i0.ɵɵgetCurrentView();
151
152
  i0.ɵɵelementStart(0, "div", 52)(1, "div", 53)(2, "mat-form-field", 54)(3, "mat-label", 21);
152
153
  i0.ɵɵelement(4, "i", 55);
153
154
  i0.ɵɵelementStart(5, "span");
154
155
  i0.ɵɵtext(6, "Data Inicial");
155
156
  i0.ɵɵelementEnd()();
156
157
  i0.ɵɵelementStart(7, "input", 56);
157
- i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_keydown_enter_7_listener($event) { i0.ɵɵrestoreView(_r41); const ctx_r40 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r40.search($event)); })("input", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_input_7_listener($event) { i0.ɵɵrestoreView(_r41); const i_r23 = i0.ɵɵnextContext().index; const ctx_r42 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r42.onDateInput($event, "initialDate", i_r23)); });
158
+ i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_keydown_enter_7_listener($event) { i0.ɵɵrestoreView(_r42); const ctx_r41 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r41.search($event)); })("input", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_input_7_listener($event) { i0.ɵɵrestoreView(_r42); const i_r23 = i0.ɵɵnextContext().index; const ctx_r43 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r43.onDateInput($event, "initialDate", i_r23)); });
158
159
  i0.ɵɵelementEnd()();
159
160
  i0.ɵɵelementStart(8, "mat-form-field", 54)(9, "mat-label", 21);
160
161
  i0.ɵɵelement(10, "i", 55);
@@ -162,13 +163,13 @@ function TableComponent_div_0_div_2_div_9_div_1_div_4_Template(rf, ctx) { if (rf
162
163
  i0.ɵɵtext(12, "Data Final");
163
164
  i0.ɵɵelementEnd()();
164
165
  i0.ɵɵelementStart(13, "input", 57);
165
- i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_keydown_enter_13_listener($event) { i0.ɵɵrestoreView(_r41); const ctx_r44 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r44.search($event)); })("input", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_input_13_listener($event) { i0.ɵɵrestoreView(_r41); const i_r23 = i0.ɵɵnextContext().index; const ctx_r45 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r45.onDateInput($event, "finalDate", i_r23)); });
166
+ i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_keydown_enter_13_listener($event) { i0.ɵɵrestoreView(_r42); const ctx_r45 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r45.search($event)); })("input", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_input_13_listener($event) { i0.ɵɵrestoreView(_r42); const i_r23 = i0.ɵɵnextContext().index; const ctx_r46 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r46.onDateInput($event, "finalDate", i_r23)); });
166
167
  i0.ɵɵelementEnd()()()();
167
168
  } }
168
169
  function TableComponent_div_0_div_2_div_9_div_1_div_5_Template(rf, ctx) { if (rf & 1) {
169
- const _r49 = i0.ɵɵgetCurrentView();
170
+ const _r50 = i0.ɵɵgetCurrentView();
170
171
  i0.ɵɵelementStart(0, "div", 58)(1, "button", 59);
171
- i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_9_div_1_div_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r49); const i_r23 = i0.ɵɵnextContext().index; const ctx_r47 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r47.removeFilter(i_r23)); });
172
+ i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_9_div_1_div_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r50); const i_r23 = i0.ɵɵnextContext().index; const ctx_r48 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r48.removeFilter(i_r23)); });
172
173
  i0.ɵɵelement(2, "i", 60);
173
174
  i0.ɵɵelementEnd()();
174
175
  } }
@@ -208,33 +209,33 @@ function TableComponent_div_0_div_2_div_9_Template(rf, ctx) { if (rf & 1) {
208
209
  i0.ɵɵproperty("ngForOf", ctx_r13.filtersForm.controls);
209
210
  } }
210
211
  function TableComponent_div_0_div_2_div_11_Template(rf, ctx) { if (rf & 1) {
211
- const _r51 = i0.ɵɵgetCurrentView();
212
+ const _r52 = i0.ɵɵgetCurrentView();
212
213
  i0.ɵɵelementStart(0, "div")(1, "button", 61);
213
- i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_11_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r51); const ctx_r50 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r50.addFilter()); });
214
+ i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_11_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r52); const ctx_r51 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r51.addFilter()); });
214
215
  i0.ɵɵelement(2, "i", 62);
215
216
  i0.ɵɵtext(3, " Adicionar Filtro ");
216
217
  i0.ɵɵelementEnd()();
217
218
  } }
218
219
  function TableComponent_div_0_div_2_div_12_button_7_Template(rf, ctx) { if (rf & 1) {
219
- const _r54 = i0.ɵɵgetCurrentView();
220
+ const _r55 = i0.ɵɵgetCurrentView();
220
221
  i0.ɵɵelementStart(0, "button", 69);
221
- i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_12_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r54); const ctx_r53 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r53.arrange && ctx_r53.downloadTable !== undefined ? ctx_r53.downloadTable(ctx_r53.arrange, ctx_r53.data.conditions || []) : null); });
222
+ i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_12_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r55); const ctx_r54 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r54.arrange && ctx_r54.downloadTable !== undefined ? ctx_r54.downloadTable(ctx_r54.arrange, ctx_r54.data.conditions || []) : null); });
222
223
  i0.ɵɵelement(1, "i", 70);
223
224
  i0.ɵɵtext(2, " Exportar ");
224
225
  i0.ɵɵelementEnd();
225
226
  } if (rf & 2) {
226
- const ctx_r52 = i0.ɵɵnextContext(4);
227
- i0.ɵɵproperty("disabled", ctx_r52.dataSource && ctx_r52.dataSource.filteredData.length <= 0);
227
+ const ctx_r53 = i0.ɵɵnextContext(4);
228
+ i0.ɵɵproperty("disabled", ctx_r53.dataSource && ctx_r53.dataSource.filteredData.length <= 0);
228
229
  } }
229
230
  function TableComponent_div_0_div_2_div_12_Template(rf, ctx) { if (rf & 1) {
230
- const _r56 = i0.ɵɵgetCurrentView();
231
+ const _r57 = i0.ɵɵgetCurrentView();
231
232
  i0.ɵɵelementStart(0, "div", 63)(1, "button", 64);
232
- i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_12_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r56); const ctx_r55 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r55.search()); });
233
+ i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_12_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r57); const ctx_r56 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r56.search()); });
233
234
  i0.ɵɵelement(2, "i", 65);
234
235
  i0.ɵɵtext(3, " Pesquisar ");
235
236
  i0.ɵɵelementEnd();
236
237
  i0.ɵɵelementStart(4, "button", 66);
237
- i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_12_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r56); const ctx_r57 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r57.resetFilter()); });
238
+ i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_12_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r57); const ctx_r58 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r58.resetFilter()); });
238
239
  i0.ɵɵelement(5, "i", 67);
239
240
  i0.ɵɵtext(6, " Resetar ");
240
241
  i0.ɵɵelementEnd();
@@ -275,32 +276,32 @@ function TableComponent_div_0_div_2_Template(rf, ctx) { if (rf & 1) {
275
276
  function TableComponent_div_0_div_3_button_7_i_1_Template(rf, ctx) { if (rf & 1) {
276
277
  i0.ɵɵelement(0, "i");
277
278
  } if (rf & 2) {
278
- const ctx_r61 = i0.ɵɵnextContext(4);
279
- i0.ɵɵclassMap(ctx_r61.data.actionButton.icon);
279
+ const ctx_r62 = i0.ɵɵnextContext(4);
280
+ i0.ɵɵclassMap(ctx_r62.data.actionButton.icon);
280
281
  } }
281
282
  function TableComponent_div_0_div_3_button_7_Template(rf, ctx) { if (rf & 1) {
282
- const _r63 = i0.ɵɵgetCurrentView();
283
+ const _r64 = i0.ɵɵgetCurrentView();
283
284
  i0.ɵɵelementStart(0, "button", 30);
284
- i0.ɵɵlistener("click", function TableComponent_div_0_div_3_button_7_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r63); const ctx_r62 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r62.data.actionButton.method ? ctx_r62.data.actionButton.method($event) : null); });
285
+ i0.ɵɵlistener("click", function TableComponent_div_0_div_3_button_7_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r64); const ctx_r63 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r63.data.actionButton.method ? ctx_r63.data.actionButton.method($event) : null); });
285
286
  i0.ɵɵtemplate(1, TableComponent_div_0_div_3_button_7_i_1_Template, 1, 2, "i", 31);
286
287
  i0.ɵɵtext(2);
287
288
  i0.ɵɵelementEnd();
288
289
  } if (rf & 2) {
289
- const ctx_r58 = i0.ɵɵnextContext(3);
290
- i0.ɵɵproperty("ngClass", ctx_r58.getActionButtonClass())("routerLink", ctx_r58.data.actionButton.routerLink);
290
+ const ctx_r59 = i0.ɵɵnextContext(3);
291
+ i0.ɵɵproperty("ngClass", ctx_r59.getActionButtonClass())("routerLink", ctx_r59.data.actionButton.routerLink);
291
292
  i0.ɵɵadvance(1);
292
- i0.ɵɵproperty("ngIf", ctx_r58.data.actionButton.icon);
293
+ i0.ɵɵproperty("ngIf", ctx_r59.data.actionButton.icon);
293
294
  i0.ɵɵadvance(1);
294
- i0.ɵɵtextInterpolate1(" ", ctx_r58.data.actionButton.label, " ");
295
+ i0.ɵɵtextInterpolate1(" ", ctx_r59.data.actionButton.label, " ");
295
296
  } }
296
297
  function TableComponent_div_0_div_3_div_8_Template(rf, ctx) { if (rf & 1) {
297
- const _r66 = i0.ɵɵgetCurrentView();
298
+ const _r67 = i0.ɵɵgetCurrentView();
298
299
  i0.ɵɵelementStart(0, "div", 32)(1, "mat-form-field", 35)(2, "mat-label", 21);
299
300
  i0.ɵɵelement(3, "i", 71);
300
301
  i0.ɵɵtext(4, " Buscar ");
301
302
  i0.ɵɵelementEnd();
302
303
  i0.ɵɵelementStart(5, "input", 72, 73);
303
- i0.ɵɵlistener("keyup.enter", function TableComponent_div_0_div_3_div_8_Template_input_keyup_enter_5_listener($event) { i0.ɵɵrestoreView(_r66); const ctx_r65 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r65.search($event)); })("keyup", function TableComponent_div_0_div_3_div_8_Template_input_keyup_5_listener() { i0.ɵɵrestoreView(_r66); const _r64 = i0.ɵɵreference(6); const ctx_r67 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r67.applyFilter(_r64.value)); });
304
+ i0.ɵɵlistener("keyup.enter", function TableComponent_div_0_div_3_div_8_Template_input_keyup_enter_5_listener($event) { i0.ɵɵrestoreView(_r67); const ctx_r66 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r66.search($event)); })("keyup", function TableComponent_div_0_div_3_div_8_Template_input_keyup_5_listener() { i0.ɵɵrestoreView(_r67); const _r65 = i0.ɵɵreference(6); const ctx_r68 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r68.applyFilter(_r65.value)); });
304
305
  i0.ɵɵelementEnd();
305
306
  i0.ɵɵelementStart(7, "mat-icon", 74);
306
307
  i0.ɵɵtext(8, "search");
@@ -313,52 +314,53 @@ function TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_mat_option_5_Templat
313
314
  i0.ɵɵtext(4);
314
315
  i0.ɵɵelementEnd()()();
315
316
  } if (rf & 2) {
316
- const item_r80 = ctx.$implicit;
317
- i0.ɵɵproperty("value", item_r80);
317
+ const item_r81 = ctx.$implicit;
318
+ i0.ɵɵproperty("value", item_r81);
318
319
  i0.ɵɵadvance(2);
319
- i0.ɵɵclassMap(item_r80.icon || "fa fa-filter");
320
+ i0.ɵɵclassMap(item_r81.icon || "fa fa-filter");
320
321
  i0.ɵɵadvance(2);
321
- i0.ɵɵtextInterpolate(item_r80.title);
322
+ i0.ɵɵtextInterpolate(item_r81.title);
322
323
  } }
323
324
  function TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
324
- const _r82 = i0.ɵɵgetCurrentView();
325
+ const _r83 = i0.ɵɵgetCurrentView();
325
326
  i0.ɵɵelementStart(0, "div", 34)(1, "mat-form-field", 35)(2, "mat-label");
326
327
  i0.ɵɵtext(3, "Tipo de filtro");
327
328
  i0.ɵɵelementEnd();
328
329
  i0.ɵɵelementStart(4, "mat-select", 46);
329
- i0.ɵɵlistener("selectionChange", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_Template_mat_select_selectionChange_4_listener() { i0.ɵɵrestoreView(_r82); const ctx_r81 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r81.onSelectFilterChange()); });
330
+ i0.ɵɵlistener("selectionChange", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_Template_mat_select_selectionChange_4_listener() { i0.ɵɵrestoreView(_r83); const ctx_r82 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r82.onSelectFilterChange()); });
330
331
  i0.ɵɵtemplate(5, TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_mat_option_5_Template, 5, 4, "mat-option", 38);
331
332
  i0.ɵɵelementEnd()()();
332
333
  } if (rf & 2) {
333
- const ctx_r74 = i0.ɵɵnextContext(6);
334
+ const filterGroup_r73 = i0.ɵɵnextContext().$implicit;
335
+ const ctx_r75 = i0.ɵɵnextContext(5);
334
336
  i0.ɵɵadvance(5);
335
- i0.ɵɵproperty("ngForOf", ctx_r74.getAvailableFilterOptions());
337
+ i0.ɵɵproperty("ngForOf", ctx_r75.getAvailableFilterOptions(filterGroup_r73));
336
338
  } }
337
339
  function TableComponent_div_0_div_3_div_9_div_1_div_1_div_2_Template(rf, ctx) { if (rf & 1) {
338
- const _r85 = i0.ɵɵgetCurrentView();
340
+ const _r87 = i0.ɵɵgetCurrentView();
339
341
  i0.ɵɵelementStart(0, "div", 34)(1, "mat-form-field", 35)(2, "mat-label", 21);
340
342
  i0.ɵɵelement(3, "i", 48);
341
343
  i0.ɵɵelementStart(4, "span");
342
344
  i0.ɵɵtext(5);
343
345
  i0.ɵɵelementEnd()();
344
346
  i0.ɵɵelementStart(6, "input", 49, 50);
345
- i0.ɵɵlistener("keyup.enter", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_2_Template_input_keyup_enter_6_listener($event) { i0.ɵɵrestoreView(_r85); const ctx_r84 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r84.search($event)); });
347
+ i0.ɵɵlistener("keyup.enter", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_2_Template_input_keyup_enter_6_listener($event) { i0.ɵɵrestoreView(_r87); const ctx_r86 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r86.search($event)); });
346
348
  i0.ɵɵelementEnd()()();
347
349
  } if (rf & 2) {
348
- const filterGroup_r72 = i0.ɵɵnextContext().$implicit;
350
+ const filterGroup_r73 = i0.ɵɵnextContext().$implicit;
349
351
  let tmp_0_0;
350
352
  i0.ɵɵadvance(5);
351
- i0.ɵɵtextInterpolate(((tmp_0_0 = filterGroup_r72.get("selectFilter")) == null ? null : tmp_0_0.value == null ? null : tmp_0_0.value.title) || "Filtrar");
353
+ i0.ɵɵtextInterpolate(((tmp_0_0 = filterGroup_r73.get("selectFilter")) == null ? null : tmp_0_0.value == null ? null : tmp_0_0.value.title) || "Filtrar");
352
354
  } }
353
355
  function TableComponent_div_0_div_3_div_9_div_1_div_1_div_3_mat_option_5_Template(rf, ctx) { if (rf & 1) {
354
356
  i0.ɵɵelementStart(0, "mat-option", 39);
355
357
  i0.ɵɵtext(1);
356
358
  i0.ɵɵelementEnd();
357
359
  } if (rf & 2) {
358
- const item_r88 = ctx.$implicit;
359
- i0.ɵɵproperty("value", item_r88);
360
+ const item_r90 = ctx.$implicit;
361
+ i0.ɵɵproperty("value", item_r90);
360
362
  i0.ɵɵadvance(1);
361
- i0.ɵɵtextInterpolate1(" ", item_r88.label, " ");
363
+ i0.ɵɵtextInterpolate1(" ", item_r90.label, " ");
362
364
  } }
363
365
  function TableComponent_div_0_div_3_div_9_div_1_div_1_div_3_Template(rf, ctx) { if (rf & 1) {
364
366
  i0.ɵɵelementStart(0, "div", 34)(1, "mat-form-field", 35)(2, "mat-label");
@@ -368,23 +370,23 @@ function TableComponent_div_0_div_3_div_9_div_1_div_1_div_3_Template(rf, ctx) {
368
370
  i0.ɵɵtemplate(5, TableComponent_div_0_div_3_div_9_div_1_div_1_div_3_mat_option_5_Template, 2, 2, "mat-option", 38);
369
371
  i0.ɵɵelementEnd()()();
370
372
  } if (rf & 2) {
371
- const filterGroup_r72 = i0.ɵɵnextContext().$implicit;
373
+ const filterGroup_r73 = i0.ɵɵnextContext().$implicit;
372
374
  let tmp_0_0;
373
375
  let tmp_1_0;
374
376
  i0.ɵɵadvance(3);
375
- i0.ɵɵtextInterpolate(((tmp_0_0 = filterGroup_r72.get("selectFilter")) == null ? null : tmp_0_0.value == null ? null : tmp_0_0.value.title) || "Selecione");
377
+ i0.ɵɵtextInterpolate(((tmp_0_0 = filterGroup_r73.get("selectFilter")) == null ? null : tmp_0_0.value == null ? null : tmp_0_0.value.title) || "Selecione");
376
378
  i0.ɵɵadvance(2);
377
- i0.ɵɵproperty("ngForOf", (tmp_1_0 = filterGroup_r72.get("selectFilter")) == null ? null : tmp_1_0.value.items);
379
+ i0.ɵɵproperty("ngForOf", (tmp_1_0 = filterGroup_r73.get("selectFilter")) == null ? null : tmp_1_0.value.items);
378
380
  } }
379
381
  function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template(rf, ctx) { if (rf & 1) {
380
- const _r91 = i0.ɵɵgetCurrentView();
382
+ const _r93 = i0.ɵɵgetCurrentView();
381
383
  i0.ɵɵelementStart(0, "div", 52)(1, "div", 53)(2, "mat-form-field", 54)(3, "mat-label", 21);
382
384
  i0.ɵɵelement(4, "i", 55);
383
385
  i0.ɵɵelementStart(5, "span");
384
386
  i0.ɵɵtext(6, "Data Inicial");
385
387
  i0.ɵɵelementEnd()();
386
388
  i0.ɵɵelementStart(7, "input", 77);
387
- i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_keydown_enter_7_listener($event) { i0.ɵɵrestoreView(_r91); const ctx_r90 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r90.search($event)); })("input", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_input_7_listener($event) { i0.ɵɵrestoreView(_r91); const i_r73 = i0.ɵɵnextContext().index; const ctx_r92 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r92.onDateInput($event, "initialDate", i_r73)); })("blur", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_blur_7_listener() { i0.ɵɵrestoreView(_r91); const ctx_r94 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r94.onDateFilterChange()); });
389
+ i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_keydown_enter_7_listener($event) { i0.ɵɵrestoreView(_r93); const ctx_r92 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r92.search($event)); })("input", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_input_7_listener($event) { i0.ɵɵrestoreView(_r93); const i_r74 = i0.ɵɵnextContext().index; const ctx_r94 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r94.onDateInput($event, "initialDate", i_r74)); })("blur", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_blur_7_listener() { i0.ɵɵrestoreView(_r93); const ctx_r96 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r96.onDateFilterChange()); });
388
390
  i0.ɵɵelementEnd()();
389
391
  i0.ɵɵelementStart(8, "mat-form-field", 54)(9, "mat-label", 21);
390
392
  i0.ɵɵelement(10, "i", 55);
@@ -392,13 +394,13 @@ function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template(rf, ctx) {
392
394
  i0.ɵɵtext(12, "Data Final");
393
395
  i0.ɵɵelementEnd()();
394
396
  i0.ɵɵelementStart(13, "input", 78);
395
- i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_keydown_enter_13_listener($event) { i0.ɵɵrestoreView(_r91); const ctx_r95 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r95.search($event)); })("input", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_input_13_listener($event) { i0.ɵɵrestoreView(_r91); const i_r73 = i0.ɵɵnextContext().index; const ctx_r96 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r96.onDateInput($event, "finalDate", i_r73)); })("blur", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_blur_13_listener() { i0.ɵɵrestoreView(_r91); const ctx_r98 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r98.onDateFilterChange()); });
397
+ i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_keydown_enter_13_listener($event) { i0.ɵɵrestoreView(_r93); const ctx_r97 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r97.search($event)); })("input", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_input_13_listener($event) { i0.ɵɵrestoreView(_r93); const i_r74 = i0.ɵɵnextContext().index; const ctx_r98 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r98.onDateInput($event, "finalDate", i_r74)); })("blur", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_blur_13_listener() { i0.ɵɵrestoreView(_r93); const ctx_r100 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r100.onDateFilterChange()); });
396
398
  i0.ɵɵelementEnd()()()();
397
399
  } }
398
400
  function TableComponent_div_0_div_3_div_9_div_1_div_1_div_5_Template(rf, ctx) { if (rf & 1) {
399
- const _r101 = i0.ɵɵgetCurrentView();
401
+ const _r103 = i0.ɵɵgetCurrentView();
400
402
  i0.ɵɵelementStart(0, "div", 58)(1, "button", 59);
401
- i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r101); const i_r73 = i0.ɵɵnextContext().index; const ctx_r99 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r99.removeFilter(i_r73)); });
403
+ i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r103); const i_r74 = i0.ɵɵnextContext().index; const ctx_r101 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r101.removeFilter(i_r74)); });
402
404
  i0.ɵɵelement(2, "i", 60);
403
405
  i0.ɵɵelementEnd()();
404
406
  } }
@@ -411,69 +413,69 @@ function TableComponent_div_0_div_3_div_9_div_1_div_1_Template(rf, ctx) { if (rf
411
413
  i0.ɵɵtemplate(5, TableComponent_div_0_div_3_div_9_div_1_div_1_div_5_Template, 3, 0, "div", 45);
412
414
  i0.ɵɵelementEnd();
413
415
  } if (rf & 2) {
414
- const filterGroup_r72 = ctx.$implicit;
415
- const ctx_r71 = i0.ɵɵnextContext(5);
416
+ const filterGroup_r73 = ctx.$implicit;
417
+ const ctx_r72 = i0.ɵɵnextContext(5);
416
418
  let tmp_2_0;
417
419
  let tmp_3_0;
418
420
  let tmp_4_0;
419
- i0.ɵɵproperty("formGroup", filterGroup_r72);
421
+ i0.ɵɵproperty("formGroup", filterGroup_r73);
420
422
  i0.ɵɵadvance(1);
421
- i0.ɵɵproperty("ngIf", ctx_r71.dropdownItems.length > 0);
423
+ i0.ɵɵproperty("ngIf", ctx_r72.dropdownItems.length > 0);
422
424
  i0.ɵɵadvance(1);
423
- i0.ɵɵproperty("ngIf", ((tmp_2_0 = filterGroup_r72.get("selectFilter")) == null ? null : tmp_2_0.value == null ? null : tmp_2_0.value.arrange) === "filter");
425
+ i0.ɵɵproperty("ngIf", ((tmp_2_0 = filterGroup_r73.get("selectFilter")) == null ? null : tmp_2_0.value == null ? null : tmp_2_0.value.arrange) === "filter");
424
426
  i0.ɵɵadvance(1);
425
- i0.ɵɵproperty("ngIf", ((tmp_3_0 = filterGroup_r72.get("selectFilter")) == null ? null : tmp_3_0.value) && ((tmp_3_0 = filterGroup_r72.get("selectFilter")) == null ? null : tmp_3_0.value.hasOwnProperty("items")));
427
+ i0.ɵɵproperty("ngIf", ((tmp_3_0 = filterGroup_r73.get("selectFilter")) == null ? null : tmp_3_0.value) && ((tmp_3_0 = filterGroup_r73.get("selectFilter")) == null ? null : tmp_3_0.value.hasOwnProperty("items")));
426
428
  i0.ɵɵadvance(1);
427
- i0.ɵɵproperty("ngIf", ((tmp_4_0 = filterGroup_r72.get("selectFilter")) == null ? null : tmp_4_0.value == null ? null : tmp_4_0.value.arrange) === "filterByDate");
429
+ i0.ɵɵproperty("ngIf", ((tmp_4_0 = filterGroup_r73.get("selectFilter")) == null ? null : tmp_4_0.value == null ? null : tmp_4_0.value.arrange) === "filterByDate");
428
430
  i0.ɵɵadvance(1);
429
- i0.ɵɵproperty("ngIf", ctx_r71.filtersForm.length > 1);
431
+ i0.ɵɵproperty("ngIf", ctx_r72.filtersForm.length > 1);
430
432
  } }
431
433
  function TableComponent_div_0_div_3_div_9_div_1_Template(rf, ctx) { if (rf & 1) {
432
434
  i0.ɵɵelementStart(0, "div", 40);
433
435
  i0.ɵɵtemplate(1, TableComponent_div_0_div_3_div_9_div_1_div_1_Template, 6, 6, "div", 75);
434
436
  i0.ɵɵelementEnd();
435
437
  } if (rf & 2) {
436
- const ctx_r68 = i0.ɵɵnextContext(4);
438
+ const ctx_r69 = i0.ɵɵnextContext(4);
437
439
  i0.ɵɵadvance(1);
438
- i0.ɵɵproperty("ngForOf", ctx_r68.filtersForm.controls);
440
+ i0.ɵɵproperty("ngForOf", ctx_r69.filtersForm.controls);
439
441
  } }
440
442
  function TableComponent_div_0_div_3_div_9_div_3_Template(rf, ctx) { if (rf & 1) {
441
- const _r103 = i0.ɵɵgetCurrentView();
443
+ const _r105 = i0.ɵɵgetCurrentView();
442
444
  i0.ɵɵelementStart(0, "div")(1, "button", 61);
443
- i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r103); const ctx_r102 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r102.addFilter()); });
445
+ i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r105); const ctx_r104 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r104.addFilter()); });
444
446
  i0.ɵɵelement(2, "i", 62);
445
447
  i0.ɵɵtext(3, " Adicionar Filtro ");
446
448
  i0.ɵɵelementEnd()();
447
449
  } }
448
450
  function TableComponent_div_0_div_3_div_9_div_4_button_7_Template(rf, ctx) { if (rf & 1) {
449
- const _r106 = i0.ɵɵgetCurrentView();
451
+ const _r108 = i0.ɵɵgetCurrentView();
450
452
  i0.ɵɵelementStart(0, "button", 69);
451
- i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_4_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r106); const ctx_r105 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r105.handleDownload()); });
453
+ i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_4_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r108); const ctx_r107 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r107.handleDownload()); });
452
454
  i0.ɵɵelement(1, "i", 70);
453
455
  i0.ɵɵtext(2, " Exportar ");
454
456
  i0.ɵɵelementEnd();
455
457
  } if (rf & 2) {
456
- const ctx_r104 = i0.ɵɵnextContext(5);
457
- i0.ɵɵproperty("disabled", ctx_r104.dataSource && ctx_r104.dataSource.filteredData.length <= 0);
458
+ const ctx_r106 = i0.ɵɵnextContext(5);
459
+ i0.ɵɵproperty("disabled", ctx_r106.dataSource && ctx_r106.dataSource.filteredData.length <= 0);
458
460
  } }
459
461
  function TableComponent_div_0_div_3_div_9_div_4_Template(rf, ctx) { if (rf & 1) {
460
- const _r108 = i0.ɵɵgetCurrentView();
462
+ const _r110 = i0.ɵɵgetCurrentView();
461
463
  i0.ɵɵelementStart(0, "div", 63)(1, "button", 64);
462
- i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_4_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r108); const ctx_r107 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r107.search()); });
464
+ i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_4_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r110); const ctx_r109 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r109.search()); });
463
465
  i0.ɵɵelement(2, "i", 65);
464
466
  i0.ɵɵtext(3, " Pesquisar ");
465
467
  i0.ɵɵelementEnd();
466
468
  i0.ɵɵelementStart(4, "button", 66);
467
- i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_4_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r108); const ctx_r109 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r109.resetFilter()); });
469
+ i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_4_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r110); const ctx_r111 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r111.resetFilter()); });
468
470
  i0.ɵɵelement(5, "i", 67);
469
471
  i0.ɵɵtext(6, " Resetar ");
470
472
  i0.ɵɵelementEnd();
471
473
  i0.ɵɵtemplate(7, TableComponent_div_0_div_3_div_9_div_4_button_7_Template, 3, 1, "button", 68);
472
474
  i0.ɵɵelementEnd();
473
475
  } if (rf & 2) {
474
- const ctx_r70 = i0.ɵɵnextContext(4);
476
+ const ctx_r71 = i0.ɵɵnextContext(4);
475
477
  i0.ɵɵadvance(7);
476
- i0.ɵɵproperty("ngIf", ctx_r70.data.download !== false && ctx_r70.downloadTable);
478
+ i0.ɵɵproperty("ngIf", ctx_r71.data.download !== false && ctx_r71.downloadTable);
477
479
  } }
478
480
  function TableComponent_div_0_div_3_div_9_Template(rf, ctx) { if (rf & 1) {
479
481
  i0.ɵɵelementStart(0, "div");
@@ -483,13 +485,13 @@ function TableComponent_div_0_div_3_div_9_Template(rf, ctx) { if (rf & 1) {
483
485
  i0.ɵɵtemplate(4, TableComponent_div_0_div_3_div_9_div_4_Template, 8, 1, "div", 29);
484
486
  i0.ɵɵelementEnd()();
485
487
  } if (rf & 2) {
486
- const ctx_r60 = i0.ɵɵnextContext(3);
488
+ const ctx_r61 = i0.ɵɵnextContext(3);
487
489
  i0.ɵɵadvance(1);
488
- i0.ɵɵproperty("ngIf", ctx_r60.filtersForm.controls.length > 0);
490
+ i0.ɵɵproperty("ngIf", ctx_r61.filtersForm.controls.length > 0);
489
491
  i0.ɵɵadvance(2);
490
- i0.ɵɵproperty("ngIf", ctx_r60.dropdownItems.length > 0);
492
+ i0.ɵɵproperty("ngIf", ctx_r61.dropdownItems.length > 0);
491
493
  i0.ɵɵadvance(1);
492
- i0.ɵɵproperty("ngIf", ctx_r60.hasFilterableColumn === true || ctx_r60.hasSortableColumn === true);
494
+ i0.ɵɵproperty("ngIf", ctx_r61.hasFilterableColumn === true || ctx_r61.hasSortableColumn === true);
493
495
  } }
494
496
  function TableComponent_div_0_div_3_Template(rf, ctx) { if (rf & 1) {
495
497
  i0.ɵɵelementStart(0, "div", 18)(1, "div", 19)(2, "div", 20)(3, "div", 21);
@@ -512,9 +514,9 @@ function TableComponent_div_0_div_3_Template(rf, ctx) { if (rf & 1) {
512
514
  i0.ɵɵproperty("ngIf", ctx_r2.dropdownItems.length > 0);
513
515
  } }
514
516
  function TableComponent_div_0_lib_table_tabs_5_Template(rf, ctx) { if (rf & 1) {
515
- const _r111 = i0.ɵɵgetCurrentView();
517
+ const _r113 = i0.ɵɵgetCurrentView();
516
518
  i0.ɵɵelementStart(0, "lib-table-tabs", 79);
517
- i0.ɵɵlistener("tabSelected", function TableComponent_div_0_lib_table_tabs_5_Template_lib_table_tabs_tabSelected_0_listener($event) { i0.ɵɵrestoreView(_r111); const ctx_r110 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r110.onTabSelected($event)); });
519
+ i0.ɵɵlistener("tabSelected", function TableComponent_div_0_lib_table_tabs_5_Template_lib_table_tabs_tabSelected_0_listener($event) { i0.ɵɵrestoreView(_r113); const ctx_r112 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r112.onTabSelected($event)); });
518
520
  i0.ɵɵelementEnd();
519
521
  } if (rf & 2) {
520
522
  const ctx_r3 = i0.ɵɵnextContext(2);
@@ -525,53 +527,53 @@ function TableComponent_div_0_ng_container_9_ng_container_1_th_1_Template(rf, ct
525
527
  i0.ɵɵtext(1);
526
528
  i0.ɵɵelementEnd();
527
529
  } if (rf & 2) {
528
- const col_r112 = i0.ɵɵnextContext(2).$implicit;
530
+ const col_r114 = i0.ɵɵnextContext(2).$implicit;
529
531
  i0.ɵɵadvance(1);
530
- i0.ɵɵtextInterpolate1(" ", col_r112.title, " ");
532
+ i0.ɵɵtextInterpolate1(" ", col_r114.title, " ");
531
533
  } }
532
534
  function TableComponent_div_0_ng_container_9_ng_container_1_th_2_Template(rf, ctx) { if (rf & 1) {
533
535
  i0.ɵɵelementStart(0, "th", 86);
534
536
  i0.ɵɵtext(1);
535
537
  i0.ɵɵelementEnd();
536
538
  } if (rf & 2) {
537
- const col_r112 = i0.ɵɵnextContext(2).$implicit;
539
+ const col_r114 = i0.ɵɵnextContext(2).$implicit;
538
540
  i0.ɵɵadvance(1);
539
- i0.ɵɵtextInterpolate1(" ", col_r112.title, " ");
541
+ i0.ɵɵtextInterpolate1(" ", col_r114.title, " ");
540
542
  } }
541
543
  function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_a_1_Template(rf, ctx) { if (rf & 1) {
542
544
  i0.ɵɵelementStart(0, "a", 92);
543
545
  i0.ɵɵtext(1);
544
546
  i0.ɵɵelementEnd();
545
547
  } if (rf & 2) {
546
- const row_r119 = i0.ɵɵnextContext(3).$implicit;
547
- const col_r112 = i0.ɵɵnextContext(2).$implicit;
548
- const ctx_r127 = i0.ɵɵnextContext(2);
549
- i0.ɵɵproperty("href", row_r119[col_r112.property], i0.ɵɵsanitizeUrl);
548
+ const row_r121 = i0.ɵɵnextContext(3).$implicit;
549
+ const col_r114 = i0.ɵɵnextContext(2).$implicit;
550
+ const ctx_r129 = i0.ɵɵnextContext(2);
551
+ i0.ɵɵproperty("href", row_r121[col_r114.property], i0.ɵɵsanitizeUrl);
550
552
  i0.ɵɵadvance(1);
551
- i0.ɵɵtextInterpolate1(" ", ctx_r127.getDisplayValue(col_r112, row_r119), " ");
553
+ i0.ɵɵtextInterpolate1(" ", ctx_r129.getDisplayValue(col_r114, row_r121), " ");
552
554
  } }
553
555
  function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_a_2_Template(rf, ctx) { if (rf & 1) {
554
556
  i0.ɵɵelementStart(0, "a", 92);
555
557
  i0.ɵɵtext(1);
556
558
  i0.ɵɵelementEnd();
557
559
  } if (rf & 2) {
558
- const row_r119 = i0.ɵɵnextContext(3).$implicit;
559
- const col_r112 = i0.ɵɵnextContext(2).$implicit;
560
- const ctx_r128 = i0.ɵɵnextContext(2);
561
- i0.ɵɵproperty("href", col_r112.hasLink, i0.ɵɵsanitizeUrl);
560
+ const row_r121 = i0.ɵɵnextContext(3).$implicit;
561
+ const col_r114 = i0.ɵɵnextContext(2).$implicit;
562
+ const ctx_r130 = i0.ɵɵnextContext(2);
563
+ i0.ɵɵproperty("href", col_r114.hasLink, i0.ɵɵsanitizeUrl);
562
564
  i0.ɵɵadvance(1);
563
- i0.ɵɵtextInterpolate1(" ", ctx_r128.getDisplayValue(col_r112, row_r119), " ");
565
+ i0.ɵɵtextInterpolate1(" ", ctx_r130.getDisplayValue(col_r114, row_r121), " ");
564
566
  } }
565
567
  function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_span_3_Template(rf, ctx) { if (rf & 1) {
566
568
  i0.ɵɵelementStart(0, "span");
567
569
  i0.ɵɵtext(1);
568
570
  i0.ɵɵelementEnd();
569
571
  } if (rf & 2) {
570
- const row_r119 = i0.ɵɵnextContext(3).$implicit;
571
- const col_r112 = i0.ɵɵnextContext(2).$implicit;
572
- const ctx_r129 = i0.ɵɵnextContext(2);
572
+ const row_r121 = i0.ɵɵnextContext(3).$implicit;
573
+ const col_r114 = i0.ɵɵnextContext(2).$implicit;
574
+ const ctx_r131 = i0.ɵɵnextContext(2);
573
575
  i0.ɵɵadvance(1);
574
- i0.ɵɵtextInterpolate1(" ", ctx_r129.getDisplayValue(col_r112, row_r119), " ");
576
+ i0.ɵɵtextInterpolate1(" ", ctx_r131.getDisplayValue(col_r114, row_r121), " ");
575
577
  } }
576
578
  function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_Template(rf, ctx) { if (rf & 1) {
577
579
  i0.ɵɵelementStart(0, "span");
@@ -580,62 +582,62 @@ function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_T
580
582
  i0.ɵɵtemplate(3, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_span_3_Template, 2, 1, "span", 28);
581
583
  i0.ɵɵelementEnd();
582
584
  } if (rf & 2) {
583
- const col_r112 = i0.ɵɵnextContext(4).$implicit;
584
- const ctx_r124 = i0.ɵɵnextContext(2);
585
+ const col_r114 = i0.ɵɵnextContext(4).$implicit;
586
+ const ctx_r126 = i0.ɵɵnextContext(2);
585
587
  i0.ɵɵadvance(1);
586
- i0.ɵɵproperty("ngIf", col_r112.hasLink === true);
588
+ i0.ɵɵproperty("ngIf", col_r114.hasLink === true);
587
589
  i0.ɵɵadvance(1);
588
- i0.ɵɵproperty("ngIf", col_r112.hasLink && ctx_r124.isString(col_r112.hasLink));
590
+ i0.ɵɵproperty("ngIf", col_r114.hasLink && ctx_r126.isString(col_r114.hasLink));
589
591
  i0.ɵɵadvance(1);
590
- i0.ɵɵproperty("ngIf", col_r112.hasLink !== true && !ctx_r124.isString(col_r112.hasLink));
592
+ i0.ɵɵproperty("ngIf", col_r114.hasLink !== true && !ctx_r126.isString(col_r114.hasLink));
591
593
  } }
592
594
  function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_a_0_Template(rf, ctx) { if (rf & 1) {
593
595
  i0.ɵɵelementStart(0, "a", 92);
594
596
  i0.ɵɵtext(1);
595
597
  i0.ɵɵelementEnd();
596
598
  } if (rf & 2) {
597
- const row_r119 = i0.ɵɵnextContext(3).$implicit;
598
- const col_r112 = i0.ɵɵnextContext(2).$implicit;
599
- const ctx_r137 = i0.ɵɵnextContext(2);
600
- i0.ɵɵproperty("href", row_r119[col_r112.property], i0.ɵɵsanitizeUrl);
599
+ const row_r121 = i0.ɵɵnextContext(3).$implicit;
600
+ const col_r114 = i0.ɵɵnextContext(2).$implicit;
601
+ const ctx_r139 = i0.ɵɵnextContext(2);
602
+ i0.ɵɵproperty("href", row_r121[col_r114.property], i0.ɵɵsanitizeUrl);
601
603
  i0.ɵɵadvance(1);
602
- i0.ɵɵtextInterpolate1(" ", ctx_r137.getDisplayValue(col_r112, row_r119, true), " ");
604
+ i0.ɵɵtextInterpolate1(" ", ctx_r139.getDisplayValue(col_r114, row_r121, true), " ");
603
605
  } }
604
606
  function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_a_1_Template(rf, ctx) { if (rf & 1) {
605
607
  i0.ɵɵelementStart(0, "a", 92);
606
608
  i0.ɵɵtext(1);
607
609
  i0.ɵɵelementEnd();
608
610
  } if (rf & 2) {
609
- const row_r119 = i0.ɵɵnextContext(3).$implicit;
610
- const col_r112 = i0.ɵɵnextContext(2).$implicit;
611
- const ctx_r138 = i0.ɵɵnextContext(2);
612
- i0.ɵɵproperty("href", col_r112.hasLink, i0.ɵɵsanitizeUrl);
611
+ const row_r121 = i0.ɵɵnextContext(3).$implicit;
612
+ const col_r114 = i0.ɵɵnextContext(2).$implicit;
613
+ const ctx_r140 = i0.ɵɵnextContext(2);
614
+ i0.ɵɵproperty("href", col_r114.hasLink, i0.ɵɵsanitizeUrl);
613
615
  i0.ɵɵadvance(1);
614
- i0.ɵɵtextInterpolate1(" ", ctx_r138.getDisplayValue(col_r112, row_r119, true), " ");
616
+ i0.ɵɵtextInterpolate1(" ", ctx_r140.getDisplayValue(col_r114, row_r121, true), " ");
615
617
  } }
616
618
  function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_span_2_Template(rf, ctx) { if (rf & 1) {
617
619
  i0.ɵɵelementStart(0, "span");
618
620
  i0.ɵɵtext(1);
619
621
  i0.ɵɵelementEnd();
620
622
  } if (rf & 2) {
621
- const row_r119 = i0.ɵɵnextContext(3).$implicit;
622
- const col_r112 = i0.ɵɵnextContext(2).$implicit;
623
- const ctx_r139 = i0.ɵɵnextContext(2);
623
+ const row_r121 = i0.ɵɵnextContext(3).$implicit;
624
+ const col_r114 = i0.ɵɵnextContext(2).$implicit;
625
+ const ctx_r141 = i0.ɵɵnextContext(2);
624
626
  i0.ɵɵadvance(1);
625
- i0.ɵɵtextInterpolate1(" ", ctx_r139.getDisplayValue(col_r112, row_r119, true), " ");
627
+ i0.ɵɵtextInterpolate1(" ", ctx_r141.getDisplayValue(col_r114, row_r121, true), " ");
626
628
  } }
627
629
  function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_Template(rf, ctx) { if (rf & 1) {
628
630
  i0.ɵɵtemplate(0, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_a_0_Template, 2, 2, "a", 91);
629
631
  i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_a_1_Template, 2, 2, "a", 91);
630
632
  i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_span_2_Template, 2, 1, "span", 28);
631
633
  } if (rf & 2) {
632
- const col_r112 = i0.ɵɵnextContext(4).$implicit;
633
- const ctx_r126 = i0.ɵɵnextContext(2);
634
- i0.ɵɵproperty("ngIf", col_r112.hasLink === true);
634
+ const col_r114 = i0.ɵɵnextContext(4).$implicit;
635
+ const ctx_r128 = i0.ɵɵnextContext(2);
636
+ i0.ɵɵproperty("ngIf", col_r114.hasLink === true);
635
637
  i0.ɵɵadvance(1);
636
- i0.ɵɵproperty("ngIf", col_r112.hasLink && ctx_r126.isString(col_r112.hasLink));
638
+ i0.ɵɵproperty("ngIf", col_r114.hasLink && ctx_r128.isString(col_r114.hasLink));
637
639
  i0.ɵɵadvance(1);
638
- i0.ɵɵproperty("ngIf", col_r112.hasLink !== true && !ctx_r126.isString(col_r112.hasLink));
640
+ i0.ɵɵproperty("ngIf", col_r114.hasLink !== true && !ctx_r128.isString(col_r114.hasLink));
639
641
  } }
640
642
  function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_Template(rf, ctx) { if (rf & 1) {
641
643
  i0.ɵɵelementStart(0, "span");
@@ -645,11 +647,11 @@ function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_Template
645
647
  i0.ɵɵtemplate(3, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_Template, 3, 3, "ng-template", null, 90, i0.ɵɵtemplateRefExtractor);
646
648
  i0.ɵɵelementEnd();
647
649
  } if (rf & 2) {
648
- const _r125 = i0.ɵɵreference(4);
649
- const row_r119 = i0.ɵɵnextContext().$implicit;
650
- const col_r112 = i0.ɵɵnextContext(2).$implicit;
650
+ const _r127 = i0.ɵɵreference(4);
651
+ const row_r121 = i0.ɵɵnextContext().$implicit;
652
+ const col_r114 = i0.ɵɵnextContext(2).$implicit;
651
653
  i0.ɵɵadvance(2);
652
- i0.ɵɵproperty("ngIf", col_r112.charLimit && row_r119[col_r112.property] && row_r119[col_r112.property].length > col_r112.charLimit)("ngIfElse", _r125);
654
+ i0.ɵɵproperty("ngIf", col_r114.charLimit && row_r121[col_r114.property] && row_r121[col_r114.property].length > col_r114.charLimit)("ngIfElse", _r127);
653
655
  } }
654
656
  function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_mat_spinner_1_Template(rf, ctx) { if (rf & 1) {
655
657
  i0.ɵɵelement(0, "mat-spinner", 96);
@@ -657,21 +659,21 @@ function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_mat_spinn
657
659
  i0.ɵɵproperty("diameter", 32);
658
660
  } }
659
661
  function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_Template(rf, ctx) { if (rf & 1) {
660
- const _r152 = i0.ɵɵgetCurrentView();
662
+ const _r154 = i0.ɵɵgetCurrentView();
661
663
  i0.ɵɵelementStart(0, "div", 93);
662
664
  i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_mat_spinner_1_Template, 1, 1, "mat-spinner", 94);
663
665
  i0.ɵɵelementStart(2, "img", 95);
664
- i0.ɵɵlistener("load", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_Template_img_load_2_listener() { i0.ɵɵrestoreView(_r152); const row_r119 = i0.ɵɵnextContext().$implicit; const col_r112 = i0.ɵɵnextContext(2).$implicit; const ctx_r150 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r150.onImageLoad(row_r119, col_r112)); })("error", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_Template_img_error_2_listener($event) { i0.ɵɵrestoreView(_r152); const row_r119 = i0.ɵɵnextContext().$implicit; const col_r112 = i0.ɵɵnextContext(2).$implicit; const ctx_r154 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r154.onImageError($event, row_r119, col_r112, col_r112.image.default)); });
666
+ i0.ɵɵlistener("load", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_Template_img_load_2_listener() { i0.ɵɵrestoreView(_r154); const row_r121 = i0.ɵɵnextContext().$implicit; const col_r114 = i0.ɵɵnextContext(2).$implicit; const ctx_r152 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r152.onImageLoad(row_r121, col_r114)); })("error", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_Template_img_error_2_listener($event) { i0.ɵɵrestoreView(_r154); const row_r121 = i0.ɵɵnextContext().$implicit; const col_r114 = i0.ɵɵnextContext(2).$implicit; const ctx_r156 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r156.onImageError($event, row_r121, col_r114, col_r114.image.default)); });
665
667
  i0.ɵɵelementEnd()();
666
668
  } if (rf & 2) {
667
- const row_r119 = i0.ɵɵnextContext().$implicit;
668
- const col_r112 = i0.ɵɵnextContext(2).$implicit;
669
- const ctx_r121 = i0.ɵɵnextContext(2);
669
+ const row_r121 = i0.ɵɵnextContext().$implicit;
670
+ const col_r114 = i0.ɵɵnextContext(2).$implicit;
671
+ const ctx_r123 = i0.ɵɵnextContext(2);
670
672
  i0.ɵɵadvance(1);
671
- i0.ɵɵproperty("ngIf", ctx_r121.isImageLoading(row_r119, col_r112));
673
+ i0.ɵɵproperty("ngIf", ctx_r123.isImageLoading(row_r121, col_r114));
672
674
  i0.ɵɵadvance(1);
673
- i0.ɵɵclassProp("opacity-0", ctx_r121.isImageLoading(row_r119, col_r112));
674
- i0.ɵɵproperty("src", col_r112.image.path + "/" + row_r119[col_r112.property], i0.ɵɵsanitizeUrl)("ngClass", col_r112.image.class);
675
+ i0.ɵɵclassProp("opacity-0", ctx_r123.isImageLoading(row_r121, col_r114));
676
+ i0.ɵɵproperty("src", col_r114.image.path + "/" + row_r121[col_r114.property], i0.ɵɵsanitizeUrl)("ngClass", col_r114.image.class);
675
677
  } }
676
678
  function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_mat_spinner_1_Template(rf, ctx) { if (rf & 1) {
677
679
  i0.ɵɵelement(0, "mat-spinner", 96);
@@ -679,72 +681,72 @@ function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_mat_spinn
679
681
  i0.ɵɵproperty("diameter", 32);
680
682
  } }
681
683
  function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_Template(rf, ctx) { if (rf & 1) {
682
- const _r162 = i0.ɵɵgetCurrentView();
684
+ const _r164 = i0.ɵɵgetCurrentView();
683
685
  i0.ɵɵelementStart(0, "div", 93);
684
686
  i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_mat_spinner_1_Template, 1, 1, "mat-spinner", 94);
685
687
  i0.ɵɵelementStart(2, "img", 95);
686
- i0.ɵɵlistener("load", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_Template_img_load_2_listener() { i0.ɵɵrestoreView(_r162); const row_r119 = i0.ɵɵnextContext().$implicit; const col_r112 = i0.ɵɵnextContext(2).$implicit; const ctx_r160 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r160.onImageLoad(row_r119, col_r112)); })("error", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_Template_img_error_2_listener($event) { i0.ɵɵrestoreView(_r162); const row_r119 = i0.ɵɵnextContext().$implicit; const col_r112 = i0.ɵɵnextContext(2).$implicit; const ctx_r164 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r164.onImageError($event, row_r119, col_r112, col_r112.image.default)); });
688
+ i0.ɵɵlistener("load", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_Template_img_load_2_listener() { i0.ɵɵrestoreView(_r164); const row_r121 = i0.ɵɵnextContext().$implicit; const col_r114 = i0.ɵɵnextContext(2).$implicit; const ctx_r162 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r162.onImageLoad(row_r121, col_r114)); })("error", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_Template_img_error_2_listener($event) { i0.ɵɵrestoreView(_r164); const row_r121 = i0.ɵɵnextContext().$implicit; const col_r114 = i0.ɵɵnextContext(2).$implicit; const ctx_r166 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r166.onImageError($event, row_r121, col_r114, col_r114.image.default)); });
687
689
  i0.ɵɵelementEnd()();
688
690
  } if (rf & 2) {
689
- const row_r119 = i0.ɵɵnextContext().$implicit;
690
- const col_r112 = i0.ɵɵnextContext(2).$implicit;
691
- const ctx_r122 = i0.ɵɵnextContext(2);
691
+ const row_r121 = i0.ɵɵnextContext().$implicit;
692
+ const col_r114 = i0.ɵɵnextContext(2).$implicit;
693
+ const ctx_r124 = i0.ɵɵnextContext(2);
692
694
  i0.ɵɵadvance(1);
693
- i0.ɵɵproperty("ngIf", ctx_r122.isImageLoading(row_r119, col_r112));
695
+ i0.ɵɵproperty("ngIf", ctx_r124.isImageLoading(row_r121, col_r114));
694
696
  i0.ɵɵadvance(1);
695
- i0.ɵɵclassProp("opacity-0", ctx_r122.isImageLoading(row_r119, col_r112));
696
- i0.ɵɵproperty("src", row_r119[col_r112.property], i0.ɵɵsanitizeUrl)("ngClass", col_r112.image.class);
697
+ i0.ɵɵclassProp("opacity-0", ctx_r124.isImageLoading(row_r121, col_r114));
698
+ i0.ɵɵproperty("src", row_r121[col_r114.property], i0.ɵɵsanitizeUrl)("ngClass", col_r114.image.class);
697
699
  } }
698
700
  function TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_span_1_Template(rf, ctx) { if (rf & 1) {
699
701
  i0.ɵɵelementStart(0, "span", 100);
700
702
  i0.ɵɵtext(1);
701
703
  i0.ɵɵelementEnd();
702
704
  } if (rf & 2) {
703
- const iconClass_r170 = i0.ɵɵnextContext().$implicit;
704
- i0.ɵɵproperty("ngClass", iconClass_r170.class);
705
+ const iconClass_r172 = i0.ɵɵnextContext().$implicit;
706
+ i0.ɵɵproperty("ngClass", iconClass_r172.class);
705
707
  i0.ɵɵadvance(1);
706
- i0.ɵɵtextInterpolate(iconClass_r170.text);
708
+ i0.ɵɵtextInterpolate(iconClass_r172.text);
707
709
  } }
708
710
  function TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_Template(rf, ctx) { if (rf & 1) {
709
- const _r174 = i0.ɵɵgetCurrentView();
711
+ const _r176 = i0.ɵɵgetCurrentView();
710
712
  i0.ɵɵelementStart(0, "button", 98);
711
- i0.ɵɵlistener("click", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_Template_button_click_0_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r174); const iconClass_r170 = restoredCtx.$implicit; const row_r119 = i0.ɵɵnextContext(2).$implicit; return i0.ɵɵresetView(iconClass_r170.buttonMethod ? iconClass_r170.buttonMethod(row_r119, $event) : $event.stopPropagation()); });
713
+ i0.ɵɵlistener("click", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_Template_button_click_0_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r176); const iconClass_r172 = restoredCtx.$implicit; const row_r121 = i0.ɵɵnextContext(2).$implicit; return i0.ɵɵresetView(iconClass_r172.buttonMethod ? iconClass_r172.buttonMethod(row_r121, $event) : $event.stopPropagation()); });
712
714
  i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_span_1_Template, 2, 2, "span", 99);
713
715
  i0.ɵɵelementEnd();
714
716
  } if (rf & 2) {
715
- const iconClass_r170 = ctx.$implicit;
716
- const row_r119 = i0.ɵɵnextContext(2).$implicit;
717
+ const iconClass_r172 = ctx.$implicit;
718
+ const row_r121 = i0.ɵɵnextContext(2).$implicit;
717
719
  i0.ɵɵadvance(1);
718
- i0.ɵɵproperty("ngIf", iconClass_r170.condition === undefined || iconClass_r170.condition !== undefined && iconClass_r170.condition(row_r119));
720
+ i0.ɵɵproperty("ngIf", iconClass_r172.condition === undefined || iconClass_r172.condition !== undefined && iconClass_r172.condition(row_r121));
719
721
  } }
720
722
  function TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_Template(rf, ctx) { if (rf & 1) {
721
723
  i0.ɵɵelementContainerStart(0);
722
724
  i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_Template, 2, 1, "button", 97);
723
725
  i0.ɵɵelementContainerEnd();
724
726
  } if (rf & 2) {
725
- const col_r112 = i0.ɵɵnextContext(3).$implicit;
727
+ const col_r114 = i0.ɵɵnextContext(3).$implicit;
726
728
  i0.ɵɵadvance(1);
727
- i0.ɵɵproperty("ngForOf", col_r112.iconClass);
729
+ i0.ɵɵproperty("ngForOf", col_r114.iconClass);
728
730
  } }
729
731
  function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template(rf, ctx) { if (rf & 1) {
730
- const _r180 = i0.ɵɵgetCurrentView();
732
+ const _r182 = i0.ɵɵgetCurrentView();
731
733
  i0.ɵɵelementStart(0, "td", 87);
732
- i0.ɵɵlistener("click", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template_td_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r180); const row_r119 = restoredCtx.$implicit; const col_r112 = i0.ɵɵnextContext(2).$implicit; return i0.ɵɵresetView(col_r112.method ? col_r112.method(row_r119) : null); })("mouseenter", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template_td_mouseenter_0_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r180); const row_r119 = restoredCtx.$implicit; const col_r112 = i0.ɵɵnextContext(2).$implicit; const ctx_r181 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r181.onCellMouseEnter($event, row_r119, col_r112)); })("mouseleave", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template_td_mouseleave_0_listener() { i0.ɵɵrestoreView(_r180); const ctx_r183 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r183.onCellMouseLeave()); })("mousemove", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template_td_mousemove_0_listener($event) { i0.ɵɵrestoreView(_r180); const ctx_r184 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r184.onCellMouseMove($event)); });
734
+ i0.ɵɵlistener("click", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template_td_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r182); const row_r121 = restoredCtx.$implicit; const col_r114 = i0.ɵɵnextContext(2).$implicit; return i0.ɵɵresetView(col_r114.method ? col_r114.method(row_r121) : null); })("mouseenter", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template_td_mouseenter_0_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r182); const row_r121 = restoredCtx.$implicit; const col_r114 = i0.ɵɵnextContext(2).$implicit; const ctx_r183 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r183.onCellMouseEnter($event, row_r121, col_r114)); })("mouseleave", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template_td_mouseleave_0_listener() { i0.ɵɵrestoreView(_r182); const ctx_r185 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r185.onCellMouseLeave()); })("mousemove", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template_td_mousemove_0_listener($event) { i0.ɵɵrestoreView(_r182); const ctx_r186 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r186.onCellMouseMove($event)); });
733
735
  i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_Template, 5, 2, "span", 28);
734
736
  i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_Template, 3, 5, "div", 88);
735
737
  i0.ɵɵtemplate(3, TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_Template, 3, 5, "div", 88);
736
738
  i0.ɵɵtemplate(4, TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_Template, 2, 1, "ng-container", 28);
737
739
  i0.ɵɵelementEnd();
738
740
  } if (rf & 2) {
739
- const col_r112 = i0.ɵɵnextContext(2).$implicit;
741
+ const col_r114 = i0.ɵɵnextContext(2).$implicit;
740
742
  i0.ɵɵadvance(1);
741
- i0.ɵɵproperty("ngIf", !col_r112.image && !col_r112.iconClass && !col_r112.method);
743
+ i0.ɵɵproperty("ngIf", !col_r114.image && !col_r114.iconClass && !col_r114.method);
742
744
  i0.ɵɵadvance(1);
743
- i0.ɵɵproperty("ngIf", col_r112.image && col_r112.image.path && !col_r112.iconClass && !col_r112.method);
745
+ i0.ɵɵproperty("ngIf", col_r114.image && col_r114.image.path && !col_r114.iconClass && !col_r114.method);
744
746
  i0.ɵɵadvance(1);
745
- i0.ɵɵproperty("ngIf", col_r112.image && col_r112.image.url && !col_r112.iconClass && !col_r112.method);
747
+ i0.ɵɵproperty("ngIf", col_r114.image && col_r114.image.url && !col_r114.iconClass && !col_r114.method);
746
748
  i0.ɵɵadvance(1);
747
- i0.ɵɵproperty("ngIf", col_r112.iconClass);
749
+ i0.ɵɵproperty("ngIf", col_r114.iconClass);
748
750
  } }
749
751
  function TableComponent_div_0_ng_container_9_ng_container_1_Template(rf, ctx) { if (rf & 1) {
750
752
  i0.ɵɵelementContainerStart(0);
@@ -753,28 +755,28 @@ function TableComponent_div_0_ng_container_9_ng_container_1_Template(rf, ctx) {
753
755
  i0.ɵɵtemplate(3, TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template, 5, 4, "td", 84);
754
756
  i0.ɵɵelementContainerEnd();
755
757
  } if (rf & 2) {
756
- const col_r112 = i0.ɵɵnextContext().$implicit;
757
- const ctx_r113 = i0.ɵɵnextContext(2);
758
+ const col_r114 = i0.ɵɵnextContext().$implicit;
759
+ const ctx_r115 = i0.ɵɵnextContext(2);
758
760
  i0.ɵɵadvance(1);
759
- i0.ɵɵproperty("ngIf", !col_r112.isSortable || ctx_r113.data.pagination === true);
761
+ i0.ɵɵproperty("ngIf", !col_r114.isSortable || ctx_r115.data.pagination === true);
760
762
  i0.ɵɵadvance(1);
761
- i0.ɵɵproperty("ngIf", col_r112.isSortable && ctx_r113.data.pagination === false);
763
+ i0.ɵɵproperty("ngIf", col_r114.isSortable && ctx_r115.data.pagination === false);
762
764
  } }
763
765
  function TableComponent_div_0_ng_container_9_Template(rf, ctx) { if (rf & 1) {
764
766
  i0.ɵɵelementContainerStart(0, 80);
765
767
  i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_Template, 4, 2, "ng-container", 81);
766
768
  i0.ɵɵelementContainerEnd();
767
769
  } if (rf & 2) {
768
- const col_r112 = ctx.$implicit;
769
- i0.ɵɵpropertyInterpolate("matColumnDef", col_r112.property);
770
+ const col_r114 = ctx.$implicit;
771
+ i0.ɵɵpropertyInterpolate("matColumnDef", col_r114.property);
770
772
  } }
771
773
  function TableComponent_div_0_tr_10_Template(rf, ctx) { if (rf & 1) {
772
774
  i0.ɵɵelement(0, "tr", 101);
773
775
  } }
774
776
  function TableComponent_div_0_tr_11_Template(rf, ctx) { if (rf & 1) {
775
- const _r189 = i0.ɵɵgetCurrentView();
777
+ const _r191 = i0.ɵɵgetCurrentView();
776
778
  i0.ɵɵelementStart(0, "tr", 102);
777
- i0.ɵɵlistener("click", function TableComponent_div_0_tr_11_Template_tr_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r189); const row_r187 = restoredCtx.$implicit; const ctx_r188 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r188.goToDetails(row_r187)); });
779
+ i0.ɵɵlistener("click", function TableComponent_div_0_tr_11_Template_tr_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r191); const row_r189 = restoredCtx.$implicit; const ctx_r190 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r190.goToDetails(row_r189)); });
778
780
  i0.ɵɵelementEnd();
779
781
  } if (rf & 2) {
780
782
  const ctx_r7 = i0.ɵɵnextContext(2);
@@ -802,7 +804,7 @@ function TableComponent_div_0_div_13_Template(rf, ctx) { if (rf & 1) {
802
804
  } }
803
805
  const _c0 = function () { return [25, 50, 100]; };
804
806
  function TableComponent_div_0_Template(rf, ctx) { if (rf & 1) {
805
- const _r192 = i0.ɵɵgetCurrentView();
807
+ const _r194 = i0.ɵɵgetCurrentView();
806
808
  i0.ɵɵelementStart(0, "div", 1)(1, "div", 2);
807
809
  i0.ɵɵtemplate(2, TableComponent_div_0_div_2_Template, 13, 5, "div", 3);
808
810
  i0.ɵɵtemplate(3, TableComponent_div_0_div_3_Template, 10, 3, "div", 3);
@@ -817,7 +819,7 @@ function TableComponent_div_0_Template(rf, ctx) { if (rf & 1) {
817
819
  i0.ɵɵtemplate(13, TableComponent_div_0_div_13_Template, 2, 0, "div", 13);
818
820
  i0.ɵɵpipe(14, "async");
819
821
  i0.ɵɵelementStart(15, "div", 14)(16, "mat-paginator", 15, 16);
820
- i0.ɵɵlistener("page", function TableComponent_div_0_Template_mat_paginator_page_16_listener($event) { i0.ɵɵrestoreView(_r192); const ctx_r191 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r191.onPageChange($event)); });
822
+ i0.ɵɵlistener("page", function TableComponent_div_0_Template_mat_paginator_page_16_listener($event) { i0.ɵɵrestoreView(_r194); const ctx_r193 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r193.onPageChange($event)); });
821
823
  i0.ɵɵelementEnd()()()()();
822
824
  i0.ɵɵelement(18, "lib-table-tooltip", 17);
823
825
  i0.ɵɵelementEnd();
@@ -916,8 +918,8 @@ export class TableComponent {
916
918
  hasActiveDateFilter() {
917
919
  return this.filterService.hasActiveDateFilter(this.filtersForm);
918
920
  }
919
- getAvailableFilterOptions() {
920
- return this.filterService.getAvailableFilterOptions(this.dropdownItems, this.data.pagination === true, this.filtersForm);
921
+ getAvailableFilterOptions(currentGroup) {
922
+ return this.filterService.getAvailableFilterOptions(this.dropdownItems, this.data.pagination === true, this.filtersForm, currentGroup);
921
923
  }
922
924
  onSelectFilterChange() {
923
925
  const lastIndex = this.filtersForm.length - 1;
@@ -1206,14 +1208,18 @@ export class TableComponent {
1206
1208
  this.filterPredicate = this.dataSource.filterPredicate;
1207
1209
  this.cdr.markForCheck();
1208
1210
  }
1209
- async loadItemsPaginated(navigation = 'reload', reset = false) {
1211
+ async loadItemsPaginated(navigation = 'reload', reset = false, fullPageSize) {
1210
1212
  this.imageLoadingState.clear();
1211
1213
  if (reset && ['forward', 'reload'].includes(navigation)) {
1212
1214
  this.lastDoc = null;
1213
- this.currentClientPageIndex = 0;
1214
1215
  }
1215
1216
  if (reset && ['backward', 'reload'].includes(navigation)) {
1216
1217
  this.firstDoc = null;
1218
+ }
1219
+ // Só o 'reload' volta para a primeira página. Em forward/backward (inclusive
1220
+ // pulos com reset de cursor) o currentClientPageIndex já foi definido por
1221
+ // onPageChange e é essencial para o offset da paginação client-side.
1222
+ if (navigation === 'reload') {
1217
1223
  this.currentClientPageIndex = 0;
1218
1224
  }
1219
1225
  const activeFilters = this.filterService.extractActiveFilters(this.filtersForm);
@@ -1231,6 +1237,7 @@ export class TableComponent {
1231
1237
  size: this.totalItems,
1232
1238
  filterFn: this.data.filterFn,
1233
1239
  clientPageIndex: this.currentClientPageIndex,
1240
+ fullPageSize: fullPageSize ?? this.pageSize,
1234
1241
  };
1235
1242
  const result = await this.tableService.getPaginated(paginated);
1236
1243
  this.items = result.items;
@@ -1298,7 +1305,7 @@ export class TableComponent {
1298
1305
  }
1299
1306
  }
1300
1307
  try {
1301
- await this.loadItemsPaginated(navigation.direction, navigation.resetDocs);
1308
+ await this.loadItemsPaginated(navigation.direction, navigation.resetDocs, event.pageSize);
1302
1309
  }
1303
1310
  catch (error) {
1304
1311
  console.error('Erro ao carregar itens paginados:', error);
@@ -1542,7 +1549,7 @@ TableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TableCompone
1542
1549
  } }, dependencies: [i7.NgClass, i7.NgForOf, i7.NgIf, i8.DefaultValueAccessor, i8.NgControlStatus, i8.NgControlStatusGroup, i8.MaxLengthValidator, i8.FormControlDirective, i8.FormGroupDirective, i8.FormControlName, i1.RouterLink, i9.MatTable, i9.MatHeaderCellDef, i9.MatHeaderRowDef, i9.MatColumnDef, i9.MatCellDef, i9.MatRowDef, i9.MatHeaderCell, i9.MatCell, i9.MatHeaderRow, i9.MatRow, i9.MatNoDataRow, i10.MatPaginator, i11.MatSort, i11.MatSortHeader, i12.MatFormField, i12.MatLabel, i12.MatSuffix, i13.MatInput, i14.MatOption, i15.MatSelect, i16.MatTooltip, i17.MatProgressSpinner, i18.MatIcon, i19.TableTabsComponent, i20.TableTooltipComponent, i7.AsyncPipe], styles: ["@charset \"UTF-8\";[_nghost-%COMP%]{--table-color: #1976d2;--table-text-color: white;--table-header-bg: #1976d2;--table-header-text: white;--table-scrollbar-bg: #f5f5f5;--table-scrollbar-thumb: var(--table-color)}.table-container[_ngcontent-%COMP%]::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.table-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.table-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}.overflow-x-auto[_ngcontent-%COMP%]::-webkit-scrollbar, .overflow-y-auto[_ngcontent-%COMP%]::-webkit-scrollbar, .overflow-auto[_ngcontent-%COMP%]::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.overflow-x-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb, .overflow-y-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb, .overflow-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.overflow-x-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover, .overflow-y-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover, .overflow-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}[_nghost-%COMP%] .mat-table .mat-header-cell, [_nghost-%COMP%] .mat-header-cell, [_nghost-%COMP%] th.mat-header-cell, [_nghost-%COMP%] .mat-mdc-table .mat-mdc-header-cell, [_nghost-%COMP%] .mat-mdc-header-cell, [_nghost-%COMP%] th.mat-mdc-header-cell{background-color:var(--table-header-bg, #1976d2)!important;color:var(--table-header-text, white)!important;font-weight:600} .fa-filter, i.fa-filter{color:var(--table-color, #1976d2)!important} .rounded-xl.border{border-color:var(--table-color, #1976d2)!important} .border-gray-200.rounded-xl{border-color:var(--table-color, #1976d2)!important} .mdc-notched-outline__notch{border-right:none!important}.mat-mdc-text-field-wrapper.mdc-text-field--outlined[_ngcontent-%COMP%] .mat-mdc-form-field-infix[_ngcontent-%COMP%]{padding-bottom:0} .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-bottom:0}.mat-mdc-text-field-wrapper.mdc-text-field--outlined.mdc-text-field--disabled[_ngcontent-%COMP%]{background:rgba(0,0,0,.15);background-size:1px 100%!important;background-repeat:repeat-x!important}.mdc-text-field--disabled[_ngcontent-%COMP%] .mdc-text-field__input[_ngcontent-%COMP%]{color:#525252}button[_ngcontent-%COMP%]:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)){transition:all .2s ease;cursor:pointer}button[_ngcontent-%COMP%]:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):hover:not(:disabled){opacity:.9;transform:scale(1.02)}button[_ngcontent-%COMP%]:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):disabled{opacity:.5;cursor:not-allowed;transform:none} .hide-length .mat-mdc-paginator-range-label{display:none} .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-next.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base{visibility:hidden} .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-last.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base.ng-star-inserted{visibility:hidden} .mat-mdc-text-field-wrapper.mdc-text-field.ng-tns-c162-1.mdc-text-field--filled{width:25dvw} .custom-filter .mat-mdc-text-field-wrapper{width:20dvw;max-width:300px}button[matTooltip=\"Adicionar novo filtro\"][_ngcontent-%COMP%], button[_ngcontent-%COMP%]:has(i.fa-plus){display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border:2px solid #93c5fd;background-color:#dbeafe;padding:.5rem 1.5rem;font-size:.875rem;font-weight:500;color:#2563eb;transition:all .3s;cursor:pointer;transform:translateY(0)}button[matTooltip=\"Adicionar novo filtro\"][_ngcontent-%COMP%]:hover, button[_ngcontent-%COMP%]:has(i.fa-plus):hover{transform:translateY(-2px);border-color:#60a5fa;background-color:#bfdbfe;box-shadow:0 4px 6px #0000001a}button[matTooltip=\"Aplicar filtros\"][_ngcontent-%COMP%], button[_ngcontent-%COMP%]:has(i.fa-search){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#16a34a;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Aplicar filtros\"][_ngcontent-%COMP%]:hover, button[_ngcontent-%COMP%]:has(i.fa-search):hover{background-color:#15803d}button[matTooltip=\"Aplicar filtros\"][_ngcontent-%COMP%]:disabled, button[_ngcontent-%COMP%]:has(i.fa-search):disabled{opacity:.5;cursor:not-allowed}button[matTooltip=\"Limpar filtros\"][_ngcontent-%COMP%], button[_ngcontent-%COMP%]:has(i.fas.fa-redo-alt){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#ef4444;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Limpar filtros\"][_ngcontent-%COMP%]:hover, button[_ngcontent-%COMP%]:has(i.fas.fa-redo-alt):hover{background-color:#dc2626}button[matTooltip=\"Exportar Tabela\"][_ngcontent-%COMP%], button[_ngcontent-%COMP%]:has(i.fa-download){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#f97316;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Exportar Tabela\"][_ngcontent-%COMP%]:hover:not(:disabled), button[_ngcontent-%COMP%]:has(i.fa-download):hover:not(:disabled){background-color:#ea580c}button[matTooltip=\"Exportar Tabela\"][_ngcontent-%COMP%]:disabled, button[_ngcontent-%COMP%]:has(i.fa-download):disabled{opacity:.5;cursor:not-allowed}"], changeDetection: 0 });
1543
1550
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TableComponent, [{
1544
1551
  type: Component,
1545
- args: [{ selector: 'lib-table', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"data\" class=\"card-body\">\n <div class=\"flex flex-col justify-between gap-6\">\n <!-- UNIFIED CONTROL PANEL: FILTERS, SORT & ACTIONS -->\n <div\n class=\"rounded-xl border border-gray-200 bg-white p-4 shadow-lg\"\n *ngIf=\"\n data.pagination === true &&\n (dropdownItems.length > 0 ||\n sortableDropdownItems.length > 0 ||\n data.actionButton)\n \"\n >\n <!-- PANEL HEADER: Title and Custom Action -->\n <div\n class=\"mb-4 flex flex-col items-start justify-between gap-4 border-b-2 border-gray-200 pb-4 md:flex-row md:items-center\"\n >\n <!-- Left Side: Title & Main Action Button -->\n <div class=\"flex flex-wrap items-center gap-4\">\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-filter text-xl text-blue-500\"></i>\n <span class=\"text-lg font-semibold text-gray-700\"\n >Filtros e A\u00E7\u00F5es</span\n >\n </div>\n <button\n *ngIf=\"data.actionButton && data.actionButton.condition\"\n [ngClass]=\"getActionButtonClass()\"\n [routerLink]=\"data.actionButton.routerLink\"\n (click)=\"\n data.actionButton.method ? data.actionButton.method($event) : null\n \"\n >\n <i\n *ngIf=\"data.actionButton.icon\"\n [class]=\"data.actionButton.icon\"\n ></i>\n {{ data.actionButton.label }}\n </button>\n </div>\n </div>\n\n <!-- SORT FIELD (Integrated with filters) -->\n <div class=\"mb-4\" *ngIf=\"sortableDropdownItems.length > 0\">\n <div class=\"flex flex-wrap items-center gap-3 p-2\">\n <div class=\"min-w-[200px] flex-1\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-sort-alpha-down text-cyan-600\"></i>\n <span>Ordenar por</span>\n </mat-label>\n <mat-select placeholder=\"Selecione...\" [formControl]=\"selectSort\">\n <mat-option\n *ngFor=\"let item of sortableDropdownItems\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-sort-alpha-down text-cyan-600\"></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <!-- FILTERS CONTENT (WITH REFINEMENTS) -->\n <div class=\"mb-4 space-y-3\" *ngIf=\"filtersForm.controls.length > 0\">\n <div\n [formGroup]=\"$any(filterGroup)\"\n *ngFor=\"let filterGroup of filtersForm.controls; let i = index\"\n class=\"flex flex-wrap items-center gap-3 p-2\"\n >\n <!-- FILTER TYPE SELECTOR -->\n <div class=\"min-w-[200px] flex-1\" *ngIf=\"dropdownItems.length > 0\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Tipo de filtro</mat-label>\n <mat-select\n placeholder=\"Selecione o tipo...\"\n formControlName=\"selectFilter\"\n (selectionChange)=\"onSelectFilterChange()\"\n >\n <mat-option\n *ngFor=\"let item of getAvailableFilterOptions()\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i\n [class]=\"item.icon || 'fa fa-filter'\"\n class=\"text-sm text-blue-500\"\n ></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- TEXT FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange === 'filter'\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-gray-400\"></i>\n <span>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Filtrar\"\n }}</span>\n </mat-label>\n <input\n (keyup.enter)=\"search($event)\"\n formControlName=\"typeFilter\"\n matInput\n placeholder=\"Digite para filtrar...\"\n #input\n />\n </mat-form-field>\n </div>\n\n <!-- DROPDOWN FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value &&\n $any(filterGroup)\n .get('selectFilter')\n ?.value.hasOwnProperty('items')\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Selecione\"\n }}</mat-label>\n <mat-select\n placeholder=\"Selecione...\"\n formControlName=\"selectItem\"\n multiple\n >\n <mat-option\n *ngFor=\"\n let item of $any(filterGroup).get('selectFilter')?.value\n .items\n \"\n [value]=\"item\"\n >\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- DATE FILTER -->\n <div\n class=\"min-w-[340px] flex-auto\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filterByDate'\n \"\n >\n <div\n class=\"flex flex-col items-stretch gap-3 sm:flex-row sm:items-center\"\n >\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Inicial</span>\n </mat-label>\n <input\n type=\"text\"\n matInput\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'initialDate', i)\"\n formControlName=\"initialDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Final</span>\n </mat-label>\n <input\n type=\"text\"\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'finalDate', i)\"\n matInput\n formControlName=\"finalDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n </div>\n </div>\n\n <!-- REMOVE FILTER BUTTON -->\n <div *ngIf=\"filtersForm.length > 1\" class=\"ml-auto flex-shrink-0\">\n <button\n (click)=\"removeFilter(i)\"\n class=\"flex h-10 w-10 items-center justify-center rounded-full transition-colors duration-300 hover:bg-red-100\"\n matTooltip=\"Remover filtro\"\n >\n <i class=\"fa fa-trash text-red-500 hover:text-red-600\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- PANEL FOOTER: Add Filter & Action Buttons -->\n <div\n class=\"-mb-2 flex items-start justify-between gap-4 border-t border-gray-200 pt-4\"\n >\n <!-- Add Filter Button -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <button\n (click)=\"addFilter()\"\n class=\"transform rounded-full border-2 border-blue-300 bg-blue-50 px-6 py-2 text-sm font-medium text-blue-600 transition-all duration-300 hover:-translate-y-0.5 hover:border-blue-400 hover:bg-blue-100 hover:shadow-md\"\n matTooltip=\"Adicionar novo filtro\"\n >\n <i class=\"fa fa-plus mr-2\"></i>\n Adicionar Filtro\n </button>\n </div>\n\n <!-- Right Side: Search, Reset, Export -->\n <div\n class=\"flex flex-wrap gap-3 self-start sm:self-auto\"\n *ngIf=\"\n this.hasFilterableColumn === true || this.hasSortableColumn === true\n \"\n >\n <button\n (click)=\"search()\"\n type=\"button\"\n class=\"flex items-center gap-2 rounded-lg bg-green-600 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-green-700\"\n matTooltip=\"Aplicar filtros\"\n >\n <i class=\"fa fa-search\"></i>\n Pesquisar\n </button>\n\n <button\n (click)=\"resetFilter()\"\n class=\"flex items-center gap-2 rounded-lg bg-red-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-red-600\"\n matTooltip=\"Limpar filtros\"\n >\n <i class=\"fas fa-redo-alt\"></i>\n Resetar\n </button>\n\n <button\n *ngIf=\"data.download !== false && downloadTable\"\n class=\"flex items-center gap-2 rounded-lg bg-orange-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-orange-600\"\n matTooltipPosition=\"above\"\n matTooltip=\"Exportar Tabela\"\n [disabled]=\"\n this.dataSource && this.dataSource.filteredData.length <= 0\n \"\n (click)=\"\n $any(arrange) && downloadTable !== undefined\n ? downloadTable($any(arrange), data.conditions || [])\n : null\n \"\n >\n <i class=\"fa fa-download\"></i>\n Exportar\n </button>\n </div>\n </div>\n </div>\n\n <!-- UNIFIED CONTROL PANEL (for non-paginated tables): SEARCH, SORT & FILTERS -->\n <div\n class=\"rounded-xl border border-gray-200 bg-white p-4 shadow-lg\"\n *ngIf=\"\n data.pagination === false &&\n (hasFilterableColumn === true ||\n dropdownItems.length > 0 ||\n data.actionButton)\n \"\n >\n <!-- PANEL HEADER: Title and Custom Action -->\n <div\n class=\"mb-4 flex flex-col items-start justify-between gap-4 border-b-2 border-gray-200 pb-4 md:flex-row md:items-center\"\n >\n <!-- Left Side: Title & Main Action Button -->\n <div class=\"flex flex-wrap items-center gap-4\">\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-filter text-xl text-blue-500\"></i>\n <span class=\"text-lg font-semibold text-gray-700\"\n >Filtros e A\u00E7\u00F5es</span\n >\n </div>\n <button\n *ngIf=\"data.actionButton && data.actionButton.condition\"\n [ngClass]=\"getActionButtonClass()\"\n [routerLink]=\"data.actionButton.routerLink\"\n (click)=\"\n data.actionButton.method ? data.actionButton.method($event) : null\n \"\n >\n <i\n *ngIf=\"data.actionButton.icon\"\n [class]=\"data.actionButton.icon\"\n ></i>\n {{ data.actionButton.label }}\n </button>\n </div>\n </div>\n\n <!-- SIMPLE SEARCH -->\n <div\n class=\"mb-4\"\n *ngIf=\"hasFilterableColumn === true && data.showSimpleSearch !== false\"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-blue-500\"></i>\n Buscar\n </mat-label>\n <input\n matInput\n (keyup.enter)=\"search($event)\"\n (keyup)=\"applyFilter(filterInput.value)\"\n placeholder=\"Digite para filtrar...\"\n #filterInput\n />\n <mat-icon matSuffix class=\"text-gray-500\">search</mat-icon>\n </mat-form-field>\n </div>\n\n <!-- FILTERS PANEL -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <!-- FILTERS CONTENT -->\n <div class=\"mb-4 space-y-3\" *ngIf=\"filtersForm.controls.length > 0\">\n <div\n [formGroup]=\"$any(filterGroup)\"\n *ngFor=\"let filterGroup of filtersForm.controls; let i = index\"\n class=\"flex flex-wrap items-center gap-3\"\n >\n <!-- FILTER TYPE SELECTOR -->\n <div class=\"min-w-[200px] flex-1\" *ngIf=\"dropdownItems.length > 0\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Tipo de filtro</mat-label>\n <mat-select\n placeholder=\"Selecione o tipo...\"\n formControlName=\"selectFilter\"\n (selectionChange)=\"onSelectFilterChange()\"\n >\n <mat-option\n *ngFor=\"let item of getAvailableFilterOptions()\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i\n [class]=\"item.icon || 'fa fa-filter'\"\n class=\"text-sm text-blue-500\"\n ></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- TEXT FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filter'\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-gray-400\"></i>\n <span>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Filtrar\"\n }}</span>\n </mat-label>\n <input\n (keyup.enter)=\"search($event)\"\n formControlName=\"typeFilter\"\n matInput\n placeholder=\"Digite para filtrar...\"\n #input\n />\n </mat-form-field>\n </div>\n\n <!-- DROPDOWN FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value &&\n $any(filterGroup)\n .get('selectFilter')\n ?.value.hasOwnProperty('items')\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Selecione\"\n }}</mat-label>\n <mat-select\n placeholder=\"Selecione...\"\n formControlName=\"selectItem\"\n multiple\n >\n <mat-option\n *ngFor=\"\n let item of $any(filterGroup).get('selectFilter')?.value\n .items\n \"\n [value]=\"item\"\n >\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- DATE FILTER -->\n <div\n class=\"min-w-[340px] flex-auto\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filterByDate'\n \"\n >\n <div\n class=\"flex flex-col items-stretch gap-3 sm:flex-row sm:items-center\"\n >\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Inicial</span>\n </mat-label>\n <input\n type=\"text\"\n matInput\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'initialDate', i)\"\n (blur)=\"onDateFilterChange()\"\n formControlName=\"initialDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Final</span>\n </mat-label>\n <input\n type=\"text\"\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'finalDate', i)\"\n (blur)=\"onDateFilterChange()\"\n matInput\n formControlName=\"finalDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n </div>\n </div>\n\n <!-- REMOVE FILTER BUTTON -->\n <div *ngIf=\"filtersForm.length > 1\" class=\"ml-auto flex-shrink-0\">\n <button\n (click)=\"removeFilter(i)\"\n class=\"flex h-10 w-10 items-center justify-center rounded-full transition-colors duration-300 hover:bg-red-100\"\n matTooltip=\"Remover filtro\"\n >\n <i class=\"fa fa-trash text-red-500 hover:text-red-600\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- PANEL FOOTER: Add Filter & Actions -->\n <div\n class=\"-mb-2 flex items-start justify-between gap-4 border-t border-gray-200 pt-4\"\n >\n <!-- Add Filter Button -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <button\n (click)=\"addFilter()\"\n class=\"transform rounded-full border-2 border-blue-300 bg-blue-50 px-6 py-2 text-sm font-medium text-blue-600 transition-all duration-300 hover:-translate-y-0.5 hover:border-blue-400 hover:bg-blue-100 hover:shadow-md\"\n matTooltip=\"Adicionar novo filtro\"\n >\n <i class=\"fa fa-plus mr-2\"></i>\n Adicionar Filtro\n </button>\n </div>\n\n <!-- Action Buttons -->\n <div\n class=\"flex flex-wrap gap-3 self-start sm:self-auto\"\n *ngIf=\"\n this.hasFilterableColumn === true ||\n this.hasSortableColumn === true\n \"\n >\n <button\n (click)=\"search()\"\n type=\"button\"\n class=\"flex items-center gap-2 rounded-lg bg-green-600 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-green-700\"\n matTooltip=\"Aplicar filtros\"\n >\n <i class=\"fa fa-search\"></i>\n Pesquisar\n </button>\n\n <button\n (click)=\"resetFilter()\"\n class=\"flex items-center gap-2 rounded-lg bg-red-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-red-600\"\n matTooltip=\"Limpar filtros\"\n >\n <i class=\"fas fa-redo-alt\"></i>\n Resetar\n </button>\n\n <button\n *ngIf=\"data.download !== false && downloadTable\"\n class=\"flex items-center gap-2 rounded-lg bg-orange-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-orange-600\"\n matTooltipPosition=\"above\"\n matTooltip=\"Exportar Tabela\"\n [disabled]=\"\n this.dataSource && this.dataSource.filteredData.length <= 0\n \"\n (click)=\"handleDownload()\"\n >\n <i class=\"fa fa-download\"></i>\n Exportar\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-col\">\n <!-- TABS COMPONENT -->\n <lib-table-tabs\n *ngIf=\"data.tabs && data.tabs.tabsData && data.tabs.tabsData.length > 0\"\n [tabsData]=\"data.tabs.tabsData\"\n [selectedTab]=\"selectedTab\"\n (tabSelected)=\"onTabSelected($event)\"\n ></lib-table-tabs>\n <div\n class=\"mat-elevation-z8 w-full overflow-x-auto rounded-xl table-container\"\n >\n <table\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n #sort=\"matSort\"\n matSortActive=\"createdAt\"\n matSortDirection=\"desc\"\n >\n <ng-container\n *ngFor=\"let col of data.displayedColumns; trackBy: trackByProperty\"\n matColumnDef=\"{{ col.property }}\"\n >\n <ng-container *matHeaderCellDef>\n <!-- IF THE COLUMN IS NOT SORTABLE, THEN DON'T SHOW THE SORT BUTTONS -->\n <th\n *ngIf=\"!col.isSortable || data.pagination === true\"\n mat-header-cell\n >\n {{ col.title }}\n </th>\n <!-- IF THE COLUMN IS SORTABLE, THEN SHOW THE SORT BUTTONS -->\n <th\n *ngIf=\"col.isSortable && data.pagination === false\"\n mat-header-cell\n mat-sort-header\n >\n {{ col.title }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n (click)=\"col.method ? col.method(row) : null\"\n (mouseenter)=\"onCellMouseEnter($event, row, col)\"\n (mouseleave)=\"onCellMouseLeave()\"\n (mousemove)=\"onCellMouseMove($event)\"\n >\n <!-- CHECK IF THE COLUMN MUST BE DISPLAYED -->\n <span *ngIf=\"!col.image && !col.iconClass && !col.method\">\n <ng-container>\n <span\n *ngIf=\"\n col.charLimit &&\n row[col.property] &&\n row[col.property].length > col.charLimit;\n else withinLimit\n \"\n >\n <a\n *ngIf=\"col.hasLink === true\"\n [href]=\"row[col.property]\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row) }}\n </a>\n <a\n *ngIf=\"col.hasLink && isString(col.hasLink)\"\n [href]=\"col.hasLink\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row) }}\n </a>\n <span\n *ngIf=\"col.hasLink !== true && !isString(col.hasLink)\"\n >\n {{ getDisplayValue(col, row) }}\n </span>\n </span>\n </ng-container>\n <ng-template #withinLimit>\n <a\n *ngIf=\"col.hasLink === true\"\n [href]=\"row[col.property]\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row, true) }}\n </a>\n <a\n *ngIf=\"col.hasLink && isString(col.hasLink)\"\n [href]=\"col.hasLink\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row, true) }}\n </a>\n <span\n *ngIf=\"col.hasLink !== true && !isString(col.hasLink)\"\n >\n {{ getDisplayValue(col, row, true) }}\n </span>\n </ng-template>\n </span>\n <!------------------- IMAGE ------------------>\n <!-- Imagem com loading -->\n <div\n *ngIf=\"\n col.image && col.image.path && !col.iconClass && !col.method\n \"\n class=\"relative inline-block\"\n >\n <mat-spinner\n *ngIf=\"isImageLoading(row, col)\"\n [diameter]=\"32\"\n class=\"absolute inset-0 m-auto\"\n ></mat-spinner>\n <img\n [src]=\"col.image.path + '/' + row[col.property]\"\n [ngClass]=\"col.image.class\"\n [class.opacity-0]=\"isImageLoading(row, col)\"\n alt=\"\"\n (load)=\"onImageLoad(row, col)\"\n (error)=\"onImageError($event, row, col, col.image.default)\"\n />\n </div>\n\n <!-- Imagem com URL completa e loading -->\n <div\n *ngIf=\"\n col.image && col.image.url && !col.iconClass && !col.method\n \"\n class=\"relative inline-block\"\n >\n <mat-spinner\n *ngIf=\"isImageLoading(row, col)\"\n [diameter]=\"32\"\n class=\"absolute inset-0 m-auto\"\n ></mat-spinner>\n <img\n [src]=\"row[col.property]\"\n [ngClass]=\"col.image.class\"\n [class.opacity-0]=\"isImageLoading(row, col)\"\n alt=\"\"\n (load)=\"onImageLoad(row, col)\"\n (error)=\"onImageError($event, row, col, col.image.default)\"\n />\n </div>\n <ng-container *ngIf=\"col.iconClass\">\n <button\n *ngFor=\"let iconClass of col.iconClass\"\n (click)=\"\n iconClass.buttonMethod\n ? iconClass.buttonMethod(row, $event)\n : $event.stopPropagation()\n \"\n >\n <span\n [ngClass]=\"iconClass.class\"\n *ngIf=\"\n iconClass.condition === undefined ||\n (iconClass.condition !== undefined &&\n $any(iconClass.condition)(row))\n \"\n >{{ iconClass.text }}</span\n >\n </button>\n </ng-container>\n </td>\n </ng-container>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnProperties\"></tr>\n <tr\n [ngClass]=\"getTableRowNgClass()\"\n mat-row\n *matRowDef=\"let row; columns: columnProperties\"\n (click)=\"goToDetails(row)\"\n ></tr>\n\n <!-- ROW SHOWN WHEN THERE IS NO MATCHING DATA. -->\n <tr class=\"mat-row\" *matNoDataRow>\n <td *ngIf=\"!(isLoading$ | async)\" class=\"mat-cell p-4\" colspan=\"4\">\n Nenhum resultado encontrado para a busca\n </td>\n </tr>\n </table>\n\n <div class=\"flex justify-center\" *ngIf=\"isLoading$ | async\">\n <mat-spinner></mat-spinner>\n </div>\n\n <div class=\"paginator-container\">\n <mat-paginator\n #paginator\n [pageSizeOptions]=\"[25, 50, 100]\"\n [pageSize]=\"pageSize\"\n [length]=\"totalItems\"\n showFirstLastButtons\n aria-label=\"Select page of periodic elements\"\n (page)=\"onPageChange($event)\"\n [ngClass]=\"getPaginatorNgClass()\"\n >\n </mat-paginator>\n <!-- <div\n *ngIf=\"\n !(isLoading$ | async) &&\n dataSource?.data &&\n dataSource.data.length > 0 &&\n data?.filterFn\n \"\n class=\"page-number-display\"\n >\n {{ currentPageNumber }}\n </div> -->\n </div>\n </div>\n </div>\n </div>\n\n <!-- TOOLTIP PERSONALIZADO -->\n <lib-table-tooltip\n [state]=\"tooltipState\"\n [styles]=\"getTooltipStyles()\"\n ></lib-table-tooltip>\n</div>\n", styles: ["@charset \"UTF-8\";:host{--table-color: #1976d2;--table-text-color: white;--table-header-bg: #1976d2;--table-header-text: white;--table-scrollbar-bg: #f5f5f5;--table-scrollbar-thumb: var(--table-color)}.table-container::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.table-container::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.table-container::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}.overflow-x-auto::-webkit-scrollbar,.overflow-y-auto::-webkit-scrollbar,.overflow-auto::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.overflow-x-auto::-webkit-scrollbar-thumb,.overflow-y-auto::-webkit-scrollbar-thumb,.overflow-auto::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.overflow-x-auto::-webkit-scrollbar-thumb:hover,.overflow-y-auto::-webkit-scrollbar-thumb:hover,.overflow-auto::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}:host ::ng-deep .mat-table .mat-header-cell,:host ::ng-deep .mat-header-cell,:host ::ng-deep th.mat-header-cell,:host ::ng-deep .mat-mdc-table .mat-mdc-header-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep th.mat-mdc-header-cell{background-color:var(--table-header-bg, #1976d2)!important;color:var(--table-header-text, white)!important;font-weight:600}::ng-deep .fa-filter,::ng-deep i.fa-filter{color:var(--table-color, #1976d2)!important}::ng-deep .rounded-xl.border{border-color:var(--table-color, #1976d2)!important}::ng-deep .border-gray-200.rounded-xl{border-color:var(--table-color, #1976d2)!important}::ng-deep .mdc-notched-outline__notch{border-right:none!important}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-bottom:0}::ng-deep .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-bottom:0}.mat-mdc-text-field-wrapper.mdc-text-field--outlined.mdc-text-field--disabled{background:rgba(0,0,0,.15);background-size:1px 100%!important;background-repeat:repeat-x!important}.mdc-text-field--disabled .mdc-text-field__input{color:#525252}button:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)){transition:all .2s ease;cursor:pointer}button:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):hover:not(:disabled){opacity:.9;transform:scale(1.02)}button:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):disabled{opacity:.5;cursor:not-allowed;transform:none}::ng-deep .hide-length .mat-mdc-paginator-range-label{display:none}::ng-deep .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-next.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base{visibility:hidden}::ng-deep .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-last.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base.ng-star-inserted{visibility:hidden}::ng-deep .mat-mdc-text-field-wrapper.mdc-text-field.ng-tns-c162-1.mdc-text-field--filled{width:25dvw}::ng-deep .custom-filter .mat-mdc-text-field-wrapper{width:20dvw;max-width:300px}button[matTooltip=\"Adicionar novo filtro\"],button:has(i.fa-plus){display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border:2px solid #93c5fd;background-color:#dbeafe;padding:.5rem 1.5rem;font-size:.875rem;font-weight:500;color:#2563eb;transition:all .3s;cursor:pointer;transform:translateY(0)}button[matTooltip=\"Adicionar novo filtro\"]:hover,button:has(i.fa-plus):hover{transform:translateY(-2px);border-color:#60a5fa;background-color:#bfdbfe;box-shadow:0 4px 6px #0000001a}button[matTooltip=\"Aplicar filtros\"],button:has(i.fa-search){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#16a34a;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Aplicar filtros\"]:hover,button:has(i.fa-search):hover{background-color:#15803d}button[matTooltip=\"Aplicar filtros\"]:disabled,button:has(i.fa-search):disabled{opacity:.5;cursor:not-allowed}button[matTooltip=\"Limpar filtros\"],button:has(i.fas.fa-redo-alt){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#ef4444;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Limpar filtros\"]:hover,button:has(i.fas.fa-redo-alt):hover{background-color:#dc2626}button[matTooltip=\"Exportar Tabela\"],button:has(i.fa-download){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#f97316;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Exportar Tabela\"]:hover:not(:disabled),button:has(i.fa-download):hover:not(:disabled){background-color:#ea580c}button[matTooltip=\"Exportar Tabela\"]:disabled,button:has(i.fa-download):disabled{opacity:.5;cursor:not-allowed}\n"] }]
1552
+ args: [{ selector: 'lib-table', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"data\" class=\"card-body\">\n <div class=\"flex flex-col justify-between gap-6\">\n <!-- UNIFIED CONTROL PANEL: FILTERS, SORT & ACTIONS -->\n <div\n class=\"rounded-xl border border-gray-200 bg-white p-4 shadow-lg\"\n *ngIf=\"\n data.pagination === true &&\n (dropdownItems.length > 0 ||\n sortableDropdownItems.length > 0 ||\n data.actionButton)\n \"\n >\n <!-- PANEL HEADER: Title and Custom Action -->\n <div\n class=\"mb-4 flex flex-col items-start justify-between gap-4 border-b-2 border-gray-200 pb-4 md:flex-row md:items-center\"\n >\n <!-- Left Side: Title & Main Action Button -->\n <div class=\"flex flex-wrap items-center gap-4\">\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-filter text-xl text-blue-500\"></i>\n <span class=\"text-lg font-semibold text-gray-700\"\n >Filtros e A\u00E7\u00F5es</span\n >\n </div>\n <button\n *ngIf=\"data.actionButton && data.actionButton.condition\"\n [ngClass]=\"getActionButtonClass()\"\n [routerLink]=\"data.actionButton.routerLink\"\n (click)=\"\n data.actionButton.method ? data.actionButton.method($event) : null\n \"\n >\n <i\n *ngIf=\"data.actionButton.icon\"\n [class]=\"data.actionButton.icon\"\n ></i>\n {{ data.actionButton.label }}\n </button>\n </div>\n </div>\n\n <!-- SORT FIELD (Integrated with filters) -->\n <div class=\"mb-4\" *ngIf=\"sortableDropdownItems.length > 0\">\n <div class=\"flex flex-wrap items-center gap-3 p-2\">\n <div class=\"min-w-[200px] flex-1\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-sort-alpha-down text-cyan-600\"></i>\n <span>Ordenar por</span>\n </mat-label>\n <mat-select placeholder=\"Selecione...\" [formControl]=\"selectSort\">\n <mat-option\n *ngFor=\"let item of sortableDropdownItems\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-sort-alpha-down text-cyan-600\"></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <!-- FILTERS CONTENT (WITH REFINEMENTS) -->\n <div class=\"mb-4 space-y-3\" *ngIf=\"filtersForm.controls.length > 0\">\n <div\n [formGroup]=\"$any(filterGroup)\"\n *ngFor=\"let filterGroup of filtersForm.controls; let i = index\"\n class=\"flex flex-wrap items-center gap-3 p-2\"\n >\n <!-- FILTER TYPE SELECTOR -->\n <div class=\"min-w-[200px] flex-1\" *ngIf=\"dropdownItems.length > 0\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Tipo de filtro</mat-label>\n <mat-select\n placeholder=\"Selecione o tipo...\"\n formControlName=\"selectFilter\"\n (selectionChange)=\"onSelectFilterChange()\"\n >\n <mat-option\n *ngFor=\"let item of getAvailableFilterOptions(filterGroup)\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i\n [class]=\"item.icon || 'fa fa-filter'\"\n class=\"text-sm text-blue-500\"\n ></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- TEXT FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange === 'filter'\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-gray-400\"></i>\n <span>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Filtrar\"\n }}</span>\n </mat-label>\n <input\n (keyup.enter)=\"search($event)\"\n formControlName=\"typeFilter\"\n matInput\n placeholder=\"Digite para filtrar...\"\n #input\n />\n </mat-form-field>\n </div>\n\n <!-- DROPDOWN FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value &&\n $any(filterGroup)\n .get('selectFilter')\n ?.value.hasOwnProperty('items')\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Selecione\"\n }}</mat-label>\n <mat-select\n placeholder=\"Selecione...\"\n formControlName=\"selectItem\"\n multiple\n >\n <mat-option\n *ngFor=\"\n let item of $any(filterGroup).get('selectFilter')?.value\n .items\n \"\n [value]=\"item\"\n >\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- DATE FILTER -->\n <div\n class=\"min-w-[340px] flex-auto\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filterByDate'\n \"\n >\n <div\n class=\"flex flex-col items-stretch gap-3 sm:flex-row sm:items-center\"\n >\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Inicial</span>\n </mat-label>\n <input\n type=\"text\"\n matInput\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'initialDate', i)\"\n formControlName=\"initialDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Final</span>\n </mat-label>\n <input\n type=\"text\"\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'finalDate', i)\"\n matInput\n formControlName=\"finalDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n </div>\n </div>\n\n <!-- REMOVE FILTER BUTTON -->\n <div *ngIf=\"filtersForm.length > 1\" class=\"ml-auto flex-shrink-0\">\n <button\n (click)=\"removeFilter(i)\"\n class=\"flex h-10 w-10 items-center justify-center rounded-full transition-colors duration-300 hover:bg-red-100\"\n matTooltip=\"Remover filtro\"\n >\n <i class=\"fa fa-trash text-red-500 hover:text-red-600\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- PANEL FOOTER: Add Filter & Action Buttons -->\n <div\n class=\"-mb-2 flex items-start justify-between gap-4 border-t border-gray-200 pt-4\"\n >\n <!-- Add Filter Button -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <button\n (click)=\"addFilter()\"\n class=\"transform rounded-full border-2 border-blue-300 bg-blue-50 px-6 py-2 text-sm font-medium text-blue-600 transition-all duration-300 hover:-translate-y-0.5 hover:border-blue-400 hover:bg-blue-100 hover:shadow-md\"\n matTooltip=\"Adicionar novo filtro\"\n >\n <i class=\"fa fa-plus mr-2\"></i>\n Adicionar Filtro\n </button>\n </div>\n\n <!-- Right Side: Search, Reset, Export -->\n <div\n class=\"flex flex-wrap gap-3 self-start sm:self-auto\"\n *ngIf=\"\n this.hasFilterableColumn === true || this.hasSortableColumn === true\n \"\n >\n <button\n (click)=\"search()\"\n type=\"button\"\n class=\"flex items-center gap-2 rounded-lg bg-green-600 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-green-700\"\n matTooltip=\"Aplicar filtros\"\n >\n <i class=\"fa fa-search\"></i>\n Pesquisar\n </button>\n\n <button\n (click)=\"resetFilter()\"\n class=\"flex items-center gap-2 rounded-lg bg-red-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-red-600\"\n matTooltip=\"Limpar filtros\"\n >\n <i class=\"fas fa-redo-alt\"></i>\n Resetar\n </button>\n\n <button\n *ngIf=\"data.download !== false && downloadTable\"\n class=\"flex items-center gap-2 rounded-lg bg-orange-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-orange-600\"\n matTooltipPosition=\"above\"\n matTooltip=\"Exportar Tabela\"\n [disabled]=\"\n this.dataSource && this.dataSource.filteredData.length <= 0\n \"\n (click)=\"\n $any(arrange) && downloadTable !== undefined\n ? downloadTable($any(arrange), data.conditions || [])\n : null\n \"\n >\n <i class=\"fa fa-download\"></i>\n Exportar\n </button>\n </div>\n </div>\n </div>\n\n <!-- UNIFIED CONTROL PANEL (for non-paginated tables): SEARCH, SORT & FILTERS -->\n <div\n class=\"rounded-xl border border-gray-200 bg-white p-4 shadow-lg\"\n *ngIf=\"\n data.pagination === false &&\n (hasFilterableColumn === true ||\n dropdownItems.length > 0 ||\n data.actionButton)\n \"\n >\n <!-- PANEL HEADER: Title and Custom Action -->\n <div\n class=\"mb-4 flex flex-col items-start justify-between gap-4 border-b-2 border-gray-200 pb-4 md:flex-row md:items-center\"\n >\n <!-- Left Side: Title & Main Action Button -->\n <div class=\"flex flex-wrap items-center gap-4\">\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-filter text-xl text-blue-500\"></i>\n <span class=\"text-lg font-semibold text-gray-700\"\n >Filtros e A\u00E7\u00F5es</span\n >\n </div>\n <button\n *ngIf=\"data.actionButton && data.actionButton.condition\"\n [ngClass]=\"getActionButtonClass()\"\n [routerLink]=\"data.actionButton.routerLink\"\n (click)=\"\n data.actionButton.method ? data.actionButton.method($event) : null\n \"\n >\n <i\n *ngIf=\"data.actionButton.icon\"\n [class]=\"data.actionButton.icon\"\n ></i>\n {{ data.actionButton.label }}\n </button>\n </div>\n </div>\n\n <!-- SIMPLE SEARCH -->\n <div\n class=\"mb-4\"\n *ngIf=\"hasFilterableColumn === true && data.showSimpleSearch !== false\"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-blue-500\"></i>\n Buscar\n </mat-label>\n <input\n matInput\n (keyup.enter)=\"search($event)\"\n (keyup)=\"applyFilter(filterInput.value)\"\n placeholder=\"Digite para filtrar...\"\n #filterInput\n />\n <mat-icon matSuffix class=\"text-gray-500\">search</mat-icon>\n </mat-form-field>\n </div>\n\n <!-- FILTERS PANEL -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <!-- FILTERS CONTENT -->\n <div class=\"mb-4 space-y-3\" *ngIf=\"filtersForm.controls.length > 0\">\n <div\n [formGroup]=\"$any(filterGroup)\"\n *ngFor=\"let filterGroup of filtersForm.controls; let i = index\"\n class=\"flex flex-wrap items-center gap-3\"\n >\n <!-- FILTER TYPE SELECTOR -->\n <div class=\"min-w-[200px] flex-1\" *ngIf=\"dropdownItems.length > 0\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Tipo de filtro</mat-label>\n <mat-select\n placeholder=\"Selecione o tipo...\"\n formControlName=\"selectFilter\"\n (selectionChange)=\"onSelectFilterChange()\"\n >\n <mat-option\n *ngFor=\"let item of getAvailableFilterOptions(filterGroup)\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i\n [class]=\"item.icon || 'fa fa-filter'\"\n class=\"text-sm text-blue-500\"\n ></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- TEXT FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filter'\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-gray-400\"></i>\n <span>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Filtrar\"\n }}</span>\n </mat-label>\n <input\n (keyup.enter)=\"search($event)\"\n formControlName=\"typeFilter\"\n matInput\n placeholder=\"Digite para filtrar...\"\n #input\n />\n </mat-form-field>\n </div>\n\n <!-- DROPDOWN FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value &&\n $any(filterGroup)\n .get('selectFilter')\n ?.value.hasOwnProperty('items')\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Selecione\"\n }}</mat-label>\n <mat-select\n placeholder=\"Selecione...\"\n formControlName=\"selectItem\"\n multiple\n >\n <mat-option\n *ngFor=\"\n let item of $any(filterGroup).get('selectFilter')?.value\n .items\n \"\n [value]=\"item\"\n >\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- DATE FILTER -->\n <div\n class=\"min-w-[340px] flex-auto\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filterByDate'\n \"\n >\n <div\n class=\"flex flex-col items-stretch gap-3 sm:flex-row sm:items-center\"\n >\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Inicial</span>\n </mat-label>\n <input\n type=\"text\"\n matInput\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'initialDate', i)\"\n (blur)=\"onDateFilterChange()\"\n formControlName=\"initialDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Final</span>\n </mat-label>\n <input\n type=\"text\"\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'finalDate', i)\"\n (blur)=\"onDateFilterChange()\"\n matInput\n formControlName=\"finalDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n </div>\n </div>\n\n <!-- REMOVE FILTER BUTTON -->\n <div *ngIf=\"filtersForm.length > 1\" class=\"ml-auto flex-shrink-0\">\n <button\n (click)=\"removeFilter(i)\"\n class=\"flex h-10 w-10 items-center justify-center rounded-full transition-colors duration-300 hover:bg-red-100\"\n matTooltip=\"Remover filtro\"\n >\n <i class=\"fa fa-trash text-red-500 hover:text-red-600\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- PANEL FOOTER: Add Filter & Actions -->\n <div\n class=\"-mb-2 flex items-start justify-between gap-4 border-t border-gray-200 pt-4\"\n >\n <!-- Add Filter Button -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <button\n (click)=\"addFilter()\"\n class=\"transform rounded-full border-2 border-blue-300 bg-blue-50 px-6 py-2 text-sm font-medium text-blue-600 transition-all duration-300 hover:-translate-y-0.5 hover:border-blue-400 hover:bg-blue-100 hover:shadow-md\"\n matTooltip=\"Adicionar novo filtro\"\n >\n <i class=\"fa fa-plus mr-2\"></i>\n Adicionar Filtro\n </button>\n </div>\n\n <!-- Action Buttons -->\n <div\n class=\"flex flex-wrap gap-3 self-start sm:self-auto\"\n *ngIf=\"\n this.hasFilterableColumn === true ||\n this.hasSortableColumn === true\n \"\n >\n <button\n (click)=\"search()\"\n type=\"button\"\n class=\"flex items-center gap-2 rounded-lg bg-green-600 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-green-700\"\n matTooltip=\"Aplicar filtros\"\n >\n <i class=\"fa fa-search\"></i>\n Pesquisar\n </button>\n\n <button\n (click)=\"resetFilter()\"\n class=\"flex items-center gap-2 rounded-lg bg-red-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-red-600\"\n matTooltip=\"Limpar filtros\"\n >\n <i class=\"fas fa-redo-alt\"></i>\n Resetar\n </button>\n\n <button\n *ngIf=\"data.download !== false && downloadTable\"\n class=\"flex items-center gap-2 rounded-lg bg-orange-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-orange-600\"\n matTooltipPosition=\"above\"\n matTooltip=\"Exportar Tabela\"\n [disabled]=\"\n this.dataSource && this.dataSource.filteredData.length <= 0\n \"\n (click)=\"handleDownload()\"\n >\n <i class=\"fa fa-download\"></i>\n Exportar\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-col\">\n <!-- TABS COMPONENT -->\n <lib-table-tabs\n *ngIf=\"data.tabs && data.tabs.tabsData && data.tabs.tabsData.length > 0\"\n [tabsData]=\"data.tabs.tabsData\"\n [selectedTab]=\"selectedTab\"\n (tabSelected)=\"onTabSelected($event)\"\n ></lib-table-tabs>\n <div\n class=\"mat-elevation-z8 w-full overflow-x-auto rounded-xl table-container\"\n >\n <table\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n #sort=\"matSort\"\n matSortActive=\"createdAt\"\n matSortDirection=\"desc\"\n >\n <ng-container\n *ngFor=\"let col of data.displayedColumns; trackBy: trackByProperty\"\n matColumnDef=\"{{ col.property }}\"\n >\n <ng-container *matHeaderCellDef>\n <!-- IF THE COLUMN IS NOT SORTABLE, THEN DON'T SHOW THE SORT BUTTONS -->\n <th\n *ngIf=\"!col.isSortable || data.pagination === true\"\n mat-header-cell\n >\n {{ col.title }}\n </th>\n <!-- IF THE COLUMN IS SORTABLE, THEN SHOW THE SORT BUTTONS -->\n <th\n *ngIf=\"col.isSortable && data.pagination === false\"\n mat-header-cell\n mat-sort-header\n >\n {{ col.title }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n (click)=\"col.method ? col.method(row) : null\"\n (mouseenter)=\"onCellMouseEnter($event, row, col)\"\n (mouseleave)=\"onCellMouseLeave()\"\n (mousemove)=\"onCellMouseMove($event)\"\n >\n <!-- CHECK IF THE COLUMN MUST BE DISPLAYED -->\n <span *ngIf=\"!col.image && !col.iconClass && !col.method\">\n <ng-container>\n <span\n *ngIf=\"\n col.charLimit &&\n row[col.property] &&\n row[col.property].length > col.charLimit;\n else withinLimit\n \"\n >\n <a\n *ngIf=\"col.hasLink === true\"\n [href]=\"row[col.property]\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row) }}\n </a>\n <a\n *ngIf=\"col.hasLink && isString(col.hasLink)\"\n [href]=\"col.hasLink\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row) }}\n </a>\n <span\n *ngIf=\"col.hasLink !== true && !isString(col.hasLink)\"\n >\n {{ getDisplayValue(col, row) }}\n </span>\n </span>\n </ng-container>\n <ng-template #withinLimit>\n <a\n *ngIf=\"col.hasLink === true\"\n [href]=\"row[col.property]\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row, true) }}\n </a>\n <a\n *ngIf=\"col.hasLink && isString(col.hasLink)\"\n [href]=\"col.hasLink\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row, true) }}\n </a>\n <span\n *ngIf=\"col.hasLink !== true && !isString(col.hasLink)\"\n >\n {{ getDisplayValue(col, row, true) }}\n </span>\n </ng-template>\n </span>\n <!------------------- IMAGE ------------------>\n <!-- Imagem com loading -->\n <div\n *ngIf=\"\n col.image && col.image.path && !col.iconClass && !col.method\n \"\n class=\"relative inline-block\"\n >\n <mat-spinner\n *ngIf=\"isImageLoading(row, col)\"\n [diameter]=\"32\"\n class=\"absolute inset-0 m-auto\"\n ></mat-spinner>\n <img\n [src]=\"col.image.path + '/' + row[col.property]\"\n [ngClass]=\"col.image.class\"\n [class.opacity-0]=\"isImageLoading(row, col)\"\n alt=\"\"\n (load)=\"onImageLoad(row, col)\"\n (error)=\"onImageError($event, row, col, col.image.default)\"\n />\n </div>\n\n <!-- Imagem com URL completa e loading -->\n <div\n *ngIf=\"\n col.image && col.image.url && !col.iconClass && !col.method\n \"\n class=\"relative inline-block\"\n >\n <mat-spinner\n *ngIf=\"isImageLoading(row, col)\"\n [diameter]=\"32\"\n class=\"absolute inset-0 m-auto\"\n ></mat-spinner>\n <img\n [src]=\"row[col.property]\"\n [ngClass]=\"col.image.class\"\n [class.opacity-0]=\"isImageLoading(row, col)\"\n alt=\"\"\n (load)=\"onImageLoad(row, col)\"\n (error)=\"onImageError($event, row, col, col.image.default)\"\n />\n </div>\n <ng-container *ngIf=\"col.iconClass\">\n <button\n *ngFor=\"let iconClass of col.iconClass\"\n (click)=\"\n iconClass.buttonMethod\n ? iconClass.buttonMethod(row, $event)\n : $event.stopPropagation()\n \"\n >\n <span\n [ngClass]=\"iconClass.class\"\n *ngIf=\"\n iconClass.condition === undefined ||\n (iconClass.condition !== undefined &&\n $any(iconClass.condition)(row))\n \"\n >{{ iconClass.text }}</span\n >\n </button>\n </ng-container>\n </td>\n </ng-container>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnProperties\"></tr>\n <tr\n [ngClass]=\"getTableRowNgClass()\"\n mat-row\n *matRowDef=\"let row; columns: columnProperties\"\n (click)=\"goToDetails(row)\"\n ></tr>\n\n <!-- ROW SHOWN WHEN THERE IS NO MATCHING DATA. -->\n <tr class=\"mat-row\" *matNoDataRow>\n <td *ngIf=\"!(isLoading$ | async)\" class=\"mat-cell p-4\" colspan=\"4\">\n Nenhum resultado encontrado para a busca\n </td>\n </tr>\n </table>\n\n <div class=\"flex justify-center\" *ngIf=\"isLoading$ | async\">\n <mat-spinner></mat-spinner>\n </div>\n\n <div class=\"paginator-container\">\n <mat-paginator\n #paginator\n [pageSizeOptions]=\"[25, 50, 100]\"\n [pageSize]=\"pageSize\"\n [length]=\"totalItems\"\n showFirstLastButtons\n aria-label=\"Select page of periodic elements\"\n (page)=\"onPageChange($event)\"\n [ngClass]=\"getPaginatorNgClass()\"\n >\n </mat-paginator>\n <!-- <div\n *ngIf=\"\n !(isLoading$ | async) &&\n dataSource?.data &&\n dataSource.data.length > 0 &&\n data?.filterFn\n \"\n class=\"page-number-display\"\n >\n {{ currentPageNumber }}\n </div> -->\n </div>\n </div>\n </div>\n </div>\n\n <!-- TOOLTIP PERSONALIZADO -->\n <lib-table-tooltip\n [state]=\"tooltipState\"\n [styles]=\"getTooltipStyles()\"\n ></lib-table-tooltip>\n</div>\n", styles: ["@charset \"UTF-8\";:host{--table-color: #1976d2;--table-text-color: white;--table-header-bg: #1976d2;--table-header-text: white;--table-scrollbar-bg: #f5f5f5;--table-scrollbar-thumb: var(--table-color)}.table-container::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.table-container::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.table-container::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}.overflow-x-auto::-webkit-scrollbar,.overflow-y-auto::-webkit-scrollbar,.overflow-auto::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.overflow-x-auto::-webkit-scrollbar-thumb,.overflow-y-auto::-webkit-scrollbar-thumb,.overflow-auto::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.overflow-x-auto::-webkit-scrollbar-thumb:hover,.overflow-y-auto::-webkit-scrollbar-thumb:hover,.overflow-auto::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}:host ::ng-deep .mat-table .mat-header-cell,:host ::ng-deep .mat-header-cell,:host ::ng-deep th.mat-header-cell,:host ::ng-deep .mat-mdc-table .mat-mdc-header-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep th.mat-mdc-header-cell{background-color:var(--table-header-bg, #1976d2)!important;color:var(--table-header-text, white)!important;font-weight:600}::ng-deep .fa-filter,::ng-deep i.fa-filter{color:var(--table-color, #1976d2)!important}::ng-deep .rounded-xl.border{border-color:var(--table-color, #1976d2)!important}::ng-deep .border-gray-200.rounded-xl{border-color:var(--table-color, #1976d2)!important}::ng-deep .mdc-notched-outline__notch{border-right:none!important}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-bottom:0}::ng-deep .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-bottom:0}.mat-mdc-text-field-wrapper.mdc-text-field--outlined.mdc-text-field--disabled{background:rgba(0,0,0,.15);background-size:1px 100%!important;background-repeat:repeat-x!important}.mdc-text-field--disabled .mdc-text-field__input{color:#525252}button:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)){transition:all .2s ease;cursor:pointer}button:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):hover:not(:disabled){opacity:.9;transform:scale(1.02)}button:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):disabled{opacity:.5;cursor:not-allowed;transform:none}::ng-deep .hide-length .mat-mdc-paginator-range-label{display:none}::ng-deep .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-next.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base{visibility:hidden}::ng-deep .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-last.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base.ng-star-inserted{visibility:hidden}::ng-deep .mat-mdc-text-field-wrapper.mdc-text-field.ng-tns-c162-1.mdc-text-field--filled{width:25dvw}::ng-deep .custom-filter .mat-mdc-text-field-wrapper{width:20dvw;max-width:300px}button[matTooltip=\"Adicionar novo filtro\"],button:has(i.fa-plus){display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border:2px solid #93c5fd;background-color:#dbeafe;padding:.5rem 1.5rem;font-size:.875rem;font-weight:500;color:#2563eb;transition:all .3s;cursor:pointer;transform:translateY(0)}button[matTooltip=\"Adicionar novo filtro\"]:hover,button:has(i.fa-plus):hover{transform:translateY(-2px);border-color:#60a5fa;background-color:#bfdbfe;box-shadow:0 4px 6px #0000001a}button[matTooltip=\"Aplicar filtros\"],button:has(i.fa-search){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#16a34a;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Aplicar filtros\"]:hover,button:has(i.fa-search):hover{background-color:#15803d}button[matTooltip=\"Aplicar filtros\"]:disabled,button:has(i.fa-search):disabled{opacity:.5;cursor:not-allowed}button[matTooltip=\"Limpar filtros\"],button:has(i.fas.fa-redo-alt){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#ef4444;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Limpar filtros\"]:hover,button:has(i.fas.fa-redo-alt):hover{background-color:#dc2626}button[matTooltip=\"Exportar Tabela\"],button:has(i.fa-download){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#f97316;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Exportar Tabela\"]:hover:not(:disabled),button:has(i.fa-download):hover:not(:disabled){background-color:#ea580c}button[matTooltip=\"Exportar Tabela\"]:disabled,button:has(i.fa-download):disabled{opacity:.5;cursor:not-allowed}\n"] }]
1546
1553
  }], function () { return [{ type: i1.Router }, { type: i2.TableService }, { type: i3.FilterService }, { type: i4.TooltipService }, { type: i5.PaginationService }, { type: i6.AngularFirestore }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, { data: [{
1547
1554
  type: Input
1548
1555
  }], downloadTable: [{
@@ -1554,4 +1561,4 @@ TableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TableCompone
1554
1561
  type: ViewChild,
1555
1562
  args: [MatSort]
1556
1563
  }] }); })();
1557
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZmlyZWJhc2UtdGFibGUta3hwL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1maXJlYmFzZS10YWJsZS1reHAvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFNTCxjQUFjLEdBSWYsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEVBS1QsdUJBQXVCLEdBR3hCLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFNN0QsT0FBTyxFQUNMLGVBQWUsRUFDZixjQUFjLEVBQ2QsUUFBUSxFQUNSLGVBQWUsRUFDZixXQUFXLEdBQ1osTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsWUFBWSxFQUNaLGNBQWMsRUFDZCxPQUFPLEVBQ1AsU0FBUyxFQUNULGVBQWUsR0FDaEIsTUFBTSxNQUFNLENBQUM7QUFLZCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBYSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQ3RCdkQsb0JBR0s7OztJQURILDZDQUFnQzs7OztJQVZwQyxrQ0FPQztJQUhDLG1MQUNpQixrREFBMkIsd0NBQ2pELEdBQUcsSUFDVixDQUFBLElBRGE7SUFFRCxpRkFHSztJQUNMLFlBQ0Y7SUFBQSxpQkFBUzs7O0lBWFAsd0RB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Q0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ3pEO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUM5RDtTQUNGO0lBQ0gsQ0FBQzs7NEVBcjZCVSxjQUFjO2lFQUFkLGNBQWM7dUJBNkNkLFlBQVk7dUJBQ1osT0FBTzs7Ozs7O1FDN0dwQixpRUFxd0JNOztRQXJ3QkEsK0JBQVU7O3VGRCtESCxjQUFjO2NBUDFCLFNBQVM7MkJBQ0UsV0FBVyxjQUNULEtBQUssbUJBR0EsdUJBQXVCLENBQUMsTUFBTTtxUUFNdEMsSUFBSTtrQkFBWixLQUFLO1lBQ0csYUFBYTtrQkFBckIsS0FBSztZQXdDbUIsU0FBUztrQkFBakMsU0FBUzttQkFBQyxZQUFZO1lBQ0gsSUFBSTtrQkFBdkIsU0FBUzttQkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXJyYW5nZSxcbiAgQ29uZGl0aW9uLFxuICBUYWJEYXRhLFxuICBUYWJsZURhdGEsXG4gIENvbHVtbixcbiAgVEFCTEVfREVGQVVMVFMsXG4gIERyb3Bkb3duSXRlbSxcbiAgRmlsdGVyU2VsZWN0SXRlbSxcbiAgUGFnaW5hdGlvbixcbn0gZnJvbSAnLi4vLi4vdHlwZXMvVGFibGUnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgRWxlbWVudFJlZixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBPbkRlc3Ryb3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQW5ndWxhckZpcmVzdG9yZSxcbiAgUXVlcnlEb2N1bWVudFNuYXBzaG90LFxufSBmcm9tICdAYW5ndWxhci9maXJlL2NvbXBhdC9maXJlc3RvcmUnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yLCBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0U29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsdGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpbHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFRvb2x0aXBTZXJ2aWNlLCBUb29sdGlwU3RhdGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90b29sdGlwLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYWdpbmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgZ2V0RGlzcGxheVZhbHVlLFxuICBnZXROZXN0ZWRWYWx1ZSxcbiAgaXNTdHJpbmcsXG4gIHRyYWNrQnlQcm9wZXJ0eSxcbiAgZ2V0SW1hZ2VLZXksXG59IGZyb20gJy4uLy4uL3V0aWxzL3RhYmxlLnV0aWxzJztcbmltcG9ydCB7XG4gIGRlYm91bmNlVGltZSxcbiAgZmlyc3RWYWx1ZUZyb20sXG4gIFN1YmplY3QsXG4gIHRha2VVbnRpbCxcbiAgQmVoYXZpb3JTdWJqZWN0LFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE9yZGVyQnlEaXJlY3Rpb24gfSBmcm9tICdmaXJlYmFzZS9maXJlc3RvcmUnO1xuaW1wb3J0IGZpcmViYXNlIGZyb20gJ2ZpcmViYXNlL2NvbXBhdCc7XG5pbXBvcnQgV2hlcmVGaWx0ZXJPcCA9IGZpcmViYXNlLmZpcmVzdG9yZS5XaGVyZUZpbHRlck9wO1xuaW1wb3J0IGZpcmVzdG9yZSA9IGZpcmViYXNlLmZpcmVzdG9yZTtcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtQXJyYXksIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudDxUID0gYW55PlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3lcbntcbiAgLy8gSU5QVVRTXG4gIEBJbnB1dCgpIGRhdGEhOiBUYWJsZURhdGE7XG4gIEBJbnB1dCgpIGRvd25sb2FkVGFibGU/OiAoYXJyYW5nZTogQXJyYW5nZSwgY29uZGl0aW9uczogQ29uZGl0aW9uW10pID0+IHZvaWQ7XG4gIGFycmFuZ2U6IEFycmFuZ2UgfCBudWxsID0gbnVsbDtcblxuICAvLyBWQVJJQUJMRVNcbiAgZGF0YVNvdXJjZSE6IE1hdFRhYmxlRGF0YVNvdXJjZTxUPjtcbiAgY3VycmVudFBhZ2VOdW1iZXIgPSAxO1xuICBjdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gMDtcblxuICBwdWJsaWMgaXNMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyBpdGVtczogVFtdID0gW107XG4gIHB1YmxpYyBmaWx0ZXJlZEl0ZW1zOiBUW10gPSBbXTtcbiAgcHJpdmF0ZSBsYXN0RG9jOiBRdWVyeURvY3VtZW50U25hcHNob3Q8VD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBmaXJzdERvYzogUXVlcnlEb2N1bWVudFNuYXBzaG90PFQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc29ydEJ5OiB7IGZpZWxkOiBzdHJpbmc7IG9yZGVyOiBPcmRlckJ5RGlyZWN0aW9uIH0gPSB7XG4gICAgZmllbGQ6IFRBQkxFX0RFRkFVTFRTLlNPUlRfRklFTEQsXG4gICAgb3JkZXI6IFRBQkxFX0RFRkFVTFRTLlNPUlRfT1JERVIsXG4gIH07XG4gIHB1YmxpYyBjb2x1bW5Qcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZpbHRlcnNGb3JtOiBGb3JtQXJyYXk7XG4gIHNlbGVjdFNvcnQ6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcbiAgY3VycmVudEFycmFuZ2UgPSAnJztcblxuICBoYXNOZXh0UGFnZTogYm9vbGVhbiA9IGZhbHNlO1xuICBkcm9wZG93bkl0ZW1zOiBEcm9wZG93bkl0ZW1bXSA9IFtdO1xuICBzb3J0YWJsZURyb3Bkb3duSXRlbXM6IERyb3Bkb3duSXRlbVtdID0gW107XG4gIHBhZ2VTaXplID0gVEFCTEVfREVGQVVMVFMuUEFHRV9TSVpFO1xuICB0b3RhbEl0ZW1zID0gMDtcbiAgcGFnZUV2ZW50PzogUGFnZUV2ZW50O1xuICBmaWx0ZXJWYWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgaGFzRmlsdGVyYWJsZUNvbHVtbjogYm9vbGVhbiA9IGZhbHNlO1xuICBoYXNTb3J0YWJsZUNvbHVtbjogYm9vbGVhbiA9IGZhbHNlO1xuICBmaWx0ZXJQcmVkaWNhdGU6ICgoZGF0YTogVCwgZmlsdGVyOiBzdHJpbmcpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGZpbHRlclN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVib3VuY2VUaW1lTXMgPSBUQUJMRV9ERUZBVUxUUy5ERUJPVU5DRV9USU1FX01TO1xuXG4gIHNlbGVjdGVkVGFiOiBudW1iZXIgPSAwO1xuXG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKSBwYWdpbmF0b3IhOiBNYXRQYWdpbmF0b3I7XG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydCE6IE1hdFNvcnQ7XG5cbiAgLy8gUHJvcHJpZWRhZGVzIHBhcmEgY29udHJvbGUgZG8gdG9vbHRpcFxuICB0b29sdGlwU3RhdGU6IFRvb2x0aXBTdGF0ZTtcblxuICAvLyBDb250cm9sZSBkZSBsb2FkaW5nIGRlIGltYWdlbnNcbiAgaW1hZ2VMb2FkaW5nU3RhdGUgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcblxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvLyBDT05TVFJVQ1RPUlxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgdGFibGVTZXJ2aWNlOiBUYWJsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaWx0ZXJTZXJ2aWNlOiBGaWx0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9vbHRpcFNlcnZpY2U6IFRvb2x0aXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGFnaW5hdGlvblNlcnZpY2U6IFBhZ2luYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZmlyZXN0b3JlOiBBbmd1bGFyRmlyZXN0b3JlLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHtcbiAgICB0aGlzLmZpbHRlcnNGb3JtID0gbmV3IEZvcm1BcnJheShbdGhpcy5maWx0ZXJTZXJ2aWNlLmNyZWF0ZUZpbHRlckdyb3VwKCldKTtcbiAgICB0aGlzLnRvb2x0aXBTdGF0ZSA9IHRoaXMudG9vbHRpcFNlcnZpY2UuY3JlYXRlSW5pdGlhbFN0YXRlKCk7XG4gIH1cblxuICBnZXRBY3Rpb25CdXR0b25DbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy5kYXRhPy5hY3Rpb25CdXR0b24/LmNvbG9yQ2xhc3MgfHwgJ2JnLWJsdWUtNTAwJykgK1xuICAgICAgJyBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUgaG92ZXI6b3BhY2l0eS03MCdcbiAgICApO1xuICB9XG5cbiAgZ2V0VGFibGVSb3dOZ0NsYXNzKCk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2V4YW1wbGUtZWxlbWVudC1yb3cnOiB0aGlzLmRhdGE/LmlzTm90Q2xpY2thYmxlID09PSB0cnVlLFxuICAgICAgJ2V4YW1wbGUtZWxlbWVudC1yb3cgY3Vyc29yLXBvaW50ZXInOiAhdGhpcy5kYXRhPy5pc05vdENsaWNrYWJsZSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0UGFnaW5hdG9yTmdDbGFzcygpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdoaWRlLWxlbmd0aCc6XG4gICAgICAgIFsnZmlsdGVyJywgJ2ZpbHRlckJ5RGF0ZScsICdlcXVhbHMnXS5pbmNsdWRlcyh0aGlzLmN1cnJlbnRBcnJhbmdlKSB8fFxuICAgICAgICAhIXRoaXMuZGF0YT8uZmlsdGVyRm4sXG4gICAgICAnaGlkZS1uZXh0LWJ1dHRvbic6XG4gICAgICAgICF0aGlzLmhhc05leHRQYWdlICYmIHRoaXMuZGF0YT8ucGFnaW5hdGlvbiA9PT0gdHJ1ZSxcbiAgICAgICdoaWRlLWxhc3QtYnV0dG9uJzpcbiAgICAgICAgKCF0aGlzLmhhc05leHRQYWdlICYmIHRoaXMuZGF0YT8ucGFnaW5hdGlvbiA9PT0gdHJ1ZSkgfHxcbiAgICAgICAgISF0aGlzLmRhdGE/LmZpbHRlckZuLFxuICAgIH07XG4gIH1cblxuICAvLyBGSUxURVIgTUVUSE9EUyAoZGVsZWdhZG9zIGFvIEZpbHRlclNlcnZpY2UpXG5cbiAgY3JlYXRlRmlsdGVyR3JvdXAoKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJTZXJ2aWNlLmNyZWF0ZUZpbHRlckdyb3VwKCk7XG4gIH1cblxuICBhZGRGaWx0ZXIoZmlsdGVyRGF0YT86IHtcbiAgICBzZWxlY3RGaWx0ZXI6IERyb3Bkb3duSXRlbSB8IG51bGw7XG4gICAgdHlwZUZpbHRlcj86IHN0cmluZztcbiAgICBzZWxlY3RJdGVtPzogRmlsdGVyU2VsZWN0SXRlbVtdO1xuICAgIGluaXRpYWxEYXRlPzogc3RyaW5nO1xuICAgIGZpbmFsRGF0ZT86IHN0cmluZztcbiAgfSk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyU2VydmljZS5hZGRGaWx0ZXIoXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLFxuICAgICAgdGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IHRydWUsXG4gICAgICBmaWx0ZXJEYXRhLFxuICAgICk7XG4gIH1cblxuICBoYXNBY3RpdmVEYXRlRmlsdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlclNlcnZpY2UuaGFzQWN0aXZlRGF0ZUZpbHRlcih0aGlzLmZpbHRlcnNGb3JtKTtcbiAgfVxuXG4gIGdldEF2YWlsYWJsZUZpbHRlck9wdGlvbnMoKTogRHJvcGRvd25JdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlclNlcnZpY2UuZ2V0QXZhaWxhYmxlRmlsdGVyT3B0aW9ucyhcbiAgICAgIHRoaXMuZHJvcGRvd25JdGVtcyxcbiAgICAgIHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSB0cnVlLFxuICAgICAgdGhpcy5maWx0ZXJzRm9ybSxcbiAgICApO1xuICB9XG5cbiAgb25TZWxlY3RGaWx0ZXJDaGFuZ2UoKTogdm9pZCB7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gdGhpcy5maWx0ZXJzRm9ybS5sZW5ndGggLSAxO1xuICAgIGNvbnN0IGxhc3RGaWx0ZXIgPSB0aGlzLmZpbHRlcnNGb3JtLmF0KGxhc3RJbmRleCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRGaWx0ZXIgPSBsYXN0RmlsdGVyLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlO1xuXG4gICAgaWYgKHNlbGVjdGVkRmlsdGVyKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHNlbGVjdGVkRmlsdGVyLmFycmFuZ2UgPT09ICdmaWx0ZXJCeURhdGUnICYmXG4gICAgICAgIHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRGaWx0ZXIoKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVGaWx0ZXIoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyU2VydmljZS5yZW1vdmVGaWx0ZXIodGhpcy5maWx0ZXJzRm9ybSwgaW5kZXgpO1xuICB9XG5cbiAgcmVtb3ZlQWxsRmlsdGVycygpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlclNlcnZpY2UucmVtb3ZlQWxsRmlsdGVycyh0aGlzLmZpbHRlcnNGb3JtKTtcbiAgICB0aGlzLnJlc2V0RmlsdGVyKCk7XG4gIH1cblxuICBvbkRhdGVJbnB1dChcbiAgICBldmVudDogRXZlbnQsXG4gICAgY29udHJvbE5hbWU6ICdpbml0aWFsRGF0ZScgfCAnZmluYWxEYXRlJyxcbiAgICBmaWx0ZXJJbmRleDogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJHcm91cCA9IHRoaXMuZmlsdGVyc0Zvcm0uYXQoZmlsdGVySW5kZXgpIGFzIEZvcm1Hcm91cDtcbiAgICB0aGlzLmZpbHRlclNlcnZpY2UuYXBwbHlEYXRlTWFzayhldmVudCwgY29udHJvbE5hbWUsIGZpbHRlckdyb3VwKTtcbiAgfVxuXG4gIG9uRGF0ZUZpbHRlckNoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmFycmFuZ2UgPSB0aGlzLmZpbHRlclNlcnZpY2UuYnVpbGRBcnJhbmdlRnJvbUZpbHRlcnMoXG4gICAgICAgIHRoaXMuZmlsdGVyc0Zvcm0sXG4gICAgICAgIHRoaXMuc29ydEJ5LFxuICAgICAgKTtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzVG9EYXRhU291cmNlKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RmlsdGVyc1RvRGF0YVNvdXJjZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZSkgcmV0dXJuO1xuXG4gICAgbGV0IGZpbHRlcmVkSXRlbXMgPSB0aGlzLmZpbHRlclNlcnZpY2UuYXBwbHlDbGllbnRTaWRlRmlsdGVyczxUPihcbiAgICAgIFsuLi50aGlzLml0ZW1zXSxcbiAgICAgIHRoaXMuZmlsdGVyc0Zvcm0sXG4gICAgICB0aGlzLnNvcnRCeSxcbiAgICApO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZmlsdGVyZWRJdGVtcztcbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBmaWx0ZXJlZEl0ZW1zO1xuICAgIHRoaXMudG90YWxJdGVtcyA9IGZpbHRlcmVkSXRlbXMubGVuZ3RoO1xuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q2xpZW50U2lkZUZpbHRlcnMoaXRlbXM6IFRbXSk6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyU2VydmljZS5hcHBseUNsaWVudFNpZGVGaWx0ZXJzPFQ+KFxuICAgICAgaXRlbXMsXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLFxuICAgICAgdGhpcy5zb3J0QnksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRBcnJhbmdlRnJvbUZpbHRlcnMoKTogQXJyYW5nZSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyU2VydmljZS5idWlsZEFycmFuZ2VGcm9tRmlsdGVycyhcbiAgICAgIHRoaXMuZmlsdGVyc0Zvcm0sXG4gICAgICB0aGlzLnNvcnRCeSxcbiAgICApO1xuICB9XG5cbiAgLy8gVE9PTFRJUCBNRVRIT0RTIChkZWxlZ2Fkb3MgYW8gVG9vbHRpcFNlcnZpY2UpXG5cbiAgZ2V0VG9vbHRpcFN0eWxlcygpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICByZXR1cm4gdGhpcy50b29sdGlwU2VydmljZS5nZXRUb29sdGlwU3R5bGVzKHRoaXMudG9vbHRpcFN0YXRlKTtcbiAgfVxuXG4gIG9uQ2VsbE1vdXNlRW50ZXIoZXZlbnQ6IE1vdXNlRXZlbnQsIHJvdzogVCwgY29sOiBDb2x1bW4pOiB2b2lkIHtcbiAgICB0aGlzLnRvb2x0aXBTZXJ2aWNlLmhhbmRsZU1vdXNlRW50ZXIoXG4gICAgICBldmVudCxcbiAgICAgIHJvdyxcbiAgICAgIGNvbCxcbiAgICAgIChjLCByLCB3KSA9PiB0aGlzLmdldERpc3BsYXlWYWx1ZShjLCByLCB3KSxcbiAgICAgIChzdGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLnRvb2x0aXBTdGF0ZSA9IHsgLi4udGhpcy50b29sdGlwU3RhdGUsIC4uLnN0YXRlIH07XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgb25DZWxsTW91c2VMZWF2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvb2x0aXBTZXJ2aWNlLmhhbmRsZU1vdXNlTGVhdmUoKHN0YXRlKSA9PiB7XG4gICAgICB0aGlzLnRvb2x0aXBTdGF0ZSA9IHN0YXRlO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBvbkNlbGxNb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnRvb2x0aXBTZXJ2aWNlLmhhbmRsZU1vdXNlTW92ZShcbiAgICAgIGV2ZW50LFxuICAgICAgdGhpcy50b29sdGlwU3RhdGUuc2hvd1Rvb2x0aXAsXG4gICAgICAocG9zaXRpb24pID0+IHtcbiAgICAgICAgdGhpcy50b29sdGlwU3RhdGUgPSB7IC4uLnRoaXMudG9vbHRpcFN0YXRlLCB0b29sdGlwUG9zaXRpb246IHBvc2l0aW9uIH07XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gVEFCIE1FVEhPRFNcblxuICBvblRhYlNlbGVjdGVkKGV2ZW50OiB7IHRhYjogVGFiRGF0YTsgaW5kZXg6IG51bWJlciB9KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRhdGEudGFicz8ubWV0aG9kKSByZXR1cm47XG4gICAgdGhpcy5zZWxlY3RlZFRhYiA9IGV2ZW50LmluZGV4O1xuICAgIHRoaXMuZGF0YS50YWJzLm1ldGhvZChldmVudC50YWIsIGV2ZW50LmluZGV4KTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8vIFVUSUxJVFkgTUVUSE9EUyAoZGVsZWdhZG9zIGFvcyB1dGlscylcblxuICBnZXREaXNwbGF5VmFsdWUoY29sOiBDb2x1bW4sIHJvdzogVCwgd2l0aGluTGltaXQ6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdywgd2l0aGluTGltaXQpO1xuICB9XG5cbiAgZ2V0TmVzdGVkVmFsdWUob2JqOiB1bmtub3duLCBwYXRoOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICByZXR1cm4gZ2V0TmVzdGVkVmFsdWUob2JqLCBwYXRoKTtcbiAgfVxuXG4gIGlzU3RyaW5nKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIHRyYWNrQnlQcm9wZXJ0eShfaW5kZXg6IG51bWJlciwgY29sOiBDb2x1bW4pOiBzdHJpbmcge1xuICAgIHJldHVybiB0cmFja0J5UHJvcGVydHkoX2luZGV4LCBjb2wpO1xuICB9XG5cbiAgLy8gSU1BR0UgTE9BRElORyBNRVRIT0RTXG5cbiAgcHJpdmF0ZSBnZXRJbWFnZUtleShyb3c6IFQsIGNvbDogQ29sdW1uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0SW1hZ2VLZXkocm93LCBjb2wpO1xuICB9XG5cbiAgaXNJbWFnZUxvYWRpbmcocm93OiBULCBjb2w6IENvbHVtbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0SW1hZ2VLZXkocm93LCBjb2wpO1xuICAgIHJldHVybiAhdGhpcy5pbWFnZUxvYWRpbmdTdGF0ZS5oYXMoa2V5KTtcbiAgfVxuXG4gIG9uSW1hZ2VMb2FkKHJvdzogVCwgY29sOiBDb2x1bW4pOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEltYWdlS2V5KHJvdywgY29sKTtcbiAgICB0aGlzLmltYWdlTG9hZGluZ1N0YXRlLnNldChrZXksIHRydWUpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25JbWFnZUVycm9yKGV2ZW50OiBFdmVudCwgcm93OiBULCBjb2w6IENvbHVtbiwgZGVmYXVsdEltYWdlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRJbWFnZUtleShyb3csIGNvbCk7XG4gICAgdGhpcy5pbWFnZUxvYWRpbmdTdGF0ZS5zZXQoa2V5LCB0cnVlKTtcblxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW1hZ2VFbGVtZW50O1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIGlmIChkZWZhdWx0SW1hZ2UpIHtcbiAgICAgICAgdGFyZ2V0LnNyYyA9IGRlZmF1bHRJbWFnZTtcbiAgICAgICAgdGFyZ2V0Lm9uZXJyb3IgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyBMSUZFQ1lDTEUgTUVUSE9EU1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXBwbHlDdXN0b21Db2xvcnMoKSwgMCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYXBwbHlDdXN0b21Db2xvcnMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudG9vbHRpcFNlcnZpY2UuZGVzdHJveSgpO1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDdXN0b21Db2xvcnMoKTogdm9pZCB7XG4gICAgY29uc3QgaG9zdEVsZW1lbnQgPSB0aGlzLmVsPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghaG9zdEVsZW1lbnQgfHwgIXRoaXMuZGF0YSkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5jb2xvcj8uYmcpIHtcbiAgICAgIGhvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRhYmxlLWNvbG9yJywgdGhpcy5kYXRhLmNvbG9yLmJnKTtcbiAgICAgIGhvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRhYmxlLWhlYWRlci1iZycsIHRoaXMuZGF0YS5jb2xvci5iZyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGEuY29sb3I/LnRleHQpIHtcbiAgICAgIGhvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRhYmxlLXRleHQtY29sb3InLCB0aGlzLmRhdGEuY29sb3IudGV4dCk7XG4gICAgICBob3N0RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgJy0tdGFibGUtaGVhZGVyLXRleHQnLFxuICAgICAgICB0aGlzLmRhdGEuY29sb3IudGV4dCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBoZWFkZXJDZWxscyA9IGhvc3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICcubWF0LWhlYWRlci1jZWxsLCAubWF0LW1kYy1oZWFkZXItY2VsbCwgdGgubWF0LWhlYWRlci1jZWxsLCB0aC5tYXQtbWRjLWhlYWRlci1jZWxsJyxcbiAgICAgICk7XG4gICAgICBoZWFkZXJDZWxscy5mb3JFYWNoKChjZWxsOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5kYXRhLmNvbG9yPy5iZykge1xuICAgICAgICAgIGNlbGwuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5kYXRhLmNvbG9yLmJnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRhdGEuY29sb3I/LnRleHQpIHtcbiAgICAgICAgICBjZWxsLnN0eWxlLmNvbG9yID0gdGhpcy5kYXRhLmNvbG9yLnRleHQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmRhdGEuY29sb3IpIHtcbiAgICAgIHRoaXMuZGF0YS5jb2xvciA9IHtcbiAgICAgICAgYmc6IFRBQkxFX0RFRkFVTFRTLkRFRkFVTFRfQkdfQ09MT1IsXG4gICAgICAgIHRleHQ6IFRBQkxFX0RFRkFVTFRTLkRFRkFVTFRfVEVYVF9DT0xPUixcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGEuc2hvd1NpbXBsZVNlYXJjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRhdGEuc2hvd1NpbXBsZVNlYXJjaCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5jb2x1bW5Qcm9wZXJ0aWVzID0gdGhpcy5kYXRhLmRpc3BsYXllZENvbHVtbnMubWFwKFxuICAgICAgKGNvbHVtbikgPT4gY29sdW1uLnByb3BlcnR5LFxuICAgICk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICBpZiAodGhpcy5kYXRhLmFjdGlvbkJ1dHRvbiAmJiAhdGhpcy5kYXRhLmFjdGlvbkJ1dHRvbi5jb25kaXRpb24pIHtcbiAgICAgIHRoaXMuZGF0YS5hY3Rpb25CdXR0b24uY29uZGl0aW9uID0gKF9yb3c/OiBUKSA9PiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEluaWNpYWxpemFyIGRyb3Bkb3duSXRlbXMgdXNhbmRvIEZpbHRlclNlcnZpY2VcbiAgICBjb25zdCBmaWx0ZXJDb25maWcgPSB0aGlzLmZpbHRlclNlcnZpY2UuaW5pdGlhbGl6ZURyb3Bkb3duSXRlbXMoXG4gICAgICB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1ucyxcbiAgICApO1xuICAgIHRoaXMuZHJvcGRvd25JdGVtcyA9IGZpbHRlckNvbmZpZy5kcm9wZG93bkl0ZW1zO1xuICAgIHRoaXMuc29ydGFibGVEcm9wZG93bkl0ZW1zID0gZmlsdGVyQ29uZmlnLnNvcnRhYmxlRHJvcGRvd25JdGVtcztcbiAgICB0aGlzLmhhc0ZpbHRlcmFibGVDb2x1bW4gPSBmaWx0ZXJDb25maWcuaGFzRmlsdGVyYWJsZUNvbHVtbjtcbiAgICB0aGlzLmhhc1NvcnRhYmxlQ29sdW1uID0gZmlsdGVyQ29uZmlnLmhhc1NvcnRhYmxlQ29sdW1uO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5maWx0ZXJhYmxlT3B0aW9ucykge1xuICAgICAgdGhpcy5kcm9wZG93bkl0ZW1zID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmFkZEZpbHRlcmFibGVPcHRpb25zKFxuICAgICAgICB0aGlzLmRyb3Bkb3duSXRlbXMsXG4gICAgICAgIHRoaXMuZGF0YS5maWx0ZXJhYmxlT3B0aW9ucyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gU2VtIHBhZ2luYcOnw6NvXG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkSXRlbXMoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8vIENvbSBwYWdpbmHDp8Ojb1xuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKHRoaXMuZGF0YS5zb3J0QnkpIHtcbiAgICAgICAgdGhpcy5zb3J0QnkgPSB7XG4gICAgICAgICAgZmllbGQ6IHRoaXMuZGF0YS5zb3J0QnkuZmllbGQsXG4gICAgICAgICAgb3JkZXI6IHRoaXMuZGF0YS5zb3J0Qnkub3JkZXIsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlclN1YmplY3RcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lTXMpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKCdyZWxvYWQnLCB0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRJdGVtc1BhZ2luYXRlZCgncmVsb2FkJywgdHJ1ZSk7XG5cbiAgICAgIHRoaXMuc29ydC5hY3RpdmUgPSAnY3JlYXRlZEF0JztcbiAgICAgIHRoaXMuc29ydC5kaXJlY3Rpb24gPSAnZGVzYyc7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgICAgIHRoaXMudG90YWxJdGVtcyA9IDA7XG4gICAgICBpZiAodGhpcy5kYXRhLnRvdGFsUmVmKSB7XG4gICAgICAgIGZvciAoY29uc3QgdG90YWxSZWYgb2YgdGhpcy5kYXRhLnRvdGFsUmVmKSB7XG4gICAgICAgICAgY29uc3QgdG90YWxSZWZEb2MgPSBhd2FpdCB0b3RhbFJlZi5yZWYuZ2V0KCk7XG4gICAgICAgICAgY29uc3QgZG9jRGF0YSA9IHRvdGFsUmVmRG9jLmRhdGEoKSBhc1xuICAgICAgICAgICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKGRvY0RhdGEgJiYgZG9jRGF0YVt0b3RhbFJlZi5maWVsZF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSBkb2NEYXRhW3RvdGFsUmVmLmZpZWxkXTtcbiAgICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9ICh0aGlzLnRvdGFsSXRlbXMgK1xuICAgICAgICAgICAgICAodHlwZW9mIGZpZWxkVmFsdWUgPT09ICdudW1iZXInID8gZmllbGRWYWx1ZSA6IDApKSBhcyBudW1iZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvLyBEQVRBIExPQURJTkcgTUVUSE9EU1xuXG4gIHByaXZhdGUgYXN5bmMgbG9hZEl0ZW1zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaW1hZ2VMb2FkaW5nU3RhdGUuY2xlYXIoKTtcbiAgICB0aGlzLml0ZW1zID0gKGF3YWl0IHRoaXMudGFibGVTZXJ2aWNlLmdldEl0ZW1zKFxuICAgICAgdGhpcy5kYXRhLmNvbGxlY3Rpb25SZWYsXG4gICAgKSkgYXMgVFtdO1xuICAgIGlmICh0aGlzLmRhdGEuY29uZGl0aW9ucykge1xuICAgICAgdGhpcy5maWx0ZXJJdGVtcygpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmxvYWRSZWxhdGlvbnMoKTtcbiAgICBhd2FpdCB0aGlzLmxvYWRRdWVyeUxlbmd0aHMoKTtcbiAgICB0aGlzLnRvdGFsSXRlbXMgPSB0aGlzLml0ZW1zLmxlbmd0aDtcblxuICAgIHRoaXMuYXJyYW5nZSA9IHtcbiAgICAgIGZpbHRlcnM6IFtdLFxuICAgICAgc29ydEJ5OiB0aGlzLmRhdGEuc29ydEJ5IHx8IHtcbiAgICAgICAgZmllbGQ6IFRBQkxFX0RFRkFVTFRTLlNPUlRfRklFTEQsXG4gICAgICAgIG9yZGVyOiBUQUJMRV9ERUZBVUxUUy5TT1JUX09SREVSLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuc29ydEJ5ID0gdGhpcy5kYXRhLnNvcnRCeSB8fCB7XG4gICAgICBmaWVsZDogVEFCTEVfREVGQVVMVFMuU09SVF9GSUVMRCxcbiAgICAgIG9yZGVyOiBUQUJMRV9ERUZBVUxUUy5TT1JUX09SREVSLFxuICAgIH07XG5cbiAgICBsZXQgaXRlbXNUb0Rpc3BsYXkgPSBbLi4udGhpcy5pdGVtc107XG4gICAgaXRlbXNUb0Rpc3BsYXkgPSB0aGlzLmFwcGx5Q2xpZW50U2lkZUZpbHRlcnMoaXRlbXNUb0Rpc3BsYXkpO1xuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IGl0ZW1zVG9EaXNwbGF5O1xuXG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZShpdGVtc1RvRGlzcGxheSk7XG4gICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xuICAgIGlmICh0aGlzLmRhdGEuc29ydEJ5KSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydC5hY3RpdmUgPSB0aGlzLmRhdGEuc29ydEJ5LmZpZWxkO1xuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQuZGlyZWN0aW9uID0gdGhpcy5kYXRhLnNvcnRCeS5vcmRlcjtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0LnNvcnRDaGFuZ2UuZW1pdCgpO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJQcmVkaWNhdGUgPSAoZGF0YSwgZmlsdGVyOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5kaXNwbGF5ZWRDb2x1bW5zLnNvbWUoKGNvbCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICBpZiAoY29sLmZpbHRlclByZWRpY2F0ZXMpIHtcbiAgICAgICAgICByZXR1cm4gY29sLmZpbHRlclByZWRpY2F0ZXMuc29tZSgocHJlZGljYXRlKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gaXRlbVtjb2wucHJvcGVydHldO1xuICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eVZhbHVlIHx8IHR5cGVvZiBwcm9wZXJ0eVZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5UmVjb3JkID0gcHJvcGVydHlWYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgIGNvbnN0IHByZWRpY2F0ZVZhbHVlID0gcHJvcGVydHlSZWNvcmRbcHJlZGljYXRlXTtcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGVWYWx1ZSA9PT0gbnVsbCB8fCBwcmVkaWNhdGVWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwcmVkaWNhdGVWYWx1ZSlcbiAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgICAuaW5jbHVkZXMoZmlsdGVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2wucHJvcGVydHkgJiYgY29sLmlzRmlsdGVyYWJsZSkge1xuICAgICAgICAgIGNvbnN0IHByb3BlcnR5VmFsdWUgPSBpdGVtW2NvbC5wcm9wZXJ0eV07XG4gICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPT09IG51bGwgfHwgcHJvcGVydHlWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIFN0cmluZyhwcm9wZXJ0eVZhbHVlKVxuICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICAgICAgICAgIC5pbmNsdWRlcyhmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5maWx0ZXJQcmVkaWNhdGUgPSB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkSXRlbXNQYWdpbmF0ZWQoXG4gICAgbmF2aWdhdGlvbjogJ3JlbG9hZCcgfCAnZm9yd2FyZCcgfCAnYmFja3dhcmQnID0gJ3JlbG9hZCcsXG4gICAgcmVzZXQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pbWFnZUxvYWRpbmdTdGF0ZS5jbGVhcigpO1xuICAgIGlmIChyZXNldCAmJiBbJ2ZvcndhcmQnLCAncmVsb2FkJ10uaW5jbHVkZXMobmF2aWdhdGlvbikpIHtcbiAgICAgIHRoaXMubGFzdERvYyA9IG51bGw7XG4gICAgICB0aGlzLmN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSAwO1xuICAgIH1cbiAgICBpZiAocmVzZXQgJiYgWydiYWNrd2FyZCcsICdyZWxvYWQnXS5pbmNsdWRlcyhuYXZpZ2F0aW9uKSkge1xuICAgICAgdGhpcy5maXJzdERvYyA9IG51bGw7XG4gICAgICB0aGlzLmN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSAwO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZUZpbHRlcnMgPSB0aGlzLmZpbHRlclNlcnZpY2UuZXh0cmFjdEFjdGl2ZUZpbHRlcnMoXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLFxuICAgICk7XG5cbiAgICB0aGlzLmFycmFuZ2UgPSB7XG4gICAgICBmaWx0ZXJzOiBhY3RpdmVGaWx0ZXJzLFxuICAgICAgc29ydEJ5OiB0aGlzLnNvcnRCeSxcbiAgICB9O1xuXG4gICAgY29uc3QgcGFnaW5hdGVkOiBQYWdpbmF0aW9uID0ge1xuICAgICAgYmF0Y2hTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgY29sbGVjdGlvbjogdGhpcy5kYXRhLmNvbGxlY3Rpb24sXG4gICAgICBkb2M6IHsgbGFzdERvYzogdGhpcy5sYXN0RG9jLCBmaXJzdERvYzogdGhpcy5maXJzdERvYyB9LFxuICAgICAgbmF2aWdhdGlvbixcbiAgICAgIGFycmFuZ2U6IHRoaXMuYXJyYW5nZSEsXG4gICAgICBjb25kaXRpb25zOiB0aGlzLmRhdGEuY29uZGl0aW9ucyxcbiAgICAgIHNpemU6IHRoaXMudG90YWxJdGVtcyxcbiAgICAgIGZpbHRlckZuOiB0aGlzLmRhdGEuZmlsdGVyRm4sXG4gICAgICBjbGllbnRQYWdlSW5kZXg6IHRoaXMuY3VycmVudENsaWVudFBhZ2VJbmRleCxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy50YWJsZVNlcnZpY2UuZ2V0UGFnaW5hdGVkKHBhZ2luYXRlZCk7XG4gICAgdGhpcy5pdGVtcyA9IHJlc3VsdC5pdGVtcyBhcyBUW107XG4gICAgYXdhaXQgdGhpcy5sb2FkUmVsYXRpb25zKCk7XG4gICAgYXdhaXQgdGhpcy5sb2FkUXVlcnlMZW5ndGhzKCk7XG4gICAgdGhpcy5sYXN0RG9jID0gcmVzdWx0Lmxhc3REb2MgYXMgUXVlcnlEb2N1bWVudFNuYXBzaG90PFQ+IHwgbnVsbDtcbiAgICB0aGlzLmZpcnN0RG9jID0gcmVzdWx0LmZpcnN0RG9jIGFzIFF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDxUPiB8IG51bGw7XG5cbiAgICBpZiAocmVzdWx0LmN1cnJlbnRDbGllbnRQYWdlSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gcmVzdWx0LmN1cnJlbnRDbGllbnRQYWdlSW5kZXg7XG4gICAgfVxuXG4gICAgbGV0IHN1bSA9IDA7XG4gICAgaWYgKHRoaXMuZGF0YS50b3RhbFJlZikge1xuICAgICAgZm9yIChjb25zdCB0b3RhbFJlZiBvZiB0aGlzLmRhdGEudG90YWxSZWYpIHtcbiAgICAgICAgY29uc3QgdG90YWxSZWZEb2MgPSBhd2FpdCB0b3RhbFJlZi5yZWYuZ2V0KCk7XG4gICAgICAgIGNvbnN0IGRvY0RhdGEgPSB0b3RhbFJlZkRvYy5kYXRhKCkgYXNcbiAgICAgICAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChkb2NEYXRhIHx8IHJlc3VsdC5maWx0ZXJMZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gZG9jRGF0YSA/IGRvY0RhdGFbdG90YWxSZWYuZmllbGRdIDogdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IG51bWVyaWNWYWx1ZSA9IHR5cGVvZiBmaWVsZFZhbHVlID09PSAnbnVtYmVyJyA/IGZpZWxkVmFsdWUgOiAwO1xuICAgICAgICAgIHN1bSA9IHJlc3VsdC5maWx0ZXJMZW5ndGggPz8gKChzdW0gKyBudW1lcmljVmFsdWUpIGFzIG51bWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudG90YWxJdGVtcyA9IHN1bTtcbiAgICB9XG5cbiAgICB0aGlzLmhhc05leHRQYWdlID0gcmVzdWx0Lmhhc05leHRQYWdlO1xuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UodGhpcy5pdGVtcyk7XG4gICAgdGhpcy5maWx0ZXJQcmVkaWNhdGUgPSB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLy8gUEFHSU5BVElPTiBNRVRIT0RTXG5cbiAgYXN5bmMgb25QYWdlQ2hhbmdlKGV2ZW50PzogUGFnZUV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uICE9PSB0cnVlIHx8ICFldmVudCkgcmV0dXJuO1xuXG4gICAgdGhpcy5pc0xvYWRpbmckLm5leHQodHJ1ZSk7XG5cbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB7XG4gICAgICBjdXJyZW50UGFnZU51bWJlcjogdGhpcy5jdXJyZW50UGFnZU51bWJlcixcbiAgICAgIGN1cnJlbnRDbGllbnRQYWdlSW5kZXg6IHRoaXMuY3VycmVudENsaWVudFBhZ2VJbmRleCxcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgdG90YWxJdGVtczogdGhpcy50b3RhbEl0ZW1zLFxuICAgICAgaGFzTmV4dFBhZ2U6IHRoaXMuaGFzTmV4dFBhZ2UsXG4gICAgfTtcblxuICAgIGNvbnN0IG5hdmlnYXRpb24gPSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmNhbGN1bGF0ZU5hdmlnYXRpb24oXG4gICAgICBldmVudCxcbiAgICAgIGN1cnJlbnRTdGF0ZSxcbiAgICApO1xuXG4gICAgaWYgKCFuYXZpZ2F0aW9uLnNob3VsZE5hdmlnYXRlKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICB0aGlzLnBhZ2VFdmVudCA9IGV2ZW50O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEF0dWFsaXphciBlc3RhZG8gbG9jYWxcbiAgICB0aGlzLmN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSBuYXZpZ2F0aW9uLm5ld0NsaWVudFBhZ2VJbmRleDtcbiAgICB0aGlzLmN1cnJlbnRQYWdlTnVtYmVyID0gbmF2aWdhdGlvbi5uZXdQYWdlTnVtYmVyO1xuXG4gICAgLy8gQXR1YWxpemFyIHBhZ2VTaXplIHNlIG11ZG91XG4gICAgaWYgKGV2ZW50LnBhZ2VTaXplICE9PSB0aGlzLnBhZ2VTaXplKSB7XG4gICAgICB0aGlzLnBhZ2VTaXplID0gZXZlbnQucGFnZVNpemU7XG4gICAgfVxuXG4gICAgLy8gQWp1c3RhciBwYWdlU2l6ZSB0ZW1wb3JhcmlhbWVudGUgcGFyYSDDumx0aW1hIHDDoWdpbmEgc2UgbmVjZXNzw6FyaW9cbiAgICBjb25zdCBsYXN0UGFnZUluZGV4ID0gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jYWxjdWxhdGVMYXN0UGFnZUluZGV4KFxuICAgICAgdGhpcy50b3RhbEl0ZW1zLFxuICAgICAgZXZlbnQucGFnZVNpemUsXG4gICAgKTtcbiAgICBsZXQgb3JpZ2luYWxQYWdlU2l6ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAoXG4gICAgICBldmVudC5wYWdlSW5kZXggPT09IGxhc3RQYWdlSW5kZXggJiZcbiAgICAgIG5hdmlnYXRpb24uZGlyZWN0aW9uID09PSAnYmFja3dhcmQnICYmXG4gICAgICBuYXZpZ2F0aW9uLnJlc2V0RG9jc1xuICAgICkge1xuICAgICAgY29uc3QgaXRlbXNFeHBlY3RlZEluTGFzdFBhZ2UgPVxuICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmNhbGN1bGF0ZUxhc3RQYWdlSXRlbUNvdW50KFxuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyxcbiAgICAgICAgICBldmVudC5wYWdlU2l6ZSxcbiAgICAgICAgKTtcblxuICAgICAgaWYgKFxuICAgICAgICBpdGVtc0V4cGVjdGVkSW5MYXN0UGFnZSA+IDAgJiZcbiAgICAgICAgaXRlbXNFeHBlY3RlZEluTGFzdFBhZ2UgPCBldmVudC5wYWdlU2l6ZVxuICAgICAgKSB7XG4gICAgICAgIG9yaWdpbmFsUGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gaXRlbXNFeHBlY3RlZEluTGFzdFBhZ2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKG5hdmlnYXRpb24uZGlyZWN0aW9uLCBuYXZpZ2F0aW9uLnJlc2V0RG9jcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm8gYW8gY2FycmVnYXIgaXRlbnMgcGFnaW5hZG9zOicsIGVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKG9yaWdpbmFsUGFnZVNpemUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IG9yaWdpbmFsUGFnZVNpemU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wYWdlRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyBGSUxURVIvU0VBUkNIIE1FVEhPRFNcblxuICBhcHBseUZpbHRlcih2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5kYXRhU291cmNlLmZpbHRlciA9IFN0cmluZyh2YWx1ZSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5maWx0ZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5maWx0ZXJTdWJqZWN0Lm5leHQodGhpcy5maWx0ZXJWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VhcmNoKGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RTb3J0LnZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RTb3J0LnZhbHVlLmFycmFuZ2UgPT09ICdhc2NlbmRpbmcnKSB7XG4gICAgICAgIHRoaXMuc29ydEJ5ID0ge1xuICAgICAgICAgIGZpZWxkOiB0aGlzLnNlbGVjdFNvcnQudmFsdWUucHJvcGVydHksXG4gICAgICAgICAgb3JkZXI6ICdhc2MnLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0U29ydC52YWx1ZS5hcnJhbmdlID09PSAnZGVzY2VuZGluZycpIHtcbiAgICAgICAgdGhpcy5zb3J0QnkgPSB7XG4gICAgICAgICAgZmllbGQ6IHRoaXMuc2VsZWN0U29ydC52YWx1ZS5wcm9wZXJ0eSxcbiAgICAgICAgICBvcmRlcjogJ2Rlc2MnLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYXJyYW5nZSA9IHRoaXMuYnVpbGRBcnJhbmdlRnJvbUZpbHRlcnMoKTtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzVG9EYXRhU291cmNlKCk7XG4gICAgICB0aGlzLmN1cnJlbnRBcnJhbmdlID1cbiAgICAgICAgdGhpcy5maWx0ZXJzRm9ybS5sZW5ndGggPiAwXG4gICAgICAgICAgPyAodGhpcy5maWx0ZXJzRm9ybS5hdCgwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZT8uYXJyYW5nZSA/PyAnJylcbiAgICAgICAgICA6ICcnO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKCdyZWxvYWQnLCB0cnVlKTtcbiAgICAgIHRoaXMuY3VycmVudEFycmFuZ2UgPVxuICAgICAgICB0aGlzLmZpbHRlcnNGb3JtLmxlbmd0aCA+IDBcbiAgICAgICAgICA/ICh0aGlzLmZpbHRlcnNGb3JtLmF0KDApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlPy5hcnJhbmdlID8/ICcnKVxuICAgICAgICAgIDogJyc7XG4gICAgICB0aGlzLnBhZ2luYXRvci5maXJzdFBhZ2UoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlc2V0RmlsdGVyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIgPSAnJztcbiAgICBpZiAodGhpcy5maWx0ZXJQcmVkaWNhdGUpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJQcmVkaWNhdGUgPSB0aGlzLmZpbHRlclByZWRpY2F0ZTtcbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlcnNGb3JtLmNsZWFyKCk7XG4gICAgdGhpcy5hZGRGaWx0ZXIoKTtcbiAgICB0aGlzLnNlbGVjdFNvcnQucGF0Y2hWYWx1ZSgnJyk7XG4gICAgdGhpcy5zb3J0QnkgPSB7XG4gICAgICBvcmRlcjogdGhpcy5kYXRhLnNvcnRCeSA/IHRoaXMuZGF0YS5zb3J0Qnkub3JkZXIgOiAnZGVzYycsXG4gICAgICBmaWVsZDogdGhpcy5kYXRhLnNvcnRCeSA/IHRoaXMuZGF0YS5zb3J0QnkuZmllbGQgOiAnY3JlYXRlZEF0JyxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5hcnJhbmdlID0ge1xuICAgICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgICAgc29ydEJ5OiB0aGlzLnNvcnRCeSxcbiAgICAgIH07XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IFsuLi50aGlzLml0ZW1zXTtcbiAgICAgIHRoaXMudG90YWxJdGVtcyA9IHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgICAgdGhpcy5jdXJyZW50QXJyYW5nZSA9ICcnO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKCdyZWxvYWQnLCB0cnVlKTtcbiAgICAgIHRoaXMuY3VycmVudEFycmFuZ2UgPSAnJztcbiAgICAgIHRoaXMucGFnaW5hdG9yLmZpcnN0UGFnZSgpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gTkFWSUdBVElPTiBNRVRIT0RTXG5cbiAgZ29Ub0RldGFpbHMocm93OiBUKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YS5pc05vdENsaWNrYWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1cmxQYXRoID0gdGhpcy5kYXRhLnVybCB8fCB0aGlzLmRhdGEubmFtZTtcbiAgICBjb25zdCByb3dXaXRoSWQgPSByb3cgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7IGlkOiBzdHJpbmcgfTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLnJvdXRlci5zZXJpYWxpemVVcmwoXG4gICAgICB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFtgLyR7dXJsUGF0aH1gLCByb3dXaXRoSWQuaWRdKSxcbiAgICApO1xuICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xuICB9XG5cbiAgLy8gUkVMQVRJT04gTUVUSE9EU1xuXG4gIGFzeW5jIGdldFJlbGF0aW9uKHBhcmFtczoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY29sbGVjdGlvbjogc3RyaW5nO1xuICAgIG5ld1Byb3BlcnR5OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgc25hcHNob3Q6IGZpcmVzdG9yZS5Eb2N1bWVudFNuYXBzaG90PHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKFxuICAgICAgICBwYXJhbXMuaWQgIT09ICcnICYmXG4gICAgICAgIHBhcmFtcy5pZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHBhcmFtcy5jb2xsZWN0aW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgcGFyYW1zLmNvbGxlY3Rpb24gIT09ICcnXG4gICAgICApIHtcbiAgICAgICAgc25hcHNob3QgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgICB0aGlzLmZpcmVzdG9yZS5jb2xsZWN0aW9uKHBhcmFtcy5jb2xsZWN0aW9uKS5kb2MocGFyYW1zLmlkKS5nZXQoKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChzbmFwc2hvdCAmJiBzbmFwc2hvdC5leGlzdHMpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHNuYXBzaG90LmRhdGEoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhPy5bcGFyYW1zLm5ld1Byb3BlcnR5XTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6ICcnO1xuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkUmVsYXRpb25zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlbGF0aW9uUHJvbWlzZXMgPSB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1uc1xuICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wucmVsYXRpb24pXG4gICAgICAuZmxhdE1hcCgoY29sKSA9PlxuICAgICAgICB0aGlzLml0ZW1zLm1hcChhc3luYyAoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChjb2wucmVsYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1SZWNvcmQgPSBpdGVtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgICAgaXRlbVJlY29yZFtjb2wucHJvcGVydHldID0gYXdhaXQgdGhpcy5nZXRSZWxhdGlvbih7XG4gICAgICAgICAgICAgIGlkOiBTdHJpbmcoaXRlbVJlY29yZFtjb2wucmVsYXRpb24uc291cmNlUHJvcGVydHldID8/ICcnKSxcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sLnJlbGF0aW9uLnRhcmdldGVkQ29sbGVjdGlvbixcbiAgICAgICAgICAgICAgbmV3UHJvcGVydHk6IGNvbC5yZWxhdGlvbi50YXJnZXRlZFByb3BlcnR5IHx8IGNvbC5wcm9wZXJ0eSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocmVsYXRpb25Qcm9taXNlcyk7XG4gIH1cblxuICBhc3luYyBnZXRRdWVyeUxlbmd0aChwYXJhbXM6IHtcbiAgICBpdGVtOiBUO1xuICAgIHJlbGF0aW9uOiB7XG4gICAgICBjb2xsZWN0aW9uOiBzdHJpbmc7XG4gICAgICBwcm9wZXJ0eTogc3RyaW5nO1xuICAgICAgb3BlcmF0b3I6IFdoZXJlRmlsdGVyT3A7XG4gICAgICB2YWx1ZTogc3RyaW5nO1xuICAgIH07XG4gIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGl0ZW1SZWNvcmQgPSBwYXJhbXMuaXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHRoaXMuZmlyZXN0b3JlXG4gICAgICAuY29sbGVjdGlvbihwYXJhbXMucmVsYXRpb24uY29sbGVjdGlvbilcbiAgICAgIC5yZWYud2hlcmUoXG4gICAgICAgIHBhcmFtcy5yZWxhdGlvbi5wcm9wZXJ0eSxcbiAgICAgICAgcGFyYW1zLnJlbGF0aW9uLm9wZXJhdG9yLFxuICAgICAgICBpdGVtUmVjb3JkW3BhcmFtcy5yZWxhdGlvbi52YWx1ZV0sXG4gICAgICApXG4gICAgICAuZ2V0KCk7XG4gICAgcmV0dXJuIHNuYXBzaG90LnNpemU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRRdWVyeUxlbmd0aHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbGVuZ3RoUHJvbWlzZXMgPSB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1uc1xuICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wucXVlcnlMZW5ndGgpXG4gICAgICAuZmxhdE1hcCgoY29sKSA9PlxuICAgICAgICB0aGlzLml0ZW1zLm1hcChhc3luYyAoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChjb2wucXVlcnlMZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1SZWNvcmQgPSBpdGVtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgICAgaXRlbVJlY29yZFtjb2wucHJvcGVydHldID0gYXdhaXQgdGhpcy5nZXRRdWVyeUxlbmd0aCh7XG4gICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgIHJlbGF0aW9uOiBjb2wucXVlcnlMZW5ndGgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChsZW5ndGhQcm9taXNlcyk7XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckl0ZW1zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGEuY29uZGl0aW9ucykge1xuICAgICAgdGhpcy5kYXRhLmNvbmRpdGlvbnMuZm9yRWFjaCgoY29uZCkgPT4ge1xuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCBvcGVyYXRvckZ1bmN0aW9uID1cbiAgICAgICAgICAgIHRoaXMudGFibGVTZXJ2aWNlLm9wZXJhdG9yc1tcbiAgICAgICAgICAgICAgY29uZC5vcGVyYXRvciBhcyBrZXlvZiB0eXBlb2YgdGhpcy50YWJsZVNlcnZpY2Uub3BlcmF0b3JzXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIGlmIChvcGVyYXRvckZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtUmVjb3JkID0gaXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgIHJldHVybiBvcGVyYXRvckZ1bmN0aW9uKFxuICAgICAgICAgICAgICBpdGVtUmVjb3JkW2NvbmQuZmlyZXN0b3JlUHJvcGVydHldLFxuICAgICAgICAgICAgICBjb25kLmRhc2hQcm9wZXJ0eSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBQVUJMSUMgTUVUSE9EU1xuXG4gIGFzeW5jIHJlbG9hZFRhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkSXRlbXNQYWdpbmF0ZWQoJ3JlbG9hZCcsIHRydWUpO1xuICAgICAgdGhpcy5wYWdpbmF0b3IuZmlyc3RQYWdlKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkSXRlbXMoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVEaXNwbGF5ZWRDb2x1bW5zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8VD4oW10pO1xuICAgIH1cblxuICAgIHRoaXMuY29sdW1uUHJvcGVydGllcyA9IHRoaXMuZGF0YS5kaXNwbGF5ZWRDb2x1bW5zLm1hcChcbiAgICAgIChjb2x1bW4pID0+IGNvbHVtbi5wcm9wZXJ0eSxcbiAgICApO1xuXG4gICAgY29uc3QgZmlsdGVyQ29uZmlnID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmluaXRpYWxpemVEcm9wZG93bkl0ZW1zKFxuICAgICAgdGhpcy5kYXRhLmRpc3BsYXllZENvbHVtbnMsXG4gICAgKTtcbiAgICB0aGlzLmRyb3Bkb3duSXRlbXMgPSBmaWx0ZXJDb25maWcuZHJvcGRvd25JdGVtcztcbiAgICB0aGlzLnNvcnRhYmxlRHJvcGRvd25JdGVtcyA9IGZpbHRlckNvbmZpZy5zb3J0YWJsZURyb3Bkb3duSXRlbXM7XG5cbiAgICBpZiAodGhpcy5kYXRhLmZpbHRlcmFibGVPcHRpb25zKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duSXRlbXMgPSB0aGlzLmZpbHRlclNlcnZpY2UuYWRkRmlsdGVyYWJsZU9wdGlvbnMoXG4gICAgICAgIHRoaXMuZHJvcGRvd25JdGVtcyxcbiAgICAgICAgdGhpcy5kYXRhLmZpbHRlcmFibGVPcHRpb25zLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBzaG91bGRTaG93QWN0aW9uQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5kYXRhPy5hY3Rpb25CdXR0b24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGF0YS5hY3Rpb25CdXR0b24uY29uZGl0aW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5hY3Rpb25CdXR0b24uY29uZGl0aW9uKG51bGwpID8/IHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVEb3dubG9hZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZG93bmxvYWRUYWJsZSkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSkge1xuICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZSAmJiB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IFsuLi50aGlzLmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJyYW5nZSA9IHRoaXMuYnVpbGRBcnJhbmdlRnJvbUZpbHRlcnMoKTtcbiAgICAgIHRoaXMuZG93bmxvYWRUYWJsZShhcnJhbmdlLCB0aGlzLmRhdGEuY29uZGl0aW9ucyB8fCBbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmFycmFuZ2UpIHtcbiAgICAgICAgdGhpcy5kb3dubG9hZFRhYmxlKHRoaXMuYXJyYW5nZSwgdGhpcy5kYXRhLmNvbmRpdGlvbnMgfHwgW10pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cImRhdGFcIiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTZcIj5cbiAgICA8IS0tIFVOSUZJRUQgQ09OVFJPTCBQQU5FTDogRklMVEVSUywgU09SVCAmIEFDVElPTlMgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJyb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgYmctd2hpdGUgcC00IHNoYWRvdy1sZ1wiXG4gICAgICAqbmdJZj1cIlxuICAgICAgICBkYXRhLnBhZ2luYXRpb24gPT09IHRydWUgJiZcbiAgICAgICAgKGRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgIHNvcnRhYmxlRHJvcGRvd25JdGVtcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgZGF0YS5hY3Rpb25CdXR0b24pXG4gICAgICBcIlxuICAgID5cbiAgICAgIDwhLS0gUEFORUwgSEVBREVSOiBUaXRsZSBhbmQgQ3VzdG9tIEFjdGlvbiAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJtYi00IGZsZXggZmxleC1jb2wgaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00IGJvcmRlci1iLTIgYm9yZGVyLWdyYXktMjAwIHBiLTQgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtY2VudGVyXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBMZWZ0IFNpZGU6IFRpdGxlICYgTWFpbiBBY3Rpb24gQnV0dG9uIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbHRlciB0ZXh0LXhsIHRleHQtYmx1ZS01MDBcIj48L2k+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwXCJcbiAgICAgICAgICAgICAgPkZpbHRyb3MgZSBBw6fDtWVzPC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJkYXRhLmFjdGlvbkJ1dHRvbiAmJiBkYXRhLmFjdGlvbkJ1dHRvbi5jb25kaXRpb25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0QWN0aW9uQnV0dG9uQ2xhc3MoKVwiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJkYXRhLmFjdGlvbkJ1dHRvbi5yb3V0ZXJMaW5rXCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgZGF0YS5hY3Rpb25CdXR0b24ubWV0aG9kID8gZGF0YS5hY3Rpb25CdXR0b24ubWV0aG9kKCRldmVudCkgOiBudWxsXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5hY3Rpb25CdXR0b24uaWNvblwiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJkYXRhLmFjdGlvbkJ1dHRvbi5pY29uXCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICB7eyBkYXRhLmFjdGlvbkJ1dHRvbi5sYWJlbCB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFNPUlQgRklFTEQgKEludGVncmF0ZWQgd2l0aCBmaWx0ZXJzKSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi00XCIgKm5nSWY9XCJzb3J0YWJsZURyb3Bkb3duSXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0zIHAtMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tdy1bMjAwcHhdIGZsZXgtMVwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zb3J0LWFscGhhLWRvd24gdGV4dC1jeWFuLTYwMFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8c3Bhbj5PcmRlbmFyIHBvcjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IHBsYWNlaG9sZGVyPVwiU2VsZWNpb25lLi4uXCIgW2Zvcm1Db250cm9sXT1cInNlbGVjdFNvcnRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc29ydGFibGVEcm9wZG93bkl0ZW1zXCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zb3J0LWFscGhhLWRvd24gdGV4dC1jeWFuLTYwMFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBGSUxURVJTIENPTlRFTlQgKFdJVEggUkVGSU5FTUVOVFMpIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTQgc3BhY2UteS0zXCIgKm5nSWY9XCJmaWx0ZXJzRm9ybS5jb250cm9scy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbZm9ybUdyb3VwXT1cIiRhbnkoZmlsdGVyR3JvdXApXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsdGVyR3JvdXAgb2YgZmlsdGVyc0Zvcm0uY29udHJvbHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0zIHAtMlwiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIEZJTFRFUiBUWVBFIFNFTEVDVE9SIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tdy1bMjAwcHhdIGZsZXgtMVwiICpuZ0lmPVwiZHJvcGRvd25JdGVtcy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlRpcG8gZGUgZmlsdHJvPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY2lvbmUgbyB0aXBvLi4uXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RGaWx0ZXJcIlxuICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3RGaWx0ZXJDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0QXZhaWxhYmxlRmlsdGVyT3B0aW9ucygpXCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiaXRlbS5pY29uIHx8ICdmYSBmYS1maWx0ZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtc20gdGV4dC1ibHVlLTUwMFwiXG4gICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFRFWFQgRklMVEVSIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cCkuZ2V0KCdzZWxlY3RGaWx0ZXInKT8udmFsdWU/LmFycmFuZ2UgPT09ICdmaWx0ZXInXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoIHRleHQtZ3JheS00MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldChcInNlbGVjdEZpbHRlclwiKT8udmFsdWU/LnRpdGxlIHx8XG4gICAgICAgICAgICAgICAgICAgIFwiRmlsdHJhclwiXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInR5cGVGaWx0ZXJcIlxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEaWdpdGUgcGFyYSBmaWx0cmFyLi4uXCJcbiAgICAgICAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIERST1BET1dOIEZJTFRFUiAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIm1pbi13LVsyMDBweF0gZmxleC0xXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlICYmXG4gICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApXG4gICAgICAgICAgICAgICAgLmdldCgnc2VsZWN0RmlsdGVyJylcbiAgICAgICAgICAgICAgICA/LnZhbHVlLmhhc093blByb3BlcnR5KCdpdGVtcycpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tcbiAgICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoXCJzZWxlY3RGaWx0ZXJcIik/LnZhbHVlPy50aXRsZSB8fFxuICAgICAgICAgICAgICAgICAgXCJTZWxlY2lvbmVcIlxuICAgICAgICAgICAgICB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWNpb25lLi4uXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RJdGVtXCJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgIC5pdGVtc1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBEQVRFIEZJTFRFUiAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIm1pbi13LVszNDBweF0gZmxleC1hdXRvXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlPy5hcnJhbmdlID09PVxuICAgICAgICAgICAgICAnZmlsdGVyQnlEYXRlJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1zdHJldGNoIGdhcC0zIHNtOmZsZXgtcm93IHNtOml0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyIHRleHQtZ3JheS00MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5EYXRhIEluaWNpYWw8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uRGF0ZUlucHV0KCRldmVudCwgJ2luaXRpYWxEYXRlJywgaSlcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaW5pdGlhbERhdGVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJERC9NTS9BQUFBXCJcbiAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjEwXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyIHRleHQtZ3JheS00MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5EYXRhIEZpbmFsPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uRGF0ZUlucHV0KCRldmVudCwgJ2ZpbmFsRGF0ZScsIGkpXCJcbiAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmaW5hbERhdGVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJERC9NTS9BQUFBXCJcbiAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjEwXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFJFTU9WRSBGSUxURVIgQlVUVE9OIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXJzRm9ybS5sZW5ndGggPiAxXCIgY2xhc3M9XCJtbC1hdXRvIGZsZXgtc2hyaW5rLTBcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUZpbHRlcihpKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBoLTEwIHctMTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0zMDAgaG92ZXI6YmctcmVkLTEwMFwiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJSZW1vdmVyIGZpbHRyb1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2ggdGV4dC1yZWQtNTAwIGhvdmVyOnRleHQtcmVkLTYwMFwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFBBTkVMIEZPT1RFUjogQWRkIEZpbHRlciAmIEFjdGlvbiBCdXR0b25zIC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIi1tYi0yIGZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00IGJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBwdC00XCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBBZGQgRmlsdGVyIEJ1dHRvbiAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cImRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJhZGRGaWx0ZXIoKVwiXG4gICAgICAgICAgICBjbGFzcz1cInRyYW5zZm9ybSByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLWJsdWUtMzAwIGJnLWJsdWUtNTAgcHgtNiBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ibHVlLTYwMCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgaG92ZXI6LXRyYW5zbGF0ZS15LTAuNSBob3Zlcjpib3JkZXItYmx1ZS00MDAgaG92ZXI6YmctYmx1ZS0xMDAgaG92ZXI6c2hhZG93LW1kXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBZGljaW9uYXIgbm92byBmaWx0cm9cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1cyBtci0yXCI+PC9pPlxuICAgICAgICAgICAgQWRpY2lvbmFyIEZpbHRyb1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFJpZ2h0IFNpZGU6IFNlYXJjaCwgUmVzZXQsIEV4cG9ydCAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTMgc2VsZi1zdGFydCBzbTpzZWxmLWF1dG9cIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICB0aGlzLmhhc0ZpbHRlcmFibGVDb2x1bW4gPT09IHRydWUgfHwgdGhpcy5oYXNTb3J0YWJsZUNvbHVtbiA9PT0gdHJ1ZVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwic2VhcmNoKClcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgYmctZ3JlZW4tNjAwIHB4LTUgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctZ3JlZW4tNzAwXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBcGxpY2FyIGZpbHRyb3NcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PC9pPlxuICAgICAgICAgICAgUGVzcXVpc2FyXG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwicmVzZXRGaWx0ZXIoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgYmctcmVkLTUwMCBweC01IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLXJlZC02MDBcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkxpbXBhciBmaWx0cm9zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1yZWRvLWFsdFwiPjwvaT5cbiAgICAgICAgICAgIFJlc2V0YXJcbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5kb3dubG9hZCAhPT0gZmFsc2UgJiYgZG93bmxvYWRUYWJsZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgYmctb3JhbmdlLTUwMCBweC01IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLW9yYW5nZS02MDBcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkV4cG9ydGFyIFRhYmVsYVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSAmJiB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhLmxlbmd0aCA8PSAwXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAkYW55KGFycmFuZ2UpICYmIGRvd25sb2FkVGFibGUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gZG93bmxvYWRUYWJsZSgkYW55KGFycmFuZ2UpLCBkYXRhLmNvbmRpdGlvbnMgfHwgW10pXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZG93bmxvYWRcIj48L2k+XG4gICAgICAgICAgICBFeHBvcnRhclxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBVTklGSUVEIENPTlRST0wgUEFORUwgKGZvciBub24tcGFnaW5hdGVkIHRhYmxlcyk6IFNFQVJDSCwgU09SVCAmIEZJTFRFUlMgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJyb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgYmctd2hpdGUgcC00IHNoYWRvdy1sZ1wiXG4gICAgICAqbmdJZj1cIlxuICAgICAgICBkYXRhLnBhZ2luYXRpb24gPT09IGZhbHNlICYmXG4gICAgICAgIChoYXNGaWx0ZXJhYmxlQ29sdW1uID09PSB0cnVlIHx8XG4gICAgICAgICAgZHJvcGRvd25JdGVtcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgZGF0YS5hY3Rpb25CdXR0b24pXG4gICAgICBcIlxuICAgID5cbiAgICAgIDwhLS0gUEFORUwgSEVBREVSOiBUaXRsZSBhbmQgQ3VzdG9tIEFjdGlvbiAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJtYi00IGZsZXggZmxleC1jb2wgaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00IGJvcmRlci1iLTIgYm9yZGVyLWdyYXktMjAwIHBiLTQgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtY2VudGVyXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBMZWZ0IFNpZGU6IFRpdGxlICYgTWFpbiBBY3Rpb24gQnV0dG9uIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbHRlciB0ZXh0LXhsIHRleHQtYmx1ZS01MDBcIj48L2k+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwXCJcbiAgICAgICAgICAgICAgPkZpbHRyb3MgZSBBw6fDtWVzPC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJkYXRhLmFjdGlvbkJ1dHRvbiAmJiBkYXRhLmFjdGlvbkJ1dHRvbi5jb25kaXRpb25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0QWN0aW9uQnV0dG9uQ2xhc3MoKVwiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJkYXRhLmFjdGlvbkJ1dHRvbi5yb3V0ZXJMaW5rXCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgZGF0YS5hY3Rpb25CdXR0b24ubWV0aG9kID8gZGF0YS5hY3Rpb25CdXR0b24ubWV0aG9kKCRldmVudCkgOiBudWxsXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5hY3Rpb25CdXR0b24uaWNvblwiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJkYXRhLmFjdGlvbkJ1dHRvbi5pY29uXCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICB7eyBkYXRhLmFjdGlvbkJ1dHRvbi5sYWJlbCB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFNJTVBMRSBTRUFSQ0ggLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibWItNFwiXG4gICAgICAgICpuZ0lmPVwiaGFzRmlsdGVyYWJsZUNvbHVtbiA9PT0gdHJ1ZSAmJiBkYXRhLnNob3dTaW1wbGVTZWFyY2ggIT09IGZhbHNlXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoIHRleHQtYmx1ZS01MDBcIj48L2k+XG4gICAgICAgICAgICBCdXNjYXJcbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgKGtleXVwKT1cImFwcGx5RmlsdGVyKGZpbHRlcklucHV0LnZhbHVlKVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkRpZ2l0ZSBwYXJhIGZpbHRyYXIuLi5cIlxuICAgICAgICAgICAgI2ZpbHRlcklucHV0XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4IGNsYXNzPVwidGV4dC1ncmF5LTUwMFwiPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBGSUxURVJTIFBBTkVMIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cImRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8IS0tIEZJTFRFUlMgQ09OVEVOVCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTQgc3BhY2UteS0zXCIgKm5nSWY9XCJmaWx0ZXJzRm9ybS5jb250cm9scy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCIkYW55KGZpbHRlckdyb3VwKVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsdGVyR3JvdXAgb2YgZmlsdGVyc0Zvcm0uY29udHJvbHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gRklMVEVSIFRZUEUgU0VMRUNUT1IgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIiAqbmdJZj1cImRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+VGlwbyBkZSBmaWx0cm88L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY2lvbmUgbyB0aXBvLi4uXCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdEZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0RmlsdGVyQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEF2YWlsYWJsZUZpbHRlck9wdGlvbnMoKVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJpdGVtLmljb24gfHwgJ2ZhIGZhLWZpbHRlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtYmx1ZS01MDBcIlxuICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gVEVYVCBGSUxURVIgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlPy5hcnJhbmdlID09PVxuICAgICAgICAgICAgICAgICdmaWx0ZXInXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cCkuZ2V0KFwic2VsZWN0RmlsdGVyXCIpPy52YWx1ZT8udGl0bGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICBcIkZpbHRyYXJcIlxuICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidHlwZUZpbHRlclwiXG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEaWdpdGUgcGFyYSBmaWx0cmFyLi4uXCJcbiAgICAgICAgICAgICAgICAgICNpbnB1dFxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBEUk9QRE9XTiBGSUxURVIgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlICYmXG4gICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cClcbiAgICAgICAgICAgICAgICAgIC5nZXQoJ3NlbGVjdEZpbHRlcicpXG4gICAgICAgICAgICAgICAgICA/LnZhbHVlLmhhc093blByb3BlcnR5KCdpdGVtcycpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e1xuICAgICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cCkuZ2V0KFwic2VsZWN0RmlsdGVyXCIpPy52YWx1ZT8udGl0bGUgfHxcbiAgICAgICAgICAgICAgICAgICAgXCJTZWxlY2lvbmVcIlxuICAgICAgICAgICAgICAgIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWNpb25lLi4uXCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLml0ZW1zXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIERBVEUgRklMVEVSIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cIm1pbi13LVszNDBweF0gZmxleC1hdXRvXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZT8uYXJyYW5nZSA9PT1cbiAgICAgICAgICAgICAgICAnZmlsdGVyQnlEYXRlJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLXN0cmV0Y2ggZ2FwLTMgc206ZmxleC1yb3cgc206aXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhciB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5EYXRhIEluaWNpYWw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uRGF0ZUlucHV0KCRldmVudCwgJ2luaXRpYWxEYXRlJywgaSlcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkRhdGVGaWx0ZXJDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImluaXRpYWxEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJERC9NTS9BQUFBXCJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyIHRleHQtZ3JheS00MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPkRhdGEgRmluYWw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uRGF0ZUlucHV0KCRldmVudCwgJ2ZpbmFsRGF0ZScsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25EYXRlRmlsdGVyQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmaW5hbERhdGVcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkREL01NL0FBQUFcIlxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gUkVNT1ZFIEZJTFRFUiBCVVRUT04gLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyc0Zvcm0ubGVuZ3RoID4gMVwiIGNsYXNzPVwibWwtYXV0byBmbGV4LXNocmluay0wXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlRmlsdGVyKGkpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaC0xMCB3LTEwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMzAwIGhvdmVyOmJnLXJlZC0xMDBcIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJSZW1vdmVyIGZpbHRyb1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIHRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDBcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gUEFORUwgRk9PVEVSOiBBZGQgRmlsdGVyICYgQWN0aW9ucyAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiLW1iLTIgZmxleCBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTQgYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwIHB0LTRcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLSBBZGQgRmlsdGVyIEJ1dHRvbiAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZHJvcGRvd25JdGVtcy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJhZGRGaWx0ZXIoKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidHJhbnNmb3JtIHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItYmx1ZS0zMDAgYmctYmx1ZS01MCBweC02IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWJsdWUtNjAwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBob3ZlcjotdHJhbnNsYXRlLXktMC41IGhvdmVyOmJvcmRlci1ibHVlLTQwMCBob3ZlcjpiZy1ibHVlLTEwMCBob3ZlcjpzaGFkb3ctbWRcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQWRpY2lvbmFyIG5vdm8gZmlsdHJvXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzIG1yLTJcIj48L2k+XG4gICAgICAgICAgICAgIEFkaWNpb25hciBGaWx0cm9cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBBY3Rpb24gQnV0dG9ucyAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC0zIHNlbGYtc3RhcnQgc206c2VsZi1hdXRvXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHRoaXMuaGFzRmlsdGVyYWJsZUNvbHVtbiA9PT0gdHJ1ZSB8fFxuICAgICAgICAgICAgICB0aGlzLmhhc1NvcnRhYmxlQ29sdW1uID09PSB0cnVlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1sZyBiZy1ncmVlbi02MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1ncmVlbi03MDBcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQXBsaWNhciBmaWx0cm9zXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2hcIj48L2k+XG4gICAgICAgICAgICAgIFBlc3F1aXNhclxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0RmlsdGVyKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgYmctcmVkLTUwMCBweC01IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLXJlZC02MDBcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiTGltcGFyIGZpbHRyb3NcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1yZWRvLWFsdFwiPjwvaT5cbiAgICAgICAgICAgICAgUmVzZXRhclxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLmRvd25sb2FkICE9PSBmYWxzZSAmJiBkb3dubG9hZFRhYmxlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLW9yYW5nZS01MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1vcmFuZ2UtNjAwXCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRXhwb3J0YXIgVGFiZWxhXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSAmJiB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhLmxlbmd0aCA8PSAwXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVEb3dubG9hZCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1kb3dubG9hZFwiPjwvaT5cbiAgICAgICAgICAgICAgRXhwb3J0YXJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgIDwhLS0gVEFCUyBDT01QT05FTlQgLS0+XG4gICAgICA8bGliLXRhYmxlLXRhYnNcbiAgICAgICAgKm5nSWY9XCJkYXRhLnRhYnMgJiYgZGF0YS50YWJzLnRhYnNEYXRhICYmIGRhdGEudGFicy50YWJzRGF0YS5sZW5ndGggPiAwXCJcbiAgICAgICAgW3RhYnNEYXRhXT1cImRhdGEudGFicy50YWJzRGF0YVwiXG4gICAgICAgIFtzZWxlY3RlZFRhYl09XCJzZWxlY3RlZFRhYlwiXG4gICAgICAgICh0YWJTZWxlY3RlZCk9XCJvblRhYlNlbGVjdGVkKCRldmVudClcIlxuICAgICAgPjwvbGliLXRhYmxlLXRhYnM+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16OCB3LWZ1bGwgb3ZlcmZsb3cteC1hdXRvIHJvdW5kZWQteGwgdGFibGUtY29udGFpbmVyXCJcbiAgICAgID5cbiAgICAgICAgPHRhYmxlXG4gICAgICAgICAgbWF0LXRhYmxlXG4gICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgICAgICAgbWF0U29ydFxuICAgICAgICAgICNzb3J0PVwibWF0U29ydFwiXG4gICAgICAgICAgbWF0U29ydEFjdGl2ZT1cImNyZWF0ZWRBdFwiXG4gICAgICAgICAgbWF0U29ydERpcmVjdGlvbj1cImRlc2NcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBkYXRhLmRpc3BsYXllZENvbHVtbnM7IHRyYWNrQnk6IHRyYWNrQnlQcm9wZXJ0eVwiXG4gICAgICAgICAgICBtYXRDb2x1bW5EZWY9XCJ7eyBjb2wucHJvcGVydHkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgICAgIDwhLS0gSUYgVEhFIENPTFVNTiBJUyBOT1QgU09SVEFCTEUsIFRIRU4gRE9OJ1QgU0hPVyBUSEUgU09SVCBCVVRUT05TIC0tPlxuICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2wuaXNTb3J0YWJsZSB8fCBkYXRhLnBhZ2luYXRpb24gPT09IHRydWVcIlxuICAgICAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgY29sLnRpdGxlIH19XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDwhLS0gSUYgVEhFIENPTFVNTiBJUyBTT1JUQUJMRSwgVEhFTiBTSE9XIFRIRSBTT1JUIEJVVFRPTlMgLS0+XG4gICAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmlzU29ydGFibGUgJiYgZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICAgICAgICAgbWF0LXNvcnQtaGVhZGVyXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBjb2wudGl0bGUgfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgbWF0LWNlbGxcbiAgICAgICAgICAgICAgICAqbWF0Q2VsbERlZj1cImxldCByb3dcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2wubWV0aG9kID8gY29sLm1ldGhvZChyb3cpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25DZWxsTW91c2VFbnRlcigkZXZlbnQsIHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25DZWxsTW91c2VMZWF2ZSgpXCJcbiAgICAgICAgICAgICAgICAobW91c2Vtb3ZlKT1cIm9uQ2VsbE1vdXNlTW92ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwhLS0gQ0hFQ0sgSUYgVEhFIENPTFVNTiBNVVNUIEJFIERJU1BMQVlFRCAtLT5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjb2wuaW1hZ2UgJiYgIWNvbC5pY29uQ2xhc3MgJiYgIWNvbC5tZXRob2RcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbC5jaGFyTGltaXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbC5wcm9wZXJ0eV0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbC5wcm9wZXJ0eV0ubGVuZ3RoID4gY29sLmNoYXJMaW1pdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugd2l0aGluTGltaXRcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwicm93W2NvbC5wcm9wZXJ0eV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXREaXNwbGF5VmFsdWUoY29sLCByb3cpIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5oYXNMaW5rICYmIGlzU3RyaW5nKGNvbC5oYXNMaW5rKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJjb2wuaGFzTGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdykgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgIT09IHRydWUgJiYgIWlzU3RyaW5nKGNvbC5oYXNMaW5rKVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93KSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3dpdGhpbkxpbWl0PlxuICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cInJvd1tjb2wucHJvcGVydHldXCJcbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93LCB0cnVlKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaGFzTGluayAmJiBpc1N0cmluZyhjb2wuaGFzTGluaylcIlxuICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImNvbC5oYXNMaW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93LCB0cnVlKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaGFzTGluayAhPT0gdHJ1ZSAmJiAhaXNTdHJpbmcoY29sLmhhc0xpbmspXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdywgdHJ1ZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tIElNQUdFIC0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgICAgICAgICA8IS0tIEltYWdlbSBjb20gbG9hZGluZyAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICBjb2wuaW1hZ2UgJiYgY29sLmltYWdlLnBhdGggJiYgIWNvbC5pY29uQ2xhc3MgJiYgIWNvbC5tZXRob2RcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNJbWFnZUxvYWRpbmcocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjMyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIG0tYXV0b1wiXG4gICAgICAgICAgICAgICAgICA+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJjb2wuaW1hZ2UucGF0aCArICcvJyArIHJvd1tjb2wucHJvcGVydHldXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sLmltYWdlLmNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm9wYWNpdHktMF09XCJpc0ltYWdlTG9hZGluZyhyb3csIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAgICAgICAgICAgICAobG9hZCk9XCJvbkltYWdlTG9hZChyb3csIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwib25JbWFnZUVycm9yKCRldmVudCwgcm93LCBjb2wsIGNvbC5pbWFnZS5kZWZhdWx0KVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBJbWFnZW0gY29tIFVSTCBjb21wbGV0YSBlIGxvYWRpbmcgLS0+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgY29sLmltYWdlICYmIGNvbC5pbWFnZS51cmwgJiYgIWNvbC5pY29uQ2xhc3MgJiYgIWNvbC5tZXRob2RcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNJbWFnZUxvYWRpbmcocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjMyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIG0tYXV0b1wiXG4gICAgICAgICAgICAgICAgICA+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJyb3dbY29sLnByb3BlcnR5XVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbC5pbWFnZS5jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5vcGFjaXR5LTBdPVwiaXNJbWFnZUxvYWRpbmcocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICAgICAgKGxvYWQpPVwib25JbWFnZUxvYWQocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cIm9uSW1hZ2VFcnJvcigkZXZlbnQsIHJvdywgY29sLCBjb2wuaW1hZ2UuZGVmYXVsdClcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmljb25DbGFzc1wiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaWNvbkNsYXNzIG9mIGNvbC5pY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbkNsYXNzLmJ1dHRvbk1ldGhvZFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpY29uQ2xhc3MuYnV0dG9uTWV0aG9kKHJvdywgJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpY29uQ2xhc3MuY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uQ2xhc3MuY29uZGl0aW9uID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpY29uQ2xhc3MuY29uZGl0aW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJGFueShpY29uQ2xhc3MuY29uZGl0aW9uKShyb3cpKVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPnt7IGljb25DbGFzcy50ZXh0IH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImNvbHVtblByb3BlcnRpZXNcIj48L3RyPlxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0VGFibGVSb3dOZ0NsYXNzKClcIlxuICAgICAgICAgICAgbWF0LXJvd1xuICAgICAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGNvbHVtblByb3BlcnRpZXNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9EZXRhaWxzKHJvdylcIlxuICAgICAgICAgID48L3RyPlxuXG4gICAgICAgICAgPCEtLSBST1cgU0hPV04gV0hFTiBUSEVSRSBJUyBOTyBNQVRDSElORyBEQVRBLiAtLT5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJtYXQtcm93XCIgKm1hdE5vRGF0YVJvdz5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cIiEoaXNMb2FkaW5nJCB8IGFzeW5jKVwiIGNsYXNzPVwibWF0LWNlbGwgcC00XCIgY29sc3Bhbj1cIjRcIj5cbiAgICAgICAgICAgICAgTmVuaHVtIHJlc3VsdGFkbyBlbmNvbnRyYWRvIHBhcmEgYSBidXNjYVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RhYmxlPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyXCIgKm5nSWY9XCJpc0xvYWRpbmckIHwgYXN5bmNcIj5cbiAgICAgICAgICA8bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2luYXRvci1jb250YWluZXJcIj5cbiAgICAgICAgICA8bWF0LXBhZ2luYXRvclxuICAgICAgICAgICAgI3BhZ2luYXRvclxuICAgICAgICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJbMjUsIDUwLCAxMDBdXCJcbiAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgICAgICAgICBbbGVuZ3RoXT1cInRvdGFsSXRlbXNcIlxuICAgICAgICAgICAgc2hvd0ZpcnN0TGFzdEJ1dHRvbnNcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWxlY3QgcGFnZSBvZiBwZXJpb2RpYyBlbGVtZW50c1wiXG4gICAgICAgICAgICAocGFnZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJnZXRQYWdpbmF0b3JOZ0NsYXNzKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L21hdC1wYWdpbmF0b3I+XG4gICAgICAgICAgPCEtLSA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAhKGlzTG9hZGluZyQgfCBhc3luYykgJiZcbiAgICAgICAgICAgICAgZGF0YVNvdXJjZT8uZGF0YSAmJlxuICAgICAgICAgICAgICBkYXRhU291cmNlLmRhdGEubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICBkYXRhPy5maWx0ZXJGblxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwicGFnZS1udW1iZXItZGlzcGxheVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgY3VycmVudFBhZ2VOdW1iZXIgfX1cbiAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gVE9PTFRJUCBQRVJTT05BTElaQURPIC0tPlxuICA8bGliLXRhYmxlLXRvb2x0aXBcbiAgICBbc3RhdGVdPVwidG9vbHRpcFN0YXRlXCJcbiAgICBbc3R5bGVzXT1cImdldFRvb2x0aXBTdHlsZXMoKVwiXG4gID48L2xpYi10YWJsZS10b29sdGlwPlxuPC9kaXY+XG4iXX0=
1564
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZmlyZWJhc2UtdGFibGUta3hwL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1maXJlYmFzZS10YWJsZS1reHAvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFNTCxjQUFjLEdBSWYsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEVBS1QsdUJBQXVCLEdBR3hCLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFNN0QsT0FBTyxFQUNMLGVBQWUsRUFDZixjQUFjLEVBQ2QsUUFBUSxFQUNSLGVBQWUsRUFDZixXQUFXLEdBQ1osTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsWUFBWSxFQUNaLGNBQWMsRUFDZCxPQUFPLEVBQ1AsU0FBUyxFQUNULGVBQWUsR0FDaEIsTUFBTSxNQUFNLENBQUM7QUFLZCxPQUFPLEVBRUwsV0FBVyxFQUNYLFNBQVMsR0FFVixNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQzNCWixvQkFHSzs7O0lBREgsNkNBQWdDOzs7O0lBVnBDLGtDQU9DO0lBSEMsbUxBQ2lCLGtEQUEyQix3Q0FDakQsR0FBRyxJQUNWLENBQUEsSUFEYTtJQUVELGlGQUdLO0lBQ0wsWUFDRjtJQUFBLGlCQUFTOzs7SUFYUCx3REFB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QUNuRCxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ3hEO1lBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUM7U0FDekQ7YUFBTTtZQUNMLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQzlEO1NBQ0Y7SUFDSCxDQUFDOzs0RUFoN0JVLGNBQWM7aUVBQWQsY0FBYzt1QkE2Q2QsWUFBWTt1QkFDWixPQUFPOzs7Ozs7UUNsSHBCLGlFQXF3Qk07O1FBcndCQSwrQkFBVTs7dUZEb0VILGNBQWM7Y0FQMUIsU0FBUzsyQkFDRSxXQUFXLGNBQ1QsS0FBSyxtQkFHQSx1QkFBdUIsQ0FBQyxNQUFNO3FRQU10QyxJQUFJO2tCQUFaLEtBQUs7WUFDRyxhQUFhO2tCQUFyQixLQUFLO1lBd0NtQixTQUFTO2tCQUFqQyxTQUFTO21CQUFDLFlBQVk7WUFDSCxJQUFJO2tCQUF2QixTQUFTO21CQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBcnJhbmdlLFxuICBDb25kaXRpb24sXG4gIFRhYkRhdGEsXG4gIFRhYmxlRGF0YSxcbiAgQ29sdW1uLFxuICBUQUJMRV9ERUZBVUxUUyxcbiAgRHJvcGRvd25JdGVtLFxuICBGaWx0ZXJTZWxlY3RJdGVtLFxuICBQYWdpbmF0aW9uLFxufSBmcm9tICcuLi8uLi90eXBlcy9UYWJsZSc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBFbGVtZW50UmVmLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIE9uRGVzdHJveSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBbmd1bGFyRmlyZXN0b3JlLFxuICBRdWVyeURvY3VtZW50U25hcHNob3QsXG59IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvY29tcGF0L2ZpcmVzdG9yZSc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IsIFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBNYXRTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFibGUuc2VydmljZSc7XG5pbXBvcnQgeyBGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmlsdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG9vbHRpcFNlcnZpY2UsIFRvb2x0aXBTdGF0ZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Rvb2x0aXAuc2VydmljZSc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BhZ2luYXRpb24uc2VydmljZSc7XG5pbXBvcnQge1xuICBnZXREaXNwbGF5VmFsdWUsXG4gIGdldE5lc3RlZFZhbHVlLFxuICBpc1N0cmluZyxcbiAgdHJhY2tCeVByb3BlcnR5LFxuICBnZXRJbWFnZUtleSxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvdGFibGUudXRpbHMnO1xuaW1wb3J0IHtcbiAgZGVib3VuY2VUaW1lLFxuICBmaXJzdFZhbHVlRnJvbSxcbiAgU3ViamVjdCxcbiAgdGFrZVVudGlsLFxuICBCZWhhdmlvclN1YmplY3QsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT3JkZXJCeURpcmVjdGlvbiB9IGZyb20gJ2ZpcmViYXNlL2ZpcmVzdG9yZSc7XG5pbXBvcnQgZmlyZWJhc2UgZnJvbSAnZmlyZWJhc2UvY29tcGF0JztcbmltcG9ydCBXaGVyZUZpbHRlck9wID0gZmlyZWJhc2UuZmlyZXN0b3JlLldoZXJlRmlsdGVyT3A7XG5pbXBvcnQgZmlyZXN0b3JlID0gZmlyZWJhc2UuZmlyZXN0b3JlO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUFycmF5LFxuICBGb3JtR3JvdXAsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudDxUID0gYW55PlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3lcbntcbiAgLy8gSU5QVVRTXG4gIEBJbnB1dCgpIGRhdGEhOiBUYWJsZURhdGE7XG4gIEBJbnB1dCgpIGRvd25sb2FkVGFibGU/OiAoYXJyYW5nZTogQXJyYW5nZSwgY29uZGl0aW9uczogQ29uZGl0aW9uW10pID0+IHZvaWQ7XG4gIGFycmFuZ2U6IEFycmFuZ2UgfCBudWxsID0gbnVsbDtcblxuICAvLyBWQVJJQUJMRVNcbiAgZGF0YVNvdXJjZSE6IE1hdFRhYmxlRGF0YVNvdXJjZTxUPjtcbiAgY3VycmVudFBhZ2VOdW1iZXIgPSAxO1xuICBjdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gMDtcblxuICBwdWJsaWMgaXNMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyBpdGVtczogVFtdID0gW107XG4gIHB1YmxpYyBmaWx0ZXJlZEl0ZW1zOiBUW10gPSBbXTtcbiAgcHJpdmF0ZSBsYXN0RG9jOiBRdWVyeURvY3VtZW50U25hcHNob3Q8VD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBmaXJzdERvYzogUXVlcnlEb2N1bWVudFNuYXBzaG90PFQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc29ydEJ5OiB7IGZpZWxkOiBzdHJpbmc7IG9yZGVyOiBPcmRlckJ5RGlyZWN0aW9uIH0gPSB7XG4gICAgZmllbGQ6IFRBQkxFX0RFRkFVTFRTLlNPUlRfRklFTEQsXG4gICAgb3JkZXI6IFRBQkxFX0RFRkFVTFRTLlNPUlRfT1JERVIsXG4gIH07XG4gIHB1YmxpYyBjb2x1bW5Qcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZpbHRlcnNGb3JtOiBGb3JtQXJyYXk7XG4gIHNlbGVjdFNvcnQ6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcbiAgY3VycmVudEFycmFuZ2UgPSAnJztcblxuICBoYXNOZXh0UGFnZTogYm9vbGVhbiA9IGZhbHNlO1xuICBkcm9wZG93bkl0ZW1zOiBEcm9wZG93bkl0ZW1bXSA9IFtdO1xuICBzb3J0YWJsZURyb3Bkb3duSXRlbXM6IERyb3Bkb3duSXRlbVtdID0gW107XG4gIHBhZ2VTaXplID0gVEFCTEVfREVGQVVMVFMuUEFHRV9TSVpFO1xuICB0b3RhbEl0ZW1zID0gMDtcbiAgcGFnZUV2ZW50PzogUGFnZUV2ZW50O1xuICBmaWx0ZXJWYWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgaGFzRmlsdGVyYWJsZUNvbHVtbjogYm9vbGVhbiA9IGZhbHNlO1xuICBoYXNTb3J0YWJsZUNvbHVtbjogYm9vbGVhbiA9IGZhbHNlO1xuICBmaWx0ZXJQcmVkaWNhdGU6ICgoZGF0YTogVCwgZmlsdGVyOiBzdHJpbmcpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGZpbHRlclN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVib3VuY2VUaW1lTXMgPSBUQUJMRV9ERUZBVUxUUy5ERUJPVU5DRV9USU1FX01TO1xuXG4gIHNlbGVjdGVkVGFiOiBudW1iZXIgPSAwO1xuXG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKSBwYWdpbmF0b3IhOiBNYXRQYWdpbmF0b3I7XG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydCE6IE1hdFNvcnQ7XG5cbiAgLy8gUHJvcHJpZWRhZGVzIHBhcmEgY29udHJvbGUgZG8gdG9vbHRpcFxuICB0b29sdGlwU3RhdGU6IFRvb2x0aXBTdGF0ZTtcblxuICAvLyBDb250cm9sZSBkZSBsb2FkaW5nIGRlIGltYWdlbnNcbiAgaW1hZ2VMb2FkaW5nU3RhdGUgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcblxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvLyBDT05TVFJVQ1RPUlxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgdGFibGVTZXJ2aWNlOiBUYWJsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaWx0ZXJTZXJ2aWNlOiBGaWx0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9vbHRpcFNlcnZpY2U6IFRvb2x0aXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGFnaW5hdGlvblNlcnZpY2U6IFBhZ2luYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZmlyZXN0b3JlOiBBbmd1bGFyRmlyZXN0b3JlLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHtcbiAgICB0aGlzLmZpbHRlcnNGb3JtID0gbmV3IEZvcm1BcnJheShbdGhpcy5maWx0ZXJTZXJ2aWNlLmNyZWF0ZUZpbHRlckdyb3VwKCldKTtcbiAgICB0aGlzLnRvb2x0aXBTdGF0ZSA9IHRoaXMudG9vbHRpcFNlcnZpY2UuY3JlYXRlSW5pdGlhbFN0YXRlKCk7XG4gIH1cblxuICBnZXRBY3Rpb25CdXR0b25DbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy5kYXRhPy5hY3Rpb25CdXR0b24/LmNvbG9yQ2xhc3MgfHwgJ2JnLWJsdWUtNTAwJykgK1xuICAgICAgJyBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUgaG92ZXI6b3BhY2l0eS03MCdcbiAgICApO1xuICB9XG5cbiAgZ2V0VGFibGVSb3dOZ0NsYXNzKCk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2V4YW1wbGUtZWxlbWVudC1yb3cnOiB0aGlzLmRhdGE/LmlzTm90Q2xpY2thYmxlID09PSB0cnVlLFxuICAgICAgJ2V4YW1wbGUtZWxlbWVudC1yb3cgY3Vyc29yLXBvaW50ZXInOiAhdGhpcy5kYXRhPy5pc05vdENsaWNrYWJsZSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0UGFnaW5hdG9yTmdDbGFzcygpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdoaWRlLWxlbmd0aCc6XG4gICAgICAgIFsnZmlsdGVyJywgJ2ZpbHRlckJ5RGF0ZScsICdlcXVhbHMnXS5pbmNsdWRlcyh0aGlzLmN1cnJlbnRBcnJhbmdlKSB8fFxuICAgICAgICAhIXRoaXMuZGF0YT8uZmlsdGVyRm4sXG4gICAgICAnaGlkZS1uZXh0LWJ1dHRvbic6XG4gICAgICAgICF0aGlzLmhhc05leHRQYWdlICYmIHRoaXMuZGF0YT8ucGFnaW5hdGlvbiA9PT0gdHJ1ZSxcbiAgICAgICdoaWRlLWxhc3QtYnV0dG9uJzpcbiAgICAgICAgKCF0aGlzLmhhc05leHRQYWdlICYmIHRoaXMuZGF0YT8ucGFnaW5hdGlvbiA9PT0gdHJ1ZSkgfHxcbiAgICAgICAgISF0aGlzLmRhdGE/LmZpbHRlckZuLFxuICAgIH07XG4gIH1cblxuICAvLyBGSUxURVIgTUVUSE9EUyAoZGVsZWdhZG9zIGFvIEZpbHRlclNlcnZpY2UpXG5cbiAgY3JlYXRlRmlsdGVyR3JvdXAoKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJTZXJ2aWNlLmNyZWF0ZUZpbHRlckdyb3VwKCk7XG4gIH1cblxuICBhZGRGaWx0ZXIoZmlsdGVyRGF0YT86IHtcbiAgICBzZWxlY3RGaWx0ZXI6IERyb3Bkb3duSXRlbSB8IG51bGw7XG4gICAgdHlwZUZpbHRlcj86IHN0cmluZztcbiAgICBzZWxlY3RJdGVtPzogRmlsdGVyU2VsZWN0SXRlbVtdO1xuICAgIGluaXRpYWxEYXRlPzogc3RyaW5nO1xuICAgIGZpbmFsRGF0ZT86IHN0cmluZztcbiAgfSk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyU2VydmljZS5hZGRGaWx0ZXIoXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLFxuICAgICAgdGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IHRydWUsXG4gICAgICBmaWx0ZXJEYXRhLFxuICAgICk7XG4gIH1cblxuICBoYXNBY3RpdmVEYXRlRmlsdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlclNlcnZpY2UuaGFzQWN0aXZlRGF0ZUZpbHRlcih0aGlzLmZpbHRlcnNGb3JtKTtcbiAgfVxuXG4gIGdldEF2YWlsYWJsZUZpbHRlck9wdGlvbnMoY3VycmVudEdyb3VwPzogQWJzdHJhY3RDb250cm9sKTogRHJvcGRvd25JdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlclNlcnZpY2UuZ2V0QXZhaWxhYmxlRmlsdGVyT3B0aW9ucyhcbiAgICAgIHRoaXMuZHJvcGRvd25JdGVtcyxcbiAgICAgIHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSB0cnVlLFxuICAgICAgdGhpcy5maWx0ZXJzRm9ybSxcbiAgICAgIGN1cnJlbnRHcm91cCxcbiAgICApO1xuICB9XG5cbiAgb25TZWxlY3RGaWx0ZXJDaGFuZ2UoKTogdm9pZCB7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gdGhpcy5maWx0ZXJzRm9ybS5sZW5ndGggLSAxO1xuICAgIGNvbnN0IGxhc3RGaWx0ZXIgPSB0aGlzLmZpbHRlcnNGb3JtLmF0KGxhc3RJbmRleCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRGaWx0ZXIgPSBsYXN0RmlsdGVyLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlO1xuXG4gICAgaWYgKHNlbGVjdGVkRmlsdGVyKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHNlbGVjdGVkRmlsdGVyLmFycmFuZ2UgPT09ICdmaWx0ZXJCeURhdGUnICYmXG4gICAgICAgIHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRGaWx0ZXIoKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVGaWx0ZXIoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyU2VydmljZS5yZW1vdmVGaWx0ZXIodGhpcy5maWx0ZXJzRm9ybSwgaW5kZXgpO1xuICB9XG5cbiAgcmVtb3ZlQWxsRmlsdGVycygpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlclNlcnZpY2UucmVtb3ZlQWxsRmlsdGVycyh0aGlzLmZpbHRlcnNGb3JtKTtcbiAgICB0aGlzLnJlc2V0RmlsdGVyKCk7XG4gIH1cblxuICBvbkRhdGVJbnB1dChcbiAgICBldmVudDogRXZlbnQsXG4gICAgY29udHJvbE5hbWU6ICdpbml0aWFsRGF0ZScgfCAnZmluYWxEYXRlJyxcbiAgICBmaWx0ZXJJbmRleDogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJHcm91cCA9IHRoaXMuZmlsdGVyc0Zvcm0uYXQoZmlsdGVySW5kZXgpIGFzIEZvcm1Hcm91cDtcbiAgICB0aGlzLmZpbHRlclNlcnZpY2UuYXBwbHlEYXRlTWFzayhldmVudCwgY29udHJvbE5hbWUsIGZpbHRlckdyb3VwKTtcbiAgfVxuXG4gIG9uRGF0ZUZpbHRlckNoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmFycmFuZ2UgPSB0aGlzLmZpbHRlclNlcnZpY2UuYnVpbGRBcnJhbmdlRnJvbUZpbHRlcnMoXG4gICAgICAgIHRoaXMuZmlsdGVyc0Zvcm0sXG4gICAgICAgIHRoaXMuc29ydEJ5LFxuICAgICAgKTtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzVG9EYXRhU291cmNlKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RmlsdGVyc1RvRGF0YVNvdXJjZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZSkgcmV0dXJuO1xuXG4gICAgbGV0IGZpbHRlcmVkSXRlbXMgPSB0aGlzLmZpbHRlclNlcnZpY2UuYXBwbHlDbGllbnRTaWRlRmlsdGVyczxUPihcbiAgICAgIFsuLi50aGlzLml0ZW1zXSxcbiAgICAgIHRoaXMuZmlsdGVyc0Zvcm0sXG4gICAgICB0aGlzLnNvcnRCeSxcbiAgICApO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZmlsdGVyZWRJdGVtcztcbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBmaWx0ZXJlZEl0ZW1zO1xuICAgIHRoaXMudG90YWxJdGVtcyA9IGZpbHRlcmVkSXRlbXMubGVuZ3RoO1xuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q2xpZW50U2lkZUZpbHRlcnMoaXRlbXM6IFRbXSk6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyU2VydmljZS5hcHBseUNsaWVudFNpZGVGaWx0ZXJzPFQ+KFxuICAgICAgaXRlbXMsXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLFxuICAgICAgdGhpcy5zb3J0QnksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRBcnJhbmdlRnJvbUZpbHRlcnMoKTogQXJyYW5nZSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyU2VydmljZS5idWlsZEFycmFuZ2VGcm9tRmlsdGVycyhcbiAgICAgIHRoaXMuZmlsdGVyc0Zvcm0sXG4gICAgICB0aGlzLnNvcnRCeSxcbiAgICApO1xuICB9XG5cbiAgLy8gVE9PTFRJUCBNRVRIT0RTIChkZWxlZ2Fkb3MgYW8gVG9vbHRpcFNlcnZpY2UpXG5cbiAgZ2V0VG9vbHRpcFN0eWxlcygpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICByZXR1cm4gdGhpcy50b29sdGlwU2VydmljZS5nZXRUb29sdGlwU3R5bGVzKHRoaXMudG9vbHRpcFN0YXRlKTtcbiAgfVxuXG4gIG9uQ2VsbE1vdXNlRW50ZXIoZXZlbnQ6IE1vdXNlRXZlbnQsIHJvdzogVCwgY29sOiBDb2x1bW4pOiB2b2lkIHtcbiAgICB0aGlzLnRvb2x0aXBTZXJ2aWNlLmhhbmRsZU1vdXNlRW50ZXIoXG4gICAgICBldmVudCxcbiAgICAgIHJvdyxcbiAgICAgIGNvbCxcbiAgICAgIChjLCByLCB3KSA9PiB0aGlzLmdldERpc3BsYXlWYWx1ZShjLCByLCB3KSxcbiAgICAgIChzdGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLnRvb2x0aXBTdGF0ZSA9IHsgLi4udGhpcy50b29sdGlwU3RhdGUsIC4uLnN0YXRlIH07XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgb25DZWxsTW91c2VMZWF2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvb2x0aXBTZXJ2aWNlLmhhbmRsZU1vdXNlTGVhdmUoKHN0YXRlKSA9PiB7XG4gICAgICB0aGlzLnRvb2x0aXBTdGF0ZSA9IHN0YXRlO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBvbkNlbGxNb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnRvb2x0aXBTZXJ2aWNlLmhhbmRsZU1vdXNlTW92ZShcbiAgICAgIGV2ZW50LFxuICAgICAgdGhpcy50b29sdGlwU3RhdGUuc2hvd1Rvb2x0aXAsXG4gICAgICAocG9zaXRpb24pID0+IHtcbiAgICAgICAgdGhpcy50b29sdGlwU3RhdGUgPSB7IC4uLnRoaXMudG9vbHRpcFN0YXRlLCB0b29sdGlwUG9zaXRpb246IHBvc2l0aW9uIH07XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gVEFCIE1FVEhPRFNcblxuICBvblRhYlNlbGVjdGVkKGV2ZW50OiB7IHRhYjogVGFiRGF0YTsgaW5kZXg6IG51bWJlciB9KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRhdGEudGFicz8ubWV0aG9kKSByZXR1cm47XG4gICAgdGhpcy5zZWxlY3RlZFRhYiA9IGV2ZW50LmluZGV4O1xuICAgIHRoaXMuZGF0YS50YWJzLm1ldGhvZChldmVudC50YWIsIGV2ZW50LmluZGV4KTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8vIFVUSUxJVFkgTUVUSE9EUyAoZGVsZWdhZG9zIGFvcyB1dGlscylcblxuICBnZXREaXNwbGF5VmFsdWUoY29sOiBDb2x1bW4sIHJvdzogVCwgd2l0aGluTGltaXQ6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdywgd2l0aGluTGltaXQpO1xuICB9XG5cbiAgZ2V0TmVzdGVkVmFsdWUob2JqOiB1bmtub3duLCBwYXRoOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICByZXR1cm4gZ2V0TmVzdGVkVmFsdWUob2JqLCBwYXRoKTtcbiAgfVxuXG4gIGlzU3RyaW5nKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIHRyYWNrQnlQcm9wZXJ0eShfaW5kZXg6IG51bWJlciwgY29sOiBDb2x1bW4pOiBzdHJpbmcge1xuICAgIHJldHVybiB0cmFja0J5UHJvcGVydHkoX2luZGV4LCBjb2wpO1xuICB9XG5cbiAgLy8gSU1BR0UgTE9BRElORyBNRVRIT0RTXG5cbiAgcHJpdmF0ZSBnZXRJbWFnZUtleShyb3c6IFQsIGNvbDogQ29sdW1uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0SW1hZ2VLZXkocm93LCBjb2wpO1xuICB9XG5cbiAgaXNJbWFnZUxvYWRpbmcocm93OiBULCBjb2w6IENvbHVtbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0SW1hZ2VLZXkocm93LCBjb2wpO1xuICAgIHJldHVybiAhdGhpcy5pbWFnZUxvYWRpbmdTdGF0ZS5oYXMoa2V5KTtcbiAgfVxuXG4gIG9uSW1hZ2VMb2FkKHJvdzogVCwgY29sOiBDb2x1bW4pOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEltYWdlS2V5KHJvdywgY29sKTtcbiAgICB0aGlzLmltYWdlTG9hZGluZ1N0YXRlLnNldChrZXksIHRydWUpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25JbWFnZUVycm9yKGV2ZW50OiBFdmVudCwgcm93OiBULCBjb2w6IENvbHVtbiwgZGVmYXVsdEltYWdlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRJbWFnZUtleShyb3csIGNvbCk7XG4gICAgdGhpcy5pbWFnZUxvYWRpbmdTdGF0ZS5zZXQoa2V5LCB0cnVlKTtcblxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW1hZ2VFbGVtZW50O1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIGlmIChkZWZhdWx0SW1hZ2UpIHtcbiAgICAgICAgdGFyZ2V0LnNyYyA9IGRlZmF1bHRJbWFnZTtcbiAgICAgICAgdGFyZ2V0Lm9uZXJyb3IgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyBMSUZFQ1lDTEUgTUVUSE9EU1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXBwbHlDdXN0b21Db2xvcnMoKSwgMCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYXBwbHlDdXN0b21Db2xvcnMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudG9vbHRpcFNlcnZpY2UuZGVzdHJveSgpO1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDdXN0b21Db2xvcnMoKTogdm9pZCB7XG4gICAgY29uc3QgaG9zdEVsZW1lbnQgPSB0aGlzLmVsPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghaG9zdEVsZW1lbnQgfHwgIXRoaXMuZGF0YSkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5jb2xvcj8uYmcpIHtcbiAgICAgIGhvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRhYmxlLWNvbG9yJywgdGhpcy5kYXRhLmNvbG9yLmJnKTtcbiAgICAgIGhvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRhYmxlLWhlYWRlci1iZycsIHRoaXMuZGF0YS5jb2xvci5iZyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGEuY29sb3I/LnRleHQpIHtcbiAgICAgIGhvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRhYmxlLXRleHQtY29sb3InLCB0aGlzLmRhdGEuY29sb3IudGV4dCk7XG4gICAgICBob3N0RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgJy0tdGFibGUtaGVhZGVyLXRleHQnLFxuICAgICAgICB0aGlzLmRhdGEuY29sb3IudGV4dCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBoZWFkZXJDZWxscyA9IGhvc3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICcubWF0LWhlYWRlci1jZWxsLCAubWF0LW1kYy1oZWFkZXItY2VsbCwgdGgubWF0LWhlYWRlci1jZWxsLCB0aC5tYXQtbWRjLWhlYWRlci1jZWxsJyxcbiAgICAgICk7XG4gICAgICBoZWFkZXJDZWxscy5mb3JFYWNoKChjZWxsOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5kYXRhLmNvbG9yPy5iZykge1xuICAgICAgICAgIGNlbGwuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5kYXRhLmNvbG9yLmJnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRhdGEuY29sb3I/LnRleHQpIHtcbiAgICAgICAgICBjZWxsLnN0eWxlLmNvbG9yID0gdGhpcy5kYXRhLmNvbG9yLnRleHQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmRhdGEuY29sb3IpIHtcbiAgICAgIHRoaXMuZGF0YS5jb2xvciA9IHtcbiAgICAgICAgYmc6IFRBQkxFX0RFRkFVTFRTLkRFRkFVTFRfQkdfQ09MT1IsXG4gICAgICAgIHRleHQ6IFRBQkxFX0RFRkFVTFRTLkRFRkFVTFRfVEVYVF9DT0xPUixcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGEuc2hvd1NpbXBsZVNlYXJjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRhdGEuc2hvd1NpbXBsZVNlYXJjaCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5jb2x1bW5Qcm9wZXJ0aWVzID0gdGhpcy5kYXRhLmRpc3BsYXllZENvbHVtbnMubWFwKFxuICAgICAgKGNvbHVtbikgPT4gY29sdW1uLnByb3BlcnR5LFxuICAgICk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICBpZiAodGhpcy5kYXRhLmFjdGlvbkJ1dHRvbiAmJiAhdGhpcy5kYXRhLmFjdGlvbkJ1dHRvbi5jb25kaXRpb24pIHtcbiAgICAgIHRoaXMuZGF0YS5hY3Rpb25CdXR0b24uY29uZGl0aW9uID0gKF9yb3c/OiBUKSA9PiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEluaWNpYWxpemFyIGRyb3Bkb3duSXRlbXMgdXNhbmRvIEZpbHRlclNlcnZpY2VcbiAgICBjb25zdCBmaWx0ZXJDb25maWcgPSB0aGlzLmZpbHRlclNlcnZpY2UuaW5pdGlhbGl6ZURyb3Bkb3duSXRlbXMoXG4gICAgICB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1ucyxcbiAgICApO1xuICAgIHRoaXMuZHJvcGRvd25JdGVtcyA9IGZpbHRlckNvbmZpZy5kcm9wZG93bkl0ZW1zO1xuICAgIHRoaXMuc29ydGFibGVEcm9wZG93bkl0ZW1zID0gZmlsdGVyQ29uZmlnLnNvcnRhYmxlRHJvcGRvd25JdGVtcztcbiAgICB0aGlzLmhhc0ZpbHRlcmFibGVDb2x1bW4gPSBmaWx0ZXJDb25maWcuaGFzRmlsdGVyYWJsZUNvbHVtbjtcbiAgICB0aGlzLmhhc1NvcnRhYmxlQ29sdW1uID0gZmlsdGVyQ29uZmlnLmhhc1NvcnRhYmxlQ29sdW1uO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5maWx0ZXJhYmxlT3B0aW9ucykge1xuICAgICAgdGhpcy5kcm9wZG93bkl0ZW1zID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmFkZEZpbHRlcmFibGVPcHRpb25zKFxuICAgICAgICB0aGlzLmRyb3Bkb3duSXRlbXMsXG4gICAgICAgIHRoaXMuZGF0YS5maWx0ZXJhYmxlT3B0aW9ucyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gU2VtIHBhZ2luYcOnw6NvXG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkSXRlbXMoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8vIENvbSBwYWdpbmHDp8Ojb1xuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKHRoaXMuZGF0YS5zb3J0QnkpIHtcbiAgICAgICAgdGhpcy5zb3J0QnkgPSB7XG4gICAgICAgICAgZmllbGQ6IHRoaXMuZGF0YS5zb3J0QnkuZmllbGQsXG4gICAgICAgICAgb3JkZXI6IHRoaXMuZGF0YS5zb3J0Qnkub3JkZXIsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlclN1YmplY3RcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lTXMpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKCdyZWxvYWQnLCB0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRJdGVtc1BhZ2luYXRlZCgncmVsb2FkJywgdHJ1ZSk7XG5cbiAgICAgIHRoaXMuc29ydC5hY3RpdmUgPSAnY3JlYXRlZEF0JztcbiAgICAgIHRoaXMuc29ydC5kaXJlY3Rpb24gPSAnZGVzYyc7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgICAgIHRoaXMudG90YWxJdGVtcyA9IDA7XG4gICAgICBpZiAodGhpcy5kYXRhLnRvdGFsUmVmKSB7XG4gICAgICAgIGZvciAoY29uc3QgdG90YWxSZWYgb2YgdGhpcy5kYXRhLnRvdGFsUmVmKSB7XG4gICAgICAgICAgY29uc3QgdG90YWxSZWZEb2MgPSBhd2FpdCB0b3RhbFJlZi5yZWYuZ2V0KCk7XG4gICAgICAgICAgY29uc3QgZG9jRGF0YSA9IHRvdGFsUmVmRG9jLmRhdGEoKSBhc1xuICAgICAgICAgICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKGRvY0RhdGEgJiYgZG9jRGF0YVt0b3RhbFJlZi5maWVsZF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSBkb2NEYXRhW3RvdGFsUmVmLmZpZWxkXTtcbiAgICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9ICh0aGlzLnRvdGFsSXRlbXMgK1xuICAgICAgICAgICAgICAodHlwZW9mIGZpZWxkVmFsdWUgPT09ICdudW1iZXInID8gZmllbGRWYWx1ZSA6IDApKSBhcyBudW1iZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvLyBEQVRBIExPQURJTkcgTUVUSE9EU1xuXG4gIHByaXZhdGUgYXN5bmMgbG9hZEl0ZW1zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaW1hZ2VMb2FkaW5nU3RhdGUuY2xlYXIoKTtcbiAgICB0aGlzLml0ZW1zID0gKGF3YWl0IHRoaXMudGFibGVTZXJ2aWNlLmdldEl0ZW1zKFxuICAgICAgdGhpcy5kYXRhLmNvbGxlY3Rpb25SZWYsXG4gICAgKSkgYXMgVFtdO1xuICAgIGlmICh0aGlzLmRhdGEuY29uZGl0aW9ucykge1xuICAgICAgdGhpcy5maWx0ZXJJdGVtcygpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmxvYWRSZWxhdGlvbnMoKTtcbiAgICBhd2FpdCB0aGlzLmxvYWRRdWVyeUxlbmd0aHMoKTtcbiAgICB0aGlzLnRvdGFsSXRlbXMgPSB0aGlzLml0ZW1zLmxlbmd0aDtcblxuICAgIHRoaXMuYXJyYW5nZSA9IHtcbiAgICAgIGZpbHRlcnM6IFtdLFxuICAgICAgc29ydEJ5OiB0aGlzLmRhdGEuc29ydEJ5IHx8IHtcbiAgICAgICAgZmllbGQ6IFRBQkxFX0RFRkFVTFRTLlNPUlRfRklFTEQsXG4gICAgICAgIG9yZGVyOiBUQUJMRV9ERUZBVUxUUy5TT1JUX09SREVSLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuc29ydEJ5ID0gdGhpcy5kYXRhLnNvcnRCeSB8fCB7XG4gICAgICBmaWVsZDogVEFCTEVfREVGQVVMVFMuU09SVF9GSUVMRCxcbiAgICAgIG9yZGVyOiBUQUJMRV9ERUZBVUxUUy5TT1JUX09SREVSLFxuICAgIH07XG5cbiAgICBsZXQgaXRlbXNUb0Rpc3BsYXkgPSBbLi4udGhpcy5pdGVtc107XG4gICAgaXRlbXNUb0Rpc3BsYXkgPSB0aGlzLmFwcGx5Q2xpZW50U2lkZUZpbHRlcnMoaXRlbXNUb0Rpc3BsYXkpO1xuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IGl0ZW1zVG9EaXNwbGF5O1xuXG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZShpdGVtc1RvRGlzcGxheSk7XG4gICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xuICAgIGlmICh0aGlzLmRhdGEuc29ydEJ5KSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydC5hY3RpdmUgPSB0aGlzLmRhdGEuc29ydEJ5LmZpZWxkO1xuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQuZGlyZWN0aW9uID0gdGhpcy5kYXRhLnNvcnRCeS5vcmRlcjtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0LnNvcnRDaGFuZ2UuZW1pdCgpO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJQcmVkaWNhdGUgPSAoZGF0YSwgZmlsdGVyOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5kaXNwbGF5ZWRDb2x1bW5zLnNvbWUoKGNvbCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICBpZiAoY29sLmZpbHRlclByZWRpY2F0ZXMpIHtcbiAgICAgICAgICByZXR1cm4gY29sLmZpbHRlclByZWRpY2F0ZXMuc29tZSgocHJlZGljYXRlKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gaXRlbVtjb2wucHJvcGVydHldO1xuICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eVZhbHVlIHx8IHR5cGVvZiBwcm9wZXJ0eVZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5UmVjb3JkID0gcHJvcGVydHlWYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgIGNvbnN0IHByZWRpY2F0ZVZhbHVlID0gcHJvcGVydHlSZWNvcmRbcHJlZGljYXRlXTtcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGVWYWx1ZSA9PT0gbnVsbCB8fCBwcmVkaWNhdGVWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwcmVkaWNhdGVWYWx1ZSlcbiAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgICAuaW5jbHVkZXMoZmlsdGVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2wucHJvcGVydHkgJiYgY29sLmlzRmlsdGVyYWJsZSkge1xuICAgICAgICAgIGNvbnN0IHByb3BlcnR5VmFsdWUgPSBpdGVtW2NvbC5wcm9wZXJ0eV07XG4gICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPT09IG51bGwgfHwgcHJvcGVydHlWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIFN0cmluZyhwcm9wZXJ0eVZhbHVlKVxuICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICAgICAgICAgIC5pbmNsdWRlcyhmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5maWx0ZXJQcmVkaWNhdGUgPSB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkSXRlbXNQYWdpbmF0ZWQoXG4gICAgbmF2aWdhdGlvbjogJ3JlbG9hZCcgfCAnZm9yd2FyZCcgfCAnYmFja3dhcmQnID0gJ3JlbG9hZCcsXG4gICAgcmVzZXQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBmdWxsUGFnZVNpemU/OiBudW1iZXIsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaW1hZ2VMb2FkaW5nU3RhdGUuY2xlYXIoKTtcbiAgICBpZiAocmVzZXQgJiYgWydmb3J3YXJkJywgJ3JlbG9hZCddLmluY2x1ZGVzKG5hdmlnYXRpb24pKSB7XG4gICAgICB0aGlzLmxhc3REb2MgPSBudWxsO1xuICAgIH1cbiAgICBpZiAocmVzZXQgJiYgWydiYWNrd2FyZCcsICdyZWxvYWQnXS5pbmNsdWRlcyhuYXZpZ2F0aW9uKSkge1xuICAgICAgdGhpcy5maXJzdERvYyA9IG51bGw7XG4gICAgfVxuICAgIC8vIFPDsyBvICdyZWxvYWQnIHZvbHRhIHBhcmEgYSBwcmltZWlyYSBww6FnaW5hLiBFbSBmb3J3YXJkL2JhY2t3YXJkIChpbmNsdXNpdmVcbiAgICAvLyBwdWxvcyBjb20gcmVzZXQgZGUgY3Vyc29yKSBvIGN1cnJlbnRDbGllbnRQYWdlSW5kZXggasOhIGZvaSBkZWZpbmlkbyBwb3JcbiAgICAvLyBvblBhZ2VDaGFuZ2UgZSDDqSBlc3NlbmNpYWwgcGFyYSBvIG9mZnNldCBkYSBwYWdpbmHDp8OjbyBjbGllbnQtc2lkZS5cbiAgICBpZiAobmF2aWdhdGlvbiA9PT0gJ3JlbG9hZCcpIHtcbiAgICAgIHRoaXMuY3VycmVudENsaWVudFBhZ2VJbmRleCA9IDA7XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlRmlsdGVycyA9IHRoaXMuZmlsdGVyU2VydmljZS5leHRyYWN0QWN0aXZlRmlsdGVycyhcbiAgICAgIHRoaXMuZmlsdGVyc0Zvcm0sXG4gICAgKTtcblxuICAgIHRoaXMuYXJyYW5nZSA9IHtcbiAgICAgIGZpbHRlcnM6IGFjdGl2ZUZpbHRlcnMsXG4gICAgICBzb3J0Qnk6IHRoaXMuc29ydEJ5LFxuICAgIH07XG5cbiAgICBjb25zdCBwYWdpbmF0ZWQ6IFBhZ2luYXRpb24gPSB7XG4gICAgICBiYXRjaFNpemU6IHRoaXMucGFnZVNpemUsXG4gICAgICBjb2xsZWN0aW9uOiB0aGlzLmRhdGEuY29sbGVjdGlvbixcbiAgICAgIGRvYzogeyBsYXN0RG9jOiB0aGlzLmxhc3REb2MsIGZpcnN0RG9jOiB0aGlzLmZpcnN0RG9jIH0sXG4gICAgICBuYXZpZ2F0aW9uLFxuICAgICAgYXJyYW5nZTogdGhpcy5hcnJhbmdlISxcbiAgICAgIGNvbmRpdGlvbnM6IHRoaXMuZGF0YS5jb25kaXRpb25zLFxuICAgICAgc2l6ZTogdGhpcy50b3RhbEl0ZW1zLFxuICAgICAgZmlsdGVyRm46IHRoaXMuZGF0YS5maWx0ZXJGbixcbiAgICAgIGNsaWVudFBhZ2VJbmRleDogdGhpcy5jdXJyZW50Q2xpZW50UGFnZUluZGV4LFxuICAgICAgZnVsbFBhZ2VTaXplOiBmdWxsUGFnZVNpemUgPz8gdGhpcy5wYWdlU2l6ZSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy50YWJsZVNlcnZpY2UuZ2V0UGFnaW5hdGVkKHBhZ2luYXRlZCk7XG4gICAgdGhpcy5pdGVtcyA9IHJlc3VsdC5pdGVtcyBhcyBUW107XG4gICAgYXdhaXQgdGhpcy5sb2FkUmVsYXRpb25zKCk7XG4gICAgYXdhaXQgdGhpcy5sb2FkUXVlcnlMZW5ndGhzKCk7XG4gICAgdGhpcy5sYXN0RG9jID0gcmVzdWx0Lmxhc3REb2MgYXMgUXVlcnlEb2N1bWVudFNuYXBzaG90PFQ+IHwgbnVsbDtcbiAgICB0aGlzLmZpcnN0RG9jID0gcmVzdWx0LmZpcnN0RG9jIGFzIFF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDxUPiB8IG51bGw7XG5cbiAgICBpZiAocmVzdWx0LmN1cnJlbnRDbGllbnRQYWdlSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gcmVzdWx0LmN1cnJlbnRDbGllbnRQYWdlSW5kZXg7XG4gICAgfVxuXG4gICAgbGV0IHN1bSA9IDA7XG4gICAgaWYgKHRoaXMuZGF0YS50b3RhbFJlZikge1xuICAgICAgZm9yIChjb25zdCB0b3RhbFJlZiBvZiB0aGlzLmRhdGEudG90YWxSZWYpIHtcbiAgICAgICAgY29uc3QgdG90YWxSZWZEb2MgPSBhd2FpdCB0b3RhbFJlZi5yZWYuZ2V0KCk7XG4gICAgICAgIGNvbnN0IGRvY0RhdGEgPSB0b3RhbFJlZkRvYy5kYXRhKCkgYXNcbiAgICAgICAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChkb2NEYXRhIHx8IHJlc3VsdC5maWx0ZXJMZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gZG9jRGF0YSA/IGRvY0RhdGFbdG90YWxSZWYuZmllbGRdIDogdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IG51bWVyaWNWYWx1ZSA9IHR5cGVvZiBmaWVsZFZhbHVlID09PSAnbnVtYmVyJyA/IGZpZWxkVmFsdWUgOiAwO1xuICAgICAgICAgIHN1bSA9IHJlc3VsdC5maWx0ZXJMZW5ndGggPz8gKChzdW0gKyBudW1lcmljVmFsdWUpIGFzIG51bWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudG90YWxJdGVtcyA9IHN1bTtcbiAgICB9XG5cbiAgICB0aGlzLmhhc05leHRQYWdlID0gcmVzdWx0Lmhhc05leHRQYWdlO1xuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UodGhpcy5pdGVtcyk7XG4gICAgdGhpcy5maWx0ZXJQcmVkaWNhdGUgPSB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLy8gUEFHSU5BVElPTiBNRVRIT0RTXG5cbiAgYXN5bmMgb25QYWdlQ2hhbmdlKGV2ZW50PzogUGFnZUV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uICE9PSB0cnVlIHx8ICFldmVudCkgcmV0dXJuO1xuXG4gICAgdGhpcy5pc0xvYWRpbmckLm5leHQodHJ1ZSk7XG5cbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB7XG4gICAgICBjdXJyZW50UGFnZU51bWJlcjogdGhpcy5jdXJyZW50UGFnZU51bWJlcixcbiAgICAgIGN1cnJlbnRDbGllbnRQYWdlSW5kZXg6IHRoaXMuY3VycmVudENsaWVudFBhZ2VJbmRleCxcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgdG90YWxJdGVtczogdGhpcy50b3RhbEl0ZW1zLFxuICAgICAgaGFzTmV4dFBhZ2U6IHRoaXMuaGFzTmV4dFBhZ2UsXG4gICAgfTtcblxuICAgIGNvbnN0IG5hdmlnYXRpb24gPSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmNhbGN1bGF0ZU5hdmlnYXRpb24oXG4gICAgICBldmVudCxcbiAgICAgIGN1cnJlbnRTdGF0ZSxcbiAgICApO1xuXG4gICAgaWYgKCFuYXZpZ2F0aW9uLnNob3VsZE5hdmlnYXRlKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICB0aGlzLnBhZ2VFdmVudCA9IGV2ZW50O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEF0dWFsaXphciBlc3RhZG8gbG9jYWxcbiAgICB0aGlzLmN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSBuYXZpZ2F0aW9uLm5ld0NsaWVudFBhZ2VJbmRleDtcbiAgICB0aGlzLmN1cnJlbnRQYWdlTnVtYmVyID0gbmF2aWdhdGlvbi5uZXdQYWdlTnVtYmVyO1xuXG4gICAgLy8gQXR1YWxpemFyIHBhZ2VTaXplIHNlIG11ZG91XG4gICAgaWYgKGV2ZW50LnBhZ2VTaXplICE9PSB0aGlzLnBhZ2VTaXplKSB7XG4gICAgICB0aGlzLnBhZ2VTaXplID0gZXZlbnQucGFnZVNpemU7XG4gICAgfVxuXG4gICAgLy8gQWp1c3RhciBwYWdlU2l6ZSB0ZW1wb3JhcmlhbWVudGUgcGFyYSDDumx0aW1hIHDDoWdpbmEgc2UgbmVjZXNzw6FyaW9cbiAgICBjb25zdCBsYXN0UGFnZUluZGV4ID0gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jYWxjdWxhdGVMYXN0UGFnZUluZGV4KFxuICAgICAgdGhpcy50b3RhbEl0ZW1zLFxuICAgICAgZXZlbnQucGFnZVNpemUsXG4gICAgKTtcbiAgICBsZXQgb3JpZ2luYWxQYWdlU2l6ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAoXG4gICAgICBldmVudC5wYWdlSW5kZXggPT09IGxhc3RQYWdlSW5kZXggJiZcbiAgICAgIG5hdmlnYXRpb24uZGlyZWN0aW9uID09PSAnYmFja3dhcmQnICYmXG4gICAgICBuYXZpZ2F0aW9uLnJlc2V0RG9jc1xuICAgICkge1xuICAgICAgY29uc3QgaXRlbXNFeHBlY3RlZEluTGFzdFBhZ2UgPVxuICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmNhbGN1bGF0ZUxhc3RQYWdlSXRlbUNvdW50KFxuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyxcbiAgICAgICAgICBldmVudC5wYWdlU2l6ZSxcbiAgICAgICAgKTtcblxuICAgICAgaWYgKFxuICAgICAgICBpdGVtc0V4cGVjdGVkSW5MYXN0UGFnZSA+IDAgJiZcbiAgICAgICAgaXRlbXNFeHBlY3RlZEluTGFzdFBhZ2UgPCBldmVudC5wYWdlU2l6ZVxuICAgICAgKSB7XG4gICAgICAgIG9yaWdpbmFsUGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gaXRlbXNFeHBlY3RlZEluTGFzdFBhZ2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKFxuICAgICAgICBuYXZpZ2F0aW9uLmRpcmVjdGlvbixcbiAgICAgICAgbmF2aWdhdGlvbi5yZXNldERvY3MsXG4gICAgICAgIGV2ZW50LnBhZ2VTaXplLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJybyBhbyBjYXJyZWdhciBpdGVucyBwYWdpbmFkb3M6JywgZXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAob3JpZ2luYWxQYWdlU2l6ZSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gb3JpZ2luYWxQYWdlU2l6ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnBhZ2VFdmVudCA9IGV2ZW50O1xuICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8vIEZJTFRFUi9TRUFSQ0ggTUVUSE9EU1xuXG4gIGFwcGx5RmlsdGVyKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gU3RyaW5nKHZhbHVlKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmZpbHRlclZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLmZpbHRlclN1YmplY3QubmV4dCh0aGlzLmZpbHRlclZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZWFyY2goZXZlbnQ/OiBFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdFNvcnQudmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdFNvcnQudmFsdWUuYXJyYW5nZSA9PT0gJ2FzY2VuZGluZycpIHtcbiAgICAgICAgdGhpcy5zb3J0QnkgPSB7XG4gICAgICAgICAgZmllbGQ6IHRoaXMuc2VsZWN0U29ydC52YWx1ZS5wcm9wZXJ0eSxcbiAgICAgICAgICBvcmRlcjogJ2FzYycsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZWxlY3RTb3J0LnZhbHVlLmFycmFuZ2UgPT09ICdkZXNjZW5kaW5nJykge1xuICAgICAgICB0aGlzLnNvcnRCeSA9IHtcbiAgICAgICAgICBmaWVsZDogdGhpcy5zZWxlY3RTb3J0LnZhbHVlLnByb3BlcnR5LFxuICAgICAgICAgIG9yZGVyOiAnZGVzYycsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5hcnJhbmdlID0gdGhpcy5idWlsZEFycmFuZ2VGcm9tRmlsdGVycygpO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcnNUb0RhdGFTb3VyY2UoKTtcbiAgICAgIHRoaXMuY3VycmVudEFycmFuZ2UgPVxuICAgICAgICB0aGlzLmZpbHRlcnNGb3JtLmxlbmd0aCA+IDBcbiAgICAgICAgICA/ICh0aGlzLmZpbHRlcnNGb3JtLmF0KDApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlPy5hcnJhbmdlID8/ICcnKVxuICAgICAgICAgIDogJyc7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkSXRlbXNQYWdpbmF0ZWQoJ3JlbG9hZCcsIHRydWUpO1xuICAgICAgdGhpcy5jdXJyZW50QXJyYW5nZSA9XG4gICAgICAgIHRoaXMuZmlsdGVyc0Zvcm0ubGVuZ3RoID4gMFxuICAgICAgICAgID8gKHRoaXMuZmlsdGVyc0Zvcm0uYXQoMCkuZ2V0KCdzZWxlY3RGaWx0ZXInKT8udmFsdWU/LmFycmFuZ2UgPz8gJycpXG4gICAgICAgICAgOiAnJztcbiAgICAgIHRoaXMucGFnaW5hdG9yLmZpcnN0UGFnZSgpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVzZXRGaWx0ZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5kYXRhU291cmNlLmZpbHRlciA9ICcnO1xuICAgIGlmICh0aGlzLmZpbHRlclByZWRpY2F0ZSkge1xuICAgICAgdGhpcy5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZSA9IHRoaXMuZmlsdGVyUHJlZGljYXRlO1xuICAgIH1cblxuICAgIHRoaXMuZmlsdGVyc0Zvcm0uY2xlYXIoKTtcbiAgICB0aGlzLmFkZEZpbHRlcigpO1xuICAgIHRoaXMuc2VsZWN0U29ydC5wYXRjaFZhbHVlKCcnKTtcbiAgICB0aGlzLnNvcnRCeSA9IHtcbiAgICAgIG9yZGVyOiB0aGlzLmRhdGEuc29ydEJ5ID8gdGhpcy5kYXRhLnNvcnRCeS5vcmRlciA6ICdkZXNjJyxcbiAgICAgIGZpZWxkOiB0aGlzLmRhdGEuc29ydEJ5ID8gdGhpcy5kYXRhLnNvcnRCeS5maWVsZCA6ICdjcmVhdGVkQXQnLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmFycmFuZ2UgPSB7XG4gICAgICAgIGZpbHRlcnM6IFtdLFxuICAgICAgICBzb3J0Qnk6IHRoaXMuc29ydEJ5LFxuICAgICAgfTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gWy4uLnRoaXMuaXRlbXNdO1xuICAgICAgdGhpcy50b3RhbEl0ZW1zID0gdGhpcy5pdGVtcy5sZW5ndGg7XG4gICAgICB0aGlzLmN1cnJlbnRBcnJhbmdlID0gJyc7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkSXRlbXNQYWdpbmF0ZWQoJ3JlbG9hZCcsIHRydWUpO1xuICAgICAgdGhpcy5jdXJyZW50QXJyYW5nZSA9ICcnO1xuICAgICAgdGhpcy5wYWdpbmF0b3IuZmlyc3RQYWdlKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvLyBOQVZJR0FUSU9OIE1FVEhPRFNcblxuICBnb1RvRGV0YWlscyhyb3c6IFQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhLmlzTm90Q2xpY2thYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHVybFBhdGggPSB0aGlzLmRhdGEudXJsIHx8IHRoaXMuZGF0YS5uYW1lO1xuICAgIGNvbnN0IHJvd1dpdGhJZCA9IHJvdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIHsgaWQ6IHN0cmluZyB9O1xuICAgIGNvbnN0IHVybCA9IHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybChcbiAgICAgIHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoW2AvJHt1cmxQYXRofWAsIHJvd1dpdGhJZC5pZF0pLFxuICAgICk7XG4gICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJyk7XG4gIH1cblxuICAvLyBSRUxBVElPTiBNRVRIT0RTXG5cbiAgYXN5bmMgZ2V0UmVsYXRpb24ocGFyYW1zOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjb2xsZWN0aW9uOiBzdHJpbmc7XG4gICAgbmV3UHJvcGVydHk6IHN0cmluZztcbiAgfSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBzbmFwc2hvdDogZmlyZXN0b3JlLkRvY3VtZW50U25hcHNob3Q8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoXG4gICAgICAgIHBhcmFtcy5pZCAhPT0gJycgJiZcbiAgICAgICAgcGFyYW1zLmlkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgcGFyYW1zLmNvbGxlY3Rpb24gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBwYXJhbXMuY29sbGVjdGlvbiAhPT0gJydcbiAgICAgICkge1xuICAgICAgICBzbmFwc2hvdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgIHRoaXMuZmlyZXN0b3JlLmNvbGxlY3Rpb24ocGFyYW1zLmNvbGxlY3Rpb24pLmRvYyhwYXJhbXMuaWQpLmdldCgpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHNuYXBzaG90ICYmIHNuYXBzaG90LmV4aXN0cykge1xuICAgICAgICBjb25zdCBkYXRhID0gc25hcHNob3QuZGF0YSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGE/LltwYXJhbXMubmV3UHJvcGVydHldO1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogJyc7XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRSZWxhdGlvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVsYXRpb25Qcm9taXNlcyA9IHRoaXMuZGF0YS5kaXNwbGF5ZWRDb2x1bW5zXG4gICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5yZWxhdGlvbilcbiAgICAgIC5mbGF0TWFwKChjb2wpID0+XG4gICAgICAgIHRoaXMuaXRlbXMubWFwKGFzeW5jIChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbC5yZWxhdGlvbikge1xuICAgICAgICAgICAgY29uc3QgaXRlbVJlY29yZCA9IGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICBpdGVtUmVjb3JkW2NvbC5wcm9wZXJ0eV0gPSBhd2FpdCB0aGlzLmdldFJlbGF0aW9uKHtcbiAgICAgICAgICAgICAgaWQ6IFN0cmluZyhpdGVtUmVjb3JkW2NvbC5yZWxhdGlvbi5zb3VyY2VQcm9wZXJ0eV0gPz8gJycpLFxuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2wucmVsYXRpb24udGFyZ2V0ZWRDb2xsZWN0aW9uLFxuICAgICAgICAgICAgICBuZXdQcm9wZXJ0eTogY29sLnJlbGF0aW9uLnRhcmdldGVkUHJvcGVydHkgfHwgY29sLnByb3BlcnR5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChyZWxhdGlvblByb21pc2VzKTtcbiAgfVxuXG4gIGFzeW5jIGdldFF1ZXJ5TGVuZ3RoKHBhcmFtczoge1xuICAgIGl0ZW06IFQ7XG4gICAgcmVsYXRpb246IHtcbiAgICAgIGNvbGxlY3Rpb246IHN0cmluZztcbiAgICAgIHByb3BlcnR5OiBzdHJpbmc7XG4gICAgICBvcGVyYXRvcjogV2hlcmVGaWx0ZXJPcDtcbiAgICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgfTtcbiAgfSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgaXRlbVJlY29yZCA9IHBhcmFtcy5pdGVtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgdGhpcy5maXJlc3RvcmVcbiAgICAgIC5jb2xsZWN0aW9uKHBhcmFtcy5yZWxhdGlvbi5jb2xsZWN0aW9uKVxuICAgICAgLnJlZi53aGVyZShcbiAgICAgICAgcGFyYW1zLnJlbGF0aW9uLnByb3BlcnR5LFxuICAgICAgICBwYXJhbXMucmVsYXRpb24ub3BlcmF0b3IsXG4gICAgICAgIGl0ZW1SZWNvcmRbcGFyYW1zLnJlbGF0aW9uLnZhbHVlXSxcbiAgICAgIClcbiAgICAgIC5nZXQoKTtcbiAgICByZXR1cm4gc25hcHNob3Quc2l6ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFF1ZXJ5TGVuZ3RocygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsZW5ndGhQcm9taXNlcyA9IHRoaXMuZGF0YS5kaXNwbGF5ZWRDb2x1bW5zXG4gICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5xdWVyeUxlbmd0aClcbiAgICAgIC5mbGF0TWFwKChjb2wpID0+XG4gICAgICAgIHRoaXMuaXRlbXMubWFwKGFzeW5jIChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbC5xdWVyeUxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbVJlY29yZCA9IGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICBpdGVtUmVjb3JkW2NvbC5wcm9wZXJ0eV0gPSBhd2FpdCB0aGlzLmdldFF1ZXJ5TGVuZ3RoKHtcbiAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgcmVsYXRpb246IGNvbC5xdWVyeUxlbmd0aCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKGxlbmd0aFByb21pc2VzKTtcbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVySXRlbXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YS5jb25kaXRpb25zKSB7XG4gICAgICB0aGlzLmRhdGEuY29uZGl0aW9ucy5mb3JFYWNoKChjb25kKSA9PiB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9wZXJhdG9yRnVuY3Rpb24gPVxuICAgICAgICAgICAgdGhpcy50YWJsZVNlcnZpY2Uub3BlcmF0b3JzW1xuICAgICAgICAgICAgICBjb25kLm9wZXJhdG9yIGFzIGtleW9mIHR5cGVvZiB0aGlzLnRhYmxlU2VydmljZS5vcGVyYXRvcnNcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgaWYgKG9wZXJhdG9yRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1SZWNvcmQgPSBpdGVtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgICAgcmV0dXJuIG9wZXJhdG9yRnVuY3Rpb24oXG4gICAgICAgICAgICAgIGl0ZW1SZWNvcmRbY29uZC5maXJlc3RvcmVQcm9wZXJ0eV0sXG4gICAgICAgICAgICAgIGNvbmQuZGFzaFByb3BlcnR5LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFBVQkxJQyBNRVRIT0RTXG5cbiAgYXN5bmMgcmVsb2FkVGFibGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uKSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRJdGVtc1BhZ2luYXRlZCgncmVsb2FkJywgdHJ1ZSk7XG4gICAgICB0aGlzLnBhZ2luYXRvci5maXJzdFBhZ2UoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRJdGVtcygpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZURpc3BsYXllZENvbHVtbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSkge1xuICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxUPihbXSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb2x1bW5Qcm9wZXJ0aWVzID0gdGhpcy5kYXRhLmRpc3BsYXllZENvbHVtbnMubWFwKFxuICAgICAgKGNvbHVtbikgPT4gY29sdW1uLnByb3BlcnR5LFxuICAgICk7XG5cbiAgICBjb25zdCBmaWx0ZXJDb25maWcgPSB0aGlzLmZpbHRlclNlcnZpY2UuaW5pdGlhbGl6ZURyb3Bkb3duSXRlbXMoXG4gICAgICB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1ucyxcbiAgICApO1xuICAgIHRoaXMuZHJvcGRvd25JdGVtcyA9IGZpbHRlckNvbmZpZy5kcm9wZG93bkl0ZW1zO1xuICAgIHRoaXMuc29ydGFibGVEcm9wZG93bkl0ZW1zID0gZmlsdGVyQ29uZmlnLnNvcnRhYmxlRHJvcGRvd25JdGVtcztcblxuICAgIGlmICh0aGlzLmRhdGEuZmlsdGVyYWJsZU9wdGlvbnMpIHtcbiAgICAgIHRoaXMuZHJvcGRvd25JdGVtcyA9IHRoaXMuZmlsdGVyU2VydmljZS5hZGRGaWx0ZXJhYmxlT3B0aW9ucyhcbiAgICAgICAgdGhpcy5kcm9wZG93bkl0ZW1zLFxuICAgICAgICB0aGlzLmRhdGEuZmlsdGVyYWJsZU9wdGlvbnMsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHNob3VsZFNob3dBY3Rpb25CdXR0b24oKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmRhdGE/LmFjdGlvbkJ1dHRvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kYXRhLmFjdGlvbkJ1dHRvbi5jb25kaXRpb24pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhLmFjdGlvbkJ1dHRvbi5jb25kaXRpb24obnVsbCkgPz8gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZURvd25sb2FkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kb3dubG9hZFRhYmxlKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICBpZiAodGhpcy5kYXRhU291cmNlICYmIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJlZERhdGEpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gWy4uLnRoaXMuZGF0YVNvdXJjZS5maWx0ZXJlZERhdGFdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcnJhbmdlID0gdGhpcy5idWlsZEFycmFuZ2VGcm9tRmlsdGVycygpO1xuICAgICAgdGhpcy5kb3dubG9hZFRhYmxlKGFycmFuZ2UsIHRoaXMuZGF0YS5jb25kaXRpb25zIHx8IFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuYXJyYW5nZSkge1xuICAgICAgICB0aGlzLmRvd25sb2FkVGFibGUodGhpcy5hcnJhbmdlLCB0aGlzLmRhdGEuY29uZGl0aW9ucyB8fCBbXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiZGF0YVwiIGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlbiBnYXAtNlwiPlxuICAgIDwhLS0gVU5JRklFRCBDT05UUk9MIFBBTkVMOiBGSUxURVJTLCBTT1JUICYgQUNUSU9OUyAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInJvdW5kZWQteGwgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBiZy13aGl0ZSBwLTQgc2hhZG93LWxnXCJcbiAgICAgICpuZ0lmPVwiXG4gICAgICAgIGRhdGEucGFnaW5hdGlvbiA9PT0gdHJ1ZSAmJlxuICAgICAgICAoZHJvcGRvd25JdGVtcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgc29ydGFibGVEcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICBkYXRhLmFjdGlvbkJ1dHRvbilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPCEtLSBQQU5FTCBIRUFERVI6IFRpdGxlIGFuZCBDdXN0b20gQWN0aW9uIC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm1iLTQgZmxleCBmbGV4LWNvbCBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTQgYm9yZGVyLWItMiBib3JkZXItZ3JheS0yMDAgcGItNCBtZDpmbGV4LXJvdyBtZDppdGVtcy1jZW50ZXJcIlxuICAgICAgPlxuICAgICAgICA8IS0tIExlZnQgU2lkZTogVGl0bGUgJiBNYWluIEFjdGlvbiBCdXR0b24gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsdGVyIHRleHQteGwgdGV4dC1ibHVlLTUwMFwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sZyBmb250LXNlbWlib2xkIHRleHQtZ3JheS03MDBcIlxuICAgICAgICAgICAgICA+RmlsdHJvcyBlIEHDp8O1ZXM8L3NwYW5cbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImRhdGEuYWN0aW9uQnV0dG9uICYmIGRhdGEuYWN0aW9uQnV0dG9uLmNvbmRpdGlvblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJnZXRBY3Rpb25CdXR0b25DbGFzcygpXCJcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cImRhdGEuYWN0aW9uQnV0dG9uLnJvdXRlckxpbmtcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICBkYXRhLmFjdGlvbkJ1dHRvbi5tZXRob2QgPyBkYXRhLmFjdGlvbkJ1dHRvbi5tZXRob2QoJGV2ZW50KSA6IG51bGxcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLmFjdGlvbkJ1dHRvbi5pY29uXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImRhdGEuYWN0aW9uQnV0dG9uLmljb25cIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIHt7IGRhdGEuYWN0aW9uQnV0dG9uLmxhYmVsIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gU09SVCBGSUVMRCAoSW50ZWdyYXRlZCB3aXRoIGZpbHRlcnMpIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTRcIiAqbmdJZj1cInNvcnRhYmxlRHJvcGRvd25JdGVtcy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTMgcC0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbi13LVsyMDBweF0gZmxleC0xXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNvcnQtYWxwaGEtZG93biB0ZXh0LWN5YW4tNjAwXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxzcGFuPk9yZGVuYXIgcG9yPC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJTZWxlY2lvbmUuLi5cIiBbZm9ybUNvbnRyb2xdPVwic2VsZWN0U29ydFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzb3J0YWJsZURyb3Bkb3duSXRlbXNcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNvcnQtYWxwaGEtZG93biB0ZXh0LWN5YW4tNjAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEZJTFRFUlMgQ09OVEVOVCAoV0lUSCBSRUZJTkVNRU5UUykgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItNCBzcGFjZS15LTNcIiAqbmdJZj1cImZpbHRlcnNGb3JtLmNvbnRyb2xzLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtmb3JtR3JvdXBdPVwiJGFueShmaWx0ZXJHcm91cClcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBmaWx0ZXJHcm91cCBvZiBmaWx0ZXJzRm9ybS5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTMgcC0yXCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gRklMVEVSIFRZUEUgU0VMRUNUT1IgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbi13LVsyMDBweF0gZmxleC0xXCIgKm5nSWY9XCJkcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+VGlwbyBkZSBmaWx0cm88L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjaW9uZSBvIHRpcG8uLi5cIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdEZpbHRlclwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdEZpbHRlckNoYW5nZSgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRBdmFpbGFibGVGaWx0ZXJPcHRpb25zKGZpbHRlckdyb3VwKVwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIml0ZW0uaWNvbiB8fCAnZmEgZmEtZmlsdGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtYmx1ZS01MDBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBURVhUIEZJTFRFUiAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIm1pbi13LVsyMDBweF0gZmxleC0xXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlPy5hcnJhbmdlID09PSAnZmlsdGVyJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7XG4gICAgICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoXCJzZWxlY3RGaWx0ZXJcIik/LnZhbHVlPy50aXRsZSB8fFxuICAgICAgICAgICAgICAgICAgICBcIkZpbHRyYXJcIlxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0eXBlRmlsdGVyXCJcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGlnaXRlIHBhcmEgZmlsdHJhci4uLlwiXG4gICAgICAgICAgICAgICAgI2lucHV0XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBEUk9QRE9XTiBGSUxURVIgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJtaW4tdy1bMjAwcHhdIGZsZXgtMVwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZSAmJlxuICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKVxuICAgICAgICAgICAgICAgIC5nZXQoJ3NlbGVjdEZpbHRlcicpXG4gICAgICAgICAgICAgICAgPy52YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaXRlbXMnKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7XG4gICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cCkuZ2V0KFwic2VsZWN0RmlsdGVyXCIpPy52YWx1ZT8udGl0bGUgfHxcbiAgICAgICAgICAgICAgICAgIFwiU2VsZWNpb25lXCJcbiAgICAgICAgICAgICAgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjaW9uZS4uLlwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0SXRlbVwiXG4gICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgJGFueShmaWx0ZXJHcm91cCkuZ2V0KCdzZWxlY3RGaWx0ZXInKT8udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAuaXRlbXNcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gREFURSBGSUxURVIgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJtaW4tdy1bMzQwcHhdIGZsZXgtYXV0b1wiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZT8uYXJyYW5nZSA9PT1cbiAgICAgICAgICAgICAgJ2ZpbHRlckJ5RGF0ZSdcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtc3RyZXRjaCBnYXAtMyBzbTpmbGV4LXJvdyBzbTppdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhciB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+RGF0YSBJbmljaWFsPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkRhdGVJbnB1dCgkZXZlbnQsICdpbml0aWFsRGF0ZScsIGkpXCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImluaXRpYWxEYXRlXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiREQvTU0vQUFBQVwiXG4gICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhciB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+RGF0YSBGaW5hbDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkRhdGVJbnB1dCgkZXZlbnQsICdmaW5hbERhdGUnLCBpKVwiXG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZmluYWxEYXRlXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiREQvTU0vQUFBQVwiXG4gICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBSRU1PVkUgRklMVEVSIEJVVFRPTiAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyc0Zvcm0ubGVuZ3RoID4gMVwiIGNsYXNzPVwibWwtYXV0byBmbGV4LXNocmluay0wXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWx0ZXIoaSlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaC0xMCB3LTEwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMzAwIGhvdmVyOmJnLXJlZC0xMDBcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiUmVtb3ZlciBmaWx0cm9cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIHRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDBcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBQQU5FTCBGT09URVI6IEFkZCBGaWx0ZXIgJiBBY3Rpb24gQnV0dG9ucyAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCItbWItMiBmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtNCBib3JkZXItdCBib3JkZXItZ3JheS0yMDAgcHQtNFwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gQWRkIEZpbHRlciBCdXR0b24gLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJkcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiYWRkRmlsdGVyKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0cmFuc2Zvcm0gcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci1ibHVlLTMwMCBiZy1ibHVlLTUwIHB4LTYgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYmx1ZS02MDAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIGhvdmVyOi10cmFuc2xhdGUteS0wLjUgaG92ZXI6Ym9yZGVyLWJsdWUtNDAwIGhvdmVyOmJnLWJsdWUtMTAwIGhvdmVyOnNoYWRvdy1tZFwiXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiQWRpY2lvbmFyIG5vdm8gZmlsdHJvXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXMgbXItMlwiPjwvaT5cbiAgICAgICAgICAgIEFkaWNpb25hciBGaWx0cm9cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBSaWdodCBTaWRlOiBTZWFyY2gsIFJlc2V0LCBFeHBvcnQgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC0zIHNlbGYtc3RhcnQgc206c2VsZi1hdXRvXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgdGhpcy5oYXNGaWx0ZXJhYmxlQ29sdW1uID09PSB0cnVlIHx8IHRoaXMuaGFzU29ydGFibGVDb2x1bW4gPT09IHRydWVcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cInNlYXJjaCgpXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLWdyZWVuLTYwMCBweC01IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWdyZWVuLTcwMFwiXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiQXBsaWNhciBmaWx0cm9zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaFwiPjwvaT5cbiAgICAgICAgICAgIFBlc3F1aXNhclxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0RmlsdGVyKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLXJlZC01MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1yZWQtNjAwXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJMaW1wYXIgZmlsdHJvc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcmVkby1hbHRcIj48L2k+XG4gICAgICAgICAgICBSZXNldGFyXG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImRhdGEuZG93bmxvYWQgIT09IGZhbHNlICYmIGRvd25sb2FkVGFibGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLW9yYW5nZS01MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1vcmFuZ2UtNjAwXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJFeHBvcnRhciBUYWJlbGFcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgJiYgdGhpcy5kYXRhU291cmNlLmZpbHRlcmVkRGF0YS5sZW5ndGggPD0gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgJGFueShhcnJhbmdlKSAmJiBkb3dubG9hZFRhYmxlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IGRvd25sb2FkVGFibGUoJGFueShhcnJhbmdlKSwgZGF0YS5jb25kaXRpb25zIHx8IFtdKVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkXCI+PC9pPlxuICAgICAgICAgICAgRXhwb3J0YXJcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVU5JRklFRCBDT05UUk9MIFBBTkVMIChmb3Igbm9uLXBhZ2luYXRlZCB0YWJsZXMpOiBTRUFSQ0gsIFNPUlQgJiBGSUxURVJTIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGJnLXdoaXRlIHAtNCBzaGFkb3ctbGdcIlxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSAmJlxuICAgICAgICAoaGFzRmlsdGVyYWJsZUNvbHVtbiA9PT0gdHJ1ZSB8fFxuICAgICAgICAgIGRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgIGRhdGEuYWN0aW9uQnV0dG9uKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8IS0tIFBBTkVMIEhFQURFUjogVGl0bGUgYW5kIEN1c3RvbSBBY3Rpb24gLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibWItNCBmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtNCBib3JkZXItYi0yIGJvcmRlci1ncmF5LTIwMCBwYi00IG1kOmZsZXgtcm93IG1kOml0ZW1zLWNlbnRlclwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gTGVmdCBTaWRlOiBUaXRsZSAmIE1haW4gQWN0aW9uIEJ1dHRvbiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtNFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWx0ZXIgdGV4dC14bCB0ZXh0LWJsdWUtNTAwXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMFwiXG4gICAgICAgICAgICAgID5GaWx0cm9zIGUgQcOnw7Vlczwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5hY3Rpb25CdXR0b24gJiYgZGF0YS5hY3Rpb25CdXR0b24uY29uZGl0aW9uXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEFjdGlvbkJ1dHRvbkNsYXNzKClcIlxuICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiZGF0YS5hY3Rpb25CdXR0b24ucm91dGVyTGlua1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgIGRhdGEuYWN0aW9uQnV0dG9uLm1ldGhvZCA/IGRhdGEuYWN0aW9uQnV0dG9uLm1ldGhvZCgkZXZlbnQpIDogbnVsbFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuYWN0aW9uQnV0dG9uLmljb25cIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZGF0YS5hY3Rpb25CdXR0b24uaWNvblwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAge3sgZGF0YS5hY3Rpb25CdXR0b24ubGFiZWwgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBTSU1QTEUgU0VBUkNIIC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm1iLTRcIlxuICAgICAgICAqbmdJZj1cImhhc0ZpbHRlcmFibGVDb2x1bW4gPT09IHRydWUgJiYgZGF0YS5zaG93U2ltcGxlU2VhcmNoICE9PSBmYWxzZVwiXG4gICAgICA+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCB0ZXh0LWJsdWUtNTAwXCI+PC9pPlxuICAgICAgICAgICAgQnVzY2FyXG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXl1cCk9XCJhcHBseUZpbHRlcihmaWx0ZXJJbnB1dC52YWx1ZSlcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEaWdpdGUgcGFyYSBmaWx0cmFyLi4uXCJcbiAgICAgICAgICAgICNmaWx0ZXJJbnB1dFxuICAgICAgICAgIC8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeCBjbGFzcz1cInRleHQtZ3JheS01MDBcIj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gRklMVEVSUyBQQU5FTCAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCJkcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPCEtLSBGSUxURVJTIENPTlRFTlQgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi00IHNwYWNlLXktM1wiICpuZ0lmPVwiZmlsdGVyc0Zvcm0uY29udHJvbHMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiJGFueShmaWx0ZXJHcm91cClcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpbHRlckdyb3VwIG9mIGZpbHRlcnNGb3JtLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIEZJTFRFUiBUWVBFIFNFTEVDVE9SIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbi13LVsyMDBweF0gZmxleC0xXCIgKm5nSWY9XCJkcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlRpcG8gZGUgZmlsdHJvPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWNpb25lIG8gdGlwby4uLlwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdEZpbHRlckNoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRBdmFpbGFibGVGaWx0ZXJPcHRpb25zKGZpbHRlckdyb3VwKVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJpdGVtLmljb24gfHwgJ2ZhIGZhLWZpbHRlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtYmx1ZS01MDBcIlxuICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gVEVYVCBGSUxURVIgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlPy5hcnJhbmdlID09PVxuICAgICAgICAgICAgICAgICdmaWx0ZXInXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cCkuZ2V0KFwic2VsZWN0RmlsdGVyXCIpPy52YWx1ZT8udGl0bGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICBcIkZpbHRyYXJcIlxuICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidHlwZUZpbHRlclwiXG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEaWdpdGUgcGFyYSBmaWx0cmFyLi4uXCJcbiAgICAgICAgICAgICAgICAgICNpbnB1dFxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBEUk9QRE9XTiBGSUxURVIgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlICYmXG4gICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cClcbiAgICAgICAgICAgICAgICAgIC5nZXQoJ3NlbGVjdEZpbHRlcicpXG4gICAgICAgICAgICAgICAgICA/LnZhbHVlLmhhc093blByb3BlcnR5KCdpdGVtcycpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e1xuICAgICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cCkuZ2V0KFwic2VsZWN0RmlsdGVyXCIpPy52YWx1ZT8udGl0bGUgfHxcbiAgICAgICAgICAgICAgICAgICAgXCJTZWxlY2lvbmVcIlxuICAgICAgICAgICAgICAgIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWNpb25lLi4uXCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLml0ZW1zXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIERBVEUgRklMVEVSIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cIm1pbi13LVszNDBweF0gZmxleC1hdXRvXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZT8uYXJyYW5nZSA9PT1cbiAgICAgICAgICAgICAgICAnZmlsdGVyQnlEYXRlJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLXN0cmV0Y2ggZ2FwLTMgc206ZmxleC1yb3cgc206aXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhciB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5EYXRhIEluaWNpYWw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uRGF0ZUlucHV0KCRldmVudCwgJ2luaXRpYWxEYXRlJywgaSlcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkRhdGVGaWx0ZXJDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImluaXRpYWxEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJERC9NTS9BQUFBXCJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyIHRleHQtZ3JheS00MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPkRhdGEgRmluYWw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uRGF0ZUlucHV0KCRldmVudCwgJ2ZpbmFsRGF0ZScsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25EYXRlRmlsdGVyQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmaW5hbERhdGVcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkREL01NL0FBQUFcIlxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gUkVNT1ZFIEZJTFRFUiBCVVRUT04gLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyc0Zvcm0ubGVuZ3RoID4gMVwiIGNsYXNzPVwibWwtYXV0byBmbGV4LXNocmluay0wXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlRmlsdGVyKGkpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaC0xMCB3LTEwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMzAwIGhvdmVyOmJnLXJlZC0xMDBcIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJSZW1vdmVyIGZpbHRyb1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIHRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDBcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gUEFORUwgRk9PVEVSOiBBZGQgRmlsdGVyICYgQWN0aW9ucyAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiLW1iLTIgZmxleCBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTQgYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwIHB0LTRcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLSBBZGQgRmlsdGVyIEJ1dHRvbiAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZHJvcGRvd25JdGVtcy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJhZGRGaWx0ZXIoKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidHJhbnNmb3JtIHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItYmx1ZS0zMDAgYmctYmx1ZS01MCBweC02IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWJsdWUtNjAwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBob3ZlcjotdHJhbnNsYXRlLXktMC41IGhvdmVyOmJvcmRlci1ibHVlLTQwMCBob3ZlcjpiZy1ibHVlLTEwMCBob3ZlcjpzaGFkb3ctbWRcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQWRpY2lvbmFyIG5vdm8gZmlsdHJvXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzIG1yLTJcIj48L2k+XG4gICAgICAgICAgICAgIEFkaWNpb25hciBGaWx0cm9cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBBY3Rpb24gQnV0dG9ucyAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC0zIHNlbGYtc3RhcnQgc206c2VsZi1hdXRvXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHRoaXMuaGFzRmlsdGVyYWJsZUNvbHVtbiA9PT0gdHJ1ZSB8fFxuICAgICAgICAgICAgICB0aGlzLmhhc1NvcnRhYmxlQ29sdW1uID09PSB0cnVlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1sZyBiZy1ncmVlbi02MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1ncmVlbi03MDBcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQXBsaWNhciBmaWx0cm9zXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2hcIj48L2k+XG4gICAgICAgICAgICAgIFBlc3F1aXNhclxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0RmlsdGVyKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgYmctcmVkLTUwMCBweC01IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLXJlZC02MDBcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiTGltcGFyIGZpbHRyb3NcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1yZWRvLWFsdFwiPjwvaT5cbiAgICAgICAgICAgICAgUmVzZXRhclxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLmRvd25sb2FkICE9PSBmYWxzZSAmJiBkb3dubG9hZFRhYmxlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLW9yYW5nZS01MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1vcmFuZ2UtNjAwXCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRXhwb3J0YXIgVGFiZWxhXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSAmJiB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhLmxlbmd0aCA8PSAwXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVEb3dubG9hZCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1kb3dubG9hZFwiPjwvaT5cbiAgICAgICAgICAgICAgRXhwb3J0YXJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgIDwhLS0gVEFCUyBDT01QT05FTlQgLS0+XG4gICAgICA8bGliLXRhYmxlLXRhYnNcbiAgICAgICAgKm5nSWY9XCJkYXRhLnRhYnMgJiYgZGF0YS50YWJzLnRhYnNEYXRhICYmIGRhdGEudGFicy50YWJzRGF0YS5sZW5ndGggPiAwXCJcbiAgICAgICAgW3RhYnNEYXRhXT1cImRhdGEudGFicy50YWJzRGF0YVwiXG4gICAgICAgIFtzZWxlY3RlZFRhYl09XCJzZWxlY3RlZFRhYlwiXG4gICAgICAgICh0YWJTZWxlY3RlZCk9XCJvblRhYlNlbGVjdGVkKCRldmVudClcIlxuICAgICAgPjwvbGliLXRhYmxlLXRhYnM+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16OCB3LWZ1bGwgb3ZlcmZsb3cteC1hdXRvIHJvdW5kZWQteGwgdGFibGUtY29udGFpbmVyXCJcbiAgICAgID5cbiAgICAgICAgPHRhYmxlXG4gICAgICAgICAgbWF0LXRhYmxlXG4gICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgICAgICAgbWF0U29ydFxuICAgICAgICAgICNzb3J0PVwibWF0U29ydFwiXG4gICAgICAgICAgbWF0U29ydEFjdGl2ZT1cImNyZWF0ZWRBdFwiXG4gICAgICAgICAgbWF0U29ydERpcmVjdGlvbj1cImRlc2NcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBkYXRhLmRpc3BsYXllZENvbHVtbnM7IHRyYWNrQnk6IHRyYWNrQnlQcm9wZXJ0eVwiXG4gICAgICAgICAgICBtYXRDb2x1bW5EZWY9XCJ7eyBjb2wucHJvcGVydHkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgICAgIDwhLS0gSUYgVEhFIENPTFVNTiBJUyBOT1QgU09SVEFCTEUsIFRIRU4gRE9OJ1QgU0hPVyBUSEUgU09SVCBCVVRUT05TIC0tPlxuICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2wuaXNTb3J0YWJsZSB8fCBkYXRhLnBhZ2luYXRpb24gPT09IHRydWVcIlxuICAgICAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgY29sLnRpdGxlIH19XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDwhLS0gSUYgVEhFIENPTFVNTiBJUyBTT1JUQUJMRSwgVEhFTiBTSE9XIFRIRSBTT1JUIEJVVFRPTlMgLS0+XG4gICAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmlzU29ydGFibGUgJiYgZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICAgICAgICAgbWF0LXNvcnQtaGVhZGVyXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBjb2wudGl0bGUgfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgbWF0LWNlbGxcbiAgICAgICAgICAgICAgICAqbWF0Q2VsbERlZj1cImxldCByb3dcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2wubWV0aG9kID8gY29sLm1ldGhvZChyb3cpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25DZWxsTW91c2VFbnRlcigkZXZlbnQsIHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25DZWxsTW91c2VMZWF2ZSgpXCJcbiAgICAgICAgICAgICAgICAobW91c2Vtb3ZlKT1cIm9uQ2VsbE1vdXNlTW92ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwhLS0gQ0hFQ0sgSUYgVEhFIENPTFVNTiBNVVNUIEJFIERJU1BMQVlFRCAtLT5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjb2wuaW1hZ2UgJiYgIWNvbC5pY29uQ2xhc3MgJiYgIWNvbC5tZXRob2RcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbC5jaGFyTGltaXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbC5wcm9wZXJ0eV0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbC5wcm9wZXJ0eV0ubGVuZ3RoID4gY29sLmNoYXJMaW1pdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugd2l0aGluTGltaXRcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwicm93W2NvbC5wcm9wZXJ0eV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXREaXNwbGF5VmFsdWUoY29sLCByb3cpIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5oYXNMaW5rICYmIGlzU3RyaW5nKGNvbC5oYXNMaW5rKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJjb2wuaGFzTGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdykgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgIT09IHRydWUgJiYgIWlzU3RyaW5nKGNvbC5oYXNMaW5rKVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93KSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3dpdGhpbkxpbWl0PlxuICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cInJvd1tjb2wucHJvcGVydHldXCJcbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93LCB0cnVlKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaGFzTGluayAmJiBpc1N0cmluZyhjb2wuaGFzTGluaylcIlxuICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImNvbC5oYXNMaW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93LCB0cnVlKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaGFzTGluayAhPT0gdHJ1ZSAmJiAhaXNTdHJpbmcoY29sLmhhc0xpbmspXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdywgdHJ1ZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tIElNQUdFIC0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgICAgICAgICA8IS0tIEltYWdlbSBjb20gbG9hZGluZyAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICBjb2wuaW1hZ2UgJiYgY29sLmltYWdlLnBhdGggJiYgIWNvbC5pY29uQ2xhc3MgJiYgIWNvbC5tZXRob2RcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNJbWFnZUxvYWRpbmcocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjMyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIG0tYXV0b1wiXG4gICAgICAgICAgICAgICAgICA+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJjb2wuaW1hZ2UucGF0aCArICcvJyArIHJvd1tjb2wucHJvcGVydHldXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sLmltYWdlLmNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm9wYWNpdHktMF09XCJpc0ltYWdlTG9hZGluZyhyb3csIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAgICAgICAgICAgICAobG9hZCk9XCJvbkltYWdlTG9hZChyb3csIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwib25JbWFnZUVycm9yKCRldmVudCwgcm93LCBjb2wsIGNvbC5pbWFnZS5kZWZhdWx0KVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBJbWFnZW0gY29tIFVSTCBjb21wbGV0YSBlIGxvYWRpbmcgLS0+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgY29sLmltYWdlICYmIGNvbC5pbWFnZS51cmwgJiYgIWNvbC5pY29uQ2xhc3MgJiYgIWNvbC5tZXRob2RcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNJbWFnZUxvYWRpbmcocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjMyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIG0tYXV0b1wiXG4gICAgICAgICAgICAgICAgICA+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJyb3dbY29sLnByb3BlcnR5XVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbC5pbWFnZS5jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5vcGFjaXR5LTBdPVwiaXNJbWFnZUxvYWRpbmcocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICAgICAgKGxvYWQpPVwib25JbWFnZUxvYWQocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cIm9uSW1hZ2VFcnJvcigkZXZlbnQsIHJvdywgY29sLCBjb2wuaW1hZ2UuZGVmYXVsdClcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmljb25DbGFzc1wiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaWNvbkNsYXNzIG9mIGNvbC5pY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbkNsYXNzLmJ1dHRvbk1ldGhvZFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpY29uQ2xhc3MuYnV0dG9uTWV0aG9kKHJvdywgJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpY29uQ2xhc3MuY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uQ2xhc3MuY29uZGl0aW9uID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpY29uQ2xhc3MuY29uZGl0aW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJGFueShpY29uQ2xhc3MuY29uZGl0aW9uKShyb3cpKVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPnt7IGljb25DbGFzcy50ZXh0IH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImNvbHVtblByb3BlcnRpZXNcIj48L3RyPlxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0VGFibGVSb3dOZ0NsYXNzKClcIlxuICAgICAgICAgICAgbWF0LXJvd1xuICAgICAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGNvbHVtblByb3BlcnRpZXNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9EZXRhaWxzKHJvdylcIlxuICAgICAgICAgID48L3RyPlxuXG4gICAgICAgICAgPCEtLSBST1cgU0hPV04gV0hFTiBUSEVSRSBJUyBOTyBNQVRDSElORyBEQVRBLiAtLT5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJtYXQtcm93XCIgKm1hdE5vRGF0YVJvdz5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cIiEoaXNMb2FkaW5nJCB8IGFzeW5jKVwiIGNsYXNzPVwibWF0LWNlbGwgcC00XCIgY29sc3Bhbj1cIjRcIj5cbiAgICAgICAgICAgICAgTmVuaHVtIHJlc3VsdGFkbyBlbmNvbnRyYWRvIHBhcmEgYSBidXNjYVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RhYmxlPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyXCIgKm5nSWY9XCJpc0xvYWRpbmckIHwgYXN5bmNcIj5cbiAgICAgICAgICA8bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2luYXRvci1jb250YWluZXJcIj5cbiAgICAgICAgICA8bWF0LXBhZ2luYXRvclxuICAgICAgICAgICAgI3BhZ2luYXRvclxuICAgICAgICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJbMjUsIDUwLCAxMDBdXCJcbiAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgICAgICAgICBbbGVuZ3RoXT1cInRvdGFsSXRlbXNcIlxuICAgICAgICAgICAgc2hvd0ZpcnN0TGFzdEJ1dHRvbnNcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWxlY3QgcGFnZSBvZiBwZXJpb2RpYyBlbGVtZW50c1wiXG4gICAgICAgICAgICAocGFnZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJnZXRQYWdpbmF0b3JOZ0NsYXNzKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L21hdC1wYWdpbmF0b3I+XG4gICAgICAgICAgPCEtLSA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAhKGlzTG9hZGluZyQgfCBhc3luYykgJiZcbiAgICAgICAgICAgICAgZGF0YVNvdXJjZT8uZGF0YSAmJlxuICAgICAgICAgICAgICBkYXRhU291cmNlLmRhdGEubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICBkYXRhPy5maWx0ZXJGblxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwicGFnZS1udW1iZXItZGlzcGxheVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgY3VycmVudFBhZ2VOdW1iZXIgfX1cbiAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gVE9PTFRJUCBQRVJTT05BTElaQURPIC0tPlxuICA8bGliLXRhYmxlLXRvb2x0aXBcbiAgICBbc3RhdGVdPVwidG9vbHRpcFN0YXRlXCJcbiAgICBbc3R5bGVzXT1cImdldFRvb2x0aXBTdHlsZXMoKVwiXG4gID48L2xpYi10YWJsZS10b29sdGlwPlxuPC9kaXY+XG4iXX0=