@wemake4u/form-player-se 1.0.1 → 1.0.3
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.
- package/esm2022/lib/directives/dropdown.directive.mjs +8 -7
- package/esm2022/lib/directives/repeat.directive.mjs +6 -2
- package/esm2022/lib/directives/tab.directive.mjs +5 -1
- package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +50 -19
- package/esm2022/lib/locale/locale-it.mjs +6 -2
- package/esm2022/lib/services/markdown.service.mjs +13 -7
- package/esm2022/lib/services/programmability.service.mjs +21 -25
- package/esm2022/lib/services/proxy.service.mjs +1 -1
- package/esm2022/lib/services/sanitize.service.mjs +4 -1
- package/esm2022/lib/shared/template-wrapper/template-wrapper.component.mjs +33 -0
- package/esm2022/lib/utils/gridCells.mjs +61 -9
- package/fesm2022/wemake4u-form-player-se.mjs +191 -64
- package/fesm2022/wemake4u-form-player-se.mjs.map +1 -1
- package/lib/directives/dropdown.directive.d.ts +1 -1
- package/lib/dynamic-fields/dynamic-fields.component.d.ts +5 -1
- package/lib/dynamic-form/dynamic-form.component.d.ts +4 -0
- package/lib/locale/locale-it.d.ts +4 -0
- package/lib/services/programmability.service.d.ts +7 -3
- package/lib/services/proxy.service.d.ts +1 -0
- package/lib/services/sanitize.service.d.ts +1 -0
- package/lib/shared/template-wrapper/template-wrapper.component.d.ts +10 -0
- package/lib/utils/gridCells.d.ts +17 -2
- package/package.json +1 -1
|
@@ -16,11 +16,12 @@ import { AccordionDirective } from '../directives/accordion.directive';
|
|
|
16
16
|
import { GridDirective } from '../directives/grid.directive';
|
|
17
17
|
import { RegisterDirective } from '../directives/register.directive';
|
|
18
18
|
import { UpdateBlurDirective } from '../directives/updateblur.directive';
|
|
19
|
-
import {
|
|
19
|
+
import { TemplateWrapperComponent } from '../shared/template-wrapper/template-wrapper.component';
|
|
20
|
+
import { ObjectURLRendererComponent, DeleteRowCellRenderer, ActionsCellRenderer } from '../utils/gridCells';
|
|
20
21
|
import { isObservable, of } from 'rxjs';
|
|
21
22
|
import { SirioInputComponent, SirioValidationDirective, SirioSelectComponent, SirioSelectOptionComponent, SirioSelectPanelComponent, SirioCheckboxGroupComponent, SirioCheckboxComponent, SirioDatepickerComponent, SirioTimepickerComponent, SirioRadioGroupComponent, SirioRadioButtonComponent, SirioTabComponent, SirioTabItemComponent, SirioAccordionComponent, SirioAccordionPanelComponent, SirioAccordionHeaderComponent, SirioAccordionBodyComponent, SirioButtonComponent, SirioFileUploadComponent, SirioToggleComponent, SirioChipCheckboxGroupComponent, SirioChipRadioGroupComponent, SirioInputChipComponent, SirioTableModule, SirioTableComponent, SirioPaginatorComponent, SirioAlertComponent, SirioAlertMessageComponent, SirioSliderComponent, SirioNotifyComponent, SirioNotifyBodyComponent, SirioNotifyActionComponent, SirioNotifyLinkComponent, SirioTooltipDirective } from 'ngx-sirio-lib';
|
|
22
23
|
import { AgGridAngular } from 'ag-grid-angular';
|
|
23
|
-
import { PaginationModule, ClientSideRowModelModule, InfiniteRowModelModule, LocaleModule, CellStyleModule, TextFilterModule, NumberFilterModule, DateFilterModule, themeQuartz, iconSetAlpine, ClientSideRowModelApiModule } from 'ag-grid-community';
|
|
24
|
+
import { PaginationModule, ClientSideRowModelModule, InfiniteRowModelModule, LocaleModule, CellStyleModule, ValidationModule, TextFilterModule, NumberFilterModule, DateFilterModule, themeQuartz, iconSetAlpine, ClientSideRowModelApiModule, ColumnAutoSizeModule, ColumnApiModule } from 'ag-grid-community';
|
|
24
25
|
import { AG_GRID_LOCALE_IT } from '@ag-grid-community/locale';
|
|
25
26
|
import { Texts } from '../locale/locale-it';
|
|
26
27
|
import * as i0 from "@angular/core";
|
|
@@ -107,7 +108,7 @@ export class DynamicFieldsComponent {
|
|
|
107
108
|
return this.programmability.evaluateTemplate(this.formGroup, value);
|
|
108
109
|
}
|
|
109
110
|
evaluate(text, cacheable = true) {
|
|
110
|
-
return this.programmability.evaluate(this.formGroup, text, cacheable);
|
|
111
|
+
return this.programmability.evaluate(this.formGroup, text, { cacheable: cacheable });
|
|
111
112
|
}
|
|
112
113
|
evaluateColor(value) {
|
|
113
114
|
const color = this.evaluateString(value);
|
|
@@ -137,8 +138,11 @@ export class DynamicFieldsComponent {
|
|
|
137
138
|
: this.formGroup;
|
|
138
139
|
}
|
|
139
140
|
toHTML(text) {
|
|
140
|
-
|
|
141
|
-
return this.
|
|
141
|
+
const watchKey = `:safeHtml(${text})`;
|
|
142
|
+
return this.weak.call(this.formGroup, watchKey, () => {
|
|
143
|
+
const html = this.markdown.toHtml(text);
|
|
144
|
+
return this.sanitizer.sanitizeSafeHtml(html);
|
|
145
|
+
});
|
|
142
146
|
}
|
|
143
147
|
;
|
|
144
148
|
sanitize(html) {
|
|
@@ -185,18 +189,26 @@ export class DynamicFieldsComponent {
|
|
|
185
189
|
}
|
|
186
190
|
getGridOptions(component) {
|
|
187
191
|
return this.weak.call(component, 'getGridOptions', () => {
|
|
192
|
+
const columnDefs = this.getGridColumns(component);
|
|
193
|
+
const pagination = this.getGridPaginable(component);
|
|
194
|
+
const pageSize = this.getGridPageSize(component);
|
|
195
|
+
const texts = this.getGridTexts();
|
|
196
|
+
const theme = this.getGridTheme();
|
|
188
197
|
return {
|
|
189
198
|
defaultColDef: {
|
|
190
199
|
floatingFilter: (component.floatingFilter === true),
|
|
191
200
|
headerClass: (component.floatingFilter === true)
|
|
192
201
|
? 'show-filter' : 'hide-filter'
|
|
193
202
|
},
|
|
194
|
-
columnDefs:
|
|
195
|
-
pagination:
|
|
196
|
-
paginationPageSize:
|
|
203
|
+
columnDefs: columnDefs,
|
|
204
|
+
pagination: pagination,
|
|
205
|
+
paginationPageSize: pageSize,
|
|
197
206
|
paginationPageSizeSelector: [5, 10, 20, 50],
|
|
198
|
-
localeText:
|
|
199
|
-
theme:
|
|
207
|
+
localeText: texts,
|
|
208
|
+
theme: theme,
|
|
209
|
+
onGridReady: (params) => {
|
|
210
|
+
params.api.autoSizeColumns(["actions"]);
|
|
211
|
+
}
|
|
200
212
|
};
|
|
201
213
|
});
|
|
202
214
|
}
|
|
@@ -211,7 +223,10 @@ export class DynamicFieldsComponent {
|
|
|
211
223
|
ClientSideRowModelApiModule,
|
|
212
224
|
TextFilterModule,
|
|
213
225
|
NumberFilterModule,
|
|
214
|
-
DateFilterModule
|
|
226
|
+
DateFilterModule,
|
|
227
|
+
ColumnAutoSizeModule,
|
|
228
|
+
ColumnApiModule,
|
|
229
|
+
ValidationModule
|
|
215
230
|
];
|
|
216
231
|
});
|
|
217
232
|
}
|
|
@@ -246,19 +261,19 @@ export class DynamicFieldsComponent {
|
|
|
246
261
|
},
|
|
247
262
|
"columns": [
|
|
248
263
|
{
|
|
249
|
-
"label":
|
|
264
|
+
"label": Texts.Name,
|
|
250
265
|
"key": "name",
|
|
251
266
|
"flex": 1
|
|
252
267
|
},
|
|
253
268
|
{
|
|
254
|
-
"label":
|
|
269
|
+
"label": Texts.Size,
|
|
255
270
|
"key": "size",
|
|
256
271
|
"format": "integer",
|
|
257
272
|
"align": "right"
|
|
258
273
|
},
|
|
259
274
|
{
|
|
260
|
-
"
|
|
261
|
-
"
|
|
275
|
+
"label": Texts.Type,
|
|
276
|
+
"key": "type"
|
|
262
277
|
},
|
|
263
278
|
{
|
|
264
279
|
"key": "url",
|
|
@@ -345,7 +360,7 @@ export class DynamicFieldsComponent {
|
|
|
345
360
|
});
|
|
346
361
|
getGridColumns(component) {
|
|
347
362
|
if (Array.isArray(component.columns)) {
|
|
348
|
-
|
|
363
|
+
const columns = component.columns.map((column) => ({
|
|
349
364
|
field: column.key,
|
|
350
365
|
headerName: column.label,
|
|
351
366
|
resizable: column.resize === true,
|
|
@@ -364,6 +379,21 @@ export class DynamicFieldsComponent {
|
|
|
364
379
|
valueFormatter: this.getGridFormatter(column),
|
|
365
380
|
cellRenderer: this.getGridRenderer(column)
|
|
366
381
|
}));
|
|
382
|
+
if (Array.isArray(component.actions) && component.actions.length > 0) {
|
|
383
|
+
columns.push({
|
|
384
|
+
colId: 'actions',
|
|
385
|
+
headerName: "A", //Texts.Actions,
|
|
386
|
+
resizable: false,
|
|
387
|
+
cellDataType: false,
|
|
388
|
+
pinned: "right",
|
|
389
|
+
cellRendererParams: {
|
|
390
|
+
component: component,
|
|
391
|
+
formGroup: this.formGroup
|
|
392
|
+
},
|
|
393
|
+
cellRenderer: ActionsCellRenderer
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
return columns;
|
|
367
397
|
}
|
|
368
398
|
else {
|
|
369
399
|
return [];
|
|
@@ -463,7 +493,7 @@ export class DynamicFieldsComponent {
|
|
|
463
493
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DynamicFieldsComponent, isStandalone: true, selector: "app-dynamic-fields", inputs: { rows: "rows", formGroup: "formGroup" }, providers: [
|
|
464
494
|
RegisterService,
|
|
465
495
|
ProgrammabilityService
|
|
466
|
-
], ngImport: i0, template: "<ng-container *ngFor=\"let row of rows\" [formGroup]=\"formGroup\">\r\n <div class=\"row field-set\">\r\n <ng-container *ngFor=\"let component of row.components\">\r\n <ng-container [ngSwitch]=\"component.type\">\r\n <div [formGroup]=\"formGroup\" [class]=\"getClass(component)\">\r\n <!-- #region textfield -->\r\n <ng-container *ngSwitchCase=\"'textfield'\">\r\n <ngx-sirio-input type=\"text\"\r\n ariaLabel=\"input\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textfield\r\n [register]=\"component\"\r\n [componentRef]=\"textfield\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region select -->\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ngx-sirio-select ariaLabel=\"select\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n dropdown\r\n #select\r\n [register]=\"component\"\r\n [componentRef]=\"select\">\r\n <ngx-sirio-select-panel ariaLabel=\"items\">\r\n <ngx-sirio-input *ngIf=\"component.searchable\" class=\"searchable\" type=\"text\" [placeholder]=\"Texts.TypeToSearch\"></ngx-sirio-input>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ option.label }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region taglist -->\r\n <ng-container *ngSwitchCase=\"'taglist'\">\r\n <ngx-sirio-select ariaLabel=\"select\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [isMultiple]=\"true\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #taglist\r\n [register]=\"component\"\r\n [componentRef]=\"taglist\">\r\n <ngx-sirio-select-panel ariaLabel=\"items\">\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ option.label }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <ngx-sirio-input type=\"number\"\r\n ariaLabel=\"input\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #number\r\n [register]=\"component\"\r\n [componentRef]=\"number\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region datetime -->\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ngx-sirio-datepicker ariaLabel=\"date\"\r\n [label]=\"evaluateString(component.dateLabel)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #date\r\n [register]=\"component\"\r\n [componentRef]=\"date\">\r\n </ngx-sirio-datepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region time -->\r\n <ng-container *ngSwitchCase=\"'time'\">\r\n <ngx-sirio-timepicker ariaLabel=\"time\"\r\n [label]=\"evaluateString(component.timeLabel)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #time\r\n [register]=\"component\"\r\n [componentRef]=\"time\">\r\n </ngx-sirio-timepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checkbox -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region toggle -->\r\n <ng-container *ngSwitchCase=\"'toggle'\">\r\n <ngx-sirio-toggle ariaLabel=\"checkbox\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #toggle\r\n [register]=\"component\"\r\n [componentRef]=\"toggle\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-toggle>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox ariaLabel=\"checkbox\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-checkbox>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region radio -->\r\n <ng-container *ngSwitchCase=\"'radio'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-radio-group ariaLabel=\"radio\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipradio\r\n [register]=\"component\"\r\n [componentRef]=\"chipradio\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"radio\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-radio-group ariaLabel=\"radio\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #radio\r\n [register]=\"component\"\r\n [componentRef]=\"radio\">\r\n <ngx-sirio-radio-button *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-radio-button>\r\n </ngx-sirio-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checklist -->\r\n <ng-container *ngSwitchCase=\"'checklist'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-checkbox-group ariaLabel=\"checklist\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipcheckbox\r\n [register]=\"component\"\r\n [componentRef]=\"chipcheckbox\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"checkbox\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox-group ariaLabel=\"checklist\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n <ngx-sirio-checkbox *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-checkbox>\r\n </ngx-sirio-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region textarea -->\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <ngx-sirio-input type=\"textarea\"\r\n ariaLabel=\"textarea\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [formControlName]=\"component.key\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textarea\r\n [register]=\"component\"\r\n [componentRef]=\"textarea\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region filepicker -->\r\n <ng-container *ngSwitchCase=\"'filepicker'\">\r\n <ngx-sirio-file-upload ariaLabel=\"filepicker\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [accept]=\"getMimeTypes(component.accept)\"\r\n [multiple]=\"evaluateBoolean(component.multiple)\"\r\n (fileUploadedEvent)=\"fileUploaded($event)\"\r\n [showFilelist]=\"!component.showDetails\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #filepicker\r\n [register]=\"component\"\r\n [componentRef]=\"filepicker\">\r\n <span class=\"fas fa-arrow-up\" aria-hidden=\"true\"></span>\r\n {{ Texts.Upload }}\r\n </ngx-sirio-file-upload>\r\n <ng-container *ngIf=\"component.showDetails\">\r\n <app-dynamic-fields [formGroup]=\"formGroup\" [rows]=\"createUploadTables(component)\"></app-dynamic-fields>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region text -->\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #text\r\n [register]=\"component\"\r\n [componentRef]=\"text\">\r\n <div class=\"flex\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n <button *ngIf=\"component.tooltip\"\r\n class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [content]=\"evaluateString(component.tooltip)\"></button>\r\n </div>\r\n </div> \r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region html -->\r\n <ng-container *ngSwitchCase=\"'html'\">\r\n <div class=\"html-paragraph\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [innerHTML]=\"sanitize(evaluateTemplate(component.content))\"\r\n #html\r\n [register]=\"component\"\r\n [componentRef]=\"html\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img [src]=\"evaluateString(component.source)\"\r\n [alt]=\"evaluateString(component.alt)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n style=\"width: 100%;height: 100%;\"\r\n #image\r\n [register]=\"component\"\r\n [componentRef]=\"image\">\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region dynamiclist -->\r\n <ng-container *ngSwitchCase=\"'dynamiclist'\">\r\n <ng-container [formArrayName]=\"component.path\" [repeat]=\"evaluateNumber(component.repetitions)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <ng-container *ngIf=\"getFormArray(formGroup.get(component.path)).controls.length > 0\">\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclisttab\">\r\n <ngx-sirio-tab [leftArrowLabel]=\"Texts.ScrollLeft\"\r\n [rightArrowLabel]=\"Texts.ScrollRight\"\r\n [tabCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclisttab>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-tab-item [label]=\"component.label + ' ' + (i + 1)\">\r\n <!--<ng-container *ngTemplateOutlet=\"itemTemplate; context: { item: item, index: i }\"></ng-container>-->\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclistaccordion\">\r\n <ngx-sirio-accordion [accordionCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclistaccordion>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-accordion-panel>\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"component.label + ' ' + (i + 1)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <!--<ng-container *ngTemplateOutlet=\"itemTemplate; context: { item: item, index: i }\"></ng-container>-->\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <div [ngClass]=\"{'group-outline': component.showOutline === true}\"\r\n #dynamiclist\r\n [register]=\"component\"\r\n [componentRef]=\"dynamiclist\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"addNewItem(component)\" class=\"add-item\" [color]=\"null\" icon=\"fas fa-plus\">{{ Texts.AddItem }}</ngx-sirio-button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region group -->\r\n <ng-container *ngSwitchCase=\"'group'\">\r\n <div [ngClass]=\"{\r\n 'group-outline': component.showOutline === true,\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <div #group\r\n [register]=\"component\"\r\n [componentRef]=\"group\">\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(component.path))\"\r\n [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region table -->\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <ag-grid-angular [modules]=\"getGridModules(component)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [gridOptions]=\"getGridOptions(component)\"\r\n [rowSource]=\"(getGridData(component) | async) || []\"\r\n [style.height.px]=\"component.height\"\r\n #table\r\n [register]=\"component\"\r\n [componentRef]=\"table\" />\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region button -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ngx-sirio-button (clickEvent)=\"clickButton(component, $event)\"\r\n [color]=\"evaluateColor(component.color)\"\r\n [icon]=\"evaluateString(component.icon)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [disabled]=\"evaluateBoolean(component.disabled)\"\r\n #button\r\n [register]=\"component\"\r\n [componentRef]=\"button\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-button>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region separator -->\r\n <ng-container *ngSwitchCase=\"'separator'\">\r\n <div class=\"separator\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #separator\r\n [register]=\"component\"\r\n [componentRef]=\"separator\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region spacer -->\r\n <ng-container *ngSwitchCase=\"'spacer'\">\r\n <div style=\"width: 100%\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [style.height.px]=\"component.height\"\r\n #spacer\r\n [register]=\"component\"\r\n [componentRef]=\"spacer\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region iframe -->\r\n <ng-container *ngSwitchCase=\"'iframe'\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <label [for]=\"component.id\">{{ evaluateString(component.label) }}</label>\r\n <iframe [src]=\"evaluateUrl(component.url)\"\r\n [title]=\"evaluateString(component.label)\"\r\n [style.width]=\"'100%'\"\r\n [style.height.px]=\"component.height\"\r\n [frameSecurity]=\"component.security\"\r\n #iframe\r\n [register]=\"component\"\r\n [componentRef]=\"iframe\">\r\n </iframe>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region alert -->\r\n <ng-container *ngSwitchCase=\"'alert'\">\r\n <ngx-sirio-alert [type]=\"component.role\"\r\n [labelClose]=\"Texts.Close\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #alert\r\n [register]=\"component\"\r\n [componentRef]=\"alert\">\r\n <ngx-sirio-alert-message>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </ngx-sirio-alert-message>\r\n </ngx-sirio-alert>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region notice -->\r\n <ng-container *ngSwitchCase=\"'notice'\">\r\n <ngx-sirio-notify [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #notice\r\n [register]=\"component\"\r\n [componentRef]=\"notice\">\r\n <ngx-sirio-notify-body [title]=\"evaluateString(component.title)\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </ngx-sirio-notify-body>\r\n </ngx-sirio-notify>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region range -->\r\n <ng-container *ngSwitchCase=\"'range'\">\r\n <ngx-sirio-slider [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [min]=\"evaluateNumber(component.range?.min) ?? 0\"\r\n [max]=\"evaluateNumber(component.range?.max) ?? 0\"\r\n #range\r\n [register]=\"component\"\r\n [componentRef]=\"range\">\r\n </ngx-sirio-slider>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tooltip -->\r\n <ng-container *ngSwitchCase=\"'tooltip'\">\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [sirioTooltip]=\"evaluateString(component.title)\"\r\n [content]=\"evaluateString(component.text)\"\r\n #tooltip\r\n [register]=\"component\"\r\n [componentRef]=\"tooltip\"></button>\r\n </ng-container>\r\n <!-- #endregion --> \r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>\r\n", styles: [".flex{display:flex}.field-set{align-items:center}.field-set>div{margin-top:10px;margin-bottom:10px}.separator{border-bottom:2px solid #d9e4f7;width:100%;margin:10px 0}.group-outline{border:1px solid #d9e4f7;padding:15px;margin-top:2px;margin-bottom:2px}.group-top .row{align-items:baseline}.group-center .row{align-items:center}.group-bottom .row{align-items:end}.text-paragraph p{margin-bottom:0!important}.sirio-control.ng-invalid .sirio-form-feedback{color:#aa224f;display:inline-block}.sirio-control.ng-invalid .sirio-input-group-text{color:#aa224f;border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label{color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label:before,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label{color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:before,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:after,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:after{background-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-upload.sirio-is-invalid button{background-color:#aa224f;border-color:#aa224f}.sirio-accordion .sirio-accordion-body .sirio-accordion-content{padding:16px}.ag-cell-value button.sirio-btn.sirio-btn-icon{padding:0}.sirio-tab.sirio-tab-scroll{display:block}.sirio-dropdown .searchable{position:absolute;width:100%;display:none;left:0}.ag-header-cell.hide-filter .ag-header-cell-filter-button{display:none}\n"], dependencies: [{ kind: "component", type: DynamicFieldsComponent, selector: "app-dynamic-fields", inputs: ["rows", "formGroup"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i9.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i9.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i10.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i10.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i10.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: AdornerDirective, selector: "[prefixAdorner], [suffixAdorner]", inputs: ["prefixAdorner", "suffixAdorner"] }, { kind: "directive", type: DisableDirective, selector: "[disableControl], [readonly]", inputs: ["disableControl", "readonly"] }, { kind: "directive", type: DisplayDirective, selector: "[hide], [show]", inputs: ["hide", "show"] }, { kind: "directive", type: FrameSecurityDirective, selector: "[frameSecurity]", inputs: ["frameSecurity"] }, { kind: "directive", type: DropdownDirective, selector: "[dropdown]" }, { kind: "directive", type: UpdateBlurDirective, selector: "[updateBlur]" }, { kind: "directive", type: RepeatDirective, selector: "[repeat]", inputs: ["repeat"] }, { kind: "directive", type: TabDirective, selector: "[tabCount]", inputs: ["tabCount"] }, { kind: "directive", type: GridDirective, selector: "[rowSource]", inputs: ["rowSource"] }, { kind: "directive", type: RegisterDirective, selector: "[register]", inputs: ["register", "componentRef"] }, { kind: "directive", type: AccordionDirective, selector: "[accordionCount]", inputs: ["accordionCount"] }, { kind: "component", type: SirioInputComponent, selector: "ngx-sirio-input", inputs: ["disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "type", "name", "placeholder", "textHelp", "textFeedback", "rows", "cols", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "role"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "directive", type: SirioValidationDirective, selector: "[validation]", inputs: ["canValidate", "isWarning", "showWhenValid"] }, { kind: "component", type: SirioSelectComponent, selector: "ngx-sirio-select", inputs: ["placeholder", "disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "isMultiple", "textHelp", "textFeedback", "ariaLabel", "ariaInvalid", "ariaDescribedBy"], outputs: ["focusEvent", "blurEvent", "keydownEvent"] }, { kind: "component", type: SirioSelectOptionComponent, selector: "ngx-sirio-select-option", inputs: ["value"], outputs: ["optionSelected", "blurEvent"] }, { kind: "component", type: SirioSelectPanelComponent, selector: "ngx-sirio-select-panel", outputs: ["optionSelected", "panelOpened", "panelClosed"] }, { kind: "component", type: SirioCheckboxGroupComponent, selector: "ngx-sirio-checkbox-group", inputs: ["textHelp", "textFeedback", "label", "labelPopover", "ariaLabelPopoverButton", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioCheckboxComponent, selector: "ngx-sirio-checkbox", inputs: ["disabled", "name", "textHelp", "textFeedback", "value", "ariaInvalid", "ariaDescribedBy", "disabledState", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioDatepickerComponent, selector: "ngx-sirio-datepicker", inputs: ["name", "placeholder", "textHelp", "textFeedback", "label", "labelPopover", "ariaLabelPopoverButton", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "value", "disabledState"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent", "datechangeEvent"] }, { kind: "component", type: SirioTimepickerComponent, selector: "ngx-sirio-timepicker", inputs: ["name", "label", "labelPopover", "ariaLabelPopoverButton", "placeholder", "textHelp", "textFeedback", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "component", type: SirioRadioGroupComponent, selector: "ngx-sirio-radio-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioRadioButtonComponent, selector: "ngx-sirio-radio-button", inputs: ["disabledState", "label", "name", "textHelp", "textFeedback", "ariaInvalid", "ariaDescribedBy", "value", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioTabComponent, selector: "ngx-sirio-tab", inputs: ["isVertical", "isNavLine", "leftArrowLabel", "rightArrowLabel", "tabActive"], outputs: ["tabChange"] }, { kind: "component", type: SirioTabItemComponent, selector: "ngx-sirio-tab-item", inputs: ["label", "disabled", "icon"] }, { kind: "component", type: SirioAccordionComponent, selector: "ngx-sirio-accordion", inputs: ["dark"] }, { kind: "component", type: SirioAccordionPanelComponent, selector: "ngx-sirio-accordion-panel", inputs: ["active", "disabled"], outputs: ["opened", "closed"] }, { kind: "component", type: SirioAccordionHeaderComponent, selector: "ngx-sirio-accordion-header" }, { kind: "component", type: SirioAccordionBodyComponent, selector: "ngx-sirio-accordion-body" }, { kind: "component", type: SirioButtonComponent, selector: "ngx-sirio-button", inputs: ["ariaExpanded", "ariaControls", "ariaActivedescendant", "ariaHaspopup", "ariaLabel", "ariaRequired", "ariaInvalid", "ariaDescribedby", "icon", "title", "role", "color", "isFloating", "isExtended", "isLight", "isSmall", "disabled", "isDropdown", "type", "dismissType", "isBtnBlock"], outputs: ["clickEvent", "focusEvent", "blurEvent"] }, { kind: "component", type: SirioFileUploadComponent, selector: "ngx-sirio-file-upload", inputs: ["multiple", "color", "accept", "maxFiles", "showFilelist", "label", "labelPopover", "ariaLabelPopoverButton", "name", "textHelp", "textFeedback", "ariaLabel", "ariaLabelDeleteFileButton", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "fileUploadedEvent", "fileDeletedEvent", "uploadErrorEvent", "blurEvent"] }, { kind: "component", type: SirioToggleComponent, selector: "ngx-sirio-toggle", inputs: ["name", "textHelp", "textFeedback", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioChipCheckboxGroupComponent, selector: "ngx-sirio-chip-checkbox-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioChipRadioGroupComponent, selector: "ngx-sirio-chip-radio-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioInputChipComponent, selector: "ngx-sirio-input-chip", inputs: ["disabledState", "name", "textHelp", "textFeedback", "value", "ariaInvalid", "ariaDescribedBy", "type", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "ngmodule", type: SirioTableModule }, { kind: "component", type: SirioAlertComponent, selector: "ngx-sirio-alert", inputs: ["type", "labelClose", "isVisible"], outputs: ["closeEvent"] }, { kind: "component", type: SirioAlertMessageComponent, selector: "ngx-sirio-alert-message" }, { kind: "component", type: SirioSliderComponent, selector: "ngx-sirio-slider", inputs: ["disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "description", "min", "max", "ariaInvalid", "ariaDescribedBy", "textHelp", "textFeedback"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "component", type: SirioNotifyComponent, selector: "ngx-sirio-notify", inputs: ["isDark"] }, { kind: "component", type: SirioNotifyBodyComponent, selector: "ngx-sirio-notify-body", inputs: ["title"] }, { kind: "directive", type: SirioTooltipDirective, selector: "[sirioTooltip]", inputs: ["sirioTooltip", "content", "hasAction", "hasPopover", "actionLabel", "actionIconClass", "clickOutside", "position", "customTemplate"], outputs: ["clickEvent"] }, { kind: "component", type: AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
496
|
+
], ngImport: i0, template: "<ng-container *ngFor=\"let row of rows\" [formGroup]=\"formGroup\">\r\n <div class=\"row field-set\">\r\n <ng-container *ngFor=\"let component of row.components\">\r\n <ng-container [ngSwitch]=\"component.type\">\r\n <div [formGroup]=\"formGroup\" [class]=\"getClass(component)\">\r\n <!-- #region textfield -->\r\n <ng-container *ngSwitchCase=\"'textfield'\">\r\n <ngx-sirio-input type=\"text\"\r\n ariaLabel=\"input\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textfield\r\n [register]=\"component\"\r\n [componentRef]=\"textfield\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region select -->\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ngx-sirio-select ariaLabel=\"select\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n dropdown\r\n #select\r\n [register]=\"component\"\r\n [componentRef]=\"select\">\r\n <ngx-sirio-select-panel ariaLabel=\"items\">\r\n <ngx-sirio-input *ngIf=\"component.searchable\" class=\"searchable\" type=\"text\" [placeholder]=\"Texts.TypeToSearch\"></ngx-sirio-input>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ option.label }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region taglist -->\r\n <ng-container *ngSwitchCase=\"'taglist'\">\r\n <ngx-sirio-select ariaLabel=\"select\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [isMultiple]=\"true\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #taglist\r\n [register]=\"component\"\r\n [componentRef]=\"taglist\">\r\n <ngx-sirio-select-panel ariaLabel=\"items\">\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ option.label }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <ngx-sirio-input type=\"number\"\r\n ariaLabel=\"input\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #number\r\n [register]=\"component\"\r\n [componentRef]=\"number\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region datetime -->\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ngx-sirio-datepicker ariaLabel=\"date\"\r\n [label]=\"evaluateString(component.dateLabel)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #date\r\n [register]=\"component\"\r\n [componentRef]=\"date\">\r\n </ngx-sirio-datepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region time -->\r\n <ng-container *ngSwitchCase=\"'time'\">\r\n <ngx-sirio-timepicker ariaLabel=\"time\"\r\n [label]=\"evaluateString(component.timeLabel)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #time\r\n [register]=\"component\"\r\n [componentRef]=\"time\">\r\n </ngx-sirio-timepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checkbox -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region toggle -->\r\n <ng-container *ngSwitchCase=\"'toggle'\">\r\n <ngx-sirio-toggle ariaLabel=\"checkbox\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #toggle\r\n [register]=\"component\"\r\n [componentRef]=\"toggle\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-toggle>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox ariaLabel=\"checkbox\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-checkbox>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region radio -->\r\n <ng-container *ngSwitchCase=\"'radio'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-radio-group ariaLabel=\"radio\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipradio\r\n [register]=\"component\"\r\n [componentRef]=\"chipradio\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"radio\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-radio-group ariaLabel=\"radio\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #radio\r\n [register]=\"component\"\r\n [componentRef]=\"radio\">\r\n <ngx-sirio-radio-button *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-radio-button>\r\n </ngx-sirio-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checklist -->\r\n <ng-container *ngSwitchCase=\"'checklist'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-checkbox-group ariaLabel=\"checklist\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipcheckbox\r\n [register]=\"component\"\r\n [componentRef]=\"chipcheckbox\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"checkbox\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox-group ariaLabel=\"checklist\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n <ngx-sirio-checkbox *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-checkbox>\r\n </ngx-sirio-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region textarea -->\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <ngx-sirio-input type=\"textarea\"\r\n ariaLabel=\"textarea\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [formControlName]=\"component.key\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textarea\r\n [register]=\"component\"\r\n [componentRef]=\"textarea\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region filepicker -->\r\n <ng-container *ngSwitchCase=\"'filepicker'\">\r\n <ngx-sirio-file-upload ariaLabel=\"filepicker\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [accept]=\"getMimeTypes(component.accept)\"\r\n [multiple]=\"evaluateBoolean(component.multiple)\"\r\n (fileUploadedEvent)=\"fileUploaded($event)\"\r\n [showFilelist]=\"!component.showDetails\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #filepicker\r\n [register]=\"component\"\r\n [componentRef]=\"filepicker\">\r\n <span class=\"fas fa-arrow-up\" aria-hidden=\"true\"></span>\r\n {{ Texts.Upload }}\r\n </ngx-sirio-file-upload>\r\n <ng-container *ngIf=\"component.showDetails\">\r\n <app-dynamic-fields [formGroup]=\"formGroup\" [rows]=\"createUploadTables(component)\"></app-dynamic-fields>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region text -->\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #text\r\n [register]=\"component\"\r\n [componentRef]=\"text\">\r\n <div class=\"flex\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n <ng-container *ngIf=\"component.tooltip\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.tooltip))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </div> \r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region html -->\r\n <ng-container *ngSwitchCase=\"'html'\">\r\n <div class=\"html-paragraph\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [innerHTML]=\"sanitize(evaluateTemplate(component.content))\"\r\n #html\r\n [register]=\"component\"\r\n [componentRef]=\"html\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img [src]=\"evaluateString(component.source)\"\r\n [alt]=\"evaluateString(component.alt)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n style=\"width: 100%;height: 100%;\"\r\n #image\r\n [register]=\"component\"\r\n [componentRef]=\"image\">\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region dynamiclist -->\r\n <ng-container *ngSwitchCase=\"'dynamiclist'\">\r\n <ng-container [formArrayName]=\"component.path\" [repeat]=\"evaluateNumber(component.repetitions)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <ng-container *ngIf=\"getFormArray(formGroup.get(component.path)).controls.length > 0\">\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclisttab\">\r\n <ngx-sirio-tab [leftArrowLabel]=\"Texts.ScrollLeft\"\r\n [rightArrowLabel]=\"Texts.ScrollRight\"\r\n [tabCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclisttab>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-tab-item [label]=\"component.label + ' ' + (i + 1)\">\r\n <!--<ng-container *ngTemplateOutlet=\"itemTemplate; context: { item: item, index: i }\"></ng-container>-->\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclistaccordion\">\r\n <ngx-sirio-accordion [accordionCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclistaccordion>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-accordion-panel>\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"component.label + ' ' + (i + 1)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <!--<ng-container *ngTemplateOutlet=\"itemTemplate; context: { item: item, index: i }\"></ng-container>-->\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <div [ngClass]=\"{'group-outline': component.showOutline === true}\"\r\n #dynamiclist\r\n [register]=\"component\"\r\n [componentRef]=\"dynamiclist\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"addNewItem(component)\" class=\"add-item\" [color]=\"null\" icon=\"fas fa-plus\">{{ Texts.AddItem }}</ngx-sirio-button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region group -->\r\n <ng-container *ngSwitchCase=\"'group'\">\r\n <div [ngClass]=\"{\r\n 'group-outline': component.showOutline === true,\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <div #group\r\n [register]=\"component\"\r\n [componentRef]=\"group\">\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(component.path))\"\r\n [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region table -->\r\n <div\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <ag-grid-angular [modules]=\"getGridModules(component)\" \r\n [gridOptions]=\"getGridOptions(component)\"\r\n [rowSource]=\"(getGridData(component) | async) || []\"\r\n [style.height.px]=\"component.height\"\r\n #table\r\n [register]=\"component\"\r\n [componentRef]=\"table\" />\r\n </ng-container>\r\n </div> \r\n <!-- #endregion -->\r\n <!-- #region button -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ngx-sirio-button (clickEvent)=\"clickButton(component, $event)\"\r\n [color]=\"evaluateColor(component.color)\"\r\n [icon]=\"evaluateString(component.icon)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [disabled]=\"evaluateBoolean(component.disabled)\"\r\n #button\r\n [register]=\"component\"\r\n [componentRef]=\"button\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-button>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region separator -->\r\n <ng-container *ngSwitchCase=\"'separator'\">\r\n <div class=\"separator\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #separator\r\n [register]=\"component\"\r\n [componentRef]=\"separator\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region spacer -->\r\n <ng-container *ngSwitchCase=\"'spacer'\">\r\n <div style=\"width: 100%\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [style.height.px]=\"component.height\"\r\n #spacer\r\n [register]=\"component\"\r\n [componentRef]=\"spacer\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region iframe -->\r\n <ng-container *ngSwitchCase=\"'iframe'\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <label [for]=\"component.id\">{{ evaluateString(component.label) }}</label>\r\n <iframe [src]=\"evaluateUrl(component.url)\"\r\n [title]=\"evaluateString(component.label)\"\r\n [style.width]=\"'100%'\"\r\n [style.height.px]=\"component.height\"\r\n [frameSecurity]=\"component.security\"\r\n #iframe\r\n [register]=\"component\"\r\n [componentRef]=\"iframe\">\r\n </iframe>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region alert -->\r\n <ng-container *ngSwitchCase=\"'alert'\">\r\n <ngx-sirio-alert [type]=\"component.role\"\r\n [labelClose]=\"Texts.Close\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #alert\r\n [register]=\"component\"\r\n [componentRef]=\"alert\">\r\n <ngx-sirio-alert-message>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </ngx-sirio-alert-message>\r\n </ngx-sirio-alert>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region notice -->\r\n <ng-container *ngSwitchCase=\"'notice'\">\r\n <ngx-sirio-notify [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #notice\r\n [register]=\"component\"\r\n [componentRef]=\"notice\">\r\n <ngx-sirio-notify-body [title]=\"evaluateString(component.title)\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </ngx-sirio-notify-body>\r\n </ngx-sirio-notify>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region range -->\r\n <ng-container *ngSwitchCase=\"'range'\">\r\n <ngx-sirio-slider [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [min]=\"evaluateNumber(component.range?.min) ?? 0\"\r\n [max]=\"evaluateNumber(component.range?.max) ?? 0\"\r\n #range\r\n [register]=\"component\"\r\n [componentRef]=\"range\">\r\n </ngx-sirio-slider>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tooltip -->\r\n <ng-container *ngSwitchCase=\"'tooltip'\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n sirioTooltip\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"\r\n #tooltip\r\n [register]=\"component\"\r\n [componentRef]=\"tooltip\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <p *ngIf=\"component.title\" class=\"sirio-tooltip-heading sirio-space-down\">\r\n {{ evaluateString(component.title) }}\r\n </p>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div> \r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>\r\n", styles: [".flex{display:flex}.field-set{align-items:center}.field-set>div{margin-top:10px;margin-bottom:10px}.separator{border-bottom:2px solid #d9e4f7;width:100%;margin:10px 0}.group-outline{border:1px solid #d9e4f7;padding:15px;margin-top:2px;margin-bottom:2px}.group-top .row{align-items:baseline}.group-center .row{align-items:center}.group-bottom .row{align-items:end}.text-paragraph p{margin-bottom:0!important}.sirio-control.ng-invalid .sirio-form-feedback{color:#aa224f;display:inline-block}.sirio-control.ng-invalid .sirio-input-group-text{color:#aa224f;border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label{color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label:before,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label{color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:before,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:after,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:after{background-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-upload.sirio-is-invalid button{background-color:#aa224f;border-color:#aa224f}.sirio-accordion .sirio-accordion-body .sirio-accordion-content{padding:16px}.ag-cell-value button.sirio-btn.sirio-btn-icon{padding:.25rem .0625rem;margin-left:10px}.ag-header-cell.hide-filter .ag-header-cell-filter-button{display:none}.sirio-tab.sirio-tab-scroll{display:block}.sirio-dropdown .searchable{position:absolute;width:100%;display:none;left:0}\n"], dependencies: [{ kind: "component", type: DynamicFieldsComponent, selector: "app-dynamic-fields", inputs: ["rows", "formGroup"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i9.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i9.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i9.AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i10.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i10.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i10.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: AdornerDirective, selector: "[prefixAdorner], [suffixAdorner]", inputs: ["prefixAdorner", "suffixAdorner"] }, { kind: "directive", type: DisableDirective, selector: "[disableControl], [readonly]", inputs: ["disableControl", "readonly"] }, { kind: "directive", type: DisplayDirective, selector: "[hide], [show]", inputs: ["hide", "show"] }, { kind: "directive", type: FrameSecurityDirective, selector: "[frameSecurity]", inputs: ["frameSecurity"] }, { kind: "directive", type: DropdownDirective, selector: "[dropdown]" }, { kind: "directive", type: UpdateBlurDirective, selector: "[updateBlur]" }, { kind: "directive", type: RepeatDirective, selector: "[repeat]", inputs: ["repeat"] }, { kind: "directive", type: TabDirective, selector: "[tabCount]", inputs: ["tabCount"] }, { kind: "directive", type: GridDirective, selector: "[rowSource]", inputs: ["rowSource"] }, { kind: "directive", type: RegisterDirective, selector: "[register]", inputs: ["register", "componentRef"] }, { kind: "directive", type: AccordionDirective, selector: "[accordionCount]", inputs: ["accordionCount"] }, { kind: "component", type: SirioInputComponent, selector: "ngx-sirio-input", inputs: ["disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "type", "name", "placeholder", "textHelp", "textFeedback", "rows", "cols", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "role"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "directive", type: SirioValidationDirective, selector: "[validation]", inputs: ["canValidate", "isWarning", "showWhenValid"] }, { kind: "component", type: SirioSelectComponent, selector: "ngx-sirio-select", inputs: ["placeholder", "disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "isMultiple", "textHelp", "textFeedback", "ariaLabel", "ariaInvalid", "ariaDescribedBy"], outputs: ["focusEvent", "blurEvent", "keydownEvent"] }, { kind: "component", type: SirioSelectOptionComponent, selector: "ngx-sirio-select-option", inputs: ["value"], outputs: ["optionSelected", "blurEvent"] }, { kind: "component", type: SirioSelectPanelComponent, selector: "ngx-sirio-select-panel", outputs: ["optionSelected", "panelOpened", "panelClosed"] }, { kind: "component", type: SirioCheckboxGroupComponent, selector: "ngx-sirio-checkbox-group", inputs: ["textHelp", "textFeedback", "label", "labelPopover", "ariaLabelPopoverButton", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioCheckboxComponent, selector: "ngx-sirio-checkbox", inputs: ["disabled", "name", "textHelp", "textFeedback", "value", "ariaInvalid", "ariaDescribedBy", "disabledState", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioDatepickerComponent, selector: "ngx-sirio-datepicker", inputs: ["name", "placeholder", "textHelp", "textFeedback", "label", "labelPopover", "ariaLabelPopoverButton", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "value", "disabledState"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent", "datechangeEvent"] }, { kind: "component", type: SirioTimepickerComponent, selector: "ngx-sirio-timepicker", inputs: ["name", "label", "labelPopover", "ariaLabelPopoverButton", "placeholder", "textHelp", "textFeedback", "ariaLabel", "ariaAutocomplete", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "component", type: SirioRadioGroupComponent, selector: "ngx-sirio-radio-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioRadioButtonComponent, selector: "ngx-sirio-radio-button", inputs: ["disabledState", "label", "name", "textHelp", "textFeedback", "ariaInvalid", "ariaDescribedBy", "value", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioTabComponent, selector: "ngx-sirio-tab", inputs: ["isVertical", "isNavLine", "leftArrowLabel", "rightArrowLabel", "tabActive"], outputs: ["tabChange"] }, { kind: "component", type: SirioTabItemComponent, selector: "ngx-sirio-tab-item", inputs: ["label", "disabled", "icon"] }, { kind: "component", type: SirioAccordionComponent, selector: "ngx-sirio-accordion", inputs: ["dark"] }, { kind: "component", type: SirioAccordionPanelComponent, selector: "ngx-sirio-accordion-panel", inputs: ["active", "disabled"], outputs: ["opened", "closed"] }, { kind: "component", type: SirioAccordionHeaderComponent, selector: "ngx-sirio-accordion-header" }, { kind: "component", type: SirioAccordionBodyComponent, selector: "ngx-sirio-accordion-body" }, { kind: "component", type: SirioButtonComponent, selector: "ngx-sirio-button", inputs: ["ariaExpanded", "ariaControls", "ariaActivedescendant", "ariaHaspopup", "ariaLabel", "ariaRequired", "ariaInvalid", "ariaDescribedby", "icon", "title", "role", "color", "isFloating", "isExtended", "isLight", "isSmall", "disabled", "isDropdown", "type", "dismissType", "isBtnBlock"], outputs: ["clickEvent", "focusEvent", "blurEvent"] }, { kind: "component", type: SirioFileUploadComponent, selector: "ngx-sirio-file-upload", inputs: ["multiple", "color", "accept", "maxFiles", "showFilelist", "label", "labelPopover", "ariaLabelPopoverButton", "name", "textHelp", "textFeedback", "ariaLabel", "ariaLabelDeleteFileButton", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "fileUploadedEvent", "fileDeletedEvent", "uploadErrorEvent", "blurEvent"] }, { kind: "component", type: SirioToggleComponent, selector: "ngx-sirio-toggle", inputs: ["name", "textHelp", "textFeedback", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioChipCheckboxGroupComponent, selector: "ngx-sirio-chip-checkbox-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioChipRadioGroupComponent, selector: "ngx-sirio-chip-radio-group", inputs: ["label", "labelPopover", "ariaLabelPopoverButton", "textHelp", "textFeedback", "items", "ariaLabel", "ariaInvalid", "ariaDescribedBy", "disabledState", "value"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "component", type: SirioInputChipComponent, selector: "ngx-sirio-input-chip", inputs: ["disabledState", "name", "textHelp", "textFeedback", "value", "ariaInvalid", "ariaDescribedBy", "type", "checked"], outputs: ["focusEvent", "blurEvent", "changeEvent"] }, { kind: "ngmodule", type: SirioTableModule }, { kind: "component", type: SirioAlertComponent, selector: "ngx-sirio-alert", inputs: ["type", "labelClose", "isVisible"], outputs: ["closeEvent"] }, { kind: "component", type: SirioAlertMessageComponent, selector: "ngx-sirio-alert-message" }, { kind: "component", type: SirioSliderComponent, selector: "ngx-sirio-slider", inputs: ["disabledState", "value", "label", "labelPopover", "ariaLabelPopoverButton", "description", "min", "max", "ariaInvalid", "ariaDescribedBy", "textHelp", "textFeedback"], outputs: ["focusEvent", "inputEvent", "blurEvent", "keyupEvent", "keydownEvent"] }, { kind: "component", type: SirioNotifyComponent, selector: "ngx-sirio-notify", inputs: ["isDark"] }, { kind: "component", type: SirioNotifyBodyComponent, selector: "ngx-sirio-notify-body", inputs: ["title"] }, { kind: "directive", type: SirioTooltipDirective, selector: "[sirioTooltip]", inputs: ["sirioTooltip", "content", "hasAction", "hasPopover", "actionLabel", "actionIconClass", "clickOutside", "position", "customTemplate"], outputs: ["clickEvent"] }, { kind: "component", type: TemplateWrapperComponent, selector: "app-template-wrapper", inputs: ["template", "context"] }, { kind: "component", type: AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "enableStrictPivotColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressMoveWhenColumnDragging", "suppressDragLeaveHidesColumns", "suppressGroupChangesColumnVisibility", "suppressMakeColumnVisibleAfterUnGroup", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "alwaysPassFilter", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "suppressSetFilterByDefault", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "dragAndDropImageComponent", "dragAndDropImageComponentParams", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressTouch", "suppressFocusAfterRefresh", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "loading", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "cellFlashDuration", "cellFadeDuration", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupHideParentOfSingleChild", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "cellSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "selectionColumnDef", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "enableGroupEdit", "initialState", "theme", "loadThemeGoogleFonts", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "focusGridInnerElement", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "cellSelectionDeleteStart", "cellSelectionDeleteEnd", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "dragCancelled", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "rowDragCancel", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "headerFocused", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "cellSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
467
497
|
}
|
|
468
498
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DynamicFieldsComponent, decorators: [{
|
|
469
499
|
type: Component,
|
|
@@ -482,13 +512,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
482
512
|
SirioAlertComponent, SirioAlertMessageComponent, SirioSliderComponent,
|
|
483
513
|
SirioNotifyComponent, SirioNotifyBodyComponent, SirioNotifyActionComponent, SirioNotifyLinkComponent,
|
|
484
514
|
SirioTooltipDirective,
|
|
515
|
+
TemplateWrapperComponent,
|
|
485
516
|
AgGridAngular], providers: [
|
|
486
517
|
RegisterService,
|
|
487
518
|
ProgrammabilityService
|
|
488
|
-
], encapsulation: ViewEncapsulation.None, template: "<ng-container *ngFor=\"let row of rows\" [formGroup]=\"formGroup\">\r\n <div class=\"row field-set\">\r\n <ng-container *ngFor=\"let component of row.components\">\r\n <ng-container [ngSwitch]=\"component.type\">\r\n <div [formGroup]=\"formGroup\" [class]=\"getClass(component)\">\r\n <!-- #region textfield -->\r\n <ng-container *ngSwitchCase=\"'textfield'\">\r\n <ngx-sirio-input type=\"text\"\r\n ariaLabel=\"input\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textfield\r\n [register]=\"component\"\r\n [componentRef]=\"textfield\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region select -->\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ngx-sirio-select ariaLabel=\"select\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n dropdown\r\n #select\r\n [register]=\"component\"\r\n [componentRef]=\"select\">\r\n <ngx-sirio-select-panel ariaLabel=\"items\">\r\n <ngx-sirio-input *ngIf=\"component.searchable\" class=\"searchable\" type=\"text\" [placeholder]=\"Texts.TypeToSearch\"></ngx-sirio-input>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ option.label }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region taglist -->\r\n <ng-container *ngSwitchCase=\"'taglist'\">\r\n <ngx-sirio-select ariaLabel=\"select\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [isMultiple]=\"true\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #taglist\r\n [register]=\"component\"\r\n [componentRef]=\"taglist\">\r\n <ngx-sirio-select-panel ariaLabel=\"items\">\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ option.label }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <ngx-sirio-input type=\"number\"\r\n ariaLabel=\"input\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #number\r\n [register]=\"component\"\r\n [componentRef]=\"number\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region datetime -->\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ngx-sirio-datepicker ariaLabel=\"date\"\r\n [label]=\"evaluateString(component.dateLabel)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #date\r\n [register]=\"component\"\r\n [componentRef]=\"date\">\r\n </ngx-sirio-datepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region time -->\r\n <ng-container *ngSwitchCase=\"'time'\">\r\n <ngx-sirio-timepicker ariaLabel=\"time\"\r\n [label]=\"evaluateString(component.timeLabel)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #time\r\n [register]=\"component\"\r\n [componentRef]=\"time\">\r\n </ngx-sirio-timepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checkbox -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region toggle -->\r\n <ng-container *ngSwitchCase=\"'toggle'\">\r\n <ngx-sirio-toggle ariaLabel=\"checkbox\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #toggle\r\n [register]=\"component\"\r\n [componentRef]=\"toggle\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-toggle>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox ariaLabel=\"checkbox\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-checkbox>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region radio -->\r\n <ng-container *ngSwitchCase=\"'radio'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-radio-group ariaLabel=\"radio\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipradio\r\n [register]=\"component\"\r\n [componentRef]=\"chipradio\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"radio\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-radio-group ariaLabel=\"radio\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #radio\r\n [register]=\"component\"\r\n [componentRef]=\"radio\">\r\n <ngx-sirio-radio-button *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-radio-button>\r\n </ngx-sirio-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checklist -->\r\n <ng-container *ngSwitchCase=\"'checklist'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-checkbox-group ariaLabel=\"checklist\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipcheckbox\r\n [register]=\"component\"\r\n [componentRef]=\"chipcheckbox\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"checkbox\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox-group ariaLabel=\"checklist\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n <ngx-sirio-checkbox *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-checkbox>\r\n </ngx-sirio-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region textarea -->\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <ngx-sirio-input type=\"textarea\"\r\n ariaLabel=\"textarea\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [formControlName]=\"component.key\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textarea\r\n [register]=\"component\"\r\n [componentRef]=\"textarea\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region filepicker -->\r\n <ng-container *ngSwitchCase=\"'filepicker'\">\r\n <ngx-sirio-file-upload ariaLabel=\"filepicker\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [accept]=\"getMimeTypes(component.accept)\"\r\n [multiple]=\"evaluateBoolean(component.multiple)\"\r\n (fileUploadedEvent)=\"fileUploaded($event)\"\r\n [showFilelist]=\"!component.showDetails\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #filepicker\r\n [register]=\"component\"\r\n [componentRef]=\"filepicker\">\r\n <span class=\"fas fa-arrow-up\" aria-hidden=\"true\"></span>\r\n {{ Texts.Upload }}\r\n </ngx-sirio-file-upload>\r\n <ng-container *ngIf=\"component.showDetails\">\r\n <app-dynamic-fields [formGroup]=\"formGroup\" [rows]=\"createUploadTables(component)\"></app-dynamic-fields>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region text -->\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #text\r\n [register]=\"component\"\r\n [componentRef]=\"text\">\r\n <div class=\"flex\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n <button *ngIf=\"component.tooltip\"\r\n class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [content]=\"evaluateString(component.tooltip)\"></button>\r\n </div>\r\n </div> \r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region html -->\r\n <ng-container *ngSwitchCase=\"'html'\">\r\n <div class=\"html-paragraph\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [innerHTML]=\"sanitize(evaluateTemplate(component.content))\"\r\n #html\r\n [register]=\"component\"\r\n [componentRef]=\"html\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img [src]=\"evaluateString(component.source)\"\r\n [alt]=\"evaluateString(component.alt)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n style=\"width: 100%;height: 100%;\"\r\n #image\r\n [register]=\"component\"\r\n [componentRef]=\"image\">\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region dynamiclist -->\r\n <ng-container *ngSwitchCase=\"'dynamiclist'\">\r\n <ng-container [formArrayName]=\"component.path\" [repeat]=\"evaluateNumber(component.repetitions)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <ng-container *ngIf=\"getFormArray(formGroup.get(component.path)).controls.length > 0\">\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclisttab\">\r\n <ngx-sirio-tab [leftArrowLabel]=\"Texts.ScrollLeft\"\r\n [rightArrowLabel]=\"Texts.ScrollRight\"\r\n [tabCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclisttab>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-tab-item [label]=\"component.label + ' ' + (i + 1)\">\r\n <!--<ng-container *ngTemplateOutlet=\"itemTemplate; context: { item: item, index: i }\"></ng-container>-->\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclistaccordion\">\r\n <ngx-sirio-accordion [accordionCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclistaccordion>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-accordion-panel>\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"component.label + ' ' + (i + 1)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <!--<ng-container *ngTemplateOutlet=\"itemTemplate; context: { item: item, index: i }\"></ng-container>-->\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <div [ngClass]=\"{'group-outline': component.showOutline === true}\"\r\n #dynamiclist\r\n [register]=\"component\"\r\n [componentRef]=\"dynamiclist\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"addNewItem(component)\" class=\"add-item\" [color]=\"null\" icon=\"fas fa-plus\">{{ Texts.AddItem }}</ngx-sirio-button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region group -->\r\n <ng-container *ngSwitchCase=\"'group'\">\r\n <div [ngClass]=\"{\r\n 'group-outline': component.showOutline === true,\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <div #group\r\n [register]=\"component\"\r\n [componentRef]=\"group\">\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(component.path))\"\r\n [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region table -->\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <ag-grid-angular [modules]=\"getGridModules(component)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [gridOptions]=\"getGridOptions(component)\"\r\n [rowSource]=\"(getGridData(component) | async) || []\"\r\n [style.height.px]=\"component.height\"\r\n #table\r\n [register]=\"component\"\r\n [componentRef]=\"table\" />\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region button -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ngx-sirio-button (clickEvent)=\"clickButton(component, $event)\"\r\n [color]=\"evaluateColor(component.color)\"\r\n [icon]=\"evaluateString(component.icon)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [disabled]=\"evaluateBoolean(component.disabled)\"\r\n #button\r\n [register]=\"component\"\r\n [componentRef]=\"button\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-button>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region separator -->\r\n <ng-container *ngSwitchCase=\"'separator'\">\r\n <div class=\"separator\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #separator\r\n [register]=\"component\"\r\n [componentRef]=\"separator\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region spacer -->\r\n <ng-container *ngSwitchCase=\"'spacer'\">\r\n <div style=\"width: 100%\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [style.height.px]=\"component.height\"\r\n #spacer\r\n [register]=\"component\"\r\n [componentRef]=\"spacer\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region iframe -->\r\n <ng-container *ngSwitchCase=\"'iframe'\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <label [for]=\"component.id\">{{ evaluateString(component.label) }}</label>\r\n <iframe [src]=\"evaluateUrl(component.url)\"\r\n [title]=\"evaluateString(component.label)\"\r\n [style.width]=\"'100%'\"\r\n [style.height.px]=\"component.height\"\r\n [frameSecurity]=\"component.security\"\r\n #iframe\r\n [register]=\"component\"\r\n [componentRef]=\"iframe\">\r\n </iframe>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region alert -->\r\n <ng-container *ngSwitchCase=\"'alert'\">\r\n <ngx-sirio-alert [type]=\"component.role\"\r\n [labelClose]=\"Texts.Close\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #alert\r\n [register]=\"component\"\r\n [componentRef]=\"alert\">\r\n <ngx-sirio-alert-message>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </ngx-sirio-alert-message>\r\n </ngx-sirio-alert>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region notice -->\r\n <ng-container *ngSwitchCase=\"'notice'\">\r\n <ngx-sirio-notify [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #notice\r\n [register]=\"component\"\r\n [componentRef]=\"notice\">\r\n <ngx-sirio-notify-body [title]=\"evaluateString(component.title)\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </ngx-sirio-notify-body>\r\n </ngx-sirio-notify>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region range -->\r\n <ng-container *ngSwitchCase=\"'range'\">\r\n <ngx-sirio-slider [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [min]=\"evaluateNumber(component.range?.min) ?? 0\"\r\n [max]=\"evaluateNumber(component.range?.max) ?? 0\"\r\n #range\r\n [register]=\"component\"\r\n [componentRef]=\"range\">\r\n </ngx-sirio-slider>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tooltip -->\r\n <ng-container *ngSwitchCase=\"'tooltip'\">\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [sirioTooltip]=\"evaluateString(component.title)\"\r\n [content]=\"evaluateString(component.text)\"\r\n #tooltip\r\n [register]=\"component\"\r\n [componentRef]=\"tooltip\"></button>\r\n </ng-container>\r\n <!-- #endregion --> \r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>\r\n", styles: [".flex{display:flex}.field-set{align-items:center}.field-set>div{margin-top:10px;margin-bottom:10px}.separator{border-bottom:2px solid #d9e4f7;width:100%;margin:10px 0}.group-outline{border:1px solid #d9e4f7;padding:15px;margin-top:2px;margin-bottom:2px}.group-top .row{align-items:baseline}.group-center .row{align-items:center}.group-bottom .row{align-items:end}.text-paragraph p{margin-bottom:0!important}.sirio-control.ng-invalid .sirio-form-feedback{color:#aa224f;display:inline-block}.sirio-control.ng-invalid .sirio-input-group-text{color:#aa224f;border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label{color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label:before,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label{color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:before,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:after,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:after{background-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-upload.sirio-is-invalid button{background-color:#aa224f;border-color:#aa224f}.sirio-accordion .sirio-accordion-body .sirio-accordion-content{padding:16px}.ag-cell-value button.sirio-btn.sirio-btn-icon{padding:0}.sirio-tab.sirio-tab-scroll{display:block}.sirio-dropdown .searchable{position:absolute;width:100%;display:none;left:0}.ag-header-cell.hide-filter .ag-header-cell-filter-button{display:none}\n"] }]
|
|
519
|
+
], encapsulation: ViewEncapsulation.None, template: "<ng-container *ngFor=\"let row of rows\" [formGroup]=\"formGroup\">\r\n <div class=\"row field-set\">\r\n <ng-container *ngFor=\"let component of row.components\">\r\n <ng-container [ngSwitch]=\"component.type\">\r\n <div [formGroup]=\"formGroup\" [class]=\"getClass(component)\">\r\n <!-- #region textfield -->\r\n <ng-container *ngSwitchCase=\"'textfield'\">\r\n <ngx-sirio-input type=\"text\"\r\n ariaLabel=\"input\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textfield\r\n [register]=\"component\"\r\n [componentRef]=\"textfield\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region select -->\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <ngx-sirio-select ariaLabel=\"select\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n dropdown\r\n #select\r\n [register]=\"component\"\r\n [componentRef]=\"select\">\r\n <ngx-sirio-select-panel ariaLabel=\"items\">\r\n <ngx-sirio-input *ngIf=\"component.searchable\" class=\"searchable\" type=\"text\" [placeholder]=\"Texts.TypeToSearch\"></ngx-sirio-input>\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ option.label }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region taglist -->\r\n <ng-container *ngSwitchCase=\"'taglist'\">\r\n <ngx-sirio-select ariaLabel=\"select\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [isMultiple]=\"true\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #taglist\r\n [register]=\"component\"\r\n [componentRef]=\"taglist\">\r\n <ngx-sirio-select-panel ariaLabel=\"items\">\r\n <ngx-sirio-select-option *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">{{ option.label }}</ngx-sirio-select-option>\r\n </ngx-sirio-select-panel>\r\n </ngx-sirio-select>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <ngx-sirio-input type=\"number\"\r\n ariaLabel=\"input\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [prefixAdorner]=\"evaluateString(component.appearance?.prefixAdorner)\"\r\n [suffixAdorner]=\"evaluateString(component.appearance?.suffixAdorner)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #number\r\n [register]=\"component\"\r\n [componentRef]=\"number\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region datetime -->\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <ngx-sirio-datepicker ariaLabel=\"date\"\r\n [label]=\"evaluateString(component.dateLabel)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #date\r\n [register]=\"component\"\r\n [componentRef]=\"date\">\r\n </ngx-sirio-datepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region time -->\r\n <ng-container *ngSwitchCase=\"'time'\">\r\n <ngx-sirio-timepicker ariaLabel=\"time\"\r\n [label]=\"evaluateString(component.timeLabel)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #time\r\n [register]=\"component\"\r\n [componentRef]=\"time\">\r\n </ngx-sirio-timepicker>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checkbox -->\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region toggle -->\r\n <ng-container *ngSwitchCase=\"'toggle'\">\r\n <ngx-sirio-toggle ariaLabel=\"checkbox\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #toggle\r\n [register]=\"component\"\r\n [componentRef]=\"toggle\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-toggle>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox ariaLabel=\"checkbox\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-checkbox>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region radio -->\r\n <ng-container *ngSwitchCase=\"'radio'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-radio-group ariaLabel=\"radio\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipradio\r\n [register]=\"component\"\r\n [componentRef]=\"chipradio\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"radio\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-radio-group ariaLabel=\"radio\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #radio\r\n [register]=\"component\"\r\n [componentRef]=\"radio\">\r\n <ngx-sirio-radio-button *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-radio-button>\r\n </ngx-sirio-radio-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region checklist -->\r\n <ng-container *ngSwitchCase=\"'checklist'\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <!-- #region chip -->\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <ngx-sirio-chip-checkbox-group ariaLabel=\"checklist\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #chipcheckbox\r\n [register]=\"component\"\r\n [componentRef]=\"chipcheckbox\">\r\n <ngx-sirio-input-chip *ngFor=\"let option of (getValues(component) | async) || []\"\r\n type=\"checkbox\"\r\n [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-input-chip>\r\n </ngx-sirio-chip-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <ngx-sirio-checkbox-group ariaLabel=\"checklist\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #checkbox\r\n [register]=\"component\"\r\n [componentRef]=\"checkbox\">\r\n <ngx-sirio-checkbox *ngFor=\"let option of (getValues(component) | async) || []\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </ngx-sirio-checkbox>\r\n </ngx-sirio-checkbox-group>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region textarea -->\r\n <ng-container *ngSwitchCase=\"'textarea'\">\r\n <ngx-sirio-input type=\"textarea\"\r\n ariaLabel=\"textarea\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [placeholder]=\"component.placeholder || ''\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [formControlName]=\"component.key\"\r\n updateBlur\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #textarea\r\n [register]=\"component\"\r\n [componentRef]=\"textarea\">\r\n </ngx-sirio-input>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region filepicker -->\r\n <ng-container *ngSwitchCase=\"'filepicker'\">\r\n <ngx-sirio-file-upload ariaLabel=\"filepicker\"\r\n [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [accept]=\"getMimeTypes(component.accept)\"\r\n [multiple]=\"evaluateBoolean(component.multiple)\"\r\n (fileUploadedEvent)=\"fileUploaded($event)\"\r\n [showFilelist]=\"!component.showDetails\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n #filepicker\r\n [register]=\"component\"\r\n [componentRef]=\"filepicker\">\r\n <span class=\"fas fa-arrow-up\" aria-hidden=\"true\"></span>\r\n {{ Texts.Upload }}\r\n </ngx-sirio-file-upload>\r\n <ng-container *ngIf=\"component.showDetails\">\r\n <app-dynamic-fields [formGroup]=\"formGroup\" [rows]=\"createUploadTables(component)\"></app-dynamic-fields>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region text -->\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #text\r\n [register]=\"component\"\r\n [componentRef]=\"text\">\r\n <div class=\"flex\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n <ng-container *ngIf=\"component.tooltip\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n sirioTooltip\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.tooltip))\">\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n </div> \r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region html -->\r\n <ng-container *ngSwitchCase=\"'html'\">\r\n <div class=\"html-paragraph\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [innerHTML]=\"sanitize(evaluateTemplate(component.content))\"\r\n #html\r\n [register]=\"component\"\r\n [componentRef]=\"html\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img [src]=\"evaluateString(component.source)\"\r\n [alt]=\"evaluateString(component.alt)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n style=\"width: 100%;height: 100%;\"\r\n #image\r\n [register]=\"component\"\r\n [componentRef]=\"image\">\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region dynamiclist -->\r\n <ng-container *ngSwitchCase=\"'dynamiclist'\">\r\n <ng-container [formArrayName]=\"component.path\" [repeat]=\"evaluateNumber(component.repetitions)\">\r\n <ng-container [ngSwitch]=\"component.subtype\">\r\n <ng-container *ngIf=\"getFormArray(formGroup.get(component.path)).controls.length > 0\">\r\n <!-- #region tab -->\r\n <ng-container *ngSwitchCase=\"'tab'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclisttab\">\r\n <ngx-sirio-tab [leftArrowLabel]=\"Texts.ScrollLeft\"\r\n [rightArrowLabel]=\"Texts.ScrollRight\"\r\n [tabCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclisttab>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-tab-item [label]=\"component.label + ' ' + (i + 1)\">\r\n <!--<ng-container *ngTemplateOutlet=\"itemTemplate; context: { item: item, index: i }\"></ng-container>-->\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ngx-sirio-tab-item>\r\n </ng-container>\r\n </ngx-sirio-tab>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region accordion -->\r\n <ng-container *ngSwitchCase=\"'accordion'\">\r\n <div [register]=\"component\"\r\n [componentRef]=\"dynamiclistaccordion\">\r\n <ngx-sirio-accordion [accordionCount]=\"getFormArray(formGroup.get(component.path)).controls.length\"\r\n #dynamiclistaccordion>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <ngx-sirio-accordion-panel>\r\n <ngx-sirio-accordion-header>\r\n <span [innerText]=\"component.label + ' ' + (i + 1)\"></span>\r\n </ngx-sirio-accordion-header>\r\n <ngx-sirio-accordion-body>\r\n <!--<ng-container *ngTemplateOutlet=\"itemTemplate; context: { item: item, index: i }\"></ng-container>-->\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ngx-sirio-accordion-body>\r\n </ngx-sirio-accordion-panel>\r\n </ng-container>\r\n </ngx-sirio-accordion>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region default -->\r\n <ng-container *ngSwitchDefault>\r\n <div [ngClass]=\"{'group-outline': component.showOutline === true}\"\r\n #dynamiclist\r\n [register]=\"component\"\r\n [componentRef]=\"dynamiclist\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <ng-container *ngFor=\"let item of getFormArray(formGroup.get(component.path)).controls; let i = index;\" [formGroupName]=\"i\">\r\n <div [ngClass]=\"{\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\">\r\n <div>\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(item)\" [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <div style=\"text-align:right\">\r\n <ngx-sirio-button (click)=\"removeItem(component, i)\" class=\"remove-item\" [color]=\"null\" icon=\"fas fa-trash\">{{ Texts.RemoveItem }}</ngx-sirio-button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </ng-container>\r\n <ng-container *ngIf=\"component.allowAddRemove\">\r\n <ngx-sirio-button (click)=\"addNewItem(component)\" class=\"add-item\" [color]=\"null\" icon=\"fas fa-plus\">{{ Texts.AddItem }}</ngx-sirio-button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region group -->\r\n <ng-container *ngSwitchCase=\"'group'\">\r\n <div [ngClass]=\"{\r\n 'group-outline': component.showOutline === true,\r\n 'group-top': component.verticalAlignment === 'start',\r\n 'group-center': component.verticalAlignment === 'center',\r\n 'group-bottom': component.verticalAlignment === 'end'}\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <div #group\r\n [register]=\"component\"\r\n [componentRef]=\"group\">\r\n <app-dynamic-fields [formGroup]=\"getFormGroup(getControlFromPath(component.path))\"\r\n [rows]=\"component.rows\"></app-dynamic-fields>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region table -->\r\n <div\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <ng-container *ngSwitchCase=\"'table'\">\r\n <label>{{ evaluateString(component.label) }}</label>\r\n <ag-grid-angular [modules]=\"getGridModules(component)\" \r\n [gridOptions]=\"getGridOptions(component)\"\r\n [rowSource]=\"(getGridData(component) | async) || []\"\r\n [style.height.px]=\"component.height\"\r\n #table\r\n [register]=\"component\"\r\n [componentRef]=\"table\" />\r\n </ng-container>\r\n </div> \r\n <!-- #endregion -->\r\n <!-- #region button -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ngx-sirio-button (clickEvent)=\"clickButton(component, $event)\"\r\n [color]=\"evaluateColor(component.color)\"\r\n [icon]=\"evaluateString(component.icon)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [disabled]=\"evaluateBoolean(component.disabled)\"\r\n #button\r\n [register]=\"component\"\r\n [componentRef]=\"button\">\r\n {{ evaluateString(component.label) }}\r\n </ngx-sirio-button>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region separator -->\r\n <ng-container *ngSwitchCase=\"'separator'\">\r\n <div class=\"separator\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #separator\r\n [register]=\"component\"\r\n [componentRef]=\"separator\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region spacer -->\r\n <ng-container *ngSwitchCase=\"'spacer'\">\r\n <div style=\"width: 100%\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [style.height.px]=\"component.height\"\r\n #spacer\r\n [register]=\"component\"\r\n [componentRef]=\"spacer\">\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region iframe -->\r\n <ng-container *ngSwitchCase=\"'iframe'\">\r\n <div [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\">\r\n <label [for]=\"component.id\">{{ evaluateString(component.label) }}</label>\r\n <iframe [src]=\"evaluateUrl(component.url)\"\r\n [title]=\"evaluateString(component.label)\"\r\n [style.width]=\"'100%'\"\r\n [style.height.px]=\"component.height\"\r\n [frameSecurity]=\"component.security\"\r\n #iframe\r\n [register]=\"component\"\r\n [componentRef]=\"iframe\">\r\n </iframe>\r\n </div>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region alert -->\r\n <ng-container *ngSwitchCase=\"'alert'\">\r\n <ngx-sirio-alert [type]=\"component.role\"\r\n [labelClose]=\"Texts.Close\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #alert\r\n [register]=\"component\"\r\n [componentRef]=\"alert\">\r\n <ngx-sirio-alert-message>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </ngx-sirio-alert-message>\r\n </ngx-sirio-alert>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region notice -->\r\n <ng-container *ngSwitchCase=\"'notice'\">\r\n <ngx-sirio-notify [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n #notice\r\n [register]=\"component\"\r\n [componentRef]=\"notice\">\r\n <ngx-sirio-notify-body [title]=\"evaluateString(component.title)\">\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div>\r\n </ngx-sirio-notify-body>\r\n </ngx-sirio-notify>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region range -->\r\n <ng-container *ngSwitchCase=\"'range'\">\r\n <ngx-sirio-slider [label]=\"evaluateString(component.label)\"\r\n [labelPopover]=\"evaluateString(component.tooltip)\"\r\n [textHelp]=\"evaluateString(component.description)\"\r\n [textFeedback]=\"getTextFeedback(component)\"\r\n [readonly]=\"evaluateBoolean(component.readonly)\"\r\n [disableControl]=\"evaluateBoolean(component.disabled)\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n [formControlName]=\"component.key\"\r\n validation\r\n [canValidate]=\"true\"\r\n [isWarning]=\"isWarning(component)\"\r\n [showWhenValid]=\"false\"\r\n [min]=\"evaluateNumber(component.range?.min) ?? 0\"\r\n [max]=\"evaluateNumber(component.range?.max) ?? 0\"\r\n #range\r\n [register]=\"component\"\r\n [componentRef]=\"range\">\r\n </ngx-sirio-slider>\r\n </ng-container>\r\n <!-- #endregion -->\r\n <!-- #region tooltip -->\r\n <ng-container *ngSwitchCase=\"'tooltip'\">\r\n <app-template-wrapper #tooltipWrapper [template]=\"tooltipTemplate\" [context]=\"{ component: component }\"></app-template-wrapper>\r\n <button class=\"sirio-label-popover fas fa-info-circle\"\r\n [hide]=\"evaluateBoolean(component.conditional?.hide)\"\r\n [show]=\"evaluateBoolean(component.conditional?.show)\"\r\n sirioTooltip\r\n [hasPopover]=\"true\"\r\n [customTemplate]=\"tooltipWrapper.getTemplateRef()\"\r\n #tooltip\r\n [register]=\"component\"\r\n [componentRef]=\"tooltip\"></button>\r\n <ng-template #tooltipTemplate let-component=\"component\">\r\n <div class=\"sirio-tooltip-body\">\r\n <p *ngIf=\"component.title\" class=\"sirio-tooltip-heading sirio-space-down\">\r\n {{ evaluateString(component.title) }}\r\n </p>\r\n <div class=\"text-paragraph\"\r\n [innerHTML]=\"toHTML(evaluateTemplate(component.text))\">\r\n </div> \r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <!-- #endregion -->\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>\r\n", styles: [".flex{display:flex}.field-set{align-items:center}.field-set>div{margin-top:10px;margin-bottom:10px}.separator{border-bottom:2px solid #d9e4f7;width:100%;margin:10px 0}.group-outline{border:1px solid #d9e4f7;padding:15px;margin-top:2px;margin-bottom:2px}.group-top .row{align-items:baseline}.group-center .row{align-items:center}.group-bottom .row{align-items:end}.text-paragraph p{margin-bottom:0!important}.sirio-control.ng-invalid .sirio-form-feedback{color:#aa224f;display:inline-block}.sirio-control.ng-invalid .sirio-input-group-text{color:#aa224f;border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label{color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]~label:before,.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-is-invalid input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label{color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:before,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:before{border-color:#aa224f}.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid~label:after,.sirio-form-check.sirio-form-toggle input[type=checkbox].sirio-is-invalid:checked~label:after{background-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=checkbox]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=checkbox]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label{color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]~label:before,.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:before{border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-form-check input[type=radio]:checked~label:after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3e%3cpath fill='%23AA224F' d='M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z'/%3e%3c/svg%3e\");background-size:12px}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]+label{color:#aa224f;border-color:#aa224f}.sirio-control.sirio-is-invalid fieldset .sirio-chip-selection input[type=radio]:checked+label{color:#fff;background-color:#aa224f;border-color:#aa224f}.sirio-upload.sirio-is-invalid button{background-color:#aa224f;border-color:#aa224f}.sirio-accordion .sirio-accordion-body .sirio-accordion-content{padding:16px}.ag-cell-value button.sirio-btn.sirio-btn-icon{padding:.25rem .0625rem;margin-left:10px}.ag-header-cell.hide-filter .ag-header-cell-filter-button{display:none}.sirio-tab.sirio-tab-scroll{display:block}.sirio-dropdown .searchable{position:absolute;width:100%;display:none;left:0}\n"] }]
|
|
489
520
|
}], ctorParameters: () => [{ type: i1.SanitizeService }, { type: i2.MarkdownService }, { type: i3.MimeService }, { type: i4.ProgrammabilityService }, { type: i5.EventService }, { type: i6.FormatterService }, { type: i7.WeakService }, { type: i8.RegisterService }, { type: i0.ElementRef }], propDecorators: { rows: [{
|
|
490
521
|
type: Input
|
|
491
522
|
}], formGroup: [{
|
|
492
523
|
type: Input
|
|
493
524
|
}] } });
|
|
494
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1maWVsZHMvZHluYW1pYy1maWVsZHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1maWVsZHMvZHluYW1pYy1maWVsZHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsaUJBQWlCLEVBQXNELE1BQU0sZUFBZSxDQUFDO0FBQ2hJLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFlLFNBQVMsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJbEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFJN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRS9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFB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RSxzQkFBc0IsRUFBRSx3QkFBd0IsRUFBRSx3QkFBd0I7d0JBQ3ZHLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLGlCQUFpQixFQUFFLHFCQUFxQjt3QkFDN0YsdUJBQXVCLEVBQUUsNEJBQTRCLEVBQUUsNkJBQTZCLEVBQUUsMkJBQTJCO3dCQUNqSCxvQkFBb0IsRUFBRSx3QkFBd0I7d0JBQzlDLG9CQUFvQixFQUFFLCtCQUErQixFQUFFLDRCQUE0QixFQUFFLHVCQUF1Qjt3QkFDNUcsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsdUJBQXVCO3dCQUM5RCxtQkFBbUIsRUFBRSwwQkFBMEIsRUFBRSxvQkFBb0I7d0JBQ3JFLG9CQUFvQixFQUFFLHdCQUF3QixFQUFFLDBCQUEwQixFQUFFLHdCQUF3Qjt3QkFDcEcscUJBQXFCO3dCQUNyQixhQUFhLENBQUMsYUFDUDt3QkFDVCxlQUFlO3dCQUNmLHNCQUFzQjtxQkFDdkIsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSTs0VEFHNUIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgRWxlbWVudFJlZiwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sLCBGb3JtQXJyYXksIEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU2FmZUh0bWwsIFNhZmVSZXNvdXJjZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBEYXRlcGlja2VyIH0gZnJvbSAndmFuaWxsYWpzLWRhdGVwaWNrZXInO1xyXG5pbXBvcnQgeyBTYW5pdGl6ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zYW5pdGl6ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFya2Rvd25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWFya2Rvd24uc2VydmljZSc7XHJcbmltcG9ydCB7IE1pbWVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWltZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvZ3JhbW1hYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2dyYW1tYWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlLCBDb21tYW5kRXZlbnQgfSBmcm9tICcuLi9zZXJ2aWNlcy9ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybWF0dGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Zvcm1hdHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV2Vha1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy93ZWFrLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZWdpc3RlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9yZWdpc3Rlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQnV0dG9uQ29sb3JzIH0gZnJvbSAnbmd4LXNpcmlvLWxpYic7XHJcbmltcG9ydCB7IEFkb3JuZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2Fkb3JuZXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRGlzYWJsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGlzYWJsZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBEaXNwbGF5RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kaXNwbGF5LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJlcGVhdERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvcmVwZWF0LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEZyYW1lU2VjdXJpdHlEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2ZyYW1lLXNlY3VyaXR5LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IERyb3Bkb3duRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kcm9wZG93bi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBUYWJEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3RhYi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBBY2NvcmRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2FjY29yZGlvbi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBHcmlkRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9ncmlkLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJlZ2lzdGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9yZWdpc3Rlci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBVcGRhdGVCbHVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy91cGRhdGVibHVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE9iamVjdFVSTFJlbmRlcmVyQ29tcG9uZW50LCBEZWxldGVSb3dDZWxsUmVuZGVyZXIgfSBmcm9tICcuLi91dGlscy9ncmlkQ2VsbHMnO1xyXG5pbXBvcnQgeyBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNpcmlvSW5wdXRDb21wb25lbnQsIFNpcmlvVmFsaWRhdGlvbkRpcmVjdGl2ZVxyXG4gICwgU2lyaW9TZWxlY3RDb21wb25lbnQsIFNpcmlvU2VsZWN0T3B0aW9uQ29tcG9uZW50LCBTaXJpb1NlbGVjdFBhbmVsQ29tcG9uZW50XHJcbiAgLCBTaXJpb0NoZWNrYm94R3JvdXBDb21wb25lbnQsIFNpcmlvQ2hlY2tib3hDb21wb25lbnQsIFNpcmlvRGF0ZXBpY2tlckNvbXBvbmVudCwgU2lyaW9UaW1lcGlja2VyQ29tcG9uZW50XHJcbiAgLCBTaXJpb1JhZGlvR3JvdXBDb21wb25lbnQsIFNpcmlvUmFkaW9CdXR0b25Db21wb25lbnQsIFNpcmlvVGFiQ29tcG9uZW50LCBTaXJpb1RhYkl0ZW1Db21wb25lbnRcclxuICAsIFNpcmlvQWNjb3JkaW9uQ29tcG9uZW50LCBTaXJpb0FjY29yZGlvblBhbmVsQ29tcG9uZW50LCBTaXJpb0FjY29yZGlvbkhlYWRlckNvbXBvbmVudCwgU2lyaW9BY2NvcmRpb25Cb2R5Q29tcG9uZW50XHJcbiAgLCBTaXJpb0J1dHRvbkNvbXBvbmVudCwgU2lyaW9GaWxlVXBsb2FkQ29tcG9uZW50XHJcbiAgLCBTaXJpb1RvZ2dsZUNvbXBvbmVudCwgU2lyaW9DaGlwQ2hlY2tib3hHcm91cENvbXBvbmVudCwgU2lyaW9DaGlwUmFkaW9Hcm91cENvbXBvbmVudCwgU2lyaW9JbnB1dENoaXBDb21wb25lbnRcclxuICAsIFNpcmlvVGFibGVNb2R1bGUsIFNpcmlvVGFibGVDb21wb25lbnQsIFNpcmlvUGFnaW5hdG9yQ29tcG9uZW50XHJcbiAgLCBTaXJpb0FsZXJ0Q29tcG9uZW50LCBTaXJpb0FsZXJ0TWVzc2FnZUNvbXBvbmVudCwgU2lyaW9TbGlkZXJDb21wb25lbnRcclxuICAsIFNpcmlvTm90aWZ5Q29tcG9uZW50LCBTaXJpb05vdGlmeUJvZHlDb21wb25lbnQsIFNpcmlvTm90aWZ5QWN0aW9uQ29tcG9uZW50LCBTaXJpb05vdGlmeUxpbmtDb21wb25lbnRcclxuICAsIFNpcmlvVG9vbHRpcERpcmVjdGl2ZVxyXG4gICwgTmd4U2lyaW9FdmVudFxyXG59IGZyb20gJ25neC1zaXJpby1saWInO1xyXG5cclxuaW1wb3J0IHsgQWdHcmlkQW5ndWxhciB9IGZyb20gJ2FnLWdyaWQtYW5ndWxhcic7XHJcbmltcG9ydCB7XHJcbiAgTW9kdWxlLCBQYWdpbmF0aW9uTW9kdWxlLCBDbGllbnRTaWRlUm93TW9kZWxNb2R1bGUsIEluZmluaXRlUm93TW9kZWxNb2R1bGVcclxuICAsIExvY2FsZU1vZHVsZSwgQ2VsbFN0eWxlTW9kdWxlXHJcbiAgLCBUZXh0RmlsdGVyTW9kdWxlLCBOdW1iZXJGaWx0ZXJNb2R1bGUsIERhdGVGaWx0ZXJNb2R1bGVcclxuICAsIENvbERlZiwgdGhlbWVRdWFydHosIGljb25TZXRBbHBpbmUsIEdyaWRPcHRpb25zLCBWYWx1ZUZvcm1hdHRlclBhcmFtc1xyXG4gICwgQ2xpZW50U2lkZVJvd01vZGVsQXBpTW9kdWxlXHJcbn0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xyXG5pbXBvcnQgeyBBR19HUklEX0xPQ0FMRV9JVCB9IGZyb20gJ0BhZy1ncmlkLWNvbW11bml0eS9sb2NhbGUnO1xyXG5cclxuaW1wb3J0IHsgVGV4dHMgfSBmcm9tICcuLi9sb2NhbGUvbG9jYWxlLWl0JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWR5bmFtaWMtZmllbGRzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy1maWVsZHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1xyXG4gICAgJy4vZHluYW1pYy1maWVsZHMuY29tcG9uZW50LmNzcyddLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZVxyXG4gICAgLCBBZG9ybmVyRGlyZWN0aXZlLCBEaXNhYmxlRGlyZWN0aXZlLCBEaXNwbGF5RGlyZWN0aXZlLCBGcmFtZVNlY3VyaXR5RGlyZWN0aXZlXHJcbiAgICAsIERyb3Bkb3duRGlyZWN0aXZlLCBVcGRhdGVCbHVyRGlyZWN0aXZlLCBSZXBlYXREaXJlY3RpdmUsIFRhYkRpcmVjdGl2ZSwgR3JpZERpcmVjdGl2ZVxyXG4gICAgLCBSZWdpc3RlckRpcmVjdGl2ZSwgQWNjb3JkaW9uRGlyZWN0aXZlXHJcbiAgICAsIFNpcmlvSW5wdXRDb21wb25lbnQsIFNpcmlvVmFsaWRhdGlvbkRpcmVjdGl2ZVxyXG4gICAgLCBTaXJpb1NlbGVjdENvbXBvbmVudCwgU2lyaW9TZWxlY3RPcHRpb25Db21wb25lbnQsIFNpcmlvU2VsZWN0UGFuZWxDb21wb25lbnRcclxuICAgICwgU2lyaW9DaGVja2JveEdyb3VwQ29tcG9uZW50LCBTaXJpb0NoZWNrYm94Q29tcG9uZW50LCBTaXJpb0RhdGVwaWNrZXJDb21wb25lbnQsIFNpcmlvVGltZXBpY2tlckNvbXBvbmVudFxyXG4gICAgLCBTaXJpb1JhZGlvR3JvdXBDb21wb25lbnQsIFNpcmlvUmFkaW9CdXR0b25Db21wb25lbnQsIFNpcmlvVGFiQ29tcG9uZW50LCBTaXJpb1RhYkl0ZW1Db21wb25lbnRcclxuICAgICwgU2lyaW9BY2NvcmRpb25Db21wb25lbnQsIFNpcmlvQWNjb3JkaW9uUGFuZWxDb21wb25lbnQsIFNpcmlvQWNjb3JkaW9uSGVhZGVyQ29tcG9uZW50LCBTaXJpb0FjY29yZGlvbkJvZHlDb21wb25lbnRcclxuICAgICwgU2lyaW9CdXR0b25Db21wb25lbnQsIFNpcmlvRmlsZVVwbG9hZENvbXBvbmVudFxyXG4gICAgLCBTaXJpb1RvZ2dsZUNvbXBvbmVudCwgU2lyaW9DaGlwQ2hlY2tib3hHcm91cENvbXBvbmVudCwgU2lyaW9DaGlwUmFkaW9Hcm91cENvbXBvbmVudCwgU2lyaW9JbnB1dENoaXBDb21wb25lbnRcclxuICAgICwgU2lyaW9UYWJsZU1vZHVsZSwgU2lyaW9UYWJsZUNvbXBvbmVudCwgU2lyaW9QYWdpbmF0b3JDb21wb25lbnRcclxuICAgICwgU2lyaW9BbGVydENvbXBvbmVudCwgU2lyaW9BbGVydE1lc3NhZ2VDb21wb25lbnQsIFNpcmlvU2xpZGVyQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvTm90aWZ5Q29tcG9uZW50LCBTaXJpb05vdGlmeUJvZHlDb21wb25lbnQsIFNpcmlvTm90aWZ5QWN0aW9uQ29tcG9uZW50LCBTaXJpb05vdGlmeUxpbmtDb21wb25lbnRcclxuICAgICwgU2lyaW9Ub29sdGlwRGlyZWN0aXZlXHJcbiAgICAsIEFnR3JpZEFuZ3VsYXJdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgUmVnaXN0ZXJTZXJ2aWNlLFxyXG4gICAgUHJvZ3JhbW1hYmlsaXR5U2VydmljZVxyXG4gIF0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHluYW1pY0ZpZWxkc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQElucHV0KCkgcm93czogQXJyYXk8YW55PiB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBmb3JtR3JvdXAhOiBGb3JtR3JvdXA7XHJcblxyXG4gIFRleHRzID0gVGV4dHM7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2FuaXRpemVyOiBTYW5pdGl6ZVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBtYXJrZG93bjogTWFya2Rvd25TZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgbWltZTogTWltZVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBwcm9ncmFtbWFiaWxpdHk6IFByb2dyYW1tYWJpbGl0eVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBldmVudHM6IEV2ZW50U2VydmljZVxyXG4gICAgLCBwcml2YXRlIGZvcm1hdHRlcjogRm9ybWF0dGVyU2VydmljZVxyXG4gICAgLCBwcml2YXRlIHdlYWs6IFdlYWtTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgcmVnaXN0ZXI6IFJlZ2lzdGVyU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGVsOiBFbGVtZW50UmVmXHJcbiAgKVxyXG4gIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maWd1cmVEYXRlcGlja2VyKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5mb2N1c0ZpcnN0KCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFJlZ2lzdGVyKCk6IFJlZ2lzdGVyU2VydmljZSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWdpc3RlcjtcclxuICB9XHJcblxyXG4gIGdldENsYXNzKGNvbXBvbmVudDogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChjb21wb25lbnQubGF5b3V0Py5jb2x1bW5zKSB7XHJcbiAgICAgIHJldHVybiBcImNvbC1tZC1cIiArIGNvbXBvbmVudC5sYXlvdXQ/LmNvbHVtbnM7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIFwiY29sXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmdldChjb21wb25lbnQua2V5KSBhcyBGb3JtQ29udHJvbDtcclxuICAgIHJldHVybiBjb250cm9sLnZhbGlkIHx8ICFjb250cm9sLmVycm9yc1xyXG4gICAgICA/ICcnXHJcbiAgICAgIDogY29udHJvbC5lcnJvcnNbJ21lc3NhZ2UnXTtcclxuICB9XHJcblxyXG4gIGlzV2FybmluZyhjb21wb25lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybUdyb3VwLmdldChjb21wb25lbnQua2V5KSBhcyBGb3JtQ29udHJvbDtcclxuICAgIHJldHVybiAoY29udHJvbC5lcnJvcnMgJiYgY29udHJvbC5lcnJvcnNbJ3dhcm5pbmcnXSkgfHwgZmFsc2VcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlU3RyaW5nKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZVN0cmluZyh0aGlzLmZvcm1Hcm91cCwgdmFsdWUpOyAgICBcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlQm9vbGVhbih2YWx1ZTogYm9vbGVhbiB8IHN0cmluZyB8IG51bGwpOiBib29sZWFuIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVCb29sZWFuKHRoaXMuZm9ybUdyb3VwLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZU51bWJlcih2YWx1ZTogbnVtYmVyIHwgbnVsbCk6IG51bWJlciB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlTnVtYmVyKHRoaXMuZm9ybUdyb3VwLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZVVybCh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IFNhZmVSZXNvdXJjZVVybCB7XHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZVN0cmluZyh0aGlzLmZvcm1Hcm91cCwgdmFsdWUpO1xyXG4gICAgY29uc3Qgd2F0Y2hLZXkgPSBgOnNhZmVVcmwoJHt1cmx9KWA7XHJcbiAgICByZXR1cm4gdGhpcy53ZWFrLmNhbGwodGhpcy5mb3JtR3JvdXAsIHdhdGNoS2V5LCAoKSA9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNhbml0aXplci5zYW5pdGl6ZVNhZmVVcmwodXJsKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVUZW1wbGF0ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVUZW1wbGF0ZSh0aGlzLmZvcm1Hcm91cCwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGUodGV4dDogc3RyaW5nIHwgbnVsbCwgY2FjaGVhYmxlOiBib29sZWFuID0gdHJ1ZSk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGUodGhpcy5mb3JtR3JvdXAsIHRleHQsIGNhY2hlYWJsZSk7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZUNvbG9yKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogQnV0dG9uQ29sb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCBjb2xvciA9IHRoaXMuZXZhbHVhdGVTdHJpbmcodmFsdWUpO1xyXG4gICAgY29uc3Qgd2F0Y2hLZXkgPSBgOmJ1dHRvbkNvbG9yKCR7Y29sb3J9KWA7XHJcbiAgICByZXR1cm4gdGhpcy53ZWFrLmNhbGwodGhpcy5mb3JtR3JvdXAsIHdhdGNoS2V5LCAoKSA9PiB7XHJcbiAgICAgIGlmIChjb2xvciA9PT0gXCJnaG9zdFwiKVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICBjb25zdCB2YWxpZENvbG9yczogQnV0dG9uQ29sb3JzW10gPSBbJ3ByaW1hcnknLCAnc2Vjb25kYXJ5JywgJ3RlcnRpYXJ5JywgJ3RlcnRpYXJ5LWxpZ2h0JywgJ2RhbmdlciddO1xyXG4gICAgICByZXR1cm4gdmFsaWRDb2xvcnMuaW5jbHVkZXMoY29sb3IgYXMgQnV0dG9uQ29sb3JzKSA/IChjb2xvciBhcyBCdXR0b25Db2xvcnMpIDogJ3ByaW1hcnknO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtR3JvdXAoY29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgbnVsbCk6IEZvcm1Hcm91cCB7XHJcbiAgICBpZiAoIShjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbnRyb2wgaXMgbm90IGEgRm9ybUdyb3VwJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udHJvbDtcclxuICB9XHJcblxyXG4gIGdldEZvcm1BcnJheShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsKTogRm9ybUFycmF5IHtcclxuICAgIGlmICghKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29udHJvbCBpcyBub3QgYSBGb3JtQXJyYXknKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb250cm9sO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udHJvbEZyb21QYXRoKHBhdGg6IHN0cmluZyB8IG51bGwpOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsIHtcclxuICAgIHJldHVybiBwYXRoXHJcbiAgICAgID8gdGhpcy5mb3JtR3JvdXAuZ2V0KHBhdGgpXHJcbiAgICAgIDogdGhpcy5mb3JtR3JvdXA7XHJcbiAgfVxyXG5cclxuICB0b0hUTUwodGV4dDogc3RyaW5nKTogU2FmZUh0bWwge1xyXG4gICAgbGV0IGh0bWwgPSB0aGlzLm1hcmtkb3duLnRvSHRtbCh0ZXh0KTtcclxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5zYW5pdGl6ZVNhZmVIdG1sKGh0bWwpXHJcbiAgfTtcclxuXHJcbiAgc2FuaXRpemUoaHRtbDogc3RyaW5nKTogU2FmZUh0bWwge1xyXG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLnNhbml0aXplU2FmZUh0bWwoaHRtbCk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0TWltZVR5cGVzKGV4dGVuc2lvbnM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5taW1lLmdldE1pbWVUeXBlcyhleHRlbnNpb25zKTtcclxuICB9O1xyXG5cclxuICBjbGlja0J1dHRvbihjb21wb25lbnQ6IGFueSwgZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGNvbXBvbmVudC5jbGljaykge1xyXG4gICAgICB0aGlzLmV2YWx1YXRlKGNvbXBvbmVudC5jbGljaywgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbXBvbmVudC5jb21tYW5kKSB7XHJcbiAgICAgIGNvbnN0IGNvbW1hbmQ6IENvbW1hbmRFdmVudCA9IHtcclxuICAgICAgICBuYW1lOiB0aGlzLmV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5jb21tYW5kKSxcclxuICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcclxuICAgICAgICBmb3JtR3JvdXA6IHRoaXMuZm9ybUdyb3VwLFxyXG4gICAgICAgIGV2ZW50OiBldmVudFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmV2ZW50cy5lbWl0Q29tbWFuZChjb21tYW5kKTtcclxuICAgIH0gICAgXHJcbiAgfVxyXG5cclxuICBnZXRWYWx1ZXMoY29tcG9uZW50OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKGNvbXBvbmVudC52YWx1ZXMpIHtcclxuICAgICAgLy8gU3RhdGljXHJcbiAgICAgIHJldHVybiBvZihjb21wb25lbnQudmFsdWVzKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbXBvbmVudC52YWx1ZXNLZXkpIHtcclxuICAgICAgLy8gRmllbGQgdmFsdWVcclxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5ldmFsdWF0ZShjb21wb25lbnQudmFsdWVzS2V5KTtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0QXNPYnNlcnZhYmxlKHJlc3VsdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb21wb25lbnQudmFsdWVzRXhwcmVzc2lvbikge1xyXG4gICAgICAvLyBFeHByZXNzaW9uXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZXZhbHVhdGUoY29tcG9uZW50LnZhbHVlc0V4cHJlc3Npb24pO1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRBc09ic2VydmFibGUocmVzdWx0KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBOb3RoaW5nXHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9ICAgIFxyXG4gIH1cclxuXHJcbiAgZ2V0R3JpZE9wdGlvbnMoY29tcG9uZW50OiBhbnkpOiBHcmlkT3B0aW9ucyB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWFrLmNhbGwoY29tcG9uZW50LCAnZ2V0R3JpZE9wdGlvbnMnLCAoKSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZGVmYXVsdENvbERlZjoge1xyXG4gICAgICAgICAgZmxvYXRpbmdGaWx0ZXI6IChjb21wb25lbnQuZmxvYXRpbmdGaWx0ZXIgPT09IHRydWUpLFxyXG4gICAgICAgICAgaGVhZGVyQ2xhc3M6IChjb21wb25lbnQuZmxvYXRpbmdGaWx0ZXIgPT09IHRydWUpXHJcbiAgICAgICAgICAgID8gJ3Nob3ctZmlsdGVyJyA6ICdoaWRlLWZpbHRlcidcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbHVtbkRlZnM6IHRoaXMuZ2V0R3JpZENvbHVtbnMoY29tcG9uZW50KSxcclxuICAgICAgICBwYWdpbmF0aW9uOiB0aGlzLmdldEdyaWRQYWdpbmFibGUoY29tcG9uZW50KSxcclxuICAgICAgICBwYWdpbmF0aW9uUGFnZVNpemU6IHRoaXMuZ2V0R3JpZFBhZ2VTaXplKGNvbXBvbmVudCksXHJcbiAgICAgICAgcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3I6IFs1LCAxMCwgMjAsIDUwXSxcclxuICAgICAgICBsb2NhbGVUZXh0OiB0aGlzLmdldEdyaWRUZXh0cygpLFxyXG4gICAgICAgIHRoZW1lOiB0aGlzLmdldEdyaWRUaGVtZSgpLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRHcmlkTW9kdWxlcyhjb21wb25lbnQ6IGFueSk6IE1vZHVsZVtdIHtcclxuICAgIHJldHVybiB0aGlzLndlYWsuY2FsbChjb21wb25lbnQsICdnZXRHcmlkTW9kdWxlcycsICgpID0+IHtcclxuICAgICAgcmV0dXJuIFtcclxuICAgICAgICBDbGllbnRTaWRlUm93TW9kZWxNb2R1bGVcclxuICAgICAgICAsIEluZmluaXRlUm93TW9kZWxNb2R1bGVcclxuICAgICAgICAsIFBhZ2luYXRpb25Nb2R1bGVcclxuICAgICAgICAsIExvY2FsZU1vZHVsZVxyXG4gICAgICAgICwgQ2VsbFN0eWxlTW9kdWxlXHJcbiAgICAgICAgLCBDbGllbnRTaWRlUm93TW9kZWxBcGlNb2R1bGVcclxuICAgICAgICAsIFRleHRGaWx0ZXJNb2R1bGVcclxuICAgICAgICAsIE51bWJlckZpbHRlck1vZHVsZVxyXG4gICAgICAgICwgRGF0ZUZpbHRlck1vZHVsZVxyXG4gICAgICBdO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRHcmlkRGF0YShjb21wb25lbnQ6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBpZiAoY29tcG9uZW50LmRhdGFTb3VyY2UpIHtcclxuICAgICAgLy8gRXhwcmVzc2lvblxyXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmV2YWx1YXRlKGNvbXBvbmVudC5kYXRhU291cmNlKTtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0QXNPYnNlcnZhYmxlKHJlc3VsdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gTm90aGluZ1xyXG4gICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkTmV3SXRlbShjb21wb25lbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5nZXRGb3JtQXJyYXkodGhpcy5nZXRDb250cm9sRnJvbVBhdGgoY29tcG9uZW50LnBhdGgpKTtcclxuICAgIChmb3JtQXJyYXkgYXMgYW55KS5hZGROZXdJdGVtKCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVJdGVtKGNvbXBvbmVudDogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmdldEZvcm1BcnJheSh0aGlzLmdldENvbnRyb2xGcm9tUGF0aChjb21wb25lbnQucGF0aCkpO1xyXG4gICAgZm9ybUFycmF5LnJlbW92ZUF0KGluZGV4KTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVVwbG9hZFRhYmxlcyhjb21wb25lbnQ6IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWFrLmNhbGwoY29tcG9uZW50LCAnY3JlYXRlVXBsb2FkVGFibGVzJywgKCkgPT4ge1xyXG4gICAgICByZXR1cm4gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbXBvbmVudHM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFwidHlwZVwiOiBcInRhYmxlXCIsXHJcbiAgICAgICAgICAgICAgXCJsYXlvdXRcIjoge1xyXG4gICAgICAgICAgICAgICAgXCJjb2x1bW5zXCI6IG51bGxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIFwiY29sdW1uc1wiOiBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIFwibGFiZWxcIjogXCJOYW1lXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwia2V5XCI6IFwibmFtZVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZsZXhcIjogMVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiOiBcIlNpemVcIixcclxuICAgICAgICAgICAgICAgICAgXCJrZXlcIjogXCJzaXplXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICAgICAgICBcImFsaWduXCI6IFwicmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgXCJrZXlcIjogXCJ0eXBlXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwibGFiZWxcIjogXCJUeXBlXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIFwia2V5XCI6IFwidXJsXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwibGFiZWxcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgXCJ3aWR0aFwiOiA1MCxcclxuICAgICAgICAgICAgICAgICAgXCJhbGlnblwiOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZvcm1hdFwiOiBcIm9iamVjdFVSTFwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBcImxhYmVsXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwid2lkdGhcIjogNTAsXHJcbiAgICAgICAgICAgICAgICAgIFwiYWxpZ25cIjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgXCJmb3JtYXRcIjogXCJkZWxldGVSb3dcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgXCJkYXRhU291cmNlXCI6IFwiPVwiICsgY29tcG9uZW50LmtleSxcclxuICAgICAgICAgICAgICBcImhlaWdodFwiOiAyMDAsXHJcbiAgICAgICAgICAgICAgXCJjb25kaXRpb25hbFwiOiBjb21wb25lbnQuY29uZGl0aW9uYWwsXHJcbiAgICAgICAgICAgICAgXCJkaXNhYmxlZFwiOiBjb21wb25lbnQuZGlzYWJsZWRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgICAgXTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZmlsZVVwbG9hZGVkKCRldmVudDogTmd4U2lyaW9FdmVudDxTaXJpb0ZpbGVVcGxvYWRDb21wb25lbnQ+KSB7XHJcbiAgICBjb25zdCByZW1vdmVGaWxlID0gKGZpbGU6IEZpbGUpID0+IHtcclxuICAgICAgaWYgKCRldmVudC5jb21wb25lbnQuY29udHJvbCkge1xyXG4gICAgICAgIGNvbnN0IG5ld0ZpbGVzID0gJGV2ZW50LmNvbXBvbmVudC5maWxlTGlzdC5maWx0ZXIoZiA9PiBmICE9PSBmaWxlKTtcclxuICAgICAgICAkZXZlbnQuY29tcG9uZW50LmNvbnRyb2wuc2V0VmFsdWUobmV3RmlsZXMpO1xyXG4gICAgICAgIGFkZFJlbW92ZShuZXdGaWxlcyk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0ZpbGVzO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhZGRSZW1vdmUgPSAoZmlsZXM6IEZpbGVbXSkgPT4ge1xyXG4gICAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xyXG4gICAgICAgIGlmICghKCdyZW1vdmUnIGluIGZpbGUpKSB7XHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmlsZSwgJ3JlbW92ZScsIHtcclxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICByZW1vdmVGaWxlKHRoaXMpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB3cml0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgfSk7IFxyXG4gICAgfTtcclxuXHJcbiAgICBhZGRSZW1vdmUoJGV2ZW50LmNvbXBvbmVudC5maWxlTGlzdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvY3VzRmlyc3QoKSB7XHJcbiAgICBjb25zdCBmb2N1c2FibGVFbGVtZW50cyA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAnYnV0dG9uLCBbaHJlZl0sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhLCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSknXHJcbiAgICApO1xyXG5cclxuICAgIGZvciAobGV0IGVsIG9mIGZvY3VzYWJsZUVsZW1lbnRzKSB7XHJcbiAgICAgIGlmICghKGVsIGFzIEhUTUxFbGVtZW50KS5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpIHtcclxuICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH0gICAgICBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ3JpZFRleHRzID0ge1xyXG4gICAgLi4uQUdfR1JJRF9MT0NBTEVfSVQsXHJcbiAgICBcInBhZ2VTaXplU2VsZWN0b3JMYWJlbFwiOiBcIkVsZW1lbnRpIHBlciBwYWdpbmE6XCIsXHJcbiAgICBcInRvXCI6IFwiLVwiLFxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgZ3JpZFRoZW1lID0gdGhlbWVRdWFydHpcclxuICAgIC53aXRoUGFydChpY29uU2V0QWxwaW5lKVxyXG4gICAgLndpdGhQYXJhbXMoe1xyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI0ZBRkFGQVwiLFxyXG4gICAgICBib3JkZXJDb2xvcjogXCIjRDlFNEY3XCIsXHJcbiAgICAgIGJyb3dzZXJDb2xvclNjaGVtZTogXCJsaWdodFwiLFxyXG4gICAgICBjZWxsVGV4dENvbG9yOiBcIiMwMDEyMUFcIixcclxuICAgICAgY29sdW1uQm9yZGVyOiB0cnVlLFxyXG4gICAgICBmb250RmFtaWx5OiBcImluaGVyaXRcIixcclxuICAgICAgZm9udFNpemU6IDE2LFxyXG4gICAgICBoZWFkZXJCYWNrZ3JvdW5kQ29sb3I6IFwiIzAwMjQ2MFwiLFxyXG4gICAgICBoZWFkZXJDb2x1bW5Cb3JkZXI6IHRydWUsXHJcbiAgICAgIGhlYWRlckNvbHVtblJlc2l6ZUhhbmRsZUNvbG9yOiBcIiNGMkY2RkNcIixcclxuICAgICAgaGVhZGVyQ29sdW1uUmVzaXplSGFuZGxlV2lkdGg6IDIsXHJcbiAgICAgIGhlYWRlckZvbnRTaXplOiAxNixcclxuICAgICAgaGVhZGVyRm9udFdlaWdodDogNjAwLFxyXG4gICAgICBoZWFkZXJSb3dCb3JkZXI6IGZhbHNlLFxyXG4gICAgICBoZWFkZXJUZXh0Q29sb3I6IFwiI0YyRjZGQ1wiLFxyXG4gICAgICByb3dCb3JkZXI6IHRydWVcclxuICAgIH0pO1xyXG5cclxuICBwcml2YXRlIGdldEdyaWRDb2x1bW5zKGNvbXBvbmVudDogYW55KTogQ29sRGVmW10ge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29tcG9uZW50LmNvbHVtbnMpKSB7XHJcbiAgICAgIHJldHVybiBjb21wb25lbnQuY29sdW1ucy5tYXAoKGNvbHVtbjogYW55KSA9PiAoe1xyXG4gICAgICAgIGZpZWxkOiBjb2x1bW4ua2V5LFxyXG4gICAgICAgIGhlYWRlck5hbWU6IGNvbHVtbi5sYWJlbCxcclxuICAgICAgICByZXNpemFibGU6IGNvbHVtbi5yZXNpemUgPT09IHRydWUsXHJcbiAgICAgICAgc29ydGFibGU6IGNvbHVtbi5zb3J0ID09PSB0cnVlLFxyXG4gICAgICAgIGZpbHRlcjogY29sdW1uLmZpbHRlciA9PT0gdHJ1ZSxcclxuICAgICAgICBzdXBwcmVzc01vdmFibGU6ICEoY29sdW1uLm1vdmUgPT09IHRydWUpLFxyXG4gICAgICAgIC4uLihjb2x1bW4uZmxleCA9PT0gdHJ1ZSAmJiB7IGZsZXg6IDEgfSksXHJcbiAgICAgICAgLi4uKGNvbHVtbi5hbGlnbiA9PT0gXCJsZWZ0XCIgJiYgeyBjZWxsU3R5bGU6IHsgdGV4dEFsaWduOiAnbGVmdCcgfSB9KSxcclxuICAgICAgICAuLi4oY29sdW1uLmFsaWduID09PSBcImNlbnRlclwiICYmIHsgY2VsbFN0eWxlOiB7IHRleHRBbGlnbjogJ2NlbnRlcicgfSB9KSxcclxuICAgICAgICAuLi4oY29sdW1uLmFsaWduID09PSBcInJpZ2h0XCIgJiYgeyBjZWxsU3R5bGU6IHsgdGV4dEFsaWduOiAncmlnaHQnIH0gfSksXHJcbiAgICAgICAgLi4uKHR5cGVvZiBjb2x1bW4ucGlubmVkID09PSBcInN0cmluZ1wiICYmIHsgcGlubmVkOiBjb2x1bW4ucGlubmVkIH0pLFxyXG4gICAgICAgIC4uLih0eXBlb2YgY29sdW1uLmZsZXggPT09IFwibnVtYmVyXCIgJiYgeyBmbGV4OiBjb2x1bW4uZmxleCB9KSxcclxuICAgICAgICAuLi4odHlwZW9mIGNvbHVtbi53aWR0aCA9PT0gXCJudW1iZXJcIiAmJiB7IHdpZHRoOiBjb2x1bW4ud2lkdGggfSksXHJcbiAgICAgICAgLi4uKHR5cGVvZiBjb2x1bW4ubWluV2lkdGggPT09IFwibnVtYmVyXCIgJiYgeyBtaW5XaWR0aDogY29sdW1uLm1pbldpZHRoIH0pLFxyXG4gICAgICAgIC4uLih0eXBlb2YgY29sdW1uLm1heFdpZHRoID09PSBcIm51bWJlclwiICYmIHsgbWF4V2lkdGg6IGNvbHVtbi5tYXhXaWR0aCB9KSxcclxuICAgICAgICB2YWx1ZUZvcm1hdHRlcjogdGhpcy5nZXRHcmlkRm9ybWF0dGVyKGNvbHVtbiksXHJcbiAgICAgICAgY2VsbFJlbmRlcmVyOiB0aGlzLmdldEdyaWRSZW5kZXJlcihjb2x1bW4pXHJcbiAgICAgIH0pKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEdyaWRQYWdpbmFibGUoY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodHlwZW9mIGNvbXBvbmVudC5yb3dDb3VudCA9PT0gJ251bWJlcicgJiYgY29tcG9uZW50LnJvd0NvdW50ID4gMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEdyaWRQYWdlU2l6ZShjb21wb25lbnQ6IGFueSkge1xyXG4gICAgaWYgKHR5cGVvZiBjb21wb25lbnQucm93Q291bnQgPT09ICdudW1iZXInKSB7XHJcbiAgICAgIHJldHVybiBjb21wb25lbnQucm93Q291bnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEdyaWRUZXh0cygpIHtcclxuICAgIHJldHVybiB0aGlzLmdyaWRUZXh0cztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0R3JpZFRoZW1lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JpZFRoZW1lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRHcmlkRm9ybWF0dGVyKGNvbHVtbjogYW55KTogKChwYXJhbTogVmFsdWVGb3JtYXR0ZXJQYXJhbXMpID0+IHN0cmluZykgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKGNvbHVtbi5mb3JtYXQpIHtcclxuICAgICAgc3dpdGNoIChjb2x1bW4uZm9ybWF0KSB7XHJcbiAgICAgICAgY2FzZSAnaW50ZWdlcic6XHJcbiAgICAgICAgICByZXR1cm4gcGFyYW1zID0+IHRoaXMuZm9ybWF0dGVyLmZvcm1hdEludGVnZXIocGFyYW1zLnZhbHVlKTtcclxuICAgICAgICBjYXNlICdjdXJyZW5jeSc6XHJcbiAgICAgICAgICByZXR1cm4gcGFyYW1zID0+IHRoaXMuZm9ybWF0dGVyLmZvcm1hdEN1cnJlbmN5KHBhcmFtcy52YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgICByZXR1cm4gcGFyYW1zID0+IHRoaXMuZm9ybWF0dGVyLmZvcm1hdERhdGUocGFyYW1zLnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0R3JpZFJlbmRlcmVyKGNvbHVtbjogYW55KTogYW55IHtcclxuICAgIGlmIChjb2x1bW4uZm9ybWF0KSB7XHJcbiAgICAgIHN3aXRjaCAoY29sdW1uLmZvcm1hdCkge1xyXG4gICAgICAgIGNhc2UgJ29iamVjdFVSTCc6XHJcbiAgICAgICAgICByZXR1cm4gT2JqZWN0VVJMUmVuZGVyZXJDb21wb25lbnQ7XHJcbiAgICAgICAgY2FzZSBcImRlbGV0ZVJvd1wiOlxyXG4gICAgICAgICAgcmV0dXJuIERlbGV0ZVJvd0NlbGxSZW5kZXJlcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcbiAgXHJcbiAgcHJpdmF0ZSBnZXRBc09ic2VydmFibGUodmFsdWU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBpZiAoaXNPYnNlcnZhYmxlKHZhbHVlKSlcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgcmV0dXJuIG9mKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uZmlndXJlRGF0ZXBpY2tlcigpIHtcclxuICAgIChEYXRlcGlja2VyLmxvY2FsZXMgYXMgYW55KVsnaXQnXSA9IHtcclxuICAgICAgZGF5czogW1xyXG4gICAgICAgICdEb21lbmljYScsXHJcbiAgICAgICAgJ0x1bmVkw6wnLFxyXG4gICAgICAgICdNYXJ0ZWTDrCcsXHJcbiAgICAgICAgJ01lcmNvbGVkw6wnLFxyXG4gICAgICAgICdHaW92ZWTDrCcsXHJcbiAgICAgICAgJ1ZlbmVyZMOsJyxcclxuICAgICAgICAnU2FiYXRvJyxcclxuICAgICAgXSxcclxuICAgICAgZGF5c01pbjogWydEb20nLCAnTHVuJywgJ01hcicsICdNZXInLCAnR2lvJywgJ1ZlbicsICdTYWInXSxcclxuICAgICAgbW9udGhzOiBbXHJcbiAgICAgICAgJ0dlbm5haW8nLFxyXG4gICAgICAgICdGZWJicmFpbycsXHJcbiAgICAgICAgJ01hcnpvJyxcclxuICAgICAgICAnQXByaWxlJyxcclxuICAgICAgICAnTWFnZ2lvJyxcclxuICAgICAgICAnR2l1Z25vJyxcclxuICAgICAgICAnTHVnbGlvJyxcclxuICAgICAgICAnQWdvc3RvJyxcclxuICAgICAgICAnU2V0dGVtYnJlJyxcclxuICAgICAgICAnT3R0b2JyZScsXHJcbiAgICAgICAgJ05vdmVtYnJlJyxcclxuICAgICAgICAnRGljZW1icmUnLFxyXG4gICAgICBdLFxyXG4gICAgICBtb250aHNTaG9ydDogW1xyXG4gICAgICAgICdHZW4nLFxyXG4gICAgICAgICdGZWInLFxyXG4gICAgICAgICdNYXInLFxyXG4gICAgICAgICdBcHInLFxyXG4gICAgICAgICdNYWcnLFxyXG4gICAgICAgICdHaXUnLFxyXG4gICAgICAgICdMdWcnLFxyXG4gICAgICAgICdBZ28nLFxyXG4gICAgICAgICdTZXQnLFxyXG4gICAgICAgICdPdHQnLFxyXG4gICAgICAgICdOb3YnLFxyXG4gICAgICAgICdEaWMnLFxyXG4gICAgICBdLFxyXG4gICAgICB0b2RheTogJ09nZ2knLFxyXG4gICAgICBjbGVhcjogJ1B1bGlzY2knLFxyXG4gICAgICBmb3JtYXQ6ICdkZC9tbS95eXl5JyxcclxuICAgICAgd2Vla1N0YXJ0OiAxLFxyXG4gICAgfTtcclxuICB9O1xyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiByb3dzXCIgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIj5cclxuICA8ZGl2IGNsYXNzPVwicm93IGZpZWxkLXNldFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29tcG9uZW50IG9mIHJvdy5jb21wb25lbnRzXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbXBvbmVudC50eXBlXCI+XHJcbiAgICAgICAgPGRpdiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIFtjbGFzc109XCJnZXRDbGFzcyhjb21wb25lbnQpXCI+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gdGV4dGZpZWxkIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRmaWVsZCdcIj5cclxuICAgICAgICAgICAgPG5neC1zaXJpby1pbnB1dCB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsPVwiaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50b29sdGlwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbXBvbmVudC5wbGFjZWhvbGRlciB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5kZXNjcmlwdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwcmVmaXhBZG9ybmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5hcHBlYXJhbmNlPy5wcmVmaXhBZG9ybmVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N1ZmZpeEFkb3JuZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmFwcGVhcmFuY2U/LnN1ZmZpeEFkb3JuZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUJsdXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGV4dGZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0ZXh0ZmllbGRcIj5cclxuICAgICAgICAgICAgPC9uZ3gtc2lyaW8taW5wdXQ+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBzZWxlY3QgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc2VsZWN0J1wiPlxyXG4gICAgICAgICAgICA8bmd4LXNpcmlvLXNlbGVjdCBhcmlhTGFiZWw9XCJzZWxlY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LnRvb2x0aXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbXBvbmVudC5wbGFjZWhvbGRlciB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3NlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJzZWxlY3RcIj5cclxuICAgICAgICAgICAgICA8bmd4LXNpcmlvLXNlbGVjdC1wYW5lbCBhcmlhTGFiZWw9XCJpdGVtc1wiPlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby1pbnB1dCAqbmdJZj1cImNvbXBvbmVudC5zZWFyY2hhYmxlXCIgY2xhc3M9XCJzZWFyY2hhYmxlXCIgdHlwZT1cInRleHRcIiBbcGxhY2Vob2xkZXJdPVwiVGV4dHMuVHlwZVRvU2VhcmNoXCI+PC9uZ3gtc2lyaW8taW5wdXQ+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXNlbGVjdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiAoZ2V0VmFsdWVzKGNvbXBvbmVudCkgfCBhc3luYykgfHwgW11cIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+e3sgb3B0aW9uLmxhYmVsIH19PC9uZ3gtc2lyaW8tc2VsZWN0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L25neC1zaXJpby1zZWxlY3QtcGFuZWw+XHJcbiAgICAgICAgICAgIDwvbmd4LXNpcmlvLXNlbGVjdD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIHRhZ2xpc3QgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGFnbGlzdCdcIj5cclxuICAgICAgICAgICAgPG5neC1zaXJpby1zZWxlY3QgYXJpYUxhYmVsPVwic2VsZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50b29sdGlwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb21wb25lbnQucGxhY2Vob2xkZXIgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzTXVsdGlwbGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGFnbGlzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0YWdsaXN0XCI+XHJcbiAgICAgICAgICAgICAgPG5neC1zaXJpby1zZWxlY3QtcGFuZWwgYXJpYUxhYmVsPVwiaXRlbXNcIj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tc2VsZWN0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIChnZXRWYWx1ZXMoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj57eyBvcHRpb24ubGFiZWwgfX08L25neC1zaXJpby1zZWxlY3Qtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXNlbGVjdC1wYW5lbD5cclxuICAgICAgICAgICAgPC9uZ3gtc2lyaW8tc2VsZWN0PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gbnVtYmVyIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgICAgICAgPG5neC1zaXJpby1pbnB1dCB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWw9XCJpbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LnRvb2x0aXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29tcG9uZW50LnBsYWNlaG9sZGVyIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWZpeEFkb3JuZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmFwcGVhcmFuY2U/LnByZWZpeEFkb3JuZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3VmZml4QWRvcm5lcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuYXBwZWFyYW5jZT8uc3VmZml4QWRvcm5lcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQmx1clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICNudW1iZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cIm51bWJlclwiPlxyXG4gICAgICAgICAgICA8L25neC1zaXJpby1pbnB1dD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIGRhdGV0aW1lIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGV0aW1lJ1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb21wb25lbnQuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBkYXRlIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby1kYXRlcGlja2VyIGFyaWFMYWJlbD1cImRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGF0ZUxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudG9vbHRpcClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb21wb25lbnQucGxhY2Vob2xkZXIgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNkYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJkYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8L25neC1zaXJpby1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gdGltZSAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGltZSdcIj5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tdGltZXBpY2tlciBhcmlhTGFiZWw9XCJ0aW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LnRpbWVMYWJlbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LnRvb2x0aXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29tcG9uZW50LnBsYWNlaG9sZGVyIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGltZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidGltZVwiPlxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tdGltZXBpY2tlcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gY2hlY2tib3ggLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hlY2tib3gnXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbXBvbmVudC5zdWJ0eXBlXCI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIHRvZ2dsZSAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndG9nZ2xlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby10b2dnbGUgYXJpYUxhYmVsPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5kZXNjcmlwdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0b2dnbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0b2dnbGVcIj5cclxuICAgICAgICAgICAgICAgICAge3sgZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tdG9nZ2xlPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gZGVmYXVsdCAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWNoZWNrYm94IGFyaWFMYWJlbD1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5kZXNjcmlwdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjY2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAge3sgZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIHJhZGlvIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3JhZGlvJ1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb21wb25lbnQuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBjaGlwIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjaGlwJ1wiPlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby1jaGlwLXJhZGlvLWdyb3VwIGFyaWFMYWJlbD1cInJhZGlvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudG9vbHRpcClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNjaGlwcmFkaW9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImNoaXByYWRpb1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWlucHV0LWNoaXAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiAoZ2V0VmFsdWVzKGNvbXBvbmVudCkgfCBhc3luYykgfHwgW11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cclxuICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8taW5wdXQtY2hpcD5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWNoaXAtcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBkZWZhdWx0IC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tcmFkaW8tZ3JvdXAgYXJpYUxhYmVsPVwicmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LnRvb2x0aXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5kZXNjcmlwdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjcmFkaW9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwicmFkaW9cIj5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1yYWRpby1idXR0b24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiAoZ2V0VmFsdWVzKGNvbXBvbmVudCkgfCBhc3luYykgfHwgW11cIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXJhZGlvLWdyb3VwPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBjaGVja2xpc3QgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2hlY2tsaXN0J1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb21wb25lbnQuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBjaGlwIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjaGlwJ1wiPlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby1jaGlwLWNoZWNrYm94LWdyb3VwIGFyaWFMYWJlbD1cImNoZWNrbGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LnRvb2x0aXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjY2hpcGNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJjaGlwY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1pbnB1dC1jaGlwICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgKGdldFZhbHVlcyhjb21wb25lbnQpIHwgYXN5bmMpIHx8IFtdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWlucHV0LWNoaXA+XHJcbiAgICAgICAgICAgICAgICA8L25neC1zaXJpby1jaGlwLWNoZWNrYm94LWdyb3VwPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gZGVmYXVsdCAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWNoZWNrYm94LWdyb3VwIGFyaWFMYWJlbD1cImNoZWNrbGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudG9vbHRpcClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNjaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWNoZWNrYm94ICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgKGdldFZhbHVlcyhjb21wb25lbnQpIHwgYXN5bmMpIHx8IFtdXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWNoZWNrYm94LWdyb3VwPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0ZXh0YXJlYSAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0YXJlYSdcIj5cclxuICAgICAgICAgICAgPG5neC1zaXJpby1pbnB1dCB0eXBlPVwidGV4dGFyZWFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbD1cInRleHRhcmVhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudG9vbHRpcClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb21wb25lbnQucGxhY2Vob2xkZXIgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUJsdXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGV4dGFyZWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRleHRhcmVhXCI+XHJcbiAgICAgICAgICAgIDwvbmd4LXNpcmlvLWlucHV0PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gZmlsZXBpY2tlciAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidmaWxlcGlja2VyJ1wiPlxyXG4gICAgICAgICAgICA8bmd4LXNpcmlvLWZpbGUtdXBsb2FkIGFyaWFMYWJlbD1cImZpbGVwaWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50b29sdGlwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjY2VwdF09XCJnZXRNaW1lVHlwZXMoY29tcG9uZW50LmFjY2VwdClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50Lm11bHRpcGxlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGVVcGxvYWRlZEV2ZW50KT1cImZpbGVVcGxvYWRlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd0ZpbGVsaXN0XT1cIiFjb21wb25lbnQuc2hvd0RldGFpbHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNmaWxlcGlja2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJmaWxlcGlja2VyXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYXMgZmEtYXJyb3ctdXBcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAge3sgVGV4dHMuVXBsb2FkIH19XHJcbiAgICAgICAgICAgIDwvbmd4LXNpcmlvLWZpbGUtdXBsb2FkPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50LnNob3dEZXRhaWxzXCI+XHJcbiAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZpZWxkcyBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIFtyb3dzXT1cImNyZWF0ZVVwbG9hZFRhYmxlcyhjb21wb25lbnQpXCI+PC9hcHAtZHluYW1pYy1maWVsZHM+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gdGV4dCAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0J1wiPlxyXG4gICAgICAgICAgICA8ZGl2ICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgI3RleHRcclxuICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1wYXJhZ3JhcGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRvSFRNTChldmFsdWF0ZVRlbXBsYXRlKGNvbXBvbmVudC50ZXh0KSlcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNvbXBvbmVudC50b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaXJpby1sYWJlbC1wb3BvdmVyIGZhcyBmYS1pbmZvLWNpcmNsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpcmlvVG9vbHRpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29udGVudF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudG9vbHRpcClcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgXHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBodG1sIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2h0bWwnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJodG1sLXBhcmFncmFwaFwiXHJcbiAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInNhbml0aXplKGV2YWx1YXRlVGVtcGxhdGUoY29tcG9uZW50LmNvbnRlbnQpKVwiXHJcbiAgICAgICAgICAgICAgICAgI2h0bWxcclxuICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImh0bWxcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBpbWFnZSAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpbWFnZSdcIj5cclxuICAgICAgICAgICAgPGltZyBbc3JjXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5zb3VyY2UpXCJcclxuICAgICAgICAgICAgICAgICBbYWx0XT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5hbHQpXCJcclxuICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7aGVpZ2h0OiAxMDAlO1wiXHJcbiAgICAgICAgICAgICAgICAgI2ltYWdlXHJcbiAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJpbWFnZVwiPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gZHluYW1pY2xpc3QgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZHluYW1pY2xpc3QnXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1BcnJheU5hbWVdPVwiY29tcG9uZW50LnBhdGhcIiBbcmVwZWF0XT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5yZXBldGl0aW9ucylcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb21wb25lbnQuc3VidHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEZvcm1BcnJheShmb3JtR3JvdXAuZ2V0KGNvbXBvbmVudC5wYXRoKSkuY29udHJvbHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICNyZWdpb24gdGFiIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGFiJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImR5bmFtaWNsaXN0dGFiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXRhYiBbbGVmdEFycm93TGFiZWxdPVwiVGV4dHMuU2Nyb2xsTGVmdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmlnaHRBcnJvd0xhYmVsXT1cIlRleHRzLlNjcm9sbFJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJDb3VudF09XCJnZXRGb3JtQXJyYXkoZm9ybUdyb3VwLmdldChjb21wb25lbnQucGF0aCkpLmNvbnRyb2xzLmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZHluYW1pY2xpc3R0YWI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0Rm9ybUFycmF5KGZvcm1Hcm91cC5nZXQoY29tcG9uZW50LnBhdGgpKS5jb250cm9sczsgbGV0IGkgPSBpbmRleDtcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby10YWItaXRlbSBbbGFiZWxdPVwiY29tcG9uZW50LmxhYmVsICsgJyAnICsgKGkgKyAxKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLTxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHsgaXRlbTogaXRlbSwgaW5kZXg6IGkgfVwiPjwvbmctY29udGFpbmVyPi0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICdncm91cC10b3AnOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdzdGFydCcsXHJcbiAgICAgICAgICAgICdncm91cC1jZW50ZXInOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAnZ3JvdXAtYm90dG9tJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnZW5kJ31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtZmllbGRzIFtmb3JtR3JvdXBdPVwiZ2V0Rm9ybUdyb3VwKGl0ZW0pXCIgW3Jvd3NdPVwiY29tcG9uZW50LnJvd3NcIj48L2FwcC1keW5hbWljLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnQuYWxsb3dBZGRSZW1vdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpyaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1idXR0b24gKGNsaWNrKT1cInJlbW92ZUl0ZW0oY29tcG9uZW50LCBpKVwiIGNsYXNzPVwicmVtb3ZlLWl0ZW1cIiBbY29sb3JdPVwibnVsbFwiIGljb249XCJmYXMgZmEtdHJhc2hcIj57eyBUZXh0cy5SZW1vdmVJdGVtIH19PC9uZ3gtc2lyaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXRhYi1pdGVtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXRhYj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGFjY29yZGlvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FjY29yZGlvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJkeW5hbWljbGlzdGFjY29yZGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb24gW2FjY29yZGlvbkNvdW50XT1cImdldEZvcm1BcnJheShmb3JtR3JvdXAuZ2V0KGNvbXBvbmVudC5wYXRoKSkuY29udHJvbHMubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNkeW5hbWljbGlzdGFjY29yZGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRGb3JtQXJyYXkoZm9ybUdyb3VwLmdldChjb21wb25lbnQucGF0aCkpLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4O1wiIFtmb3JtR3JvdXBOYW1lXT1cImlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWFjY29yZGlvbi1wYW5lbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWNjb3JkaW9uLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVyVGV4dF09XCJjb21wb25lbnQubGFiZWwgKyAnICcgKyAoaSArIDEpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWNjb3JkaW9uLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWNjb3JkaW9uLWJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS08bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7IGl0ZW06IGl0ZW0sIGluZGV4OiBpIH1cIj48L25nLWNvbnRhaW5lcj4tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgJ2dyb3VwLXRvcCc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ3N0YXJ0JyxcclxuICAgICAgICAgICAgICAnZ3JvdXAtY2VudGVyJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnY2VudGVyJyxcclxuICAgICAgICAgICAgICAnZ3JvdXAtYm90dG9tJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnZW5kJ31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZpZWxkcyBbZm9ybUdyb3VwXT1cImdldEZvcm1Hcm91cChpdGVtKVwiIFtyb3dzXT1cImNvbXBvbmVudC5yb3dzXCI+PC9hcHAtZHluYW1pYy1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbXBvbmVudC5hbGxvd0FkZFJlbW92ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246cmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1idXR0b24gKGNsaWNrKT1cInJlbW92ZUl0ZW0oY29tcG9uZW50LCBpKVwiIGNsYXNzPVwicmVtb3ZlLWl0ZW1cIiBbY29sb3JdPVwibnVsbFwiIGljb249XCJmYXMgZmEtdHJhc2hcIj57eyBUZXh0cy5SZW1vdmVJdGVtIH19PC9uZ3gtc2lyaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWNjb3JkaW9uLWJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWNjb3JkaW9uLXBhbmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWFjY29yZGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGRlZmF1bHQgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnZ3JvdXAtb3V0bGluZSc6IGNvbXBvbmVudC5zaG93T3V0bGluZSA9PT0gdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgI2R5bmFtaWNsaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiZHluYW1pY2xpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyBldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0Rm9ybUFycmF5KGZvcm1Hcm91cC5nZXQoY29tcG9uZW50LnBhdGgpKS5jb250cm9sczsgbGV0IGkgPSBpbmRleDtcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICdncm91cC10b3AnOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdzdGFydCcsXHJcbiAgICAgICAgJ2dyb3VwLWNlbnRlcic6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ2NlbnRlcicsXHJcbiAgICAgICAgJ2dyb3VwLWJvdHRvbSc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ2VuZCd9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtZHluYW1pYy1maWVsZHMgW2Zvcm1Hcm91cF09XCJnZXRGb3JtR3JvdXAoaXRlbSlcIiBbcm93c109XCJjb21wb25lbnQucm93c1wiPjwvYXBwLWR5bmFtaWMtZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnQuYWxsb3dBZGRSZW1vdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOnJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYnV0dG9uIChjbGljayk9XCJyZW1vdmVJdGVtKGNvbXBvbmVudCwgaSlcIiBjbGFzcz1cInJlbW92ZS1pdGVtXCIgW2NvbG9yXT1cIm51bGxcIiBpY29uPVwiZmFzIGZhLXRyYXNoXCI+e3sgVGV4dHMuUmVtb3ZlSXRlbSB9fTwvbmd4LXNpcmlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50LmFsbG93QWRkUmVtb3ZlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYnV0dG9uIChjbGljayk9XCJhZGROZXdJdGVtKGNvbXBvbmVudClcIiBjbGFzcz1cImFkZC1pdGVtXCIgW2NvbG9yXT1cIm51bGxcIiBpY29uPVwiZmFzIGZhLXBsdXNcIj57eyBUZXh0cy5BZGRJdGVtIH19PC9uZ3gtc2lyaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gZ3JvdXAgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZ3JvdXAnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICdncm91cC1vdXRsaW5lJzogY29tcG9uZW50LnNob3dPdXRsaW5lID09PSB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICdncm91cC10b3AnOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdzdGFydCcsXHJcbiAgICAgICAgICAgICAgICAgJ2dyb3VwLWNlbnRlcic6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ2NlbnRlcicsXHJcbiAgICAgICAgICAgICAgICAgJ2dyb3VwLWJvdHRvbSc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ2VuZCd9XCJcclxuICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIj5cclxuICAgICAgICAgICAgICA8bGFiZWw+e3sgZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGRpdiAjZ3JvdXBcclxuICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZpZWxkcyBbZm9ybUdyb3VwXT1cImdldEZvcm1Hcm91cChnZXRDb250cm9sRnJvbVBhdGgoY29tcG9uZW50LnBhdGgpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cImNvbXBvbmVudC5yb3dzXCI+PC9hcHAtZHluYW1pYy1maWVsZHM+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gdGFibGUgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGFibGUnXCI+XHJcbiAgICAgICAgICAgIDxhZy1ncmlkLWFuZ3VsYXIgW21vZHVsZXNdPVwiZ2V0R3JpZE1vZHVsZXMoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JpZE9wdGlvbnNdPVwiZ2V0R3JpZE9wdGlvbnMoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd1NvdXJjZV09XCIoZ2V0R3JpZERhdGEoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJjb21wb25lbnQuaGVpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGFibGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRhYmxlXCIgLz5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIGJ1dHRvbiAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIididXR0b24nXCI+XHJcbiAgICAgICAgICAgIDxuZ3gtc2lyaW8tYnV0dG9uIChjbGlja0V2ZW50KT1cImNsaWNrQnV0dG9uKGNvbXBvbmVudCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJldmFsdWF0ZUNvbG9yKGNvbXBvbmVudC5jb2xvcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuaWNvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2J1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJidXR0b25cIj5cclxuICAgICAgICAgICAgICB7eyBldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpIH19XHJcbiAgICAgICAgICAgIDwvbmd4LXNpcmlvLWJ1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIHNlcGFyYXRvciAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzZXBhcmF0b3InXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZXBhcmF0b3JcIlxyXG4gICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgI3NlcGFyYXRvclxyXG4gICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwic2VwYXJhdG9yXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gc3BhY2VyIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NwYWNlcidcIj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAxMDAlXCJcclxuICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiY29tcG9uZW50LmhlaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgI3NwYWNlclxyXG4gICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwic3BhY2VyXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gaWZyYW1lIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2lmcmFtZSdcIj5cclxuICAgICAgICAgICAgPGRpdiBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCJjb21wb25lbnQuaWRcIj57eyBldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8aWZyYW1lIFtzcmNdPVwiZXZhbHVhdGVVcmwoY29tcG9uZW50LnVybClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cIicxMDAlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImNvbXBvbmVudC5oZWlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2ZyYW1lU2VjdXJpdHldPVwiY29tcG9uZW50LnNlY3VyaXR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICNpZnJhbWVcclxuICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJpZnJhbWVcIj5cclxuICAgICAgICAgICAgICA8L2lmcmFtZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBhbGVydCAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidhbGVydCdcIj5cclxuICAgICAgICAgICAgPG5neC1zaXJpby1hbGVydCBbdHlwZV09XCJjb21wb25lbnQucm9sZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsQ2xvc2VdPVwiVGV4dHMuQ2xvc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FsZXJ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJhbGVydFwiPlxyXG4gICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWxlcnQtbWVzc2FnZT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXBhcmFncmFwaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwidG9IVE1MKGV2YWx1YXRlVGVtcGxhdGUoY29tcG9uZW50LnRleHQpKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWxlcnQtbWVzc2FnZT5cclxuICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWxlcnQ+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBub3RpY2UgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbm90aWNlJ1wiPlxyXG4gICAgICAgICAgICA8bmd4LXNpcmlvLW5vdGlmeSBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI25vdGljZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJub3RpY2VcIj5cclxuICAgICAgICAgICAgICA8bmd4LXNpcmlvLW5vdGlmeS1ib2R5IFt0aXRsZV09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudGl0bGUpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1wYXJhZ3JhcGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRvSFRNTChldmFsdWF0ZVRlbXBsYXRlKGNvbXBvbmVudC50ZXh0KSlcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmd4LXNpcmlvLW5vdGlmeS1ib2R5PlxyXG4gICAgICAgICAgICA8L25neC1zaXJpby1ub3RpZnk+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiByYW5nZSAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidyYW5nZSdcIj5cclxuICAgICAgICAgICAgPG5neC1zaXJpby1zbGlkZXIgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50b29sdGlwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21pbl09XCJldmFsdWF0ZU51bWJlcihjb21wb25lbnQucmFuZ2U/Lm1pbikgPz8gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhdPVwiZXZhbHVhdGVOdW1iZXIoY29tcG9uZW50LnJhbmdlPy5tYXgpID8/IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjcmFuZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwicmFuZ2VcIj5cclxuICAgICAgICAgICAgPC9uZ3gtc2lyaW8tc2xpZGVyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gdG9vbHRpcCAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0b29sdGlwJ1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2lyaW8tbGFiZWwtcG9wb3ZlciBmYXMgZmEtaW5mby1jaXJjbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NpcmlvVG9vbHRpcF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudGl0bGUpXCJcclxuICAgICAgICAgICAgICAgICAgICBbY29udGVudF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudGV4dClcIlxyXG4gICAgICAgICAgICAgICAgICAgICN0b29sdGlwXHJcbiAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0b29sdGlwXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
|
|
525
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWVsZHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1maWVsZHMvZHluYW1pYy1maWVsZHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNpcmlvL3NyYy9saWIvZHluYW1pYy1maWVsZHMvZHluYW1pYy1maWVsZHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsaUJBQWlCLEVBQTZCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFlLFNBQVMsRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJbEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFJN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRS9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFB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QUFhO3dCQUNwRixpQkFBaUIsRUFBRSxrQkFBa0I7d0JBQ3JDLG1CQUFtQixFQUFFLHdCQUF3Qjt3QkFDN0Msb0JBQW9CLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCO3dCQUMzRSwyQkFBMkIsRUFBRSxzQkFBc0IsRUFBRSx3QkFBd0IsRUFBRSx3QkFBd0I7d0JBQ3ZHLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLGlCQUFpQixFQUFFLHFCQUFxQjt3QkFDN0YsdUJBQXVCLEVBQUUsNEJBQTRCLEVBQUUsNkJBQTZCLEVBQUUsMkJBQTJCO3dCQUNqSCxvQkFBb0IsRUFBRSx3QkFBd0I7d0JBQzlDLG9CQUFvQixFQUFFLCtCQUErQixFQUFFLDRCQUE0QixFQUFFLHVCQUF1Qjt3QkFDNUcsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsdUJBQXVCO3dCQUM5RCxtQkFBbUIsRUFBRSwwQkFBMEIsRUFBRSxvQkFBb0I7d0JBQ3JFLG9CQUFvQixFQUFFLHdCQUF3QixFQUFFLDBCQUEwQixFQUFFLHdCQUF3Qjt3QkFDcEcscUJBQXFCO3dCQUNyQix3QkFBd0I7d0JBQ3hCLGFBQWEsQ0FBQyxhQUNQO3dCQUNULGVBQWU7d0JBQ2Ysc0JBQXNCO3FCQUN2QixpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJOzRUQUc1QixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24sIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgRm9ybUFycmF5LCBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFNhZmVIdG1sLCBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgRGF0ZXBpY2tlciB9IGZyb20gJ3ZhbmlsbGFqcy1kYXRlcGlja2VyJztcclxuaW1wb3J0IHsgU2FuaXRpemVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2FuaXRpemUuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hcmtkb3duU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21hcmtkb3duLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNaW1lU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21pbWUuc2VydmljZSc7XHJcbmltcG9ydCB7IFByb2dyYW1tYWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wcm9ncmFtbWFiaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IEV2ZW50U2VydmljZSwgQ29tbWFuZEV2ZW50IH0gZnJvbSAnLi4vc2VydmljZXMvZXZlbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1hdHRlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9mb3JtYXR0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFdlYWtTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvd2Vhay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVnaXN0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcmVnaXN0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEJ1dHRvbkNvbG9ycyB9IGZyb20gJ25neC1zaXJpby1saWInO1xyXG5pbXBvcnQgeyBBZG9ybmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9hZG9ybmVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IERpc2FibGVEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2Rpc2FibGUuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRGlzcGxheURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGlzcGxheS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBSZXBlYXREaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3JlcGVhdC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGcmFtZVNlY3VyaXR5RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9mcmFtZS1zZWN1cml0eS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBEcm9wZG93bkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZHJvcGRvd24uZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgVGFiRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90YWIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQWNjb3JkaW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9hY2NvcmRpb24uZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgR3JpZERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZ3JpZC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBSZWdpc3RlckRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvcmVnaXN0ZXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgVXBkYXRlQmx1ckRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvdXBkYXRlYmx1ci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBUZW1wbGF0ZVdyYXBwZXJDb21wb25lbnQgfSBmcm9tICcuLi9zaGFyZWQvdGVtcGxhdGUtd3JhcHBlci90ZW1wbGF0ZS13cmFwcGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE9iamVjdFVSTFJlbmRlcmVyQ29tcG9uZW50LCBEZWxldGVSb3dDZWxsUmVuZGVyZXIsIEFjdGlvbnNDZWxsUmVuZGVyZXIgfSBmcm9tICcuLi91dGlscy9ncmlkQ2VsbHMnO1xyXG5pbXBvcnQgeyBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNpcmlvSW5wdXRDb21wb25lbnQsIFNpcmlvVmFsaWRhdGlvbkRpcmVjdGl2ZVxyXG4gICwgU2lyaW9TZWxlY3RDb21wb25lbnQsIFNpcmlvU2VsZWN0T3B0aW9uQ29tcG9uZW50LCBTaXJpb1NlbGVjdFBhbmVsQ29tcG9uZW50XHJcbiAgLCBTaXJpb0NoZWNrYm94R3JvdXBDb21wb25lbnQsIFNpcmlvQ2hlY2tib3hDb21wb25lbnQsIFNpcmlvRGF0ZXBpY2tlckNvbXBvbmVudCwgU2lyaW9UaW1lcGlja2VyQ29tcG9uZW50XHJcbiAgLCBTaXJpb1JhZGlvR3JvdXBDb21wb25lbnQsIFNpcmlvUmFkaW9CdXR0b25Db21wb25lbnQsIFNpcmlvVGFiQ29tcG9uZW50LCBTaXJpb1RhYkl0ZW1Db21wb25lbnRcclxuICAsIFNpcmlvQWNjb3JkaW9uQ29tcG9uZW50LCBTaXJpb0FjY29yZGlvblBhbmVsQ29tcG9uZW50LCBTaXJpb0FjY29yZGlvbkhlYWRlckNvbXBvbmVudCwgU2lyaW9BY2NvcmRpb25Cb2R5Q29tcG9uZW50XHJcbiAgLCBTaXJpb0J1dHRvbkNvbXBvbmVudCwgU2lyaW9GaWxlVXBsb2FkQ29tcG9uZW50XHJcbiAgLCBTaXJpb1RvZ2dsZUNvbXBvbmVudCwgU2lyaW9DaGlwQ2hlY2tib3hHcm91cENvbXBvbmVudCwgU2lyaW9DaGlwUmFkaW9Hcm91cENvbXBvbmVudCwgU2lyaW9JbnB1dENoaXBDb21wb25lbnRcclxuICAsIFNpcmlvVGFibGVNb2R1bGUsIFNpcmlvVGFibGVDb21wb25lbnQsIFNpcmlvUGFnaW5hdG9yQ29tcG9uZW50XHJcbiAgLCBTaXJpb0FsZXJ0Q29tcG9uZW50LCBTaXJpb0FsZXJ0TWVzc2FnZUNvbXBvbmVudCwgU2lyaW9TbGlkZXJDb21wb25lbnRcclxuICAsIFNpcmlvTm90aWZ5Q29tcG9uZW50LCBTaXJpb05vdGlmeUJvZHlDb21wb25lbnQsIFNpcmlvTm90aWZ5QWN0aW9uQ29tcG9uZW50LCBTaXJpb05vdGlmeUxpbmtDb21wb25lbnRcclxuICAsIFNpcmlvVG9vbHRpcERpcmVjdGl2ZVxyXG4gICwgTmd4U2lyaW9FdmVudFxyXG59IGZyb20gJ25neC1zaXJpby1saWInO1xyXG5cclxuaW1wb3J0IHsgQWdHcmlkQW5ndWxhciB9IGZyb20gJ2FnLWdyaWQtYW5ndWxhcic7XHJcbmltcG9ydCB7XHJcbiAgTW9kdWxlLCBQYWdpbmF0aW9uTW9kdWxlLCBDbGllbnRTaWRlUm93TW9kZWxNb2R1bGUsIEluZmluaXRlUm93TW9kZWxNb2R1bGVcclxuICAsIExvY2FsZU1vZHVsZSwgQ2VsbFN0eWxlTW9kdWxlLCBWYWxpZGF0aW9uTW9kdWxlXHJcbiAgLCBUZXh0RmlsdGVyTW9kdWxlLCBOdW1iZXJGaWx0ZXJNb2R1bGUsIERhdGVGaWx0ZXJNb2R1bGVcclxuICAsIENvbERlZiwgdGhlbWVRdWFydHosIGljb25TZXRBbHBpbmUsIEdyaWRPcHRpb25zLCBWYWx1ZUZvcm1hdHRlclBhcmFtc1xyXG4gICwgQ2xpZW50U2lkZVJvd01vZGVsQXBpTW9kdWxlXHJcbiAgLCBHcmlkUmVhZHlFdmVudCwgQ29sdW1uQXV0b1NpemVNb2R1bGUsIENvbHVtbkFwaU1vZHVsZVxyXG59IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcclxuaW1wb3J0IHsgQUdfR1JJRF9MT0NBTEVfSVQgfSBmcm9tICdAYWctZ3JpZC1jb21tdW5pdHkvbG9jYWxlJztcclxuXHJcbmltcG9ydCB7IFRleHRzIH0gZnJvbSAnLi4vbG9jYWxlL2xvY2FsZS1pdCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1keW5hbWljLWZpZWxkcycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtZmllbGRzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuL2R5bmFtaWMtZmllbGRzLmNvbXBvbmVudC5jc3MnXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGVcclxuICAgICwgQWRvcm5lckRpcmVjdGl2ZSwgRGlzYWJsZURpcmVjdGl2ZSwgRGlzcGxheURpcmVjdGl2ZSwgRnJhbWVTZWN1cml0eURpcmVjdGl2ZVxyXG4gICAgLCBEcm9wZG93bkRpcmVjdGl2ZSwgVXBkYXRlQmx1ckRpcmVjdGl2ZSwgUmVwZWF0RGlyZWN0aXZlLCBUYWJEaXJlY3RpdmUsIEdyaWREaXJlY3RpdmVcclxuICAgICwgUmVnaXN0ZXJEaXJlY3RpdmUsIEFjY29yZGlvbkRpcmVjdGl2ZVxyXG4gICAgLCBTaXJpb0lucHV0Q29tcG9uZW50LCBTaXJpb1ZhbGlkYXRpb25EaXJlY3RpdmVcclxuICAgICwgU2lyaW9TZWxlY3RDb21wb25lbnQsIFNpcmlvU2VsZWN0T3B0aW9uQ29tcG9uZW50LCBTaXJpb1NlbGVjdFBhbmVsQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvQ2hlY2tib3hHcm91cENvbXBvbmVudCwgU2lyaW9DaGVja2JveENvbXBvbmVudCwgU2lyaW9EYXRlcGlja2VyQ29tcG9uZW50LCBTaXJpb1RpbWVwaWNrZXJDb21wb25lbnRcclxuICAgICwgU2lyaW9SYWRpb0dyb3VwQ29tcG9uZW50LCBTaXJpb1JhZGlvQnV0dG9uQ29tcG9uZW50LCBTaXJpb1RhYkNvbXBvbmVudCwgU2lyaW9UYWJJdGVtQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvQWNjb3JkaW9uQ29tcG9uZW50LCBTaXJpb0FjY29yZGlvblBhbmVsQ29tcG9uZW50LCBTaXJpb0FjY29yZGlvbkhlYWRlckNvbXBvbmVudCwgU2lyaW9BY2NvcmRpb25Cb2R5Q29tcG9uZW50XHJcbiAgICAsIFNpcmlvQnV0dG9uQ29tcG9uZW50LCBTaXJpb0ZpbGVVcGxvYWRDb21wb25lbnRcclxuICAgICwgU2lyaW9Ub2dnbGVDb21wb25lbnQsIFNpcmlvQ2hpcENoZWNrYm94R3JvdXBDb21wb25lbnQsIFNpcmlvQ2hpcFJhZGlvR3JvdXBDb21wb25lbnQsIFNpcmlvSW5wdXRDaGlwQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvVGFibGVNb2R1bGUsIFNpcmlvVGFibGVDb21wb25lbnQsIFNpcmlvUGFnaW5hdG9yQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvQWxlcnRDb21wb25lbnQsIFNpcmlvQWxlcnRNZXNzYWdlQ29tcG9uZW50LCBTaXJpb1NsaWRlckNvbXBvbmVudFxyXG4gICAgLCBTaXJpb05vdGlmeUNvbXBvbmVudCwgU2lyaW9Ob3RpZnlCb2R5Q29tcG9uZW50LCBTaXJpb05vdGlmeUFjdGlvbkNvbXBvbmVudCwgU2lyaW9Ob3RpZnlMaW5rQ29tcG9uZW50XHJcbiAgICAsIFNpcmlvVG9vbHRpcERpcmVjdGl2ZVxyXG4gICAgLCBUZW1wbGF0ZVdyYXBwZXJDb21wb25lbnRcclxuICAgICwgQWdHcmlkQW5ndWxhcl0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBSZWdpc3RlclNlcnZpY2UsXHJcbiAgICBQcm9ncmFtbWFiaWxpdHlTZXJ2aWNlXHJcbiAgXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEeW5hbWljRmllbGRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoKSByb3dzOiBBcnJheTxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcclxuXHJcbiAgVGV4dHMgPSBUZXh0cztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IFNhbml0aXplU2VydmljZVxyXG4gICAgLCBwcml2YXRlIG1hcmtkb3duOiBNYXJrZG93blNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBtaW1lOiBNaW1lU2VydmljZVxyXG4gICAgLCBwcml2YXRlIHByb2dyYW1tYWJpbGl0eTogUHJvZ3JhbW1hYmlsaXR5U2VydmljZVxyXG4gICAgLCBwcml2YXRlIGV2ZW50czogRXZlbnRTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgZm9ybWF0dGVyOiBGb3JtYXR0ZXJTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgd2VhazogV2Vha1NlcnZpY2VcclxuICAgICwgcHJpdmF0ZSByZWdpc3RlcjogUmVnaXN0ZXJTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgZWw6IEVsZW1lbnRSZWZcclxuICApXHJcbiAge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZURhdGVwaWNrZXIoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmZvY3VzRmlyc3QoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UmVnaXN0ZXIoKTogUmVnaXN0ZXJTZXJ2aWNlIHtcclxuICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2xhc3MoY29tcG9uZW50OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKGNvbXBvbmVudC5sYXlvdXQ/LmNvbHVtbnMpIHtcclxuICAgICAgcmV0dXJuIFwiY29sLW1kLVwiICsgY29tcG9uZW50LmxheW91dD8uY29sdW1ucztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJjb2xcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRleHRGZWVkYmFjayhjb21wb25lbnQ6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtR3JvdXAuZ2V0KGNvbXBvbmVudC5rZXkpIGFzIEZvcm1Db250cm9sO1xyXG4gICAgcmV0dXJuIGNvbnRyb2wudmFsaWQgfHwgIWNvbnRyb2wuZXJyb3JzXHJcbiAgICAgID8gJydcclxuICAgICAgOiBjb250cm9sLmVycm9yc1snbWVzc2FnZSddO1xyXG4gIH1cclxuXHJcbiAgaXNXYXJuaW5nKGNvbXBvbmVudDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtR3JvdXAuZ2V0KGNvbXBvbmVudC5rZXkpIGFzIEZvcm1Db250cm9sO1xyXG4gICAgcmV0dXJuIChjb250cm9sLmVycm9ycyAmJiBjb250cm9sLmVycm9yc1snd2FybmluZyddKSB8fCBmYWxzZVxyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVTdHJpbmcodmFsdWU6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlU3RyaW5nKHRoaXMuZm9ybUdyb3VwLCB2YWx1ZSk7ICAgIFxyXG4gIH1cclxuXHJcbiAgZXZhbHVhdGVCb29sZWFuKHZhbHVlOiBib29sZWFuIHwgc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4gfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZUJvb2xlYW4odGhpcy5mb3JtR3JvdXAsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlTnVtYmVyKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfCBudWxsKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5wcm9ncmFtbWFiaWxpdHkuZXZhbHVhdGVOdW1iZXIodGhpcy5mb3JtR3JvdXAsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlVXJsKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogU2FmZVJlc291cmNlVXJsIHtcclxuICAgIGNvbnN0IHVybCA9IHRoaXMucHJvZ3JhbW1hYmlsaXR5LmV2YWx1YXRlU3RyaW5nKHRoaXMuZm9ybUdyb3VwLCB2YWx1ZSk7XHJcbiAgICBjb25zdCB3YXRjaEtleSA9IGA6c2FmZVVybCgke3VybH0pYDtcclxuICAgIHJldHVybiB0aGlzLndlYWsuY2FsbCh0aGlzLmZvcm1Hcm91cCwgd2F0Y2hLZXksICgpID0+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLnNhbml0aXplU2FmZVVybCh1cmwpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZVRlbXBsYXRlKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZVRlbXBsYXRlKHRoaXMuZm9ybUdyb3VwLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZSh0ZXh0OiBzdHJpbmcgfCBudWxsLCBjYWNoZWFibGU6IGJvb2xlYW4gPSB0cnVlKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnByb2dyYW1tYWJpbGl0eS5ldmFsdWF0ZSh0aGlzLmZvcm1Hcm91cCwgdGV4dCwgeyBjYWNoZWFibGU6IGNhY2hlYWJsZSB9KTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlQ29sb3IodmFsdWU6IHN0cmluZyB8IG51bGwpOiBCdXR0b25Db2xvcnMgfCBudWxsIHtcclxuICAgIGNvbnN0IGNvbG9yID0gdGhpcy5ldmFsdWF0ZVN0cmluZyh2YWx1ZSk7XHJcbiAgICBjb25zdCB3YXRjaEtleSA9IGA6YnV0dG9uQ29sb3IoJHtjb2xvcn0pYDtcclxuICAgIHJldHVybiB0aGlzLndlYWsuY2FsbCh0aGlzLmZvcm1Hcm91cCwgd2F0Y2hLZXksICgpID0+IHtcclxuICAgICAgaWYgKGNvbG9yID09PSBcImdob3N0XCIpXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIGNvbnN0IHZhbGlkQ29sb3JzOiBCdXR0b25Db2xvcnNbXSA9IFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAndGVydGlhcnknLCAndGVydGlhcnktbGlnaHQnLCAnZGFuZ2VyJ107XHJcbiAgICAgIHJldHVybiB2YWxpZENvbG9ycy5pbmNsdWRlcyhjb2xvciBhcyBCdXR0b25Db2xvcnMpID8gKGNvbG9yIGFzIEJ1dHRvbkNvbG9ycykgOiAncHJpbWFyeSc7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEZvcm1Hcm91cChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsKTogRm9ybUdyb3VwIHtcclxuICAgIGlmICghKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29udHJvbCBpcyBub3QgYSBGb3JtR3JvdXAnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb250cm9sO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUFycmF5KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwpOiBGb3JtQXJyYXkge1xyXG4gICAgaWYgKCEoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb250cm9sIGlzIG5vdCBhIEZvcm1BcnJheScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbnRyb2w7XHJcbiAgfVxyXG5cclxuICBnZXRDb250cm9sRnJvbVBhdGgocGF0aDogc3RyaW5nIHwgbnVsbCk6IEFic3RyYWN0Q29udHJvbCB8IG51bGwge1xyXG4gICAgcmV0dXJuIHBhdGhcclxuICAgICAgPyB0aGlzLmZvcm1Hcm91cC5nZXQocGF0aClcclxuICAgICAgOiB0aGlzLmZvcm1Hcm91cDtcclxuICB9XHJcblxyXG4gIHRvSFRNTCh0ZXh0OiBzdHJpbmcpOiBTYWZlSHRtbCB7XHJcbiAgICBjb25zdCB3YXRjaEtleSA9IGA6c2FmZUh0bWwoJHt0ZXh0fSlgO1xyXG4gICAgcmV0dXJuIHRoaXMud2Vhay5jYWxsKHRoaXMuZm9ybUdyb3VwLCB3YXRjaEtleSwgKCkgPT4ge1xyXG4gICAgICBjb25zdCBodG1sID0gdGhpcy5tYXJrZG93bi50b0h0bWwodGV4dCk7XHJcbiAgICAgIHJldHVybiB0aGlzLnNhbml0aXplci5zYW5pdGl6ZVNhZmVIdG1sKGh0bWwpO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgc2FuaXRpemUoaHRtbDogc3RyaW5nKTogU2FmZUh0bWwge1xyXG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLnNhbml0aXplU2FmZUh0bWwoaHRtbCk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0TWltZVR5cGVzKGV4dGVuc2lvbnM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5taW1lLmdldE1pbWVUeXBlcyhleHRlbnNpb25zKTtcclxuICB9O1xyXG5cclxuICBjbGlja0J1dHRvbihjb21wb25lbnQ6IGFueSwgZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGNvbXBvbmVudC5jbGljaykge1xyXG4gICAgICB0aGlzLmV2YWx1YXRlKGNvbXBvbmVudC5jbGljaywgZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbXBvbmVudC5jb21tYW5kKSB7XHJcbiAgICAgIGNvbnN0IGNvbW1hbmQ6IENvbW1hbmRFdmVudCA9IHtcclxuICAgICAgICBuYW1lOiB0aGlzLmV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5jb21tYW5kKSxcclxuICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudCxcclxuICAgICAgICBmb3JtR3JvdXA6IHRoaXMuZm9ybUdyb3VwLFxyXG4gICAgICAgIGV2ZW50OiBldmVudFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmV2ZW50cy5lbWl0Q29tbWFuZChjb21tYW5kKTtcclxuICAgIH0gICAgXHJcbiAgfVxyXG5cclxuICBnZXRWYWx1ZXMoY29tcG9uZW50OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKGNvbXBvbmVudC52YWx1ZXMpIHtcclxuICAgICAgLy8gU3RhdGljXHJcbiAgICAgIHJldHVybiBvZihjb21wb25lbnQudmFsdWVzKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGNvbXBvbmVudC52YWx1ZXNLZXkpIHtcclxuICAgICAgLy8gRmllbGQgdmFsdWVcclxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5ldmFsdWF0ZShjb21wb25lbnQudmFsdWVzS2V5KTtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0QXNPYnNlcnZhYmxlKHJlc3VsdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjb21wb25lbnQudmFsdWVzRXhwcmVzc2lvbikge1xyXG4gICAgICAvLyBFeHByZXNzaW9uXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZXZhbHVhdGUoY29tcG9uZW50LnZhbHVlc0V4cHJlc3Npb24pO1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRBc09ic2VydmFibGUocmVzdWx0KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBOb3RoaW5nXHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9ICAgIFxyXG4gIH1cclxuXHJcbiAgZ2V0R3JpZE9wdGlvbnMoY29tcG9uZW50OiBhbnkpOiBHcmlkT3B0aW9ucyB7XHJcbiAgICByZXR1cm4gdGhpcy53ZWFrLmNhbGwoY29tcG9uZW50LCAnZ2V0R3JpZE9wdGlvbnMnLCAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbHVtbkRlZnMgPSB0aGlzLmdldEdyaWRDb2x1bW5zKGNvbXBvbmVudCk7XHJcbiAgICAgIGNvbnN0IHBhZ2luYXRpb24gPSB0aGlzLmdldEdyaWRQYWdpbmFibGUoY29tcG9uZW50KTtcclxuICAgICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLmdldEdyaWRQYWdlU2l6ZShjb21wb25lbnQpO1xyXG4gICAgICBjb25zdCB0ZXh0cyA9IHRoaXMuZ2V0R3JpZFRleHRzKCk7XHJcbiAgICAgIGNvbnN0IHRoZW1lID0gdGhpcy5nZXRHcmlkVGhlbWUoKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBkZWZhdWx0Q29sRGVmOiB7XHJcbiAgICAgICAgICBmbG9hdGluZ0ZpbHRlcjogKGNvbXBvbmVudC5mbG9hdGluZ0ZpbHRlciA9PT0gdHJ1ZSksXHJcbiAgICAgICAgICBoZWFkZXJDbGFzczogKGNvbXBvbmVudC5mbG9hdGluZ0ZpbHRlciA9PT0gdHJ1ZSlcclxuICAgICAgICAgICAgPyAnc2hvdy1maWx0ZXInIDogJ2hpZGUtZmlsdGVyJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29sdW1uRGVmczogY29sdW1uRGVmcyxcclxuICAgICAgICBwYWdpbmF0aW9uOiBwYWdpbmF0aW9uLFxyXG4gICAgICAgIHBhZ2luYXRpb25QYWdlU2l6ZTogcGFnZVNpemUsXHJcbiAgICAgICAgcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3I6IFs1LCAxMCwgMjAsIDUwXSxcclxuICAgICAgICBsb2NhbGVUZXh0OiB0ZXh0cyxcclxuICAgICAgICB0aGVtZTogdGhlbWUsXHJcbiAgICAgICAgb25HcmlkUmVhZHk6IChwYXJhbXM6IEdyaWRSZWFkeUV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBwYXJhbXMuYXBpLmF1dG9TaXplQ29sdW1ucyhbXCJhY3Rpb25zXCJdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEdyaWRNb2R1bGVzKGNvbXBvbmVudDogYW55KTogTW9kdWxlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMud2Vhay5jYWxsKGNvbXBvbmVudCwgJ2dldEdyaWRNb2R1bGVzJywgKCkgPT4ge1xyXG4gICAgICByZXR1cm4gW1xyXG4gICAgICAgIENsaWVudFNpZGVSb3dNb2RlbE1vZHVsZVxyXG4gICAgICAgICwgSW5maW5pdGVSb3dNb2RlbE1vZHVsZVxyXG4gICAgICAgICwgUGFnaW5hdGlvbk1vZHVsZVxyXG4gICAgICAgICwgTG9jYWxlTW9kdWxlXHJcbiAgICAgICAgLCBDZWxsU3R5bGVNb2R1bGVcclxuICAgICAgICAsIENsaWVudFNpZGVSb3dNb2RlbEFwaU1vZHVsZVxyXG4gICAgICAgICwgVGV4dEZpbHRlck1vZHVsZVxyXG4gICAgICAgICwgTnVtYmVyRmlsdGVyTW9kdWxlXHJcbiAgICAgICAgLCBEYXRlRmlsdGVyTW9kdWxlXHJcbiAgICAgICAgLCBDb2x1bW5BdXRvU2l6ZU1vZHVsZVxyXG4gICAgICAgICwgQ29sdW1uQXBpTW9kdWxlXHJcbiAgICAgICAgLCBWYWxpZGF0aW9uTW9kdWxlXHJcbiAgICAgIF07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEdyaWREYXRhKGNvbXBvbmVudDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmIChjb21wb25lbnQuZGF0YVNvdXJjZSkge1xyXG4gICAgICAvLyBFeHByZXNzaW9uXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZXZhbHVhdGUoY29tcG9uZW50LmRhdGFTb3VyY2UpO1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRBc09ic2VydmFibGUocmVzdWx0KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBOb3RoaW5nXHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGROZXdJdGVtKGNvbXBvbmVudDogYW55KSB7XHJcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmdldEZvcm1BcnJheSh0aGlzLmdldENvbnRyb2xGcm9tUGF0aChjb21wb25lbnQucGF0aCkpO1xyXG4gICAgKGZvcm1BcnJheSBhcyBhbnkpLmFkZE5ld0l0ZW0oKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUl0ZW0oY29tcG9uZW50OiBhbnksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZ2V0Rm9ybUFycmF5KHRoaXMuZ2V0Q29udHJvbEZyb21QYXRoKGNvbXBvbmVudC5wYXRoKSk7XHJcbiAgICBmb3JtQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlVXBsb2FkVGFibGVzKGNvbXBvbmVudDogYW55KTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLndlYWsuY2FsbChjb21wb25lbnQsICdjcmVhdGVVcGxvYWRUYWJsZXMnLCAoKSA9PiB7XHJcbiAgICAgIHJldHVybiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29tcG9uZW50czogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwidGFibGVcIixcclxuICAgICAgICAgICAgICBcImxheW91dFwiOiB7XHJcbiAgICAgICAgICAgICAgICBcImNvbHVtbnNcIjogbnVsbFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgXCJjb2x1bW5zXCI6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiOiBUZXh0cy5OYW1lLFxyXG4gICAgICAgICAgICAgICAgICBcImtleVwiOiBcIm5hbWVcIixcclxuICAgICAgICAgICAgICAgICAgXCJmbGV4XCI6IDFcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIFwibGFiZWxcIjogVGV4dHMuU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgXCJrZXlcIjogXCJzaXplXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwiaW50ZWdlclwiLFxyXG4gICAgICAgICAgICAgICAgICBcImFsaWduXCI6IFwicmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiOiBUZXh0cy5UeXBlLFxyXG4gICAgICAgICAgICAgICAgICBcImtleVwiOiBcInR5cGVcIiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgXCJrZXlcIjogXCJ1cmxcIixcclxuICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBcIndpZHRoXCI6IDUwLFxyXG4gICAgICAgICAgICAgICAgICBcImFsaWduXCI6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwib2JqZWN0VVJMXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIFwibGFiZWxcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgXCJ3aWR0aFwiOiA1MCxcclxuICAgICAgICAgICAgICAgICAgXCJhbGlnblwiOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICBcImZvcm1hdFwiOiBcImRlbGV0ZVJvd1wiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBcImRhdGFTb3VyY2VcIjogXCI9XCIgKyBjb21wb25lbnQua2V5LFxyXG4gICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IDIwMCxcclxuICAgICAgICAgICAgICBcImNvbmRpdGlvbmFsXCI6IGNvbXBvbmVudC5jb25kaXRpb25hbCxcclxuICAgICAgICAgICAgICBcImRpc2FibGVkXCI6IGNvbXBvbmVudC5kaXNhYmxlZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfVxyXG4gICAgICBdO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBmaWxlVXBsb2FkZWQoJGV2ZW50OiBOZ3hTaXJpb0V2ZW50PFNpcmlvRmlsZVVwbG9hZENvbXBvbmVudD4pIHtcclxuICAgIGNvbnN0IHJlbW92ZUZpbGUgPSAoZmlsZTogRmlsZSkgPT4ge1xyXG4gICAgICBpZiAoJGV2ZW50LmNvbXBvbmVudC5jb250cm9sKSB7XHJcbiAgICAgICAgY29uc3QgbmV3RmlsZXMgPSAkZXZlbnQuY29tcG9uZW50LmZpbGVMaXN0LmZpbHRlcihmID0+IGYgIT09IGZpbGUpO1xyXG4gICAgICAgICRldmVudC5jb21wb25lbnQuY29udHJvbC5zZXRWYWx1ZShuZXdGaWxlcyk7XHJcbiAgICAgICAgYWRkUmVtb3ZlKG5ld0ZpbGVzKTtcclxuICAgICAgICByZXR1cm4gbmV3RmlsZXM7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFkZFJlbW92ZSA9IChmaWxlczogRmlsZVtdKSA9PiB7XHJcbiAgICAgIGZpbGVzLmZvckVhY2goZmlsZSA9PiB7XHJcbiAgICAgICAgaWYgKCEoJ3JlbW92ZScgaW4gZmlsZSkpIHtcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaWxlLCAncmVtb3ZlJywge1xyXG4gICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIHJlbW92ZUZpbGUodGhpcyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgICB9KTsgXHJcbiAgICB9O1xyXG5cclxuICAgIGFkZFJlbW92ZSgkZXZlbnQuY29tcG9uZW50LmZpbGVMaXN0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9jdXNGaXJzdCgpIHtcclxuICAgIGNvbnN0IGZvY3VzYWJsZUVsZW1lbnRzID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcbiAgICAgICdidXR0b24sIFtocmVmXSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFt0YWJpbmRleF06bm90KFt0YWJpbmRleD1cIi0xXCJdKSdcclxuICAgICk7XHJcblxyXG4gICAgZm9yIChsZXQgZWwgb2YgZm9jdXNhYmxlRWxlbWVudHMpIHtcclxuICAgICAgaWYgKCEoZWwgYXMgSFRNTEVsZW1lbnQpLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkge1xyXG4gICAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuZm9jdXMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfSAgICAgIFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBncmlkVGV4dHMgPSB7XHJcbiAgICAuLi5BR19HUklEX0xPQ0FMRV9JVCxcclxuICAgIFwicGFnZVNpemVTZWxlY3RvckxhYmVsXCI6IFwiRWxlbWVudGkgcGVyIHBhZ2luYTpcIixcclxuICAgIFwidG9cIjogXCItXCIsXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBncmlkVGhlbWUgPSB0aGVtZVF1YXJ0elxyXG4gICAgLndpdGhQYXJ0KGljb25TZXRBbHBpbmUpXHJcbiAgICAud2l0aFBhcmFtcyh7XHJcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjRkFGQUZBXCIsXHJcbiAgICAgIGJvcmRlckNvbG9yOiBcIiNEOUU0RjdcIixcclxuICAgICAgYnJvd3NlckNvbG9yU2NoZW1lOiBcImxpZ2h0XCIsXHJcbiAgICAgIGNlbGxUZXh0Q29sb3I6IFwiIzAwMTIxQVwiLFxyXG4gICAgICBjb2x1bW5Cb3JkZXI6IHRydWUsXHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiaW5oZXJpdFwiLFxyXG4gICAgICBmb250U2l6ZTogMTYsXHJcbiAgICAgIGhlYWRlckJhY2tncm91bmRDb2xvcjogXCIjMDAyNDYwXCIsXHJcbiAgICAgIGhlYWRlckNvbHVtbkJvcmRlcjogdHJ1ZSxcclxuICAgICAgaGVhZGVyQ29sdW1uUmVzaXplSGFuZGxlQ29sb3I6IFwiI0YyRjZGQ1wiLFxyXG4gICAgICBoZWFkZXJDb2x1bW5SZXNpemVIYW5kbGVXaWR0aDogMixcclxuICAgICAgaGVhZGVyRm9udFNpemU6IDE2LFxyXG4gICAgICBoZWFkZXJGb250V2VpZ2h0OiA2MDAsXHJcbiAgICAgIGhlYWRlclJvd0JvcmRlcjogZmFsc2UsXHJcbiAgICAgIGhlYWRlclRleHRDb2xvcjogXCIjRjJGNkZDXCIsXHJcbiAgICAgIHJvd0JvcmRlcjogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gIHByaXZhdGUgZ2V0R3JpZENvbHVtbnMoY29tcG9uZW50OiBhbnkpOiBDb2xEZWZbXSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb21wb25lbnQuY29sdW1ucykpIHtcclxuICAgICAgY29uc3QgY29sdW1ucyA9IGNvbXBvbmVudC5jb2x1bW5zLm1hcCgoY29sdW1uOiBhbnkpID0+ICh7XHJcbiAgICAgICAgZmllbGQ6IGNvbHVtbi5rZXksXHJcbiAgICAgICAgaGVhZGVyTmFtZTogY29sdW1uLmxhYmVsLFxyXG4gICAgICAgIHJlc2l6YWJsZTogY29sdW1uLnJlc2l6ZSA9PT0gdHJ1ZSxcclxuICAgICAgICBzb3J0YWJsZTogY29sdW1uLnNvcnQgPT09IHRydWUsXHJcbiAgICAgICAgZmlsdGVyOiBjb2x1bW4uZmlsdGVyID09PSB0cnVlLFxyXG4gICAgICAgIHN1cHByZXNzTW92YWJsZTogIShjb2x1bW4ubW92ZSA9PT0gdHJ1ZSksXHJcbiAgICAgICAgLi4uKGNvbHVtbi5mbGV4ID09PSB0cnVlICYmIHsgZmxleDogMSB9KSxcclxuICAgICAgICAuLi4oY29sdW1uLmFsaWduID09PSBcImxlZnRcIiAmJiB7IGNlbGxTdHlsZTogeyB0ZXh0QWxpZ246ICdsZWZ0JyB9IH0pLFxyXG4gICAgICAgIC4uLihjb2x1bW4uYWxpZ24gPT09IFwiY2VudGVyXCIgJiYgeyBjZWxsU3R5bGU6IHsgdGV4dEFsaWduOiAnY2VudGVyJyB9IH0pLFxyXG4gICAgICAgIC4uLihjb2x1bW4uYWxpZ24gPT09IFwicmlnaHRcIiAmJiB7IGNlbGxTdHlsZTogeyB0ZXh0QWxpZ246ICdyaWdodCcgfSB9KSxcclxuICAgICAgICAuLi4odHlwZW9mIGNvbHVtbi5waW5uZWQgPT09IFwic3RyaW5nXCIgJiYgeyBwaW5uZWQ6IGNvbHVtbi5waW5uZWQgfSksXHJcbiAgICAgICAgLi4uKHR5cGVvZiBjb2x1bW4uZmxleCA9PT0gXCJudW1iZXJcIiAmJiB7IGZsZXg6IGNvbHVtbi5mbGV4IH0pLFxyXG4gICAgICAgIC4uLih0eXBlb2YgY29sdW1uLndpZHRoID09PSBcIm51bWJlclwiICYmIHsgd2lkdGg6IGNvbHVtbi53aWR0aCB9KSxcclxuICAgICAgICAuLi4odHlwZW9mIGNvbHVtbi5taW5XaWR0aCA9PT0gXCJudW1iZXJcIiAmJiB7IG1pbldpZHRoOiBjb2x1bW4ubWluV2lkdGggfSksXHJcbiAgICAgICAgLi4uKHR5cGVvZiBjb2x1bW4ubWF4V2lkdGggPT09IFwibnVtYmVyXCIgJiYgeyBtYXhXaWR0aDogY29sdW1uLm1heFdpZHRoIH0pLFxyXG4gICAgICAgIHZhbHVlRm9ybWF0dGVyOiB0aGlzLmdldEdyaWRGb3JtYXR0ZXIoY29sdW1uKSxcclxuICAgICAgICBjZWxsUmVuZGVyZXI6IHRoaXMuZ2V0R3JpZFJlbmRlcmVyKGNvbHVtbilcclxuICAgICAgfSkpO1xyXG5cclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29tcG9uZW50LmFjdGlvbnMpICYmIGNvbXBvbmVudC5hY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb2x1bW5zLnB1c2goe1xyXG4gICAgICAgICAgY29sSWQ6ICdhY3Rpb25zJyxcclxuICAgICAgICAgIGhlYWRlck5hbWU6IFwiQVwiLCAvL1RleHRzLkFjdGlvbnMsXHJcbiAgICAgICAgICByZXNpemFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgY2VsbERhdGFUeXBlOiBmYWxzZSxcclxuICAgICAgICAgIHBpbm5lZDogXCJyaWdodFwiLFxyXG4gICAgICAgICAgY2VsbFJlbmRlcmVyUGFyYW1zOiB7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxyXG4gICAgICAgICAgICBmb3JtR3JvdXA6IHRoaXMuZm9ybUdyb3VwXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY2VsbFJlbmRlcmVyOiBBY3Rpb25zQ2VsbFJlbmRlcmVyXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjb2x1bW5zO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0R3JpZFBhZ2luYWJsZShjb21wb25lbnQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh0eXBlb2YgY29tcG9uZW50LnJvd0NvdW50ID09PSAnbnVtYmVyJyAmJiBjb21wb25lbnQucm93Q291bnQgPiAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0R3JpZFBhZ2VTaXplKGNvbXBvbmVudDogYW55KSB7XHJcbiAgICBpZiAodHlwZW9mIGNvbXBvbmVudC5yb3dDb3VudCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgcmV0dXJuIGNvbXBvbmVudC5yb3dDb3VudDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0R3JpZFRleHRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JpZFRleHRzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRHcmlkVGhlbWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ncmlkVGhlbWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEdyaWRGb3JtYXR0ZXIoY29sdW1uOiBhbnkpOiAoKHBhcmFtOiBWYWx1ZUZvcm1hdHRlclBhcmFtcykgPT4gc3RyaW5nKSB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoY29sdW1uLmZvcm1hdCkge1xyXG4gICAgICBzd2l0Y2ggKGNvbHVtbi5mb3JtYXQpIHtcclxuICAgICAgICBjYXNlICdpbnRlZ2VyJzpcclxuICAgICAgICAgIHJldHVybiBwYXJhbXMgPT4gdGhpcy5mb3JtYXR0ZXIuZm9ybWF0SW50ZWdlcihwYXJhbXMudmFsdWUpO1xyXG4gICAgICAgIGNhc2UgJ2N1cnJlbmN5JzpcclxuICAgICAgICAgIHJldHVybiBwYXJhbXMgPT4gdGhpcy5mb3JtYXR0ZXIuZm9ybWF0Q3VycmVuY3kocGFyYW1zLnZhbHVlKTtcclxuICAgICAgICBjYXNlICdkYXRlJzpcclxuICAgICAgICAgIHJldHVybiBwYXJhbXMgPT4gdGhpcy5mb3JtYXR0ZXIuZm9ybWF0RGF0ZShwYXJhbXMudmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRHcmlkUmVuZGVyZXIoY29sdW1uOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKGNvbHVtbi5mb3JtYXQpIHtcclxuICAgICAgc3dpdGNoIChjb2x1bW4uZm9ybWF0KSB7XHJcbiAgICAgICAgY2FzZSAnb2JqZWN0VVJMJzpcclxuICAgICAgICAgIHJldHVybiBPYmplY3RVUkxSZW5kZXJlckNvbXBvbmVudDtcclxuICAgICAgICBjYXNlIFwiZGVsZXRlUm93XCI6XHJcbiAgICAgICAgICByZXR1cm4gRGVsZXRlUm93Q2VsbFJlbmRlcmVyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuICBcclxuICBwcml2YXRlIGdldEFzT2JzZXJ2YWJsZSh2YWx1ZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmIChpc09ic2VydmFibGUodmFsdWUpKVxyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICByZXR1cm4gb2YodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25maWd1cmVEYXRlcGlja2VyKCkge1xyXG4gICAgKERhdGVwaWNrZXIubG9jYWxlcyBhcyBhbnkpWydpdCddID0ge1xyXG4gICAgICBkYXlzOiBbXHJcbiAgICAgICAgJ0RvbWVuaWNhJyxcclxuICAgICAgICAnTHVuZWTDrCcsXHJcbiAgICAgICAgJ01hcnRlZMOsJyxcclxuICAgICAgICAnTWVyY29sZWTDrCcsXHJcbiAgICAgICAgJ0dpb3ZlZMOsJyxcclxuICAgICAgICAnVmVuZXJkw6wnLFxyXG4gICAgICAgICdTYWJhdG8nLFxyXG4gICAgICBdLFxyXG4gICAgICBkYXlzTWluOiBbJ0RvbScsICdMdW4nLCAnTWFyJywgJ01lcicsICdHaW8nLCAnVmVuJywgJ1NhYiddLFxyXG4gICAgICBtb250aHM6IFtcclxuICAgICAgICAnR2VubmFpbycsXHJcbiAgICAgICAgJ0ZlYmJyYWlvJyxcclxuICAgICAgICAnTWFyem8nLFxyXG4gICAgICAgICdBcHJpbGUnLFxyXG4gICAgICAgICdNYWdnaW8nLFxyXG4gICAgICAgICdHaXVnbm8nLFxyXG4gICAgICAgICdMdWdsaW8nLFxyXG4gICAgICAgICdBZ29zdG8nLFxyXG4gICAgICAgICdTZXR0ZW1icmUnLFxyXG4gICAgICAgICdPdHRvYnJlJyxcclxuICAgICAgICAnTm92ZW1icmUnLFxyXG4gICAgICAgICdEaWNlbWJyZScsXHJcbiAgICAgIF0sXHJcbiAgICAgIG1vbnRoc1Nob3J0OiBbXHJcbiAgICAgICAgJ0dlbicsXHJcbiAgICAgICAgJ0ZlYicsXHJcbiAgICAgICAgJ01hcicsXHJcbiAgICAgICAgJ0FwcicsXHJcbiAgICAgICAgJ01hZycsXHJcbiAgICAgICAgJ0dpdScsXHJcbiAgICAgICAgJ0x1ZycsXHJcbiAgICAgICAgJ0FnbycsXHJcbiAgICAgICAgJ1NldCcsXHJcbiAgICAgICAgJ090dCcsXHJcbiAgICAgICAgJ05vdicsXHJcbiAgICAgICAgJ0RpYycsXHJcbiAgICAgIF0sXHJcbiAgICAgIHRvZGF5OiAnT2dnaScsXHJcbiAgICAgIGNsZWFyOiAnUHVsaXNjaScsXHJcbiAgICAgIGZvcm1hdDogJ2RkL21tL3l5eXknLFxyXG4gICAgICB3ZWVrU3RhcnQ6IDEsXHJcbiAgICB9O1xyXG4gIH07XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIHJvd3NcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJyb3cgZmllbGQtc2V0XCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb21wb25lbnQgb2Ygcm93LmNvbXBvbmVudHNcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29tcG9uZW50LnR5cGVcIj5cclxuICAgICAgICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgW2NsYXNzXT1cImdldENsYXNzKGNvbXBvbmVudClcIj5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0ZXh0ZmllbGQgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dGZpZWxkJ1wiPlxyXG4gICAgICAgICAgICA8bmd4LXNpcmlvLWlucHV0IHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhTGFiZWw9XCJpbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LnRvb2x0aXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29tcG9uZW50LnBsYWNlaG9sZGVyIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ByZWZpeEFkb3JuZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmFwcGVhcmFuY2U/LnByZWZpeEFkb3JuZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3VmZml4QWRvcm5lcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuYXBwZWFyYW5jZT8uc3VmZml4QWRvcm5lcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQmx1clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZXh0ZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRleHRmaWVsZFwiPlxyXG4gICAgICAgICAgICA8L25neC1zaXJpby1pbnB1dD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIHNlbGVjdCAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzZWxlY3QnXCI+XHJcbiAgICAgICAgICAgIDxuZ3gtc2lyaW8tc2VsZWN0IGFyaWFMYWJlbD1cInNlbGVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudG9vbHRpcClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY29tcG9uZW50LnBsYWNlaG9sZGVyIHx8ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5kZXNjcmlwdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcm9wZG93blxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInNlbGVjdFwiPlxyXG4gICAgICAgICAgICAgIDxuZ3gtc2lyaW8tc2VsZWN0LXBhbmVsIGFyaWFMYWJlbD1cIml0ZW1zXCI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWlucHV0ICpuZ0lmPVwiY29tcG9uZW50LnNlYXJjaGFibGVcIiBjbGFzcz1cInNlYXJjaGFibGVcIiB0eXBlPVwidGV4dFwiIFtwbGFjZWhvbGRlcl09XCJUZXh0cy5UeXBlVG9TZWFyY2hcIj48L25neC1zaXJpby1pbnB1dD5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tc2VsZWN0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIChnZXRWYWx1ZXMoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj57eyBvcHRpb24ubGFiZWwgfX08L25neC1zaXJpby1zZWxlY3Qtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbmd4LXNpcmlvLXNlbGVjdC1wYW5lbD5cclxuICAgICAgICAgICAgPC9uZ3gtc2lyaW8tc2VsZWN0PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gdGFnbGlzdCAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0YWdsaXN0J1wiPlxyXG4gICAgICAgICAgICA8bmd4LXNpcmlvLXNlbGVjdCBhcmlhTGFiZWw9XCJzZWxlY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LnRvb2x0aXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbXBvbmVudC5wbGFjZWhvbGRlciB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNNdWx0aXBsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0YWdsaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRhZ2xpc3RcIj5cclxuICAgICAgICAgICAgICA8bmd4LXNpcmlvLXNlbGVjdC1wYW5lbCBhcmlhTGFiZWw9XCJpdGVtc1wiPlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby1zZWxlY3Qtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgKGdldFZhbHVlcyhjb21wb25lbnQpIHwgYXN5bmMpIHx8IFtdXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPnt7IG9wdGlvbi5sYWJlbCB9fTwvbmd4LXNpcmlvLXNlbGVjdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tc2VsZWN0LXBhbmVsPlxyXG4gICAgICAgICAgICA8L25neC1zaXJpby1zZWxlY3Q+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBudW1iZXIgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICA8bmd4LXNpcmlvLWlucHV0IHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbD1cImlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudG9vbHRpcClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb21wb25lbnQucGxhY2Vob2xkZXIgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcHJlZml4QWRvcm5lcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuYXBwZWFyYW5jZT8ucHJlZml4QWRvcm5lcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdWZmaXhBZG9ybmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5hcHBlYXJhbmNlPy5zdWZmaXhBZG9ybmVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVCbHVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI251bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwibnVtYmVyXCI+XHJcbiAgICAgICAgICAgIDwvbmd4LXNpcmlvLWlucHV0PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gZGF0ZXRpbWUgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZXRpbWUnXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbXBvbmVudC5zdWJ0eXBlXCI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGRhdGUgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWRhdGVwaWNrZXIgYXJpYUxhYmVsPVwiZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5kYXRlTGFiZWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50b29sdGlwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbXBvbmVudC5wbGFjZWhvbGRlciB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5kZXNjcmlwdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2RhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImRhdGVcIj5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWRhdGVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0aW1lIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0aW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby10aW1lcGlja2VyIGFyaWFMYWJlbD1cInRpbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudGltZUxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudG9vbHRpcClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb21wb25lbnQucGxhY2Vob2xkZXIgfHwgJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0aW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0aW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8L25neC1zaXJpby10aW1lcGlja2VyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBjaGVja2JveCAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2JveCdcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29tcG9uZW50LnN1YnR5cGVcIj5cclxuICAgICAgICAgICAgICA8IS0tICNyZWdpb24gdG9nZ2xlIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0b2dnbGUnXCI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXRvZ2dsZSBhcmlhTGFiZWw9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RvZ2dsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRvZ2dsZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpIH19XHJcbiAgICAgICAgICAgICAgICA8L25neC1zaXJpby10b2dnbGU+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBkZWZhdWx0IC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tY2hlY2tib3ggYXJpYUxhYmVsPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNjaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpIH19XHJcbiAgICAgICAgICAgICAgICA8L25neC1zaXJpby1jaGVja2JveD5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gcmFkaW8gLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncmFkaW8nXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbXBvbmVudC5zdWJ0eXBlXCI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGNoaXAgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoaXAnXCI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWNoaXAtcmFkaW8tZ3JvdXAgYXJpYUxhYmVsPVwicmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50b29sdGlwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5kZXNjcmlwdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2NoaXByYWRpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiY2hpcHJhZGlvXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8taW5wdXQtY2hpcCAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIChnZXRWYWx1ZXMoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1pbnB1dC1jaGlwPlxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tY2hpcC1yYWRpby1ncm91cD5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGRlZmF1bHQgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgPG5neC1zaXJpby1yYWRpby1ncm91cCBhcmlhTGFiZWw9XCJyYWRpb1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudG9vbHRpcClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEhlbHBdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmRlc2NyaXB0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb21wb25lbnQua2V5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1dhcm5pbmddPVwiaXNXYXJuaW5nKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNyYWRpb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJyYWRpb1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXJhZGlvLWJ1dHRvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIChnZXRWYWx1ZXMoY29tcG9uZW50KSB8IGFzeW5jKSB8fCBbXVwiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cclxuICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIGNoZWNrbGlzdCAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2xpc3QnXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbXBvbmVudC5zdWJ0eXBlXCI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjcmVnaW9uIGNoaXAgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoaXAnXCI+XHJcbiAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWNoaXAtY2hlY2tib3gtZ3JvdXAgYXJpYUxhYmVsPVwiY2hlY2tsaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsUG9wb3Zlcl09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudG9vbHRpcClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5yZWFkb25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNjaGlwY2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImNoaXBjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWlucHV0LWNoaXAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiAoZ2V0VmFsdWVzKGNvbXBvbmVudCkgfCBhc3luYykgfHwgW11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cclxuICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8taW5wdXQtY2hpcD5cclxuICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWNoaXAtY2hlY2tib3gtZ3JvdXA+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiBkZWZhdWx0IC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tY2hlY2tib3gtZ3JvdXAgYXJpYUxhYmVsPVwiY2hlY2tsaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50b29sdGlwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0SGVscF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQuZGVzY3JpcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGZWVkYmFja109XCJnZXRUZXh0RmVlZGJhY2soY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQ29udHJvbF09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmRpc2FibGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbXBvbmVudC5rZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93V2hlblZhbGlkXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2NoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tY2hlY2tib3ggKm5nRm9yPVwibGV0IG9wdGlvbiBvZiAoZ2V0VmFsdWVzKGNvbXBvbmVudCkgfCBhc3luYykgfHwgW11cIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbmd4LXNpcmlvLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tY2hlY2tib3gtZ3JvdXA+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIHRleHRhcmVhIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHRhcmVhJ1wiPlxyXG4gICAgICAgICAgICA8bmd4LXNpcmlvLWlucHV0IHR5cGU9XCJ0ZXh0YXJlYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsPVwidGV4dGFyZWFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxQb3BvdmVyXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50b29sdGlwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImNvbXBvbmVudC5wbGFjZWhvbGRlciB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZUNvbnRyb2xdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5kZXNjcmlwdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQmx1clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuVmFsaWRhdGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzV2FybmluZ109XCJpc1dhcm5pbmcoY29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZXh0YXJlYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwidGV4dGFyZWFcIj5cclxuICAgICAgICAgICAgPC9uZ3gtc2lyaW8taW5wdXQ+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBmaWxlcGlja2VyIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGVwaWNrZXInXCI+XHJcbiAgICAgICAgICAgIDxuZ3gtc2lyaW8tZmlsZS11cGxvYWQgYXJpYUxhYmVsPVwiZmlsZXBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LnRvb2x0aXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWNjZXB0XT1cImdldE1pbWVUeXBlcyhjb21wb25lbnQuYWNjZXB0KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQubXVsdGlwbGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsZVVwbG9hZGVkRXZlbnQpPVwiZmlsZVVwbG9hZGVkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93RmlsZWxpc3RdPVwiIWNvbXBvbmVudC5zaG93RGV0YWlsc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5kZXNjcmlwdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0RmVlZGJhY2tdPVwiZ2V0VGV4dEZlZWRiYWNrKGNvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LnJlYWRvbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjYW5WYWxpZGF0ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1doZW5WYWxpZF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2ZpbGVwaWNrZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImZpbGVwaWNrZXJcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhcyBmYS1hcnJvdy11cFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICB7eyBUZXh0cy5VcGxvYWQgfX1cclxuICAgICAgICAgICAgPC9uZ3gtc2lyaW8tZmlsZS11cGxvYWQ+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnQuc2hvd0RldGFpbHNcIj5cclxuICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtZmllbGRzIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgW3Jvd3NdPVwiY3JlYXRlVXBsb2FkVGFibGVzKGNvbXBvbmVudClcIj48L2FwcC1keW5hbWljLWZpZWxkcz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0ZXh0IC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAjdGV4dFxyXG4gICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXBhcmFncmFwaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwidG9IVE1MKGV2YWx1YXRlVGVtcGxhdGUoY29tcG9uZW50LnRleHQpKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50LnRvb2x0aXBcIj5cclxuICAgICAgICAgICAgICAgICAgPGFwcC10ZW1wbGF0ZS13cmFwcGVyICN0b29sdGlwV3JhcHBlciBbdGVtcGxhdGVdPVwidG9vbHRpcFRlbXBsYXRlXCIgW2NvbnRleHRdPVwieyBjb21wb25lbnQ6IGNvbXBvbmVudCB9XCI+PC9hcHAtdGVtcGxhdGUtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNpcmlvLWxhYmVsLXBvcG92ZXIgZmFzIGZhLWluZm8tY2lyY2xlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaXJpb1Rvb2x0aXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaGFzUG9wb3Zlcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tVGVtcGxhdGVdPVwidG9vbHRpcFdyYXBwZXIuZ2V0VGVtcGxhdGVSZWYoKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3Rvb2x0aXBUZW1wbGF0ZSBsZXQtY29tcG9uZW50PVwiY29tcG9uZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpcmlvLXRvb2x0aXAtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcGFyYWdyYXBoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJ0b0hUTUwoZXZhbHVhdGVUZW1wbGF0ZShjb21wb25lbnQudG9vbHRpcCkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICBcclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIGh0bWwgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaHRtbCdcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImh0bWwtcGFyYWdyYXBoXCJcclxuICAgICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwic2FuaXRpemUoZXZhbHVhdGVUZW1wbGF0ZShjb21wb25lbnQuY29udGVudCkpXCJcclxuICAgICAgICAgICAgICAgICAjaHRtbFxyXG4gICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiaHRtbFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIGltYWdlIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ltYWdlJ1wiPlxyXG4gICAgICAgICAgICA8aW1nIFtzcmNdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LnNvdXJjZSlcIlxyXG4gICAgICAgICAgICAgICAgIFthbHRdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmFsdClcIlxyXG4gICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTtoZWlnaHQ6IDEwMCU7XCJcclxuICAgICAgICAgICAgICAgICAjaW1hZ2VcclxuICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImltYWdlXCI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBkeW5hbWljbGlzdCAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkeW5hbWljbGlzdCdcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUFycmF5TmFtZV09XCJjb21wb25lbnQucGF0aFwiIFtyZXBlYXRdPVwiZXZhbHVhdGVOdW1iZXIoY29tcG9uZW50LnJlcGV0aXRpb25zKVwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbXBvbmVudC5zdWJ0eXBlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Rm9ybUFycmF5KGZvcm1Hcm91cC5nZXQoY29tcG9uZW50LnBhdGgpKS5jb250cm9scy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0YWIgLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0YWInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnRSZWZdPVwiZHluYW1pY2xpc3R0YWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tdGFiIFtsZWZ0QXJyb3dMYWJlbF09XCJUZXh0cy5TY3JvbGxMZWZ0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyaWdodEFycm93TGFiZWxdPVwiVGV4dHMuU2Nyb2xsUmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhYkNvdW50XT1cImdldEZvcm1BcnJheShmb3JtR3JvdXAuZ2V0KGNvbXBvbmVudC5wYXRoKSkuY29udHJvbHMubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNkeW5hbWljbGlzdHRhYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRGb3JtQXJyYXkoZm9ybUdyb3VwLmdldChjb21wb25lbnQucGF0aCkpLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4O1wiIFtmb3JtR3JvdXBOYW1lXT1cImlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLXRhYi1pdGVtIFtsYWJlbF09XCJjb21wb25lbnQubGFiZWwgKyAnICcgKyAoaSArIDEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDogeyBpdGVtOiBpdGVtLCBpbmRleDogaSB9XCI+PC9uZy1jb250YWluZXI+LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgJ2dyb3VwLXRvcCc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ3N0YXJ0JyxcclxuICAgICAgICAgICAgJ2dyb3VwLWNlbnRlcic6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ2NlbnRlcicsXHJcbiAgICAgICAgICAgICdncm91cC1ib3R0b20nOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdlbmQnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtZHluYW1pYy1maWVsZHMgW2Zvcm1Hcm91cF09XCJnZXRGb3JtR3JvdXAoaXRlbSlcIiBbcm93c109XCJjb21wb25lbnQucm93c1wiPjwvYXBwLWR5bmFtaWMtZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbXBvbmVudC5hbGxvd0FkZFJlbW92ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOnJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlSXRlbShjb21wb25lbnQsIGkpXCIgY2xhc3M9XCJyZW1vdmUtaXRlbVwiIFtjb2xvcl09XCJudWxsXCIgaWNvbj1cImZhcyBmYS10cmFzaFwiPnt7IFRleHRzLlJlbW92ZUl0ZW0gfX08L25neC1zaXJpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tdGFiLWl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tdGFiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICNyZWdpb24gYWNjb3JkaW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYWNjb3JkaW9uJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImR5bmFtaWNsaXN0YWNjb3JkaW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWFjY29yZGlvbiBbYWNjb3JkaW9uQ291bnRdPVwiZ2V0Rm9ybUFycmF5KGZvcm1Hcm91cC5nZXQoY29tcG9uZW50LnBhdGgpKS5jb250cm9scy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2R5bmFtaWNsaXN0YWNjb3JkaW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEZvcm1BcnJheShmb3JtR3JvdXAuZ2V0KGNvbXBvbmVudC5wYXRoKSkuY29udHJvbHM7IGxldCBpID0gaW5kZXg7XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2lyaW8tYWNjb3JkaW9uLXBhbmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb24taGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJUZXh0XT1cImNvbXBvbmVudC5sYWJlbCArICcgJyArIChpICsgMSlcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1hY2NvcmRpb24taGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1hY2NvcmRpb24tYm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLTxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHsgaXRlbTogaXRlbSwgaW5kZXg6IGkgfVwiPjwvbmctY29udGFpbmVyPi0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAnZ3JvdXAtdG9wJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICdncm91cC1jZW50ZXInOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAgICdncm91cC1ib3R0b20nOiBjb21wb25lbnQudmVydGljYWxBbGlnbm1lbnQgPT09ICdlbmQnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtZmllbGRzIFtmb3JtR3JvdXBdPVwiZ2V0Rm9ybUdyb3VwKGl0ZW0pXCIgW3Jvd3NdPVwiY29tcG9uZW50LnJvd3NcIj48L2FwcC1keW5hbWljLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcG9uZW50LmFsbG93QWRkUmVtb3ZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpyaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNpcmlvLWJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlSXRlbShjb21wb25lbnQsIGkpXCIgY2xhc3M9XCJyZW1vdmUtaXRlbVwiIFtjb2xvcl09XCJudWxsXCIgaWNvbj1cImZhcyBmYS10cmFzaFwiPnt7IFRleHRzLlJlbW92ZUl0ZW0gfX08L25neC1zaXJpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1hY2NvcmRpb24tYm9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1zaXJpby1hY2NvcmRpb24tcGFuZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYWNjb3JkaW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICNyZWdpb24gZGVmYXVsdCAtLT5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydncm91cC1vdXRsaW5lJzogY29tcG9uZW50LnNob3dPdXRsaW5lID09PSB0cnVlfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAjZHluYW1pY2xpc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJkeW5hbWljbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7IGV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbCkgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRGb3JtQXJyYXkoZm9ybUdyb3VwLmdldChjb21wb25lbnQucGF0aCkpLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4O1wiIFtmb3JtR3JvdXBOYW1lXT1cImlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgJ2dyb3VwLXRvcCc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ3N0YXJ0JyxcclxuICAgICAgICAnZ3JvdXAtY2VudGVyJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnY2VudGVyJyxcclxuICAgICAgICAnZ3JvdXAtYm90dG9tJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnZW5kJ31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1keW5hbWljLWZpZWxkcyBbZm9ybUdyb3VwXT1cImdldEZvcm1Hcm91cChpdGVtKVwiIFtyb3dzXT1cImNvbXBvbmVudC5yb3dzXCI+PC9hcHAtZHluYW1pYy1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbXBvbmVudC5hbGxvd0FkZFJlbW92ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246cmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1idXR0b24gKGNsaWNrKT1cInJlbW92ZUl0ZW0oY29tcG9uZW50LCBpKVwiIGNsYXNzPVwicmVtb3ZlLWl0ZW1cIiBbY29sb3JdPVwibnVsbFwiIGljb249XCJmYXMgZmEtdHJhc2hcIj57eyBUZXh0cy5SZW1vdmVJdGVtIH19PC9uZ3gtc2lyaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wb25lbnQuYWxsb3dBZGRSZW1vdmVcIj5cclxuICAgICAgICAgICAgICAgICAgPG5neC1zaXJpby1idXR0b24gKGNsaWNrKT1cImFkZE5ld0l0ZW0oY29tcG9uZW50KVwiIGNsYXNzPVwiYWRkLWl0ZW1cIiBbY29sb3JdPVwibnVsbFwiIGljb249XCJmYXMgZmEtcGx1c1wiPnt7IFRleHRzLkFkZEl0ZW0gfX08L25neC1zaXJpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBncm91cCAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidncm91cCdcIj5cclxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgJ2dyb3VwLW91dGxpbmUnOiBjb21wb25lbnQuc2hvd091dGxpbmUgPT09IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgJ2dyb3VwLXRvcCc6IGNvbXBvbmVudC52ZXJ0aWNhbEFsaWdubWVudCA9PT0gJ3N0YXJ0JyxcclxuICAgICAgICAgICAgICAgICAnZ3JvdXAtY2VudGVyJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnY2VudGVyJyxcclxuICAgICAgICAgICAgICAgICAnZ3JvdXAtYm90dG9tJzogY29tcG9uZW50LnZlcnRpY2FsQWxpZ25tZW50ID09PSAnZW5kJ31cIlxyXG4gICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbD57eyBldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8ZGl2ICNncm91cFxyXG4gICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWR5bmFtaWMtZmllbGRzIFtmb3JtR3JvdXBdPVwiZ2V0Rm9ybUdyb3VwKGdldENvbnRyb2xGcm9tUGF0aChjb21wb25lbnQucGF0aCkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwiY29tcG9uZW50LnJvd3NcIj48L2FwcC1keW5hbWljLWZpZWxkcz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0YWJsZSAtLT5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBbaGlkZV09XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5oaWRlKVwiXHJcbiAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RhYmxlJ1wiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbD57eyBldmFsdWF0ZVN0cmluZyhjb21wb25lbnQubGFiZWwpIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8YWctZ3JpZC1hbmd1bGFyIFttb2R1bGVzXT1cImdldEdyaWRNb2R1bGVzKGNvbXBvbmVudClcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncmlkT3B0aW9uc109XCJnZXRHcmlkT3B0aW9ucyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dTb3VyY2VdPVwiKGdldEdyaWREYXRhKGNvbXBvbmVudCkgfCBhc3luYykgfHwgW11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJjb21wb25lbnQuaGVpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0YWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRhYmxlXCIgLz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj4gICAgICAgICAgXHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gYnV0dG9uIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2J1dHRvbidcIj5cclxuICAgICAgICAgICAgPG5neC1zaXJpby1idXR0b24gKGNsaWNrRXZlbnQpPVwiY2xpY2tCdXR0b24oY29tcG9uZW50LCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImV2YWx1YXRlQ29sb3IoY29tcG9uZW50LmNvbG9yKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5pY29uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5kaXNhYmxlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgIHt7IGV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbCkgfX1cclxuICAgICAgICAgICAgPC9uZ3gtc2lyaW8tYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8IS0tICNlbmRyZWdpb24gLS0+XHJcbiAgICAgICAgICA8IS0tICNyZWdpb24gc2VwYXJhdG9yIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NlcGFyYXRvcidcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlcGFyYXRvclwiXHJcbiAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAjc2VwYXJhdG9yXHJcbiAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJzZXBhcmF0b3JcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBzcGFjZXIgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3BhY2VyJ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDEwMCVcIlxyXG4gICAgICAgICAgICAgICAgIFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJjb21wb25lbnQuaGVpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAjc3BhY2VyXHJcbiAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJzcGFjZXJcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiBpZnJhbWUgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaWZyYW1lJ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiPlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cImNvbXBvbmVudC5pZFwiPnt7IGV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5sYWJlbCkgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxpZnJhbWUgW3NyY109XCJldmFsdWF0ZVVybChjb21wb25lbnQudXJsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiJzEwMCUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiY29tcG9uZW50LmhlaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZnJhbWVTZWN1cml0eV09XCJjb21wb25lbnQuc2VjdXJpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgI2lmcmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgW3JlZ2lzdGVyXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImlmcmFtZVwiPlxyXG4gICAgICAgICAgICAgIDwvaWZyYW1lPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIGFsZXJ0IC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FsZXJ0J1wiPlxyXG4gICAgICAgICAgICA8bmd4LXNpcmlvLWFsZXJ0IFt0eXBlXT1cImNvbXBvbmVudC5yb2xlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxDbG9zZV09XCJUZXh0cy5DbG9zZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYWxlcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cImFsZXJ0XCI+XHJcbiAgICAgICAgICAgICAgPG5neC1zaXJpby1hbGVydC1tZXNzYWdlPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcGFyYWdyYXBoXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJ0b0hUTUwoZXZhbHVhdGVUZW1wbGF0ZShjb21wb25lbnQudGV4dCkpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25neC1zaXJpby1hbGVydC1tZXNzYWdlPlxyXG4gICAgICAgICAgICA8L25neC1zaXJpby1hbGVydD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIG5vdGljZSAtLT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidub3RpY2UnXCI+XHJcbiAgICAgICAgICAgIDxuZ3gtc2lyaW8tbm90aWZ5IFtoaWRlXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LmhpZGUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3ddPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uc2hvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbm90aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWdpc3Rlcl09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cIm5vdGljZVwiPlxyXG4gICAgICAgICAgICAgIDxuZ3gtc2lyaW8tbm90aWZ5LWJvZHkgW3RpdGxlXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC50aXRsZSlcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXBhcmFncmFwaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwidG9IVE1MKGV2YWx1YXRlVGVtcGxhdGUoY29tcG9uZW50LnRleHQpKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9uZ3gtc2lyaW8tbm90aWZ5LWJvZHk+XHJcbiAgICAgICAgICAgIDwvbmd4LXNpcmlvLW5vdGlmeT5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSAjcmVnaW9uIHJhbmdlIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3JhbmdlJ1wiPlxyXG4gICAgICAgICAgICA8bmd4LXNpcmlvLXNsaWRlciBbbGFiZWxdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LmxhYmVsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFBvcG92ZXJdPVwiZXZhbHVhdGVTdHJpbmcoY29tcG9uZW50LnRvb2x0aXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRIZWxwXT1cImV2YWx1YXRlU3RyaW5nKGNvbXBvbmVudC5kZXNjcmlwdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dEZlZWRiYWNrXT1cImdldFRleHRGZWVkYmFjayhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQucmVhZG9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVDb250cm9sXT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuZGlzYWJsZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd109XCJldmFsdWF0ZUJvb2xlYW4oY29tcG9uZW50LmNvbmRpdGlvbmFsPy5zaG93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29tcG9uZW50LmtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhblZhbGlkYXRlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNXYXJuaW5nXT1cImlzV2FybmluZyhjb21wb25lbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dXaGVuVmFsaWRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cImV2YWx1YXRlTnVtYmVyKGNvbXBvbmVudC5yYW5nZT8ubWluKSA/PyAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heF09XCJldmFsdWF0ZU51bWJlcihjb21wb25lbnQucmFuZ2U/Lm1heCkgPz8gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNyYW5nZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFJlZl09XCJyYW5nZVwiPlxyXG4gICAgICAgICAgICA8L25neC1zaXJpby1zbGlkZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuICAgICAgICAgIDwhLS0gI3JlZ2lvbiB0b29sdGlwIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3Rvb2x0aXAnXCI+XHJcbiAgICAgICAgICAgIDxhcHAtdGVtcGxhdGUtd3JhcHBlciAjdG9vbHRpcFdyYXBwZXIgW3RlbXBsYXRlXT1cInRvb2x0aXBUZW1wbGF0ZVwiIFtjb250ZXh0XT1cInsgY29tcG9uZW50OiBjb21wb25lbnQgfVwiPjwvYXBwLXRlbXBsYXRlLXdyYXBwZXI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzaXJpby1sYWJlbC1wb3BvdmVyIGZhcyBmYS1pbmZvLWNpcmNsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2hpZGVdPVwiZXZhbHVhdGVCb29sZWFuKGNvbXBvbmVudC5jb25kaXRpb25hbD8uaGlkZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzaG93XT1cImV2YWx1YXRlQm9vbGVhbihjb21wb25lbnQuY29uZGl0aW9uYWw/LnNob3cpXCJcclxuICAgICAgICAgICAgICAgICAgICBzaXJpb1Rvb2x0aXBcclxuICAgICAgICAgICAgICAgICAgICBbaGFzUG9wb3Zlcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbY3VzdG9tVGVtcGxhdGVdPVwidG9vbHRpcFdyYXBwZXIuZ2V0VGVtcGxhdGVSZWYoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgI3Rvb2x0aXBcclxuICAgICAgICAgICAgICAgICAgICBbcmVnaXN0ZXJdPVwiY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRvb2x0aXBcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0b29sdGlwVGVtcGxhdGUgbGV0LWNvbXBvbmVudD1cImNvbXBvbmVudFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaXJpby10b29sdGlwLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiY29tcG9uZW50LnRpdGxlXCIgY2xhc3M9XCJzaXJpby10b29sdGlwLWhlYWRpbmcgc2lyaW8tc3BhY2UtZG93blwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBldmFsdWF0ZVN0cmluZyhjb21wb25lbnQudGl0bGUpIH19XHJcbiAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1wYXJhZ3JhcGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInRvSFRNTChldmFsdWF0ZVRlbXBsYXRlKGNvbXBvbmVudC50ZXh0KSlcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
|