keevo-components 1.8.33 → 1.8.35
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/api/components/table/action-item.mjs +1 -1
- package/esm2022/lib/api/components/table/tabledit.config.mjs +1 -1
- package/esm2022/lib/api/helpers/keevo-validators.mjs +2 -2
- package/esm2022/lib/modal/kv-modal.module.mjs +1 -1
- package/esm2022/lib/modal/modal.component.mjs +10 -3
- package/esm2022/lib/table-edit/table-edit.component.mjs +79 -17
- package/esm2022/lib/table-edit/table-edit.module.mjs +1 -1
- package/esm2022/public-api.mjs +2 -2
- package/fesm2022/keevo-components.mjs +82 -13
- package/fesm2022/keevo-components.mjs.map +1 -1
- package/lib/api/components/table/action-item.d.ts +1 -0
- package/lib/api/components/table/tabledit.config.d.ts +2 -0
- package/lib/modal/modal.component.d.ts +1 -0
- package/lib/table-edit/table-edit.component.d.ts +10 -3
- package/package.json +1 -1
- package/public-api.d.ts +1 -1
|
@@ -6,20 +6,21 @@ import * as i2 from "../../public-api";
|
|
|
6
6
|
import * as i3 from "primeng/api";
|
|
7
7
|
import * as i4 from "primeng/autofocus";
|
|
8
8
|
import * as i5 from "primeng/button";
|
|
9
|
-
import * as i6 from "primeng/
|
|
10
|
-
import * as i7 from "primeng/
|
|
11
|
-
import * as i8 from "primeng/
|
|
12
|
-
import * as i9 from "primeng/
|
|
13
|
-
import * as i10 from "primeng/
|
|
14
|
-
import * as i11 from "primeng/
|
|
15
|
-
import * as i12 from "primeng/
|
|
16
|
-
import * as i13 from "primeng/
|
|
17
|
-
import * as i14 from "
|
|
18
|
-
import * as i15 from "
|
|
19
|
-
import * as i16 from "../inputs/input-
|
|
20
|
-
import * as i17 from "../inputs/input-
|
|
21
|
-
import * as i18 from "../inputs/input-
|
|
22
|
-
import * as i19 from "../inputs/
|
|
9
|
+
import * as i6 from "primeng/contextmenu";
|
|
10
|
+
import * as i7 from "primeng/tooltip";
|
|
11
|
+
import * as i8 from "primeng/dropdown";
|
|
12
|
+
import * as i9 from "primeng/inputtext";
|
|
13
|
+
import * as i10 from "primeng/menu";
|
|
14
|
+
import * as i11 from "primeng/panel";
|
|
15
|
+
import * as i12 from "primeng/ripple";
|
|
16
|
+
import * as i13 from "primeng/table";
|
|
17
|
+
import * as i14 from "primeng/toast";
|
|
18
|
+
import * as i15 from "@angular/forms";
|
|
19
|
+
import * as i16 from "../inputs/input-calendar/input-calendar.component";
|
|
20
|
+
import * as i17 from "../inputs/input-mask/input-mask.component";
|
|
21
|
+
import * as i18 from "../inputs/input-number/input-number.component";
|
|
22
|
+
import * as i19 from "../inputs/input-text/input-text.component";
|
|
23
|
+
import * as i20 from "../inputs/switch/switch.component";
|
|
23
24
|
export class TableEditComponent {
|
|
24
25
|
set setConfig(value) {
|
|
25
26
|
this.config = {
|
|
@@ -75,10 +76,64 @@ export class TableEditComponent {
|
|
|
75
76
|
this.doubleClickEvent = new EventEmitter();
|
|
76
77
|
this.filterField = new EventEmitter();
|
|
77
78
|
this.onSwitchTableChange = new EventEmitter();
|
|
79
|
+
this.selectedProduct = {
|
|
80
|
+
rowData: {},
|
|
81
|
+
editing: false
|
|
82
|
+
};
|
|
78
83
|
this.isRowSelectable = this.isRowSelectable.bind(this);
|
|
79
84
|
}
|
|
80
85
|
ngOnInit() {
|
|
81
86
|
this.tamanhoTela = window.innerWidth;
|
|
87
|
+
this.items = [
|
|
88
|
+
{ label: 'Editar linha', icon: 'pi pi-fw pi-pencil', command: () => {
|
|
89
|
+
const element = document.getElementById('rowEdit' + this.selectedProduct.rowData[this.config.dataKey]);
|
|
90
|
+
if (element && !this.config.disableEditRowFunction?.(this.selectedProduct.rowData)) {
|
|
91
|
+
element.click(); // Dispara um evento de clique no elemento com ID 'teste'
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
this.notificationService.toastWarn("A edição dessa linha esta desabilitada");
|
|
95
|
+
}
|
|
96
|
+
this.onRowEditInit(this.selectedProduct);
|
|
97
|
+
} },
|
|
98
|
+
{ label: 'Cancelar edição', icon: 'pi pi-fw pi-times', command: (data) => {
|
|
99
|
+
const element = document.getElementById('rowCancel' + this.selectedProduct.rowData[this.config.dataKey]);
|
|
100
|
+
if (element) {
|
|
101
|
+
element.click(); // Dispara um evento de clique no elemento com ID 'teste'
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
this.notificationService.toastWarn("A edição dessa linha esta desabilitada");
|
|
105
|
+
}
|
|
106
|
+
} },
|
|
107
|
+
{ label: 'Salvar edição', icon: 'pi pi-fw pi-save', command: (data) => {
|
|
108
|
+
const element = document.getElementById('rowSave' + this.selectedProduct.rowData[this.config.dataKey]);
|
|
109
|
+
if (element) {
|
|
110
|
+
element.click(); // Dispara um evento de clique no elemento com ID 'teste'
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
this.notificationService.toastWarn("A edição dessa linha esta desabilitada");
|
|
114
|
+
}
|
|
115
|
+
} },
|
|
116
|
+
];
|
|
117
|
+
}
|
|
118
|
+
ngDoCheck() {
|
|
119
|
+
this.items[0].visible = !this.selectedProduct.editing && this.isEditableTable() !== false;
|
|
120
|
+
this.items[1].visible = this.selectedProduct.editing && this.isEditableTable() !== false;
|
|
121
|
+
this.items[2].visible = this.selectedProduct.editing && this.isEditableTable() !== false;
|
|
122
|
+
}
|
|
123
|
+
dbClickEdit() {
|
|
124
|
+
const element = document.getElementById('rowEdit' + this.selectedItem[this.config.dataKey]);
|
|
125
|
+
if (element) {
|
|
126
|
+
element.click();
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
this.notificationService.toastWarn("A edição dessa linha esta desabilitada");
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
activateEdit() {
|
|
133
|
+
const element = document.getElementById('teste');
|
|
134
|
+
if (element) {
|
|
135
|
+
element.click(); // Dispara um evento de clique no elemento com ID 'teste'
|
|
136
|
+
}
|
|
82
137
|
}
|
|
83
138
|
isRowSelectable(event) {
|
|
84
139
|
return !this.isDisabledCheckbox(event.data);
|
|
@@ -313,6 +368,7 @@ export class TableEditComponent {
|
|
|
313
368
|
return visible;
|
|
314
369
|
}
|
|
315
370
|
activeItem(rowData) {
|
|
371
|
+
this.selectedItem = rowData;
|
|
316
372
|
this.onActiveItem.emit({ rowData: rowData });
|
|
317
373
|
}
|
|
318
374
|
activeItemLote(rowData) {
|
|
@@ -421,12 +477,18 @@ export class TableEditComponent {
|
|
|
421
477
|
isDisableEditRowFunction(rowData) {
|
|
422
478
|
return this.config.disableEditRowFunction ? this.config.disableEditRowFunction(rowData) : false;
|
|
423
479
|
}
|
|
480
|
+
isEditableTable() {
|
|
481
|
+
if (!this.config.columns) {
|
|
482
|
+
return null; // Se this.config.columns for null, retorna null
|
|
483
|
+
}
|
|
484
|
+
return this.config.columns.some((column) => 'fieldControlType' in column);
|
|
485
|
+
}
|
|
424
486
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableEditComponent, deps: [{ token: i1.DatePipe }, { token: i1.DecimalPipe }, { token: i2.CodigoFipePipe }, { token: i2.CpfCnpjPipe }, { token: i2.TelefonePipe }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
425
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableEditComponent, selector: "kv-table-edit", inputs: { setConfig: ["config", "setConfig"], dataSource: "dataSource", editMode: "editMode", selectedItems: "selectedItems", totalRecords: "totalRecords", paginator: "paginator", rowsPerPageOptions: "rowsPerPageOptions", rows: "rows", pageLinksOptions: "pageLinksOptions", showFirstLastIcon: "showFirstLastIcon", tableSize: "tableSize", applyStyle: "applyStyle", acoesLinhaTabela: "acoesLinhaTabela", filterColumnsBtn: "filterColumnsBtn", filtrosAvancados: "filtrosAvancados", scrollHeight: "scrollHeight", isTableScrollable: "isTableScrollable", rowTrackBy: "rowTrackBy", responsiveLayout: "responsiveLayout", espacamentoPai: "espacamentoPai", espacamentoLateral: "espacamentoLateral", tamanhoTotalTabela: "tamanhoTotalTabela", rightCollapse: "rightCollapse", _templates: ["templates", "_templates"] }, outputs: { onFilter: "onFilter", onRowSave: "onRowSave", onActiveItem: "onActiveItem", onActiveItemLote: "onActiveItemLote", onPaginate: "onPaginate", onSelectionChange: "onSelectionChange", doubleClickEvent: "doubleClickEvent", filterField: "filterField", onSwitchTableChange: "onSwitchTableChange" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, usesOnChanges: true, ngImport: i0, template: "\r\n<div class=\"card\" >\r\n <p-toast></p-toast>\r\n\r\n <p-panel\r\n *ngIf=\"filtrosAvancados\"\r\n header=\"Filtros avan\u00E7ados\"\r\n [toggleable]=\"true\"\r\n [collapsed]=\"true\"\r\n (collapsedChange)=\"collapsed = !collapsed\"\r\n [style]=\"{ 'margin-bottom': '2px' }\"\r\n >\r\n <ng-template pTemplate=\"headericons\">\r\n <i\r\n *ngIf=\"!collapsed\"\r\n class=\"pi pi-filter\"\r\n ></i>\r\n <!-- \u00CDcone quando o painel est\u00E1 aberto -->\r\n <i\r\n *ngIf=\"collapsed\"\r\n class=\"pi pi-minus\"\r\n ></i>\r\n <!-- \u00CDcone quando o painel est\u00E1 fechado -->\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </p-panel>\r\n\r\n <p-table\r\n #te\r\n *ngIf=\"config\"\r\n [value]=\"dataSource\"\r\n dataKey=\"id\"\r\n [tableStyle]=\"{ 'min-width': '50rem' }\"\r\n [columns]=\"config.columns\"\r\n [editMode]=\"'row'\"\r\n [scrollable]=\"true\"\r\n scrollHeight=\"400px\"\r\n appendTo=\"body\"\r\n [styleClass]=\"'p-datatable-sm'\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [rows]=\"rows\"\r\n [paginator]=\"paginator\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {{ totalRecords }}\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [pageLinks]=\"pageLinksOptions\"\r\n [scrollable]=\"isTableScrollable\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [rowTrackBy]=\"rowTrackBy \"\r\n [resizableColumns]=\"true\"\r\n >\r\n\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n <ng-template\r\n pTemplate=\"caption\"\r\n *ngIf=\"config.enableCation\"\r\n >\r\n <div class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\">\r\n <div class=\"col-12 flex flex-column\">\r\n <div\r\n *ngIf=\"config.title\"\r\n class=\"text-md font-bold my-3\"\r\n >\r\n {{ config.title }}\r\n </div>\r\n <div\r\n *ngIf=\"config.subtitle\"\r\n class=\"text-sm mb-4 font-medium\"\r\n >\r\n {{ config.subtitle }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\r\n tamanhoTela < 768 ? 'col-10' : 'col-12'\r\n }} mt-1 mb-2 \">\r\n <span\r\n *ngIf=\"config.enableFilter\"\r\n class=\"p-input-icon-left\"\r\n >\r\n <i class=\"pi pi-search\"></i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(te, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-2rem\"\r\n />\r\n </span>\r\n\r\n </div>\r\n\r\n <div class=\"flex flex-row col-1 justify-content-end\">\r\n <div\r\n *ngFor=\"let action of config.actionsLote\"\r\n class=\"btns-options\"\r\n [style]=\"{ 'margin-right': '7px' }\"\r\n >\r\n <button\r\n id=\"actionLoteBtns\"\r\n pButton\r\n *ngIf=\"\r\n (selectedItems.length > 0 || action.showAcoesLote) &&\r\n exibirCampo(action, this.action)\r\n \"\r\n class=\"actionLoteBtns p-button-raised p-button-text\"\r\n (click)=\"\r\n action?.command(commandEvent); activeItemLote(selectedItems)\r\n \"\r\n [pTooltip]=\"retornarCampo(action, selectedItems, 'tooltip')\"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.backgroundColor]=\"\r\n retornarCampo(action, selectedItems, 'btnColor')\r\n \"\r\n [disabled]=\"retornarCampo(action, selectedItems, 'disabled')\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined md-22\"\r\n [style.color]=\"\r\n retornarCampo(action, selectedItems, 'iconBtnColor')\r\n \"\r\n >\r\n {{ retornarCampo(action, selectedItems, \"icon\") }}\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"header\"\r\n let-columns\r\n >\r\n <tr>\r\n <th\r\n style=\"width: 4rem; border-left: solid 4px transparent\"\r\n *ngIf=\"config.enableSelect\"\r\n >\r\n <p-tableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"></p-tableHeaderCheckbox>\r\n </th>\r\n\r\n <th\r\n *ngFor=\"let col of columns\"\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.min-width]=\"col.width\"\r\n class=\"text-sm\"\r\n >\r\n <div\r\n [class]=\"\r\n centralizarColunas(col) && alignColunasHeader(col) == ''\r\n ? 'flex flex-row justify-content-center'\r\n : 'flex flex-row'\r\n \"\r\n [style]=\"alignColunasHeader(col)\"\r\n >\r\n <span>{{ col.header }}</span>\r\n <p-sortIcon\r\n *ngIf=\"col.sortable === true\"\r\n [field]=\"col.field\"\r\n style=\"font-size: 10px\"\r\n ></p-sortIcon>\r\n\r\n <span\r\n *ngIf=\"col.headerTooltip\"\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span>\r\n </div>\r\n </th>\r\n <th *ngIf=\"config.actions && config.actions.length > 0\"></th>\r\n <th id=\"th-edit\" style=\"width: 20px\">Editar</th>\r\n </tr>\r\n </ng-template>\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n\r\n\r\n\r\n <ng-template pTemplate=\"body\" let-rowData let-editing=\"editing\" let-ri=\"rowIndex\" let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\" let-rowspan=\"rowspan\">\r\n <tr [pEditableRow]=\"rowData\" [pEditableRowDisabled]=\"false\" >\r\n\r\n\r\n <td\r\n *ngIf=\"config.enableSelect\"\r\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\r\n >\r\n <!--<p-tableCheckbox *ngIf=\"isVisibleCheckbox(rowData)\"-->\r\n <p-tableCheckbox\r\n [value]=\"rowData\"\r\n [disabled]=\"isDisabledCheckbox(rowData)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableCheckbox>\r\n </td>\r\n\r\n\r\n <ng-container *ngFor=\"let col of columns; let i = index\">\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n <!-- Celula que armazena os controles de edi\u00E7\u00E3o para os campos -->\r\n <td *ngIf=\"col.fieldControlType\"\r\n class=\"rowTable\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col) \" [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <p-cellEditor [ngClass]=\"{'switch': col.fieldControlType == 'switch'}\">\r\n <!-- Controle de edi\u00E7\u00E3o do campo -->\r\n <ng-template pTemplate=\"input\">\r\n <ng-container [ngSwitch]=\"col.fieldControlType\">\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <kv-input-text [(ngModel)]=\"rowData[col.field]\" [required]=\"col.required ?? true\"></kv-input-text>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <kv-input-number [(ngModel)]=\"rowData[col.field]\" [required]=\"col.required ?? true\"></kv-input-number>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'mask'\">\r\n <kv-input-mask [mask]=\"col.mask\" [required]=\"col.required ?? true\" [(ngModel)]=\"rowData[col.field]\"></kv-input-mask>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <kv-switch [(ngModel)]=\"rowData[col.field]\" ></kv-switch>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n <div style=\"width: 300px\">\r\n <kv-input-calendar [(ngModel)]=\"rowData[col.field]\"></kv-input-calendar>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <div style=\"width: 300px\" >\r\n <p-dropdown\r\n appendTo=\"body\"\r\n [optionLabel]=\"col.fieldDropDownControl.descricaoobjeto\"\r\n [optionValue]=\"col.fieldDropDownControl.idobjeto\"\r\n [options]=\"col.fieldDropDownControl.fieldControlDropdownSource\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n >\r\n </p-dropdown>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Valor atual do campo -->\r\n <ng-template pTemplate=\"output\">\r\n <ng-container [ngSwitch]=\"col.fieldControlType\">\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <ng-container *ngIf=\"rowData[col.field]\">\r\n {{\r\n retornaDescricaoDrop(\r\n rowData,\r\n col\r\n )\r\n }}\r\n <!-- {{rowData[col.field]}} -->\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <kv-switch [(ngModel)]=\"rowData[col.field]\" [disabled]=\"true\"></kv-switch>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n {{ rowData[col.field] | date }}\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n {{ rowData[col.field] }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </p-cellEditor>\r\n </td>\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n <td *ngIf=\"rowgroup && !col.template && !col.fieldControlType\" [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n class=\"rowTable\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \" [pTooltip]=\"returnTooltipRow(rowData, col)\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span *ngIf=\"!isBooleanField(rowData, col); else booleanField\" [class]=\"returnRowClass(rowData, col)\">\r\n <span *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \">\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span [class]=\"returnClassChip(rowData, col)\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">{{\r\n transformValue(rowData, col) }}</span>\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n\r\n <i *ngIf=\"col.iconField\" [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n\r\n <ng-template #booleanField>\r\n <i *ngIf=\"!col.iconField && !isSwitchField(col)\" [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n\r\n <span *ngIf=\"isSwitchField(col)\" [class]=\"returnRowClass(rowData, col)\">\r\n <kv-switch (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\" [switchValue]=\"transformValue(rowData, col)\">\r\n </kv-switch>\r\n </span>\r\n </ng-template>\r\n </td>\r\n\r\n <td *ngIf=\"!rowgroup && !col.grouped && !col.template && !col.fieldControlType\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \" class=\"rowTable\" [pTooltip]=\"returnTooltipRow(rowData, col)\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span *ngIf=\"!isBooleanField(rowData, col); else booleanField\" [class]=\"returnRowClass(rowData, col)\">\r\n <span *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \">\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span [class]=\"returnClassChip(rowData, col)\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\r\n {{ transformValue(rowData, col) }}</span>\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n\r\n <i *ngIf=\"col.iconField\" [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n\r\n <ng-template #booleanField>\r\n <i *ngIf=\"!col.iconField && !isSwitchField(col)\" [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n\r\n <span *ngIf=\"isSwitchField(col)\" [class]=\"returnRowClass(rowData, col)\">\r\n <kv-switch (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\" [switchValue]=\"transformValue(rowData, col)\">\r\n </kv-switch>\r\n </span>\r\n </ng-template>\r\n </td>\r\n\r\n <td *ngIf=\"col.template && !col.fieldControlType\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \" class=\"rowTable\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n <ng-container *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\">\r\n </ng-container>\r\n </td>\r\n\r\n </ng-container>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- Controle de a\u00E7\u00E3o -->\r\n <td class=\"td-tools\"\r\n *ngIf=\"config.actions && config.actions.length > 0 && !editing\"\r\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\r\n >\r\n <div\r\n class=\"flex flex-row justify-content-end w-full gap-1\"\r\n *ngIf=\"acoesLinhaTabela\"\r\n >\r\n <div\r\n *ngFor=\"let action of config.actions\"\r\n class=\"mr-1\"\r\n >\r\n <!-- <button\r\n id=\"actionBtns\"\r\n pButton\r\n *ngIf=\"exibirCampo(action, rowData)\"\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"activeItem(rowData); action?.command(commandEvent)\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\r\n [tooltipPosition]=\"\r\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\r\n \"\r\n [disabled]=\"callDisabled(action, rowData)\"\r\n >\r\n <span class=\"material-symbols-outlined md-19\">\r\n {{ retornarCampo(action, rowData, \"icon\") }}</span\r\n >\r\n </button> -->\r\n\r\n <span\r\n class=\"material-symbols-outlined {{\r\n callDisabled(action, rowData)\r\n ? 'text-gray-400 cursor-auto'\r\n : 'cursor-pointer'\r\n }}\"\r\n style=\"font-size: 20px\"\r\n (click)=\"isButtonDisable(action, rowData, commandEvent)\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\r\n [tooltipPosition]=\"\r\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\r\n \"\r\n >\r\n {{ retornarCampo(action, rowData, \"icon\") }}\r\n </span>\r\n </div>\r\n </div>\r\n <div\r\n class=\"flex flex-row justify-content-end w-full\"\r\n *ngIf=\"!acoesLinhaTabela\"\r\n >\r\n <!-- <button\r\n id=\"moreVertBtn\"\r\n pButton\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n > -->\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\r\n style=\"font-size: 20px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n <!-- </button> -->\r\n\r\n <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div>\r\n\r\n <!-- <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div> -->\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n </div>\r\n </td>\r\n\r\n <td\r\n class=\"td-tools\"\r\n *ngIf=\"config.actions && config.actions.length > 0 && editing\"\r\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\r\n >\r\n <div\r\n class=\"flex flex-row justify-content-end w-full gap-1\"\r\n *ngIf=\"acoesLinhaTabela\"\r\n >\r\n\r\n </div>\r\n <div\r\n class=\"flex flex-row justify-content-end w-full\"\r\n *ngIf=\"!acoesLinhaTabela\"\r\n >\r\n </div>\r\n </td>\r\n\r\n\r\n\r\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- Controle de edi\u00E7\u00E3o -->\r\n <td class=\"td-edit\" >\r\n <div class=\"flex align-items-center justify-content-center gap-2\">\r\n <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"!editing\" pButton pRipple type=\"button\" pInitEditableRow icon=\"pi pi-pencil\"\r\n (click)=\"onRowEditInit(rowData)\" class=\"p-button-rounded p-button-text\"></button>\r\n <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"editing\" pButton pRipple type=\"button\" pSaveEditableRow icon=\"pi pi-check\"\r\n (click)=\"onRowEditSave(rowData, ri)\" class=\"p-button-rounded p-button-text p-button-success mr-2\"></button>\r\n <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"editing\" pButton pRipple type=\"button\" pCancelEditableRow icon=\"pi pi-times\"\r\n (click)=\"onRowEditCancel(rowData, ri)\" class=\"p-button-rounded p-button-text p-button-danger\"></button>\r\n </div>\r\n </td>\r\n\r\n\r\n\r\n\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.td-edit{position:sticky;right:-1px;background-color:#eaeaea}.td-tools{position:sticky;right:52px;border-right:3px solid #fff!important;background-color:#eaeaea}#th-edit{position:sticky;right:0;background-color:#eaeaea}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{text-align:center;border:1px solid #eaeaea;border-width:1px 1px;padding:0rem .5rem}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{text-align:center;padding:0rem .5rem;border:1px solid #dee2e6;border-width:1px 1px;font-weight:700;color:#343a40;background:#eaeaea;transition:box-shadow .2s}.error-show{background-color:red;width:5px;height:10px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:15px}.material-symbols-outlined.md-22{font-size:19px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:justify;padding:12px}:host ::ng-deep .center{display:flex;align-items:center;justify-content:center}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#29b92d!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:.9;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover{color:#a9a9a9}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-inputtext{font-size:.75rem}:host ::ng-deep .p-datatable-table{font-size:.75rem}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:2px 13px 0!important;border-radius:5px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{background-color:#eaeaea!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-bottom:1px solid #ddd!important;border-top:1px solid #ddd!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:50%;width:2.5rem!important;height:2.5rem!important;box-shadow:#0000003d 0 3px 8px}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}@media screen and (min-width: 961px){.moreVertBtn{position:relative;right:3px}}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-of-type{border-radius:0 0 5px!important}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:0 0 0 5px!important}:host ::ng-deep .p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before{transform:translate(1.25rem);height:15px;margin-top:-8px;-webkit-transform:translateX(1.25rem);-moz-transform:translateX(1.25rem);-ms-transform:translateX(1.25rem);-o-transform:translateX(1.25rem)}:host ::ng-deep .p-inputswitch.p-inputswitch-checked .p-inputswitch-slider{height:21px}:host ::ng-deep p-inputswitch{height:21px}:host ::ng-deep .p-inputswitch .p-inputswitch-slider:before{background:#fff;width:1rem;height:1.25rem;height:16px!important;left:.25rem;margin-top:-9px!important;margin-top:-.625rem;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-inputswitch:not(.p-disabled) .p-inputswitch-slider{height:21px}:host ::ng-deep .inputs{height:15px!important}:host ::ng-deep .p-dropdown .p-dropdown-label{display:flex;align-items:center;justify-content:center}:host ::ng-deep .p-dropdown:not(.p-paginator-rpp-options){height:25px!important}:host ::ng-deep .p-inputswitch .p-inputswitch-slider{height:21px!important}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i7.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i8.InputText, selector: "[pInputText]" }, { kind: "component", type: i9.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i10.Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "directive", type: i11.Ripple, selector: "[pRipple]" }, { kind: "component", type: i12.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i12.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i12.CellEditor, selector: "p-cellEditor" }, { kind: "component", type: i12.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i12.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i12.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i12.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "directive", type: i12.InitEditableRow, selector: "[pInitEditableRow]" }, { kind: "directive", type: i12.SaveEditableRow, selector: "[pSaveEditableRow]" }, { kind: "directive", type: i12.CancelEditableRow, selector: "[pCancelEditableRow]" }, { kind: "component", type: i13.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "directive", type: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i14.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i14.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i15.InputCalendarComponent, selector: "kv-input-calendar", inputs: ["isYear", "isMonthYear", "minDate", "maxDate", "showButtonBar", "showIcon", "showTime", "selectionMode"], outputs: ["onSelectionChange", "onSelectionValue"] }, { kind: "component", type: i16.InputMaskComponent, selector: "kv-input-mask", inputs: ["mask"], outputs: ["onComplete"] }, { kind: "component", type: i17.InputNumberComponent, selector: "kv-input-number", inputs: ["mode", "digits", "min", "max", "suffix"] }, { kind: "component", type: i18.InputTextComponent, selector: "kv-input-text" }, { kind: "component", type: i19.SwitchComponent, selector: "kv-switch", inputs: ["switchValue", "readonly"], outputs: ["onSwitchChange"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] }); }
|
|
487
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableEditComponent, selector: "kv-table-edit", inputs: { setConfig: ["config", "setConfig"], dataSource: "dataSource", editMode: "editMode", selectedItems: "selectedItems", totalRecords: "totalRecords", paginator: "paginator", rowsPerPageOptions: "rowsPerPageOptions", rows: "rows", pageLinksOptions: "pageLinksOptions", showFirstLastIcon: "showFirstLastIcon", tableSize: "tableSize", applyStyle: "applyStyle", acoesLinhaTabela: "acoesLinhaTabela", filterColumnsBtn: "filterColumnsBtn", filtrosAvancados: "filtrosAvancados", scrollHeight: "scrollHeight", isTableScrollable: "isTableScrollable", rowTrackBy: "rowTrackBy", responsiveLayout: "responsiveLayout", espacamentoPai: "espacamentoPai", espacamentoLateral: "espacamentoLateral", tamanhoTotalTabela: "tamanhoTotalTabela", rightCollapse: "rightCollapse", _templates: ["templates", "_templates"] }, outputs: { onFilter: "onFilter", onRowSave: "onRowSave", onActiveItem: "onActiveItem", onActiveItemLote: "onActiveItemLote", onPaginate: "onPaginate", onSelectionChange: "onSelectionChange", doubleClickEvent: "doubleClickEvent", filterField: "filterField", onSwitchTableChange: "onSwitchTableChange" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, usesOnChanges: true, ngImport: i0, template: "\r\n\r\n<div class=\"card\" >\r\n <p-toast></p-toast>\r\n\r\n <p-panel\r\n *ngIf=\"filtrosAvancados\"\r\n header=\"Filtros avan\u00E7ados\"\r\n [toggleable]=\"true\"\r\n [collapsed]=\"true\"\r\n (collapsedChange)=\"collapsed = !collapsed\"\r\n [style]=\"{ 'margin-bottom': '2px' }\"\r\n >\r\n <ng-template pTemplate=\"headericons\">\r\n <i\r\n *ngIf=\"!collapsed\"\r\n class=\"pi pi-filter\"\r\n ></i>\r\n <!-- \u00CDcone quando o painel est\u00E1 aberto -->\r\n <i\r\n *ngIf=\"collapsed\"\r\n class=\"pi pi-minus\"\r\n ></i>\r\n <!-- \u00CDcone quando o painel est\u00E1 fechado -->\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </p-panel>\r\n\r\n <p-contextMenu #cm [model]=\"items\"></p-contextMenu>\r\n <p-table\r\n #te\r\n [reorderableColumns]=\"config.reorderableColumns || false\"\r\n *ngIf=\"config\"\r\n [value]=\"dataSource\"\r\n [dataKey]=\"config.dataKey\"\r\n [tableStyle]=\"{ 'min-width': '50rem' }\"\r\n [columns]=\"config.columns\"\r\n [editMode]=\"'row'\"\r\n [scrollable]=\"true\"\r\n scrollHeight=\"400px\"\r\n appendTo=\"body\"\r\n [styleClass]=\"'p-datatable-sm'\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [rows]=\"rows\"\r\n [paginator]=\"paginator\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {{ totalRecords }}\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [pageLinks]=\"pageLinksOptions\"\r\n [scrollable]=\"isTableScrollable\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [rowTrackBy]=\"rowTrackBy \"\r\n [(contextMenuSelection)]=\"selectedProduct\"\r\n [contextMenu]=\" isEditableTable() ? cm : null\"\r\n >\r\n\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n <ng-template\r\n pTemplate=\"caption\"\r\n *ngIf=\"config.enableCation\"\r\n >\r\n <div class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\">\r\n <div class=\"col-12 flex flex-column\">\r\n <div\r\n *ngIf=\"config.title\"\r\n class=\"text-md font-bold my-3\"\r\n >\r\n {{ config.title }}\r\n </div>\r\n <div\r\n *ngIf=\"config.subtitle\"\r\n class=\"text-sm mb-4 font-medium\"\r\n >\r\n {{ config.subtitle }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\r\n tamanhoTela < 768 ? 'col-10' : 'col-12'\r\n }} mt-1 mb-2 \">\r\n <span\r\n *ngIf=\"config.enableFilter\"\r\n class=\"p-input-icon-left\"\r\n >\r\n <i class=\"pi pi-search\"></i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(te, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-2rem\"\r\n />\r\n </span>\r\n\r\n </div>\r\n\r\n <div class=\"flex flex-row col-1 justify-content-end\">\r\n <div\r\n *ngFor=\"let action of config.actionsLote\"\r\n class=\"btns-options\"\r\n [style]=\"{ 'margin-right': '7px' }\"\r\n >\r\n <button\r\n id=\"actionLoteBtns\"\r\n pButton\r\n *ngIf=\"\r\n (selectedItems.length > 0 || action.showAcoesLote) &&\r\n exibirCampo(action, this.action)\r\n \"\r\n class=\"actionLoteBtns p-button-raised p-button-text\"\r\n (click)=\"\r\n action?.command(commandEvent); activeItemLote(selectedItems)\r\n \"\r\n [pTooltip]=\"retornarCampo(action, selectedItems, 'tooltip')\"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.backgroundColor]=\"\r\n retornarCampo(action, selectedItems, 'btnColor')\r\n \"\r\n [disabled]=\"retornarCampo(action, selectedItems, 'disabled')\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined md-22\"\r\n [style.color]=\"\r\n retornarCampo(action, selectedItems, 'iconBtnColor')\r\n \"\r\n >\r\n {{ retornarCampo(action, selectedItems, \"icon\") }}\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"header\"\r\n let-columns\r\n >\r\n <tr>\r\n <th\r\n style=\"width: 4rem; border-left: solid 4px transparent\"\r\n *ngIf=\"config.enableSelect\"\r\n >\r\n <p-tableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"></p-tableHeaderCheckbox>\r\n </th>\r\n\r\n <th\r\n *ngFor=\"let col of columns\"\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.min-width]=\"col.width\"\r\n pReorderableColumn\r\n class=\"text-sm\"\r\n >\r\n <div\r\n [class]=\"\r\n centralizarColunas(col) && alignColunasHeader(col) == ''\r\n ? 'flex flex-row justify-content-center'\r\n : 'flex flex-row'\r\n \"\r\n [style]=\"alignColunasHeader(col)\"\r\n >\r\n <span>{{ col.header }}</span>\r\n <p-sortIcon\r\n *ngIf=\"col.sortable === true\"\r\n [field]=\"col.field\"\r\n style=\"font-size: 10px\"\r\n ></p-sortIcon>\r\n\r\n <span\r\n *ngIf=\"col.headerTooltip\"\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span>\r\n </div>\r\n </th>\r\n <th *ngIf=\"config.actions && config.actions.length > 0\"></th>\r\n <th *ngIf=\"isEditableTable()\" id=\"th-edit\" style=\"width: 20px\">Editar</th>\r\n </tr>\r\n </ng-template>\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n\r\n\r\n\r\n <ng-template pTemplate=\"body\" let-rowData let-editing=\"editing\" let-ri=\"rowIndex\" let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\" let-rowspan=\"rowspan\">\r\n <tr [pEditableRow]=\"rowData\" [pEditableRowDisabled]=\"false\"\r\n [pContextMenuRow]=\"{rowData, editing}\"\r\n >\r\n\r\n\r\n <td\r\n *ngIf=\"config.enableSelect\"\r\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\r\n >\r\n <!--<p-tableCheckbox *ngIf=\"isVisibleCheckbox(rowData)\"-->\r\n <p-tableCheckbox\r\n [value]=\"rowData\"\r\n [disabled]=\"isDisabledCheckbox(rowData)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableCheckbox>\r\n </td>\r\n\r\n\r\n <ng-container *ngFor=\"let col of columns; let i = index\">\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n <!-- Celula que armazena os controles de edi\u00E7\u00E3o para os campos -->\r\n <td *ngIf=\"col.fieldControlType\"\r\n [id]=\"'rowTable'+ rowData[config.dataKey]\"\r\n pSelectableRowDblClick=\"\"\r\n (click)=\"activeItem(rowData)\"\r\n (dblclick)=\"dbClickEdit()\"\r\n pSelectableRowDblClick=\"\"\r\n class=\"rowTable\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col) \" [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <p-cellEditor [ngClass]=\"{'switch': col.fieldControlType == 'switch'}\">\r\n <!-- Controle de edi\u00E7\u00E3o do campo -->\r\n <ng-template pTemplate=\"input\">\r\n\r\n <ng-container [ngSwitch]=\"col.fieldControlType\">\r\n\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\r\n <kv-input-text class=\"cellControl col\" [(ngModel)]=\"rowData[col.field]\" [required]=\"col.required ?? true\"></kv-input-text>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\r\n <kv-input-number class=\"cellControl col\" [(ngModel)]=\"rowData[col.field]\" [required]=\"col.required ?? true\"></kv-input-number>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'mask'\">\r\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\r\n <kv-input-mask class=\"cellControl col\" [mask]=\"col.mask\" [required]=\"col.required ?? true\" [(ngModel)]=\"rowData[col.field]\"></kv-input-mask>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\r\n <kv-switch class=\"cellControl col\" [(ngModel)]=\"rowData[col.field]\" ></kv-switch>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n <div style=\"width: 300px\">\r\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\r\n <kv-input-calendar class=\"cellControl col\" [(ngModel)]=\"rowData[col.field]\"></kv-input-calendar>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\r\n <p-dropdown\r\n class=\"cellControl col\"\r\n appendTo=\"body\"\r\n [optionLabel]=\"col.fieldDropDownControl.descricaoobjeto\"\r\n [optionValue]=\"col.fieldDropDownControl.idobjeto\"\r\n [options]=\"col.fieldDropDownControl.fieldControlDropdownSource\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n >\r\n </p-dropdown>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Valor atual do campo -->\r\n <ng-template pTemplate=\"output\">\r\n <ng-container [ngSwitch]=\"col.fieldControlType\">\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <ng-container *ngIf=\"rowData[col.field]\">\r\n {{\r\n retornaDescricaoDrop(\r\n rowData,\r\n col\r\n )\r\n }}\r\n <!-- {{rowData[col.field]}} -->\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <kv-switch [(ngModel)]=\"rowData[col.field]\" [disabled]=\"true\"></kv-switch>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n {{ rowData[col.field] | date }}\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n {{ rowData[col.field] }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </p-cellEditor>\r\n </td>\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n <td *ngIf=\"rowgroup && !col.template && !col.fieldControlType\" [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n class=\"rowTable\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \" [pTooltip]=\"returnTooltipRow(rowData, col)\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span *ngIf=\"!isBooleanField(rowData, col); else booleanField\" [class]=\"returnRowClass(rowData, col)\">\r\n <span *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \">\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span [class]=\"returnClassChip(rowData, col)\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">{{\r\n transformValue(rowData, col) }}</span>\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n\r\n <i *ngIf=\"col.iconField\" [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n\r\n <ng-template #booleanField>\r\n <i *ngIf=\"!col.iconField && !isSwitchField(col)\" [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n\r\n <span *ngIf=\"isSwitchField(col)\" [class]=\"returnRowClass(rowData, col)\">\r\n <kv-switch (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\" [switchValue]=\"transformValue(rowData, col)\">\r\n </kv-switch>\r\n </span>\r\n </ng-template>\r\n </td>\r\n\r\n <td *ngIf=\"!rowgroup && !col.grouped && !col.template && !col.fieldControlType\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \" class=\"rowTable\" [pTooltip]=\"returnTooltipRow(rowData, col)\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span *ngIf=\"!isBooleanField(rowData, col); else booleanField\" [class]=\"returnRowClass(rowData, col)\">\r\n <span *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \">\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span [class]=\"returnClassChip(rowData, col)\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\r\n {{ transformValue(rowData, col) }}</span>\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n\r\n <i *ngIf=\"col.iconField\" [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n\r\n <ng-template #booleanField>\r\n <i *ngIf=\"!col.iconField && !isSwitchField(col)\" [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n\r\n <span *ngIf=\"isSwitchField(col)\" [class]=\"returnRowClass(rowData, col)\">\r\n <kv-switch (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\" [switchValue]=\"transformValue(rowData, col)\">\r\n </kv-switch>\r\n </span>\r\n </ng-template>\r\n </td>\r\n\r\n <td *ngIf=\"col.template && !col.fieldControlType\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \" class=\"rowTable\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n <ng-container *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\">\r\n </ng-container>\r\n </td>\r\n\r\n </ng-container>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- Controle de a\u00E7\u00E3o -->\r\n <td [ngClass]=\"{'td-tools': isEditableTable(), 'td-tools-sticky': !isEditableTable() }\"\r\n *ngIf=\"config.actions && config.actions.length > 0 && !editing\"\r\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\r\n >\r\n <div\r\n class=\"flex flex-row justify-content-end w-full gap-1\"\r\n *ngIf=\"acoesLinhaTabela\"\r\n >\r\n <div\r\n *ngFor=\"let action of config.actions\"\r\n class=\"mr-1\"\r\n >\r\n <!-- <button\r\n id=\"actionBtns\"\r\n pButton\r\n *ngIf=\"exibirCampo(action, rowData)\"\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"activeItem(rowData); action?.command(commandEvent)\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\r\n [tooltipPosition]=\"\r\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\r\n \"\r\n [disabled]=\"callDisabled(action, rowData)\"\r\n >\r\n <span class=\"material-symbols-outlined md-19\">\r\n {{ retornarCampo(action, rowData, \"icon\") }}</span\r\n >\r\n </button> -->\r\n\r\n <span\r\n class=\"material-symbols-outlined {{\r\n callDisabled(action, rowData)\r\n ? 'text-gray-400 cursor-auto'\r\n : 'cursor-pointer'\r\n }}\"\r\n style=\"font-size: 20px\"\r\n (click)=\"isButtonDisable(action, rowData, commandEvent)\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\r\n [tooltipPosition]=\"\r\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\r\n \"\r\n >\r\n {{ retornarCampo(action, rowData, \"icon\") }}\r\n </span>\r\n </div>\r\n </div>\r\n <div\r\n class=\"flex flex-row justify-content-end w-full\"\r\n *ngIf=\"!acoesLinhaTabela\"\r\n >\r\n <!-- <button\r\n id=\"moreVertBtn\"\r\n pButton\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n > -->\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\r\n style=\"font-size: 20px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n <!-- </button> -->\r\n\r\n <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div>\r\n\r\n <!-- <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div> -->\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n </div>\r\n </td>\r\n\r\n <td\r\n class=\"td-tools\"\r\n *ngIf=\"config.actions && config.actions.length > 0 && editing\"\r\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\r\n >\r\n <div\r\n class=\"flex flex-row justify-content-end w-full gap-1\"\r\n *ngIf=\"acoesLinhaTabela\"\r\n >\r\n\r\n </div>\r\n <div\r\n class=\"flex flex-row justify-content-end w-full\"\r\n *ngIf=\"!acoesLinhaTabela\"\r\n >\r\n </div>\r\n </td>\r\n\r\n\r\n\r\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- Controle de edi\u00E7\u00E3o -->\r\n <td class=\"td-edit\" *ngIf=\"this.isEditableTable()\" >\r\n <div class=\"flex align-items-center justify-content-center gap-2\">\r\n <button [style.height]=\"'28px'\" [id]=\"'rowEdit' + rowData[config.dataKey] \" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"!editing\" pButton pRipple type=\"button\" pInitEditableRow icon=\"pi pi-pencil\"\r\n (click)=\"onRowEditInit(rowData)\" class=\"p-button-rounded p-button-text\"></button>\r\n <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"editing\" pButton pRipple type=\"button\" pSaveEditableRow icon=\"pi pi-check\"\r\n (click)=\"onRowEditSave(rowData, ri)\" [id]=\"'rowSave' + rowData[config.dataKey] \" class=\"p-button-rounded p-button-text p-button-success mr-2\"></button>\r\n <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"editing\" pButton pRipple type=\"button\" pCancelEditableRow icon=\"pi pi-times\"\r\n (click)=\"onRowEditCancel(rowData, ri)\" [id]=\"'rowCancel' + rowData[config.dataKey] \" class=\"p-button-rounded p-button-text p-button-danger\"></button>\r\n </div>\r\n </td>\r\n\r\n\r\n\r\n\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.td-edit{position:sticky;right:-1px;background-color:#fff;color:#5289b4}.td-tools{position:sticky;right:52px;border-right:3px solid #fff!important;background-color:#fff;box-shadow:-5px 0 20px -10px #000000bf}.td-tools-sticky{position:sticky;right:0;border-right:3px solid #fff!important;background-color:#fff;box-shadow:-5px 0 20px -10px #000000bf}#th-edit{position:sticky;right:0;background-color:#eaeaea}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{text-align:center;border:1px solid #eaeaea;border-width:1px 1px;padding:0rem .5rem}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{text-align:center;padding:0rem .5rem;border:1px solid #dee2e6;border-width:1px 1px;font-weight:700;color:#343a40;background:#eaeaea;transition:box-shadow .2s}.error-show{background-color:red;width:5px;height:10px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:15px}.material-symbols-outlined.md-22{font-size:19px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:justify;padding:12px}:host ::ng-deep .center{display:flex;align-items:center;justify-content:center}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#29b92d!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:.9;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover{color:#a9a9a9}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-inputtext{font-size:.75rem}:host ::ng-deep .p-datatable-table{font-size:.75rem}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:2px 13px 0!important;border-radius:5px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{background-color:#eaeaea!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-bottom:1px solid #ddd!important;border-top:1px solid #ddd!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:50%;width:2.5rem!important;height:2.5rem!important;box-shadow:#0000003d 0 3px 8px}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}@media screen and (min-width: 961px){.moreVertBtn{position:relative;right:3px}}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-of-type{border-radius:0 0 5px!important}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:0 0 0 5px!important}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before{transform:translate(1.25rem);height:15px;margin-top:-8px;-webkit-transform:translateX(1.25rem);-moz-transform:translateX(1.25rem);-ms-transform:translateX(1.25rem);-o-transform:translateX(1.25rem)}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch.p-inputswitch-checked .p-inputswitch-slider{height:21px}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch{height:21px}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:1rem;height:1.25rem;height:16px!important;left:.25rem;margin-top:-9px!important;margin-top:-.625rem;border-radius:50%;transition-duration:.2s}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch:not(.p-disabled) .p-inputswitch-slider{height:21px}:host ::ng-deep p-celleditor>div>kv-input-text>span>.inputs{height:15px!important}:host ::ng-deep .p-dropdown .p-dropdown-label{display:flex;align-items:center;justify-content:center}:host ::ng-deep p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:25px!important}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:21px!important}:host ::ng-deep input.p-inputtext.p-component.p-element.p-inputmask.inputs.p-filled{height:15px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i6.ContextMenu, selector: "p-contextMenu", inputs: ["model", "triggerEvent", "target", "global", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "id", "ariaLabel", "ariaLabelledBy"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i7.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i8.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i9.InputText, selector: "[pInputText]" }, { kind: "component", type: i10.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i11.Panel, selector: "p-panel", inputs: ["toggleable", "header", "collapsed", "style", "styleClass", "iconPos", "expandIcon", "collapseIcon", "showHeader", "toggler", "transitionOptions"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "directive", type: i12.Ripple, selector: "[pRipple]" }, { kind: "component", type: i13.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i13.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i13.ContextMenuRow, selector: "[pContextMenuRow]", inputs: ["pContextMenuRow", "pContextMenuRowIndex", "pContextMenuRowDisabled"] }, { kind: "directive", type: i13.ReorderableColumn, selector: "[pReorderableColumn]", inputs: ["pReorderableColumnDisabled"] }, { kind: "component", type: i13.CellEditor, selector: "p-cellEditor" }, { kind: "component", type: i13.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i13.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i13.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i13.SelectableRowDblClick, selector: "[pSelectableRowDblClick]", inputs: ["pSelectableRowDblClick", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "directive", type: i13.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "directive", type: i13.InitEditableRow, selector: "[pInitEditableRow]" }, { kind: "directive", type: i13.SaveEditableRow, selector: "[pSaveEditableRow]" }, { kind: "directive", type: i13.CancelEditableRow, selector: "[pCancelEditableRow]" }, { kind: "component", type: i14.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "life", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "directive", type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i15.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i16.InputCalendarComponent, selector: "kv-input-calendar", inputs: ["isYear", "isMonthYear", "minDate", "maxDate", "showButtonBar", "showIcon", "showTime", "selectionMode"], outputs: ["onSelectionChange", "onSelectionValue"] }, { kind: "component", type: i17.InputMaskComponent, selector: "kv-input-mask", inputs: ["mask"], outputs: ["onComplete"] }, { kind: "component", type: i18.InputNumberComponent, selector: "kv-input-number", inputs: ["mode", "digits", "min", "max", "suffix"] }, { kind: "component", type: i19.InputTextComponent, selector: "kv-input-text" }, { kind: "component", type: i20.SwitchComponent, selector: "kv-switch", inputs: ["switchValue", "readonly"], outputs: ["onSwitchChange"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] }); }
|
|
426
488
|
}
|
|
427
489
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableEditComponent, decorators: [{
|
|
428
490
|
type: Component,
|
|
429
|
-
args: [{ selector: 'kv-table-edit', template: "\r\n<div class=\"card\" >\r\n <p-toast></p-toast>\r\n\r\n <p-panel\r\n *ngIf=\"filtrosAvancados\"\r\n header=\"Filtros avan\u00E7ados\"\r\n [toggleable]=\"true\"\r\n [collapsed]=\"true\"\r\n (collapsedChange)=\"collapsed = !collapsed\"\r\n [style]=\"{ 'margin-bottom': '2px' }\"\r\n >\r\n <ng-template pTemplate=\"headericons\">\r\n <i\r\n *ngIf=\"!collapsed\"\r\n class=\"pi pi-filter\"\r\n ></i>\r\n <!-- \u00CDcone quando o painel est\u00E1 aberto -->\r\n <i\r\n *ngIf=\"collapsed\"\r\n class=\"pi pi-minus\"\r\n ></i>\r\n <!-- \u00CDcone quando o painel est\u00E1 fechado -->\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </p-panel>\r\n\r\n <p-table\r\n #te\r\n *ngIf=\"config\"\r\n [value]=\"dataSource\"\r\n dataKey=\"id\"\r\n [tableStyle]=\"{ 'min-width': '50rem' }\"\r\n [columns]=\"config.columns\"\r\n [editMode]=\"'row'\"\r\n [scrollable]=\"true\"\r\n scrollHeight=\"400px\"\r\n appendTo=\"body\"\r\n [styleClass]=\"'p-datatable-sm'\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [rows]=\"rows\"\r\n [paginator]=\"paginator\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {{ totalRecords }}\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [pageLinks]=\"pageLinksOptions\"\r\n [scrollable]=\"isTableScrollable\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [rowTrackBy]=\"rowTrackBy \"\r\n [resizableColumns]=\"true\"\r\n >\r\n\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n <ng-template\r\n pTemplate=\"caption\"\r\n *ngIf=\"config.enableCation\"\r\n >\r\n <div class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\">\r\n <div class=\"col-12 flex flex-column\">\r\n <div\r\n *ngIf=\"config.title\"\r\n class=\"text-md font-bold my-3\"\r\n >\r\n {{ config.title }}\r\n </div>\r\n <div\r\n *ngIf=\"config.subtitle\"\r\n class=\"text-sm mb-4 font-medium\"\r\n >\r\n {{ config.subtitle }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\r\n tamanhoTela < 768 ? 'col-10' : 'col-12'\r\n }} mt-1 mb-2 \">\r\n <span\r\n *ngIf=\"config.enableFilter\"\r\n class=\"p-input-icon-left\"\r\n >\r\n <i class=\"pi pi-search\"></i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(te, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-2rem\"\r\n />\r\n </span>\r\n\r\n </div>\r\n\r\n <div class=\"flex flex-row col-1 justify-content-end\">\r\n <div\r\n *ngFor=\"let action of config.actionsLote\"\r\n class=\"btns-options\"\r\n [style]=\"{ 'margin-right': '7px' }\"\r\n >\r\n <button\r\n id=\"actionLoteBtns\"\r\n pButton\r\n *ngIf=\"\r\n (selectedItems.length > 0 || action.showAcoesLote) &&\r\n exibirCampo(action, this.action)\r\n \"\r\n class=\"actionLoteBtns p-button-raised p-button-text\"\r\n (click)=\"\r\n action?.command(commandEvent); activeItemLote(selectedItems)\r\n \"\r\n [pTooltip]=\"retornarCampo(action, selectedItems, 'tooltip')\"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.backgroundColor]=\"\r\n retornarCampo(action, selectedItems, 'btnColor')\r\n \"\r\n [disabled]=\"retornarCampo(action, selectedItems, 'disabled')\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined md-22\"\r\n [style.color]=\"\r\n retornarCampo(action, selectedItems, 'iconBtnColor')\r\n \"\r\n >\r\n {{ retornarCampo(action, selectedItems, \"icon\") }}\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"header\"\r\n let-columns\r\n >\r\n <tr>\r\n <th\r\n style=\"width: 4rem; border-left: solid 4px transparent\"\r\n *ngIf=\"config.enableSelect\"\r\n >\r\n <p-tableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"></p-tableHeaderCheckbox>\r\n </th>\r\n\r\n <th\r\n *ngFor=\"let col of columns\"\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.min-width]=\"col.width\"\r\n class=\"text-sm\"\r\n >\r\n <div\r\n [class]=\"\r\n centralizarColunas(col) && alignColunasHeader(col) == ''\r\n ? 'flex flex-row justify-content-center'\r\n : 'flex flex-row'\r\n \"\r\n [style]=\"alignColunasHeader(col)\"\r\n >\r\n <span>{{ col.header }}</span>\r\n <p-sortIcon\r\n *ngIf=\"col.sortable === true\"\r\n [field]=\"col.field\"\r\n style=\"font-size: 10px\"\r\n ></p-sortIcon>\r\n\r\n <span\r\n *ngIf=\"col.headerTooltip\"\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span>\r\n </div>\r\n </th>\r\n <th *ngIf=\"config.actions && config.actions.length > 0\"></th>\r\n <th id=\"th-edit\" style=\"width: 20px\">Editar</th>\r\n </tr>\r\n </ng-template>\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n\r\n\r\n\r\n <ng-template pTemplate=\"body\" let-rowData let-editing=\"editing\" let-ri=\"rowIndex\" let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\" let-rowspan=\"rowspan\">\r\n <tr [pEditableRow]=\"rowData\" [pEditableRowDisabled]=\"false\" >\r\n\r\n\r\n <td\r\n *ngIf=\"config.enableSelect\"\r\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\r\n >\r\n <!--<p-tableCheckbox *ngIf=\"isVisibleCheckbox(rowData)\"-->\r\n <p-tableCheckbox\r\n [value]=\"rowData\"\r\n [disabled]=\"isDisabledCheckbox(rowData)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableCheckbox>\r\n </td>\r\n\r\n\r\n <ng-container *ngFor=\"let col of columns; let i = index\">\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n <!-- Celula que armazena os controles de edi\u00E7\u00E3o para os campos -->\r\n <td *ngIf=\"col.fieldControlType\"\r\n class=\"rowTable\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col) \" [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <p-cellEditor [ngClass]=\"{'switch': col.fieldControlType == 'switch'}\">\r\n <!-- Controle de edi\u00E7\u00E3o do campo -->\r\n <ng-template pTemplate=\"input\">\r\n <ng-container [ngSwitch]=\"col.fieldControlType\">\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <kv-input-text [(ngModel)]=\"rowData[col.field]\" [required]=\"col.required ?? true\"></kv-input-text>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <kv-input-number [(ngModel)]=\"rowData[col.field]\" [required]=\"col.required ?? true\"></kv-input-number>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'mask'\">\r\n <kv-input-mask [mask]=\"col.mask\" [required]=\"col.required ?? true\" [(ngModel)]=\"rowData[col.field]\"></kv-input-mask>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <kv-switch [(ngModel)]=\"rowData[col.field]\" ></kv-switch>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n <div style=\"width: 300px\">\r\n <kv-input-calendar [(ngModel)]=\"rowData[col.field]\"></kv-input-calendar>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <div style=\"width: 300px\" >\r\n <p-dropdown\r\n appendTo=\"body\"\r\n [optionLabel]=\"col.fieldDropDownControl.descricaoobjeto\"\r\n [optionValue]=\"col.fieldDropDownControl.idobjeto\"\r\n [options]=\"col.fieldDropDownControl.fieldControlDropdownSource\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n >\r\n </p-dropdown>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Valor atual do campo -->\r\n <ng-template pTemplate=\"output\">\r\n <ng-container [ngSwitch]=\"col.fieldControlType\">\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <ng-container *ngIf=\"rowData[col.field]\">\r\n {{\r\n retornaDescricaoDrop(\r\n rowData,\r\n col\r\n )\r\n }}\r\n <!-- {{rowData[col.field]}} -->\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <kv-switch [(ngModel)]=\"rowData[col.field]\" [disabled]=\"true\"></kv-switch>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n {{ rowData[col.field] | date }}\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n {{ rowData[col.field] }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </p-cellEditor>\r\n </td>\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n <td *ngIf=\"rowgroup && !col.template && !col.fieldControlType\" [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n class=\"rowTable\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \" [pTooltip]=\"returnTooltipRow(rowData, col)\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span *ngIf=\"!isBooleanField(rowData, col); else booleanField\" [class]=\"returnRowClass(rowData, col)\">\r\n <span *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \">\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span [class]=\"returnClassChip(rowData, col)\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">{{\r\n transformValue(rowData, col) }}</span>\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n\r\n <i *ngIf=\"col.iconField\" [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n\r\n <ng-template #booleanField>\r\n <i *ngIf=\"!col.iconField && !isSwitchField(col)\" [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n\r\n <span *ngIf=\"isSwitchField(col)\" [class]=\"returnRowClass(rowData, col)\">\r\n <kv-switch (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\" [switchValue]=\"transformValue(rowData, col)\">\r\n </kv-switch>\r\n </span>\r\n </ng-template>\r\n </td>\r\n\r\n <td *ngIf=\"!rowgroup && !col.grouped && !col.template && !col.fieldControlType\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \" class=\"rowTable\" [pTooltip]=\"returnTooltipRow(rowData, col)\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span *ngIf=\"!isBooleanField(rowData, col); else booleanField\" [class]=\"returnRowClass(rowData, col)\">\r\n <span *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \">\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span [class]=\"returnClassChip(rowData, col)\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\r\n {{ transformValue(rowData, col) }}</span>\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n\r\n <i *ngIf=\"col.iconField\" [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n\r\n <ng-template #booleanField>\r\n <i *ngIf=\"!col.iconField && !isSwitchField(col)\" [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n\r\n <span *ngIf=\"isSwitchField(col)\" [class]=\"returnRowClass(rowData, col)\">\r\n <kv-switch (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\" [switchValue]=\"transformValue(rowData, col)\">\r\n </kv-switch>\r\n </span>\r\n </ng-template>\r\n </td>\r\n\r\n <td *ngIf=\"col.template && !col.fieldControlType\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \" class=\"rowTable\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n <ng-container *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\">\r\n </ng-container>\r\n </td>\r\n\r\n </ng-container>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- Controle de a\u00E7\u00E3o -->\r\n <td class=\"td-tools\"\r\n *ngIf=\"config.actions && config.actions.length > 0 && !editing\"\r\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\r\n >\r\n <div\r\n class=\"flex flex-row justify-content-end w-full gap-1\"\r\n *ngIf=\"acoesLinhaTabela\"\r\n >\r\n <div\r\n *ngFor=\"let action of config.actions\"\r\n class=\"mr-1\"\r\n >\r\n <!-- <button\r\n id=\"actionBtns\"\r\n pButton\r\n *ngIf=\"exibirCampo(action, rowData)\"\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"activeItem(rowData); action?.command(commandEvent)\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\r\n [tooltipPosition]=\"\r\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\r\n \"\r\n [disabled]=\"callDisabled(action, rowData)\"\r\n >\r\n <span class=\"material-symbols-outlined md-19\">\r\n {{ retornarCampo(action, rowData, \"icon\") }}</span\r\n >\r\n </button> -->\r\n\r\n <span\r\n class=\"material-symbols-outlined {{\r\n callDisabled(action, rowData)\r\n ? 'text-gray-400 cursor-auto'\r\n : 'cursor-pointer'\r\n }}\"\r\n style=\"font-size: 20px\"\r\n (click)=\"isButtonDisable(action, rowData, commandEvent)\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\r\n [tooltipPosition]=\"\r\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\r\n \"\r\n >\r\n {{ retornarCampo(action, rowData, \"icon\") }}\r\n </span>\r\n </div>\r\n </div>\r\n <div\r\n class=\"flex flex-row justify-content-end w-full\"\r\n *ngIf=\"!acoesLinhaTabela\"\r\n >\r\n <!-- <button\r\n id=\"moreVertBtn\"\r\n pButton\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n > -->\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\r\n style=\"font-size: 20px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n <!-- </button> -->\r\n\r\n <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div>\r\n\r\n <!-- <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div> -->\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n </div>\r\n </td>\r\n\r\n <td\r\n class=\"td-tools\"\r\n *ngIf=\"config.actions && config.actions.length > 0 && editing\"\r\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\r\n >\r\n <div\r\n class=\"flex flex-row justify-content-end w-full gap-1\"\r\n *ngIf=\"acoesLinhaTabela\"\r\n >\r\n\r\n </div>\r\n <div\r\n class=\"flex flex-row justify-content-end w-full\"\r\n *ngIf=\"!acoesLinhaTabela\"\r\n >\r\n </div>\r\n </td>\r\n\r\n\r\n\r\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- Controle de edi\u00E7\u00E3o -->\r\n <td class=\"td-edit\" >\r\n <div class=\"flex align-items-center justify-content-center gap-2\">\r\n <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"!editing\" pButton pRipple type=\"button\" pInitEditableRow icon=\"pi pi-pencil\"\r\n (click)=\"onRowEditInit(rowData)\" class=\"p-button-rounded p-button-text\"></button>\r\n <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"editing\" pButton pRipple type=\"button\" pSaveEditableRow icon=\"pi pi-check\"\r\n (click)=\"onRowEditSave(rowData, ri)\" class=\"p-button-rounded p-button-text p-button-success mr-2\"></button>\r\n <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"editing\" pButton pRipple type=\"button\" pCancelEditableRow icon=\"pi pi-times\"\r\n (click)=\"onRowEditCancel(rowData, ri)\" class=\"p-button-rounded p-button-text p-button-danger\"></button>\r\n </div>\r\n </td>\r\n\r\n\r\n\r\n\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.td-edit{position:sticky;right:-1px;background-color:#eaeaea}.td-tools{position:sticky;right:52px;border-right:3px solid #fff!important;background-color:#eaeaea}#th-edit{position:sticky;right:0;background-color:#eaeaea}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{text-align:center;border:1px solid #eaeaea;border-width:1px 1px;padding:0rem .5rem}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{text-align:center;padding:0rem .5rem;border:1px solid #dee2e6;border-width:1px 1px;font-weight:700;color:#343a40;background:#eaeaea;transition:box-shadow .2s}.error-show{background-color:red;width:5px;height:10px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:15px}.material-symbols-outlined.md-22{font-size:19px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:justify;padding:12px}:host ::ng-deep .center{display:flex;align-items:center;justify-content:center}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#29b92d!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:.9;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover{color:#a9a9a9}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-inputtext{font-size:.75rem}:host ::ng-deep .p-datatable-table{font-size:.75rem}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:2px 13px 0!important;border-radius:5px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{background-color:#eaeaea!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-bottom:1px solid #ddd!important;border-top:1px solid #ddd!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:50%;width:2.5rem!important;height:2.5rem!important;box-shadow:#0000003d 0 3px 8px}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}@media screen and (min-width: 961px){.moreVertBtn{position:relative;right:3px}}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-of-type{border-radius:0 0 5px!important}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:0 0 0 5px!important}:host ::ng-deep .p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before{transform:translate(1.25rem);height:15px;margin-top:-8px;-webkit-transform:translateX(1.25rem);-moz-transform:translateX(1.25rem);-ms-transform:translateX(1.25rem);-o-transform:translateX(1.25rem)}:host ::ng-deep .p-inputswitch.p-inputswitch-checked .p-inputswitch-slider{height:21px}:host ::ng-deep p-inputswitch{height:21px}:host ::ng-deep .p-inputswitch .p-inputswitch-slider:before{background:#fff;width:1rem;height:1.25rem;height:16px!important;left:.25rem;margin-top:-9px!important;margin-top:-.625rem;border-radius:50%;transition-duration:.2s}:host ::ng-deep .p-inputswitch:not(.p-disabled) .p-inputswitch-slider{height:21px}:host ::ng-deep .inputs{height:15px!important}:host ::ng-deep .p-dropdown .p-dropdown-label{display:flex;align-items:center;justify-content:center}:host ::ng-deep .p-dropdown:not(.p-paginator-rpp-options){height:25px!important}:host ::ng-deep .p-inputswitch .p-inputswitch-slider{height:21px!important}\n"] }]
|
|
491
|
+
args: [{ selector: 'kv-table-edit', template: "\r\n\r\n<div class=\"card\" >\r\n <p-toast></p-toast>\r\n\r\n <p-panel\r\n *ngIf=\"filtrosAvancados\"\r\n header=\"Filtros avan\u00E7ados\"\r\n [toggleable]=\"true\"\r\n [collapsed]=\"true\"\r\n (collapsedChange)=\"collapsed = !collapsed\"\r\n [style]=\"{ 'margin-bottom': '2px' }\"\r\n >\r\n <ng-template pTemplate=\"headericons\">\r\n <i\r\n *ngIf=\"!collapsed\"\r\n class=\"pi pi-filter\"\r\n ></i>\r\n <!-- \u00CDcone quando o painel est\u00E1 aberto -->\r\n <i\r\n *ngIf=\"collapsed\"\r\n class=\"pi pi-minus\"\r\n ></i>\r\n <!-- \u00CDcone quando o painel est\u00E1 fechado -->\r\n </ng-template>\r\n <ng-content></ng-content>\r\n </p-panel>\r\n\r\n <p-contextMenu #cm [model]=\"items\"></p-contextMenu>\r\n <p-table\r\n #te\r\n [reorderableColumns]=\"config.reorderableColumns || false\"\r\n *ngIf=\"config\"\r\n [value]=\"dataSource\"\r\n [dataKey]=\"config.dataKey\"\r\n [tableStyle]=\"{ 'min-width': '50rem' }\"\r\n [columns]=\"config.columns\"\r\n [editMode]=\"'row'\"\r\n [scrollable]=\"true\"\r\n scrollHeight=\"400px\"\r\n appendTo=\"body\"\r\n [styleClass]=\"'p-datatable-sm'\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [globalFilterFields]=\"globalFilterFields\"\r\n [rows]=\"rows\"\r\n [paginator]=\"paginator\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{first} - {last} de {{ totalRecords }}\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [pageLinks]=\"pageLinksOptions\"\r\n [scrollable]=\"isTableScrollable\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [rowTrackBy]=\"rowTrackBy \"\r\n [(contextMenuSelection)]=\"selectedProduct\"\r\n [contextMenu]=\" isEditableTable() ? cm : null\"\r\n >\r\n\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n <ng-template\r\n pTemplate=\"caption\"\r\n *ngIf=\"config.enableCation\"\r\n >\r\n <div class=\"flex flex-row flex-wrap justify-content-between align-items-center grid formgrid p-fluid col-12\">\r\n <div class=\"col-12 flex flex-column\">\r\n <div\r\n *ngIf=\"config.title\"\r\n class=\"text-md font-bold my-3\"\r\n >\r\n {{ config.title }}\r\n </div>\r\n <div\r\n *ngIf=\"config.subtitle\"\r\n class=\"text-sm mb-4 font-medium\"\r\n >\r\n {{ config.subtitle }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\r\n tamanhoTela < 768 ? 'col-10' : 'col-12'\r\n }} mt-1 mb-2 \">\r\n <span\r\n *ngIf=\"config.enableFilter\"\r\n class=\"p-input-icon-left\"\r\n >\r\n <i class=\"pi pi-search\"></i>\r\n\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"true\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(te, $event)\"\r\n placeholder=\"Pesquisar...\"\r\n class=\"h-2rem\"\r\n />\r\n </span>\r\n\r\n </div>\r\n\r\n <div class=\"flex flex-row col-1 justify-content-end\">\r\n <div\r\n *ngFor=\"let action of config.actionsLote\"\r\n class=\"btns-options\"\r\n [style]=\"{ 'margin-right': '7px' }\"\r\n >\r\n <button\r\n id=\"actionLoteBtns\"\r\n pButton\r\n *ngIf=\"\r\n (selectedItems.length > 0 || action.showAcoesLote) &&\r\n exibirCampo(action, this.action)\r\n \"\r\n class=\"actionLoteBtns p-button-raised p-button-text\"\r\n (click)=\"\r\n action?.command(commandEvent); activeItemLote(selectedItems)\r\n \"\r\n [pTooltip]=\"retornarCampo(action, selectedItems, 'tooltip')\"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.backgroundColor]=\"\r\n retornarCampo(action, selectedItems, 'btnColor')\r\n \"\r\n [disabled]=\"retornarCampo(action, selectedItems, 'disabled')\"\r\n >\r\n <span\r\n class=\"material-symbols-outlined md-22\"\r\n [style.color]=\"\r\n retornarCampo(action, selectedItems, 'iconBtnColor')\r\n \"\r\n >\r\n {{ retornarCampo(action, selectedItems, \"icon\") }}\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"header\"\r\n let-columns\r\n >\r\n <tr>\r\n <th\r\n style=\"width: 4rem; border-left: solid 4px transparent\"\r\n *ngIf=\"config.enableSelect\"\r\n >\r\n <p-tableHeaderCheckbox (click)=\"activeItemLote(selectedItems)\"></p-tableHeaderCheckbox>\r\n </th>\r\n\r\n <th\r\n *ngFor=\"let col of columns\"\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.min-width]=\"col.width\"\r\n pReorderableColumn\r\n class=\"text-sm\"\r\n >\r\n <div\r\n [class]=\"\r\n centralizarColunas(col) && alignColunasHeader(col) == ''\r\n ? 'flex flex-row justify-content-center'\r\n : 'flex flex-row'\r\n \"\r\n [style]=\"alignColunasHeader(col)\"\r\n >\r\n <span>{{ col.header }}</span>\r\n <p-sortIcon\r\n *ngIf=\"col.sortable === true\"\r\n [field]=\"col.field\"\r\n style=\"font-size: 10px\"\r\n ></p-sortIcon>\r\n\r\n <span\r\n *ngIf=\"col.headerTooltip\"\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span>\r\n </div>\r\n </th>\r\n <th *ngIf=\"config.actions && config.actions.length > 0\"></th>\r\n <th *ngIf=\"isEditableTable()\" id=\"th-edit\" style=\"width: 20px\">Editar</th>\r\n </tr>\r\n </ng-template>\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n\r\n\r\n\r\n <ng-template pTemplate=\"body\" let-rowData let-editing=\"editing\" let-ri=\"rowIndex\" let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\" let-rowspan=\"rowspan\">\r\n <tr [pEditableRow]=\"rowData\" [pEditableRowDisabled]=\"false\"\r\n [pContextMenuRow]=\"{rowData, editing}\"\r\n >\r\n\r\n\r\n <td\r\n *ngIf=\"config.enableSelect\"\r\n [style]=\"applyStyle(rowData, { field: 'check-box', header: '' })\"\r\n >\r\n <!--<p-tableCheckbox *ngIf=\"isVisibleCheckbox(rowData)\"-->\r\n <p-tableCheckbox\r\n [value]=\"rowData\"\r\n [disabled]=\"isDisabledCheckbox(rowData)\"\r\n (click)=\"activeItemLote(selectedItems)\"\r\n ></p-tableCheckbox>\r\n </td>\r\n\r\n\r\n <ng-container *ngFor=\"let col of columns; let i = index\">\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n <!-- Celula que armazena os controles de edi\u00E7\u00E3o para os campos -->\r\n <td *ngIf=\"col.fieldControlType\"\r\n [id]=\"'rowTable'+ rowData[config.dataKey]\"\r\n pSelectableRowDblClick=\"\"\r\n (click)=\"activeItem(rowData)\"\r\n (dblclick)=\"dbClickEdit()\"\r\n pSelectableRowDblClick=\"\"\r\n class=\"rowTable\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col) \" [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n <p-cellEditor [ngClass]=\"{'switch': col.fieldControlType == 'switch'}\">\r\n <!-- Controle de edi\u00E7\u00E3o do campo -->\r\n <ng-template pTemplate=\"input\">\r\n\r\n <ng-container [ngSwitch]=\"col.fieldControlType\">\r\n\r\n <ng-container *ngSwitchCase=\"'text'\">\r\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\r\n <kv-input-text class=\"cellControl col\" [(ngModel)]=\"rowData[col.field]\" [required]=\"col.required ?? true\"></kv-input-text>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\r\n <kv-input-number class=\"cellControl col\" [(ngModel)]=\"rowData[col.field]\" [required]=\"col.required ?? true\"></kv-input-number>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'mask'\">\r\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\r\n <kv-input-mask class=\"cellControl col\" [mask]=\"col.mask\" [required]=\"col.required ?? true\" [(ngModel)]=\"rowData[col.field]\"></kv-input-mask>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\r\n <kv-switch class=\"cellControl col\" [(ngModel)]=\"rowData[col.field]\" ></kv-switch>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n <div style=\"width: 300px\">\r\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\r\n <kv-input-calendar class=\"cellControl col\" [(ngModel)]=\"rowData[col.field]\"></kv-input-calendar>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <div style=\"width: 300px\" class=\"grid formgrid p-fluid\" >\r\n <p-dropdown\r\n class=\"cellControl col\"\r\n appendTo=\"body\"\r\n [optionLabel]=\"col.fieldDropDownControl.descricaoobjeto\"\r\n [optionValue]=\"col.fieldDropDownControl.idobjeto\"\r\n [options]=\"col.fieldDropDownControl.fieldControlDropdownSource\"\r\n [(ngModel)]=\"rowData[col.field]\"\r\n >\r\n </p-dropdown>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Valor atual do campo -->\r\n <ng-template pTemplate=\"output\">\r\n <ng-container [ngSwitch]=\"col.fieldControlType\">\r\n <ng-container *ngSwitchCase=\"'dropdown'\">\r\n <ng-container *ngIf=\"rowData[col.field]\">\r\n {{\r\n retornaDescricaoDrop(\r\n rowData,\r\n col\r\n )\r\n }}\r\n <!-- {{rowData[col.field]}} -->\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'switch'\">\r\n <kv-switch [(ngModel)]=\"rowData[col.field]\" [disabled]=\"true\"></kv-switch>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'calendar'\">\r\n {{ rowData[col.field] | date }}\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n {{ rowData[col.field] }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n </p-cellEditor>\r\n </td>\r\n\r\n\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- ----------------------------------------------------------------------------------------------------------------------------------- -->\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n <td *ngIf=\"rowgroup && !col.template && !col.fieldControlType\" [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n class=\"rowTable\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \" [pTooltip]=\"returnTooltipRow(rowData, col)\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span *ngIf=\"!isBooleanField(rowData, col); else booleanField\" [class]=\"returnRowClass(rowData, col)\">\r\n <span *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \">\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span [class]=\"returnClassChip(rowData, col)\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">{{\r\n transformValue(rowData, col) }}</span>\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n\r\n <i *ngIf=\"col.iconField\" [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n\r\n <ng-template #booleanField>\r\n <i *ngIf=\"!col.iconField && !isSwitchField(col)\" [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n\r\n <span *ngIf=\"isSwitchField(col)\" [class]=\"returnRowClass(rowData, col)\">\r\n <kv-switch (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\" [switchValue]=\"transformValue(rowData, col)\">\r\n </kv-switch>\r\n </span>\r\n </ng-template>\r\n </td>\r\n\r\n <td *ngIf=\"!rowgroup && !col.grouped && !col.template && !col.fieldControlType\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \" class=\"rowTable\" [pTooltip]=\"returnTooltipRow(rowData, col)\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n\r\n <span *ngIf=\"!isBooleanField(rowData, col); else booleanField\" [class]=\"returnRowClass(rowData, col)\">\r\n <span *ngIf=\"\r\n !isChipField(col) && !col.iconField && !isImageField(col)\r\n \">\r\n <i *ngIf=\"col.icon\" [class]=\"col.icon + ' mr-2'\"></i>\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n\r\n <div *ngIf=\"isChipField(col) && !col.iconField\">\r\n <span [class]=\"returnClassChip(rowData, col)\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\r\n {{ transformValue(rowData, col) }}</span>\r\n </div>\r\n </span>\r\n\r\n <span *ngIf=\"isImageField(col)\">\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n\r\n <i *ngIf=\"col.iconField\" [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\" [pTooltip]=\"returnTooltipIcon(rowData, col)\">\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n\r\n <ng-template #booleanField>\r\n <i *ngIf=\"!col.iconField && !isSwitchField(col)\" [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"><span class=\"material-symbols-outlined\">\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n\r\n <span *ngIf=\"isSwitchField(col)\" [class]=\"returnRowClass(rowData, col)\">\r\n <kv-switch (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\" [switchValue]=\"transformValue(rowData, col)\">\r\n </kv-switch>\r\n </span>\r\n </ng-template>\r\n </td>\r\n\r\n <td *ngIf=\"col.template && !col.fieldControlType\" [style]=\"\r\n applyStyle(rowData, col) +\r\n centralizarColunas(col) +\r\n alignColunas(col)\r\n \" class=\"rowTable\">\r\n <span class=\"p-column-title\">{{ col.header }}:</span>\r\n <ng-container *ngIf=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\">\r\n </ng-container>\r\n </td>\r\n\r\n </ng-container>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- Controle de a\u00E7\u00E3o -->\r\n <td [ngClass]=\"{'td-tools': isEditableTable(), 'td-tools-sticky': !isEditableTable() }\"\r\n *ngIf=\"config.actions && config.actions.length > 0 && !editing\"\r\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\r\n >\r\n <div\r\n class=\"flex flex-row justify-content-end w-full gap-1\"\r\n *ngIf=\"acoesLinhaTabela\"\r\n >\r\n <div\r\n *ngFor=\"let action of config.actions\"\r\n class=\"mr-1\"\r\n >\r\n <!-- <button\r\n id=\"actionBtns\"\r\n pButton\r\n *ngIf=\"exibirCampo(action, rowData)\"\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"activeItem(rowData); action?.command(commandEvent)\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\r\n [tooltipPosition]=\"\r\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\r\n \"\r\n [disabled]=\"callDisabled(action, rowData)\"\r\n >\r\n <span class=\"material-symbols-outlined md-19\">\r\n {{ retornarCampo(action, rowData, \"icon\") }}</span\r\n >\r\n </button> -->\r\n\r\n <span\r\n class=\"material-symbols-outlined {{\r\n callDisabled(action, rowData)\r\n ? 'text-gray-400 cursor-auto'\r\n : 'cursor-pointer'\r\n }}\"\r\n style=\"font-size: 20px\"\r\n (click)=\"isButtonDisable(action, rowData, commandEvent)\"\r\n [pTooltip]=\"retornarCampo(action, rowData, 'tooltip')\"\r\n [tooltipPosition]=\"\r\n action.tooltipPosition ? action.tooltipPosition : 'bottom'\r\n \"\r\n >\r\n {{ retornarCampo(action, rowData, \"icon\") }}\r\n </span>\r\n </div>\r\n </div>\r\n <div\r\n class=\"flex flex-row justify-content-end w-full\"\r\n *ngIf=\"!acoesLinhaTabela\"\r\n >\r\n <!-- <button\r\n id=\"moreVertBtn\"\r\n pButton\r\n class=\"actionBtns p-button-text p-button-raised\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n > -->\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more-horiz\"\r\n style=\"font-size: 20px\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n more_horiz\r\n </span>\r\n <!-- </button> -->\r\n\r\n <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div>\r\n\r\n <!-- <div *ngFor=\"let action of config.actions\">\r\n {{ criarMenusModal(rowData) }}\r\n </div> -->\r\n\r\n <p-menu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"menuItems\"\r\n appendTo=\"body\"\r\n ></p-menu>\r\n </div>\r\n </td>\r\n\r\n <td\r\n class=\"td-tools\"\r\n *ngIf=\"config.actions && config.actions.length > 0 && editing\"\r\n [style]=\"applyStyle(rowData, { field: 'btns-options', header: '' })\"\r\n >\r\n <div\r\n class=\"flex flex-row justify-content-end w-full gap-1\"\r\n *ngIf=\"acoesLinhaTabela\"\r\n >\r\n\r\n </div>\r\n <div\r\n class=\"flex flex-row justify-content-end w-full\"\r\n *ngIf=\"!acoesLinhaTabela\"\r\n >\r\n </div>\r\n </td>\r\n\r\n\r\n\r\n <!-- ------------------------------------------------------------------------------------------------------------------------------------------- -->\r\n <!-- Controle de edi\u00E7\u00E3o -->\r\n <td class=\"td-edit\" *ngIf=\"this.isEditableTable()\" >\r\n <div class=\"flex align-items-center justify-content-center gap-2\">\r\n <button [style.height]=\"'28px'\" [id]=\"'rowEdit' + rowData[config.dataKey] \" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"!editing\" pButton pRipple type=\"button\" pInitEditableRow icon=\"pi pi-pencil\"\r\n (click)=\"onRowEditInit(rowData)\" class=\"p-button-rounded p-button-text\"></button>\r\n <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"editing\" pButton pRipple type=\"button\" pSaveEditableRow icon=\"pi pi-check\"\r\n (click)=\"onRowEditSave(rowData, ri)\" [id]=\"'rowSave' + rowData[config.dataKey] \" class=\"p-button-rounded p-button-text p-button-success mr-2\"></button>\r\n <button [style.height]=\"'28px'\" [style.width]=\"'28px'\" [disabled]=\"isDisableEditRowFunction(rowData)\" *ngIf=\"editing\" pButton pRipple type=\"button\" pCancelEditableRow icon=\"pi pi-times\"\r\n (click)=\"onRowEditCancel(rowData, ri)\" [id]=\"'rowCancel' + rowData[config.dataKey] \" class=\"p-button-rounded p-button-text p-button-danger\"></button>\r\n </div>\r\n </td>\r\n\r\n\r\n\r\n\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.td-edit{position:sticky;right:-1px;background-color:#fff;color:#5289b4}.td-tools{position:sticky;right:52px;border-right:3px solid #fff!important;background-color:#fff;box-shadow:-5px 0 20px -10px #000000bf}.td-tools-sticky{position:sticky;right:0;border-right:3px solid #fff!important;background-color:#fff;box-shadow:-5px 0 20px -10px #000000bf}#th-edit{position:sticky;right:0;background-color:#eaeaea}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{text-align:center;border:1px solid #eaeaea;border-width:1px 1px;padding:0rem .5rem}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th{text-align:center;padding:0rem .5rem;border:1px solid #dee2e6;border-width:1px 1px;font-weight:700;color:#343a40;background:#eaeaea;transition:box-shadow .2s}.error-show{background-color:red;width:5px;height:10px}.btns-options{position:relative;left:20px}.chip-style{border:solid 1px}:host::ng-deep .p-card .p-card-content{padding:0}.material-symbols-outlined.md-19{font-size:15px}.material-symbols-outlined.md-22{font-size:19px}.checkbox-container{display:flex;align-items:center;gap:2px;margin-top:5px}#botaoFiltro:hover{color:#a9a9a9}.actionLoteBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;font-size:16px;width:2rem;height:2rem;top:2px;margin-left:.5rem;justify-content:center;text-decoration:none;text-align:justify;padding:12px}:host ::ng-deep .center{display:flex;align-items:center;justify-content:center}#actionLoteBtns:hover,.actionLoteBtns:hover{background-color:#29b92d!important}.actionBtns{align-items:center;background-color:transparent;color:#a9a9a9;display:flex;width:.8rem;height:.8rem;margin-left:.22rem;justify-content:center;text-decoration:none;text-align:justify;padding:11px}:host::ng-deep .material-symbols-outlined{font-family:Material Symbols Outlined;font-weight:400;font-style:normal;line-height:.9;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}#actionBtns:hover{color:#a9a9a9}.image{border-style:solid;border-width:3.5px;border-color:#5289b4;border-radius:100%;height:55px;width:55px;padding:0;margin:0;vertical-align:middle}:host ::ng-deep .p-inputtext{font-size:.75rem}:host ::ng-deep .p-datatable-table{font-size:.75rem}:host ::ng-deep .p-datatable-header{background-color:#eaeaea!important;padding:2px 13px 0!important;border-radius:5px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{background-color:#eaeaea!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:5px 0 0 5px}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-child{border-radius:0 5px 5px 0}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td{border-bottom:1px solid #ddd!important;border-top:1px solid #ddd!important}:host ::ng-deep .actionBtns,:host ::ng-deep .actionLoteBtns{border-radius:50%;width:2.5rem!important;height:2.5rem!important;box-shadow:#0000003d 0 3px 8px}.icon-more-horiz:hover,.icon-more-horiz:focus{color:#5e5e5e;transform:scale(1.1);transition:color .3s,transform .3s}@media only screen and (min-width: 768px){.actionLoteBtns{top:-1px}}@media only screen and (max-width: 960px){:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(p-tablecheckbox){border-bottom:0px!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img){justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:has(img) .p-column-title{display:none!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child{border-bottom:1px solid #ddd!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td:last-child div{justify-content:center!important;align-items:center!important}:host ::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td .p-column-title{font-weight:600}}::ng-deep .p-panel.p-panel-toggleable .p-panel-header{background-color:#eaeaea!important}::ng-deep .field.grid,.formgrid.grid{padding:0rem!important}@media screen and (min-width: 961px){.moreVertBtn{position:relative;right:3px}}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:last-of-type{border-radius:0 0 5px!important}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th:first-of-type{border-radius:0 0 0 5px!important}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch.p-inputswitch-checked .p-inputswitch-slider:before{transform:translate(1.25rem);height:15px;margin-top:-8px;-webkit-transform:translateX(1.25rem);-moz-transform:translateX(1.25rem);-ms-transform:translateX(1.25rem);-o-transform:translateX(1.25rem)}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch.p-inputswitch-checked .p-inputswitch-slider{height:21px}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch{height:21px}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider:before{background:#fff;width:1rem;height:1.25rem;height:16px!important;left:.25rem;margin-top:-9px!important;margin-top:-.625rem;border-radius:50%;transition-duration:.2s}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch:not(.p-disabled) .p-inputswitch-slider{height:21px}:host ::ng-deep p-celleditor>div>kv-input-text>span>.inputs{height:15px!important}:host ::ng-deep .p-dropdown .p-dropdown-label{display:flex;align-items:center;justify-content:center}:host ::ng-deep p-celleditor>div>p-dropdown>.p-dropdown:not(.p-paginator-rpp-options){height:25px!important}:host ::ng-deep p-celleditor>kv-switch>div>p-inputswitch .p-inputswitch-slider{height:21px!important}:host ::ng-deep input.p-inputtext.p-component.p-element.p-inputmask.inputs.p-filled{height:15px}\n"] }]
|
|
430
492
|
}], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i1.DecimalPipe }, { type: i2.CodigoFipePipe }, { type: i2.CpfCnpjPipe }, { type: i2.TelefonePipe }, { type: i2.NotificationService }]; }, propDecorators: { setConfig: [{
|
|
431
493
|
type: Input,
|
|
432
494
|
args: ['config']
|
|
@@ -499,4 +561,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
499
561
|
type: HostListener,
|
|
500
562
|
args: ['window:resize', ['$event']]
|
|
501
563
|
}] } });
|
|
502
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvdGFibGUtZWRpdC90YWJsZS1lZGl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi90YWJsZS1lZGl0L3RhYmxlLWVkaXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLFlBQVksRUFBZSxNQUFNLGVBQWUsQ0FBQztBQU9wSSxPQUFPLEVBQUUsV0FBVyxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU8xRCxNQUFNLE9BQU8sa0JBQWtCO0lBUzdCLElBQXFCLFNBQVMsQ0FBQyxLQUFrQjtRQUMvQyxJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSTtZQUN4QyxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxLQUFLO1lBQ3pDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUk7WUFDeEMsR0FBRyxLQUFLO1NBQ1QsQ0FBQztRQUVGLGtDQUFrQztRQUNsQywyQ0FBMkM7UUFDM0MsK0NBQStDO1FBQy9DLFFBQVE7UUFDUixJQUFJO0lBQ04sQ0FBQztJQXdERCxZQUNtQixRQUFrQixFQUNsQixXQUF3QixFQUN4QixjQUE4QixFQUM5QixXQUF3QixFQUN4QixZQUEwQixFQUMxQixtQkFBd0M7UUFMeEMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFD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WUFBWTtzQkFBcEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTTtnQkFFYSxVQUFVO3NCQUE3QixLQUFLO3VCQUFDLFdBQVc7Z0JBb0JSLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQW9IUCxjQUFjO3NCQURiLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBIb3N0TGlzdGVuZXIsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1lbnVJdGVtQ29tbWFuZEV2ZW50LCBTZWxlY3RJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBDb2RpZ29GaXBlUGlwZSwgQ3BmQ25walBpcGUsIEt2TWVudUl0ZW0sIE5vdGlmaWNhdGlvblNlcnZpY2UsIFRhYmxlQ29uZmlnLCBUYWJsZUNvbmZpZ0NvbHVtbiwgVGFibGVQYWdpbmF0ZSwgVGVsZWZvbmVQaXBlIH0gZnJvbSAnLi4vLi4vcHVibGljLWFwaSc7XHJcbmltcG9ydCB7IERhdGVQaXBlLCBEZWNpbWFsUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XHJcbmltcG9ydCBUYWJsZUVkaXRDb25maWcgZnJvbSAnLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGVkaXQuY29uZmlnJztcclxuaW1wb3J0IHsgVGFibGVFZGl0Q29uZmlnQ29sdW1uIH0gZnJvbSAnLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGVlZGl0LmNvbmZpZy5jb2x1bW4nO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2t2LXRhYmxlLWVkaXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1lZGl0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1lZGl0LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYmxlRWRpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2Vze1xyXG5cclxuXHJcbiAgY29uZmlnITogVGFibGVFZGl0Q29uZmlnO1xyXG4gIGdsb2JhbEZpbHRlckZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgY29sbGFwc2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICBASW5wdXQoJ2NvbmZpZycpIHNldCBzZXRDb25maWcodmFsdWU6IFRhYmxlQ29uZmlnKSB7XHJcbiAgICB0aGlzLmNvbmZpZyA9IHtcclxuICAgICAgZW5hYmxlQ2F0aW9uOiB2YWx1ZS5lbmFibGVDYXRpb24gfHwgdHJ1ZSxcclxuICAgICAgZW5hYmxlU2VsZWN0OiB2YWx1ZS5lbmFibGVTZWxlY3QgfHwgZmFsc2UsXHJcbiAgICAgIGVuYWJsZUZpbHRlcjogdmFsdWUuZW5hYmxlRmlsdGVyIHx8IHRydWUsXHJcbiAgICAgIC4uLnZhbHVlLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBpZiAodGhpcy5jb25maWcuZW5hYmxlRmlsdGVyKSB7XHJcbiAgICAvLyAgIHRoaXMuY29uZmlnLmNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XHJcbiAgICAvLyAgICAgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHMucHVzaChjb2wuZmllbGQpO1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGRhdGFTb3VyY2UhOiBhbnlbXTtcclxuICBASW5wdXQoKSBlZGl0TW9kZTogJ3JvdycgfCAnY2VsbCcgPSAnY2VsbCc7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSB0b3RhbFJlY29yZHMhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgcGFnaW5hdG9yOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSByb3dzUGVyUGFnZU9wdGlvbnMhOiBudW1iZXJbXTtcclxuICBASW5wdXQoKSByb3dzOiBudW1iZXIgPSA1O1xyXG4gIEBJbnB1dCgpIHBhZ2VMaW5rc09wdGlvbnM6IG51bWJlciA9IDE7XHJcbiAgQElucHV0KCkgc2hvd0ZpcnN0TGFzdEljb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB0YWJsZVNpemUhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgYXBwbHlTdHlsZTogRnVuY3Rpb24gPSAocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKSA9PiAnJztcclxuICBASW5wdXQoKSBhY29lc0xpbmhhVGFiZWxhOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBmaWx0ZXJDb2x1bW5zQnRuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZmlsdHJvc0F2YW5jYWRvczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNjcm9sbEhlaWdodDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgaXNUYWJsZVNjcm9sbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSByb3dUcmFja0J5OiBGdW5jdGlvbiA9IChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpID0+IGl0ZW07XHJcbiAgQElucHV0KCkgcmVzcG9uc2l2ZUxheW91dDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZXNwYWNhbWVudG9QYWk6IHN0cmluZyA9ICcycHgnO1xyXG4gIEBJbnB1dCgpIGVzcGFjYW1lbnRvTGF0ZXJhbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgdGFtYW5ob1RvdGFsVGFiZWxhITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHJpZ2h0Q29sbGFwc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAT3V0cHV0KCkgb25GaWx0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBASW5wdXQoJ3RlbXBsYXRlcycpIF90ZW1wbGF0ZXMhOiBhbnk7XHJcbiAgdGFtYW5ob1RlbGEhOiBudW1iZXI7XHJcbiAgc2VsZWN0ZWRTaXplOiBzdHJpbmcgPSAnJztcclxuICBzZWxlY3RlSWVtcyE6IGFueVtdO1xyXG4gIG1lbnVJdGVtczogS3ZNZW51SXRlbVtdID0gW107XHJcbiAgaW1nRGVmYXVsdDogc3RyaW5nID1cclxuICAgICcvOWovNEFBUVNrWkpSZ0FCQVFJQWRnQjJBQUQvNFFCaVJYaHBaZ0FBVFUwQUtnQUFBQWdBQlFFU0FBTUFBQUFCQUFFQUFBRWFBQVVBQUFBQkFBQUFTZ0ViQUFVQUFBQUJBQUFBVWdFb0FBTUFBQUFCQUFNQUFBSVRBQU1BQUFBQkFBRUFBQUFBQUFBQUFBQjJBQUFBQVFBQUFIWUFBQUFCLzlzQVF3QURBZ0lDQWdJREFnSUNBd01EQXdRR0JBUUVCQVFJQmdZRkJna0lDZ29KQ0FrSkNnd1BEQW9MRGdzSkNRMFJEUTRQRUJBUkVBb01FaE1TRUJNUEVCQVEvOXNBUXdFREF3TUVBd1FJQkFRSUVBc0pDeEFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUS84QUFFUWdBa0FDUUF3RVJBQUlSQVFNUkFmL0VBQjBBQVFBQkJBTUJBQUFBQUFBQUFBQUFBQUFHQVFJSENBTUVDUVgveEFCQkVBQUNBUVFBQlFJQ0NBUURCQXNBQUFBQkFnTUFCQVVSQmdjU0lURVRRUWhSQ1JRVkdTSlZsZEV5WVlHUlFsSmlGaU0zT0ZOamNYTjFkcEtUc2JPMC84UUFHZ0VCQUFJREFRQUFBQUFBQUFBQUFBQUFBQUVGQXdRR0F2L0VBRElSQUFJQUJBTUZDQUVGQVFFQkFBQUFBQUFCQWdNRUVTRXhVUVVTUVpId0V4VXlZWEdCb2JIUklqTkN3ZUUwOFNQLzJnQU1Bd0VBQWhFREVRQS9BUEtxZ0ZBS0FVQmRERExjU3BCQkU4a3NqQkVSRkpabUowQUFQSkpxVW5FN0lodFFxN3lKNXc5eWR6MlZpK3M1ZTRYRlJNdTBWMDlTVTcwUnRBUjBqUlBrOVFJMFY5NnM1R3lwa3hYbVBkK1gvbjM1RmJPMnBLbDRRZnFmeHpKOWpPVS9CbU82V2tzWmI2UkpCSXIzVXBPdGEwcFZlbFNPM2dnNzJkN0hhck9YczJuZ3pWL1hwSXE0OXBWTWZHM292emRrbXNNVGlzWDEvWm1NdExQMWRkZm9RTEgxYTNyZlNCdld6L2V0dUNYQkx2dUpLK21CcHh6STVsdDl0MjF4TzNXUThDZ09wZjRuRlpUbyswOFphWG5wYjZQckVDeWRPOWIxMUE2M29mMnJISExnbWVOSitxUGNFeU9YZmNiVjlNQ001UGxQd1prZXBvN0dXeGtlUXlNOXJLUnZlOXFGYnFVTDM4QURXaHJRN1ZxVE5tMDhlU3Q2UC8xRzVCdEtvZzQzOVYrTE1nUEVQSjNQWXFMNnppTGhjckdxN2RFVDA1UnJaT2tKUFVOQWVEMUVuUVgzcXNuN0ttUzF2UzN2ZkQvMzc4aTBrN1VsVEh1eHJkZnh6L3dnYzBNMXZNOXZjUlBGTEV4UjBkU3JLd09pQ0Q0SVB0VlkwNFhabGttb2xkWkZ0UVNLQVVBb0JRQ2dGQVNqZy9sOW1lTFpSS0ZleXNPa3NidVNJbFc3a2FRZHVzN0JCMGREUjJkNkIzYVdobVZPT1VPdjQxTktzcllhVllZeGFkWC9BTitWbXpoN2hIQWNNUkJNVFlJa3BYcGU0ZjhBRksvWWIyeDlqMGc5STB1L1lWME1pbWxVNnRBc2RlSnpzMnBtei8zSXIvWFN5MTFaOW1zNWdLaFRVa1hLNkZCY2FGQ0xqUW9MalFvVGNvVk5CY3BVRW54dUllRWNCeFJDVXkxZ2pTaGVsTGhQd3lwMk90TU81QTZpZWs3WGZ0V0NmU3lxaGZyV092RXp5YWliSWY4QTg0cmVYRHA1WHowWmhQakhsL2wrRVpmVUlhOHNDb0l1NDR5RlU3QTA0NzlCMlJyWjBkalIzc0RuYXFpbVVydThWcitkRG9LU3ZsMUt0RmFHSytWODg4c3I0SzcwK1NMMXBtK0tBVUFvQlFFNTVkY3U1ZUpwbHl1V1I0OFRHM1liS3Rjc0QzVlQ3S0QyTGYwSGZaV3lvYUYxRDM0L0Q5OWNlclZ0ZFhLblhaeS9GOWY3cDFmT01NTVZ2RWx2YnhKSEZHb1JFUlFGVlFOQUFEd0FQYXVpU1VLc3NqblczRTd0NG5JQjg2OUhoc3JRZ3JVQVVBb0JRQ2dGQVVxUVVJb1RjNDVvWXA0bmduaVNTT1JTam82aGxaU05FRUhzUVI3VkRTaVZua2VrM0M3cDRtRGVZbkx1WGhpVnNyaWtlVEZTTjNIY3RiTVQyVmo3cVQ0YitoNzZMYzVYVUxwMzJrdncvWCtlZlQ2T2hybFVMczVuaSsvOTE2dEI2clN5RkFLQWxITC9BSU9sNHV5K3BDcTJGbXlTWFpKTzJVbnRHTkVIYmFJMzdBRStkQTdsRlN1cW1XZVN6L0h1YUZmVnFtbDdxdnZSWHQ1ZWVUV0Y4bm5wYTVzRkRGRkJFa0VFU1J4eHFFUkVVQlZVRFFBQThBRDJycVVrbFpITXR0NHM1UUtrOHRsYWdnVUFvQ2ZjcHVSUE5MbmJrbngvTHZoYTR5RWNEQmJtOWNpSzF0dC85SksybEIxMzZSdGlQQU5ZWjFSTHAxZVl6UElwcHRRN1MwYlA0VDZMYmp1NHRGazRoNXFZS3d1U05tS3pzWnJwQWZsMXNZLy9BSXF1aTJ2QW4rbUZsbERzZU5yOVVTSXJ6QitqYjUyOEsyY3VSNFN5ZUc0dGlpQlkyOXM3VzEyUVBjUnlmZ1AvQUdDVFo5Z2F5U3RxeVkzYUs2TVUzWk02QlhnYVpxdmxzVGxjRGtybkRadkczV1B2N09ReFhGcmRSTkZMRTQ4cXlNQVZQOGpWa21vbGRaRlpGQzRYYUxNNmxTUUtBVUJhUlU1a3BuSE5ERmNSUGIzRVNTUlNLVWRIVU1yS1JvZ2crUWFocE5OTTl3eE9GN3l6TmZlWUhCMHZDT1lJajZUWVhqUEphRUh1cWdqYUhaSjJ1d04rNDBmT3dPV3JhVjBzekR3dkw4ZXgwdEJWcXBsN3I4VUtWL1B6eVN4dGtzdVJGNjB6ZkxvWVpiaVZJSUlua2xrWUlpSXBMTXhPZ0FCNUpOU2s0blpFTnFGWGVSc3B3bmdJdUdlSDdURG9JekpFblZPNkFmN3lWdTdIWUFMRGZZRWpmU0ZIdFhXMDBoVThwUzE3K3ZYd2NoVVRlMm14VE1jWHEvVFYyeXhTd3ZkNXRuMkFLMkRBeTZvSUZBS0F5cDhOWEl6SmZFQnpRc3VDNEpaTFhGd0liM0wzaUFiZ3RFSURkTyszV3hLb3ZudTJ5Q0FhMTZxb1ZOTGNmSGdiTkpUT3BtcURoeFBZbmd6Z3ZoZmw3dzFZOEljSFlhM3htSng4WWpndDRWMEI4MlkrV1ludVdPeVNTU1NhNVdaTWlteE9LTjNaMWt1WERLaFVFQ3NqN2RlRDJLQTF5K01UNFc4Tnp6NE51dUkrSDhkRkR4emhyZHBiQzRqVUsxL0dnMmJXUS80dGpmUVQvQzJ1NEJiZS9RMWpwNDkyTHd2NDh6UXJxTlZNRzlDdjFMNThqeVZkSGpkbzVGS3NwSVpTTkVINUd1bU9XS1VBb0JRRnBIdlVrbytOeGR3OUR4UmdMckV5QlJLNjlkdTdhSFJLUDRUdlIwTjlqb2I2U1I3MXIxVWhWRXB5MzdlcHNVMDNzSnNNelQ2L3YzNDJaclpORE5ielBiM0VUeFN4TVVkSFVxeXNEb2dnK0NEN1Z5VFRoZG1kY21vbGRaRTg1TzhQUlpYUHk1YTVDdEZpbFYxUTZPNVgyRU9pRDJBVmp2WUlZS2FzdGx5Vk1tNzcvajk5ZkpXYlVxSExscVd2NWNmSlcrL3E1bSt1ak9kTHFIa3JVQVVBb0QwaStpNzRWczdUbHJ4ZHhyNlMvVzhsbTF4cGNqdUlyZUJKQUI4Z1d1Vy9zUGxWRHRlTnVaREJvcjljam9OandKUzRvOVg5ZittNjFWQmNDZ0ZBS0E4WS9pMjRWdE9EUGlQNDh3VmhFc1Z2OXAvWGtSUm9JTG1OTGpwQTlnUFcwQjhxNnlpamN5UkRFOVByQTVHdWdVdW9qaFd2M2lZanJaTlVVQW9DbFNDMm9QUmhEbkZ3OUZpcy9GbDdib1dQS3F6c2c3YWxUUWM2QUEwUXluZXlTeFluMnJudHFTRkxtS1l2NWZhL1AzYzZQWmM1ekpXNDg0ZnJoL1pQdVUrTSt6dURMYVJrbFNTK2trdW5XUWExczlLbFJyK0VvaWtlZDczNElxejJiTDNLZFBXNzY5a1ZlMG85K29mbFpmMzlzbVFGYjVvTXVxRHlLQVVBb0QwYitpNjR4czduZ1BqRGdGcFZGM2o4c21XVkNlN1JUd3BFU1BtQTF1Ti9Mckh6cWgydkxhamhqOHJIUWJIbUp3UlFhTzV1N1ZRWEFvQlFDZ1BGejRxT01iUGp6NGh1T3VKY2ZLc3RySmxHdElKRk8xa2p0MFczVndma1JFQ1A1R3VzbzVibHlJWVhwOTRuSTFzeFRLaUtKYS9XQmlxdGsxUlFDZ0ZBV2tWSktJZHpZeG4yandYY3lLa3p5V1VrZDBpeDkvQjZXTERSN0JIYysydGIzb0dxL2FVdHpLZDI0WTljeXcyZE1VdW9WK09IWHVrU1hFV0gyVmlyTEdlcjZ2MU8zamc2K25wNnVoUXU5Yk90NjhicmNsd2RuQW9ORlkwNWtmYVJ1UFYzNW5kSGlzaGpaV29JRkFLQVVCa2JrQnpvemZJWG1aanVQY1JHYmlDTUcyeVZuMWRJdTdOeVBVajM3SHNyS2Zaa1VuWTJEZ3FaQ3FaYmdac1UxUkZUVEZHajJKNWJjek9DK2JYQ2xyeGx3TG1vY2pqcnBSdnBJRWtFbXRtS1ZQS09OOTFQOGlOZ2dubFpzcU9URnVSckU2eVZPZ253NzhEdWlVMWpNZ29EVmo0MHZpenczS1BoZSs1ZThGNVNPNDQ0eTBCZ1BvUHY3SmhjYU16a2Z3eWxUK0JmSUpEbnNBR3NxQ2ljNkpUSTErbGZKVzE5YXBFTGdnZjZuOEhsZDVyb3ptUlFDZ0ZBS0FvM2lwSlIwc3RZREs0cTh4Wm05SVhsdkpCNm5UMWRIV3BYZXRqZXQrTjFqbVFkcEE0TlUxek1rdVBzNDFHbGV6dWR1c2g0UmNQRkR5eXRRQlFDZ0ZBS0FsUEx6bWp6QjVVWnIvYURsNXhWZllTOUlDeUdCd1k1bEIyRmtqWUZKRjM3TUNLeHpaTUU1YnN4WE1zcWRNa1BlbHV4c25oUHBOdWVlUHRGdHN2dzF3amxaRUd2ckQyczhNakg1c0VsQ2YyVVZYeGJKa3Q0Tm9zSWRyemtzVW1SVG1EOUlEOFJQSFZuTGpiTE00N2hhMW1CVnhnN1pvcG1YL3ZwR2VSVC9OQ3ByTEwyYklsdTdWL1V4VGRwMUV4V1R0Nkd1VnpjM0Y1Y1MzZDNQSlBQTTVra2xrWXM3c1Rzc3hQY2tuM05iNlZzRVY3YmVMT09nRkFLQVVBb0NoOFZJUmJROUNnUmNQRkR5eXRRQlFDZ0ZBU2ZnL2xmekg1Z3llbndQd0xuYzRPcnBaN0d3a2xqUS82blVkSy8xSXJISE9seXZIRWtaSmNtWk44RUxabURBL0FKOFQrYlJaWnVCclhGUnYzRFgrVXQxT3Y1cWpzdy9xQldyRnRLbmgvbGYyTnVIWmxURi9HM3VTdUg2TS80aEpVRFNaZmd1RS81WHlVNUkvOEFUQVJXUHZXUm8rdmN5clpNL1ZkZXgxYi9BT2piK0kyelF0YnR3cmZFRCtHM3lqZ24vd0J5TlJVcmFzaDY4aUhzbW9Xbk14OXhSOEczeEw4Skk4MlI1VDVXNmlRYjY4WThWL3NmTUxBenQvY1ZuZ3JxZVBLTCt2c3dSMEZSQm5EeXgrakVPVHhlVHd0N0pqc3hqcnF4dTRUcVNDNWhhS1JEL05XQUlyWlRVU3VqVWNMaGRtZGFwSUZBS0FVQlErS2tJdG9lanFZbS93RHRURldXVDlMMHZybHZIUDBkWFYwOWFodGIwTjYzNTFXT1hIMmtDajFTWjdtUWRuRzRMM3M3Y2p1anhXUXhzclVFQ2dNajhrT1FQTVBuN3hJY0R3UmpsRnZiZExYK1N1ZHJhMlNId1hZQTdZNk9rVUZqbzl0QWtZS2lwbDAwTzlHYkZQVFRLbUxkZzVubzl5YitBdmtqeXdnZ3Z1SXNXdkdtY1FBdmQ1YUlOYkszL1YydXlnSGorUHJiNUVlS29aKzBaMDdDRjdxOHZ5ZEJJMmJKazR4TGVmbitEWTYydGJheXQ0N1N6dDRvSUlsQ1J4UklGUkZIZ0FEc0JXZzIzaXl3U3RnamxxQUtBVUFvQ09jYTh1T0F1WStPT0s0NzRReFdjdHRFS3Q3YkxJMGUvZEhJNmtQODFJTlpKYzJPVTd3T3hqbVNvSnF0R3Jtay9QNzZOdTNqdExuaWJrSGZUZXJHR2tmaDYvbTZ1c2ZLM25idnY1TElUdjhBempzRGIwMjFjZDJmei9KVDFPeVZiZWtjdndhRlpISFpERDVDNXhXV3NwN085czVXZ3VMZWVNcEpGSXAweU1wN2dnZ2dnMWRKcUpYUlNOT0YyZVoxNkVDZ0tIeFVrbzZXV3Z4aXNWZVpRdytxTE8za245UHE2ZXZvVXRyZWpyZXZPcXh6SSt6Z2NlaWI1R1NYQTVrYWdUdGQyNWthNVQ1TVpIZ3Uxalo1bmtzWkpMVjJrTy9CNmxDblovQ0VkQVBHdGE4QVZwN05tT1pUcFBoaDF6TnphTXZzNmgyNDQ5ZTZaTVFhc0N2WmRVRUhaeG1PdTh2a3JURTJFZnFYTjdQSGJ3cHZYVkk3QlZIOXlLaHRRcTdKU2NUc2oyMjVMOHBlSE9Tbkx2RmNCY09XOFlXemlEWGx5RjA5NWRFRDFaM1BrbGo0MzRVS283QVZ5TlJPaXFKamppT3hwNUVOUExVRUpPYXdtWVVBb0JRQ2dGQUtBVUJvVjlKZnlWdzhXTXhYUEhDMmtjRisxMG1KelBwcnI2d3JJeGdtYi9VdlFVSjhrTWc4TFYxc3FvZDNKZnFpazJ2VHF5bkxQSm5uNVYyVVFvQzBtcEpSRHViR1QrenVDN3FOWG1TUzlranRVYU02MXM5VEJqc2ZoS0k0OTk3MXJSTlYrMHBqbDA3dHh3NjVHL3M2V3BsUXI4TWV2ZG9nSEozaUNMRlorWEUzSlZZc3Fxb3JuUTFNbXlnMlNPeERNUEJKWXFLck5sejFMbTdqeWkrK0JaN1ZrT1pMVXlIK1BEeWZ0dzVXdjVHYjY2STU0dXFUeVN6bEwveFY0TS84d1k3L0FQVEhXS2QrMUY2TXl5UDNZZlZIdWJYSEhaaWdGQUtBVUFvQlFDZ0ZBYXkvU0ovOHMrUy84VnNQL3NxdzJaLzBMMFpYYlUvNW42bzhvYTZVNWdvZTFTQzJvUFJoRG5GeEREbGM5RmliYm9hUEZLeU00N2t5dm91TmdrYUhTbzhBaHVvSDJybnRxejFNbUtYRC9IN2Y0KzduUjdMa3VYS2NjV2NYMXcvc2djTTB0dktrOEVyeHl4c0hSMFlobFlIWUlJOEVHcXhOd3U2TEpwUkt6eU5sT0VzL0h4TncvWjVkVEdKSlU2WjBVajhFcTltR2dTVjc5d0QzNlNwOTY2Mm1ucW9sS05lL3IxOEhJVkV2c1owVXJUMXl6WERIMVdGN3JOTSt3RDdWc0dCbmZ3ZVl2ZUhzMWo4L2pXUmJ2R1hVVjVibDE2bEVrYmgxSkh1TmdkcTh4UXFKT0Y4UkRFNFdvbHdOanZ2RlBpWC9BRG5CZnBNZjcxb2QyVStqNWxoM3JVYXJrUHZGUGlYL0FEbkJmcE1mNzA3c3A5SHpIZXRScXVRKzhVK0pmODV3WDZUSCs5TzdLZlI4eDNyVWFya1B2RlBpWC9PY0Yra3gvdlR1eW4wZk1kNjFHcTVEN3hUNGwvem5CZnBNZjcwN3NwOUh6SGV0UnF1USs4VStKZjhBT2NGK2t4L3ZUdXluMGZNZDYxR3E1RDd4VDRsL3puQmZwTWY3MDdzcDlIekhldFJxdVErOFUrSmY4NXdYNlRIKzlPN0tmUjh4M3JVYXJrUHZGUGlYL09jRitreC92VHV5bjBmTWQ2MUdxNUVQNXFmR0J6cDV5Y0lUY0Q4YjVIRnpZdWVhSzRkYmZIcEUvWEdkcitJZC9OWlpOREprUmI4R1ppblYwNm9nM0k4akNsYlpwbHBQdFVrcEh4ZUx1SVl1RjhCZFpaeWhsUmVpM1J2OGNwN0tOYkd4N25SMzBnMXIxTTlVOHB6SDdldlh3YkZQSzdlYkRMMSt2Njk4TDJOYlpwcGJpVjU1NVhrbGtZdTd1eExNeE95U1Q1Sk5jazI0bmQ1blhKS0ZXUmJVRWtvNWY4WXk4STVjR1RwTmhlTWtkMkNEdFZCT3BCb0U3WFpPdmNFanpvamNvcXAwc3pId3ZQOEFQc2FGZlNLcGw3eXZ2UTN0NStXT0dOcytHdHJtd1VNMFZ4RWx4YnlwSkZJb2RIUmd5c3BHd1FSNUJycVU3cTZPWmFhd1p5QTFPWjVhTHFnZ1VBb0JRQ2dGQUtBVUFvQlFGcE5Ua1NrY2MwMFZ2RTl4Y1NwSEZHcGQzZGdxcW9HeVNUNEFxRzBrMnozREM0bnVyTTE5NWdjWXk4WFpnbVBwRmhaczhkb0FPN0tTTnlIWUIyM1NEcjJHaDUyVHkxYlZPcW1YV1N5L0owdEJTS21sN3o4VVNWL0x5emF3dm1zK1JGNjB6ZkZBS0FuSEx2bUpMd3hLdUt5cnZKaXBHN0h1eld6RTkyVWU2aytWL3FPK3cxbFExenAzMmN6dy9YK2VYVHJhNmhWUXQrWDR2dnJoMWJPVU0wVnhFazhFcVNSU0tIUjBZRldVallJSThnaXVqVFRWMHpuR21uWm81QWZuVW5sb3JVRUZhQVVBb0JRQ2dGQVUzcXBCUW41VUpTT09hYUszaWU0dUpVamlqVXU3dXdDcW9HeVNUNEFGUTJsaXowbGQyUmczbUp6RWw0bWxiRllwM2p4VWJkejNEWExBOW1ZZXlqMlgrcDc2Qzg1WFZ6cUh1UWVINzY2OHVqb2FGVTY3U1B4ZlhYWG5CNnJTeUZBS0FVQW9DVThIOHc4MXduSXNKZDc3SGhDZ3M1WlNGVHVXM0dlL1FlcGlUb2FPenNiMFJ1VXRiTXBuYk9IVDhhRmZWYk9sMUY0b0xReE4zYnRua3NjcjRLeWZDeTRZR2JjQnhaZ09Kb2cySXlNY3NnUU84RGZobGo3S1R0VDNJQllBc05ydndUWFJTYW1WVUs4dCszSHI0T2ZtMDg2VCs1RGJGL2ZsZlBOWHh0bWs4RDY5WnpDVkRHcElzVjZoUVdHeDg2RVdHeDg2Q3c2aFFteFFzYUN4U29KUGtaL2kzaC9obU10bDhqSEZJVUxwQXY0cFpPekVhVWR4c3FRR09sMzVJckJQcVpWT3J6SDdjZXZnelNxZWJQOEEyNGI0cGNNT2RzczN4dGttOERDUEdQTURMOFhTK21TMW5ZQlFCYVJ5a3F4MkR0ejI2enNEV3hvYUdodlpQTzFWYk1xblo0TFQ4Nm5SVXRCTHBrbkZhS0xXM3JsbmJCMmV2d1JldE0zaFFDZ0ZBS0FVQW9DNkdhVzNsU2VDVjQ1WTJEbzZNUXlzRHNFRWVDRFVwdUYzUkRTaVZua1R6aDduRm44VkVMYkxRSmxZbFhTTTcrbktPd0EyNEI2aDJQa0ZpVHNtcktUdFNiTFZvMXZMNTYrZk1xNSt5cGN4M2x2ZDE0cmp5K3JLMWlmNHpteHdYa2VsWkw2V3lrZVQwMVM2aEs3OGFZc3ZVcWp2NUxEV2p2UTcxWnk5cFU4eDJ2YjE2Wld6Tm5WRXRYdGYwNlQrQ1MyR1d4V1ZFaHhlU3Rid1JhOVQwSmxrNk43MXZwSjF2Ui9zYTNJSmtFendOUDBkelRqbHh5N0tOTlgxTzNXUThDZ09wZjVmRTRybyswOG5hV2ZxN0tldk1zZlZyenJxSTM1SDk2eHh6SUpmamFYcXpKQkxqbWVCTitpSTFrK2EvQmVONmxTL2x2WkVsTWJKYXhGdkc5c0dicFJsN2VReDNzYTJPOWFjemFWUExkcjM5T2w4RzFMMmRVVEZlMXZYcHRjaUFjUWM0cy9sWWpiWW1CTVZFeTZka2YxSlRzRUhUa0FLTzQ4RHFCR3cxVmsvYWsyWmhCK2xmUE10Skd5cGN0NzB4NzJuQmNPZkh5eHk0a0RtbW11Sm51TGlWNVpaV0x1N3NXWm1KMlNTZTVKUHZWYTI0bmRsbWtvVlpaRnRRU0tBVUFvRC85az0nO1xyXG5cclxuICBpc0V4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbW1hbmRFdmVudCE6IE1lbnVJdGVtQ29tbWFuZEV2ZW50O1xyXG5cclxuXHJcblxyXG5cclxuICAgIHN0YXR1c2VzITogU2VsZWN0SXRlbVtdO1xyXG4gIGNsb25lZERhdGFTb3VyY2U6IHsgW3M6IHN0cmluZ106IGFueSB9ID0ge307XHJcblxyXG5cclxuICAvKiogIEVtaXRlIGV2ZW50byBkZSBzYWx2YW1lbnRvIGRhIGxpbmhhICovXHJcbiAgQE91dHB1dCgpIG9uUm93U2F2ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uQWN0aXZlSXRlbTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uQWN0aXZlSXRlbUxvdGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvblBhZ2luYXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25TZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkb3VibGVDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsdGVyRmllbGQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvblN3aXRjaFRhYmxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29kaWdvRmlwZVBpcGU6IENvZGlnb0ZpcGVQaXBlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjcGZDbnBqUGlwZTogQ3BmQ25walBpcGUsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlbGVmb25lUGlwZTogVGVsZWZvbmVQaXBlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlXHJcblxyXG4gICkge1xyXG4gICAgdGhpcy5pc1Jvd1NlbGVjdGFibGUgPSB0aGlzLmlzUm93U2VsZWN0YWJsZS5iaW5kKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnRhbWFuaG9UZWxhID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgfVxyXG4gIGlzUm93U2VsZWN0YWJsZShldmVudDogYW55KSB7XHJcbiAgICByZXR1cm4gIXRoaXMuaXNEaXNhYmxlZENoZWNrYm94KGV2ZW50LmRhdGEpO1xyXG4gIH1cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAvL0NhbGxlZCBiZWZvcmUgYW55IG90aGVyIGxpZmVjeWNsZSBob29rLiBVc2UgaXQgdG8gaW5qZWN0IGRlcGVuZGVuY2llcywgYnV0IGF2b2lkIGFueSBzZXJpb3VzIHdvcmsgaGVyZS5cclxuICAgIC8vQWRkICcke2ltcGxlbWVudHMgT25DaGFuZ2VzfScgdG8gdGhlIGNsYXNzLlxyXG4gICAgaWYgKGNoYW5nZXNbJ3NldENvbmZpZyddICYmIHRoaXMuY29uZmlnKSB7XHJcblxyXG4gICAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLmZvckVhY2goKGU6VGFibGVFZGl0Q29uZmlnQ29sdW1uKSA9PiB7XHJcbiAgICAgICAgaWYoZS5maWVsZENvbnRyb2xUeXBlID09ICdkcm9wZG93bicpe1xyXG4gICAgICAgICAgdGhpcy5saXN0YXJEcm9wKGUuZmllbGREcm9wRG93bkNvbnRyb2w/LmZpZWxkQ29udHJvbERyb3Bkb3duU2VydmljZSwgZSlcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Sb3dFZGl0SW5pdChyb3dEYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuY2xvbmVkRGF0YVNvdXJjZVtyb3dEYXRhLmlkIGFzIHN0cmluZ10gPSB7IC4uLnJvd0RhdGEgfTtcclxuICB9XHJcbiAgb25Sb3dFZGl0U2F2ZShyb3dEYXRhOiBhbnksIGluZGV4OiBhbnkpIHtcclxuXHJcbiAgICBsZXQgZXJyb3JzID0gW11cclxuICAgIC8vVmFsaWRhw6fDo28gZG8gZm9ybXVsYXJpbyBmYWtlXHJcbiAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLmZvckVhY2goKGNvbDpUYWJsZUVkaXRDb25maWdDb2x1bW4pID0+IHtcclxuXHJcbiAgICAgIGlmKGNvbC5yZXF1aXJlZCA/PyB0cnVlKXtcclxuICAgICAgICBpZighcm93RGF0YVtjb2wuZmllbGRdKVxyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0V2FybihgTyBjYW1wbyAke2NvbC5oZWFkZXJ9IGUgb2JyaWdhdMOzcmlvISBgKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihjb2wudmFsaWRhdG9yKVxyXG4gICAgICB7XHJcbiAgICAgICAgY29uc3QgdGVtcEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKHJvd0RhdGFbY29sLmZpZWxkXSwgY29sLnZhbGlkYXRvciBhcyBWYWxpZGF0b3JGbik7XHJcbiAgICAgICAgdGVtcEZvcm1Db250cm9sLm1hcmtBbGxBc1RvdWNoZWQoKVxyXG4gICAgICAgIHRlbXBGb3JtQ29udHJvbC52YWxpZFxyXG4gICAgICAgIGlmKHRlbXBGb3JtQ29udHJvbC5pbnZhbGlkKXtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS50b2FzdFdhcm4oYEVycm8gYW8gdmFsaWRhciBkYWRvcyBkbyBjYW1wbzogJHtjb2wuaGVhZGVyfSEgYClcclxuICAgICAgICAgIGVycm9ycy5wdXNoKCB7IGVycm86IFwiQ2FtcG8gaW52YWxpZG9cIiwgY2FtcG86IHJvd0RhdGFbY29sLmZpZWxkXSB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICBpZihlcnJvcnMubGVuZ3RoID09IDApIHtcclxuICAgICAgdGhpcy5vblJvd1NhdmUuZW1pdChyb3dEYXRhKVxyXG4gICAgICBkZWxldGUgdGhpcy5jbG9uZWREYXRhU291cmNlW3Jvd0RhdGEuaWQgYXMgc3RyaW5nXTtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RXYXJuKGBFcnJvIGRlIHZhbGlkYcOnw6NvIGRlIGRhZG9zISBgKVxyXG4gICAgICAvLyB0aGlzLm9uUm93RWRpdENhbmNlbChyb3dEYXRhLCBpbmRleClcclxuICAgICAgLy8gdGhpcy5vblJvd0VkaXRJbml0KHJvd0RhdGEpXHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZVtpbmRleF0gPSB0aGlzLmNsb25lZERhdGFTb3VyY2Vbcm93RGF0YS5pZCBhcyBzdHJpbmddO1xyXG4gICAgICBkZWxldGUgdGhpcy5jbG9uZWREYXRhU291cmNlW3Jvd0RhdGEuaWQgYXMgc3RyaW5nXTtcclxuICAgIH1cclxuICB9XHJcbiAgb25Sb3dFZGl0Q2FuY2VsKHByb2R1Y3Q6IGFueSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5kYXRhU291cmNlW2luZGV4XSA9IHRoaXMuY2xvbmVkRGF0YVNvdXJjZVtwcm9kdWN0LmlkIGFzIHN0cmluZ107XHJcbiAgICBkZWxldGUgdGhpcy5jbG9uZWREYXRhU291cmNlW3Byb2R1Y3QuaWQgYXMgc3RyaW5nXTtcclxufVxyXG5cclxuICBhc3luYyBsaXN0YXJEcm9wKHNlcnZpY2U6IGFueSwgY29sOmFueSwgaW5kdG9kb3M/OiBib29sZWFuKXtcclxuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29uZmlnLmNvbHVtbnM/LmluZGV4T2YoY29sKTtcclxuXHJcbiAgICBpZighY29sLmZpZWxkRHJvcERvd25Db250cm9sLmZpZWxkQ29udHJvbERyb3Bkb3duU291cmNlKVxyXG4gICAgICBhd2FpdCBzZXJ2aWNlLkxpc3RhcihpbmR0b2RvcyB8fCAnJykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZGF0YTogYW55W10pID0+IHtcclxuICAgICAgICAgIGlmIChjb2x1bW4pIHtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5jb2x1bW5zICYmIGNvbHVtbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLmNvbHVtbnNbY29sdW1uXS5maWVsZERyb3BEb3duQ29udHJvbC5maWVsZENvbnRyb2xEcm9wZG93blNvdXJjZSA9IGRhdGE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5jb2x1bW5zW2NvbHVtbl0uZmllbGREcm9wRG93bkNvbnRyb2w/LmZpZWxkQ29udHJvbERyb3Bkb3duU291cmNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICBlbHNlIHJldHVybiB0aGlzLmNvbmZpZy5jb2x1bW5zW2NvbHVtbl0uZmllbGREcm9wRG93bkNvbnRyb2w/LmZpZWxkQ29udHJvbERyb3Bkb3duU291cmNlXHJcbiAgfVxyXG4gIHJldG9ybmFEZXNjcmljYW9Ecm9wKHJvd0RhdGE6IGFueVtdLCBjb2w6IFRhYmxlRWRpdENvbmZpZ0NvbHVtbil7XHJcblxyXG4gICAgY29uc3QgZGF0YSA9IGNvbC5maWVsZERyb3BEb3duQ29udHJvbD8uZmllbGRDb250cm9sRHJvcGRvd25Tb3VyY2VcclxuICAgIGNvbnN0IGlkb2JqZXRvID0gY29sLmZpZWxkRHJvcERvd25Db250cm9sPy5pZG9iamV0b1xyXG4gICAgY29uc3QgZGVzY3JpY2Fvb2JqZXRvID0gY29sLmZpZWxkRHJvcERvd25Db250cm9sPy5kZXNjcmljYW9vYmpldG9cclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIGNvbnN0IHZhbG9yQXR1YWwgPSByb3dEYXRhW2NvbC5maWVsZF1cclxuXHJcbiAgICBpZihkYXRhICYmIGlkb2JqZXRvICYmIGRlc2NyaWNhb29iamV0bylcclxuICAgIHJldHVybiBkYXRhPy5maW5kKChpdGVtOmFueSkgPT4gaXRlbVtpZG9iamV0b10gPT0gdmFsb3JBdHVhbClbZGVzY3JpY2Fvb2JqZXRvXVxyXG4gICAgZWxzZSByZXR1cm4gJ0NhcnJlZ2FuZG8nXHJcbiAgfVxyXG5cclxuXHJcbiAgcHVibGljIG9uR2xvYmFsRmlsdGVyKHRhYmxlOiBUYWJsZSwgZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICB0aGlzLm9uRmlsdGVyLmVtaXQoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XHJcbiAgICB0YWJsZS5maWx0ZXJHbG9iYWwoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSwgJ2NvbnRhaW5zJyk7XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxyXG4gIG9uV2luZG93UmVzaXplKCkge1xyXG4gICAgdGhpcy5hZGp1c3RUYWJsZVNpemUoKTtcclxuICAgIHRoaXMudGFtYW5ob1RlbGEgPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICB9XHJcbiAgYWRqdXN0VGFibGVTaXplKCkge1xyXG4gICAgaWYgKHRoaXMudGFibGVTaXplIDwgODAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTaXplID0gJ3AtZGF0YXRhYmxlLXNtJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTaXplID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyBwYWdpbmF0ZSgkZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKCRldmVudCkge1xyXG4gICAgICBsZXQgcGFnaW5hSW5pY2lhbCA9XHJcbiAgICAgICAgKCRldmVudD8uZmlyc3QgPiAwID8gJGV2ZW50LmZpcnN0IC8gJGV2ZW50LnJvd3MgOiAkZXZlbnQuZmlyc3QpICsgMTtcclxuICAgICAgbGV0IHRlcm1vUGVzcXVpc2EgPSAnJztcclxuICAgICAgbGV0IG9yZGVuYWNhbyA9ICcnO1xyXG5cclxuICAgICAgaWYgKCRldmVudC5nbG9iYWxGaWx0ZXIpIHRlcm1vUGVzcXVpc2EgPSAkZXZlbnQuZ2xvYmFsRmlsdGVyO1xyXG5cclxuICAgICAgaWYgKCRldmVudC5zb3J0RmllbGQpXHJcbiAgICAgICAgb3JkZW5hY2FvID0gYCR7JGV2ZW50LnNvcnRGaWVsZH0gJHtcclxuICAgICAgICAgICRldmVudC5zb3J0T3JkZXIgPT09IDEgPyAnQVNDJyA6ICdERVNDJ1xyXG4gICAgICAgIH1gO1xyXG5cclxuICAgICAgY29uc3Qgb2JqZXRvOiBUYWJsZVBhZ2luYXRlID0ge1xyXG4gICAgICAgIHBhZ2luYUluaWNpYWw6IHBhZ2luYUluaWNpYWwsXHJcbiAgICAgICAgdGFtYW5ob1BhZ2luYTogJGV2ZW50LnJvd3MsXHJcbiAgICAgICAgdGVybW9QZXNxdWlzYTogdGVybW9QZXNxdWlzYSxcclxuICAgICAgICBvcmRlbmFjYW86IG9yZGVuYWNhbyxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMub25QYWdpbmF0ZS5lbWl0KG9iamV0byk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0Jvb2xlYW5GaWVsZChyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBjb2wuZmllbGRUeXBlID09ICdib29sZWFuJztcclxuICB9XHJcblxyXG4gIGlzQ2hpcEZpZWxkKGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBjb2wuZmllbGRUeXBlID09ICdjaGlwJztcclxuICB9XHJcblxyXG4gIGlzSW1hZ2VGaWVsZChjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmV0b3JubyA9IGNvbC5maWVsZFR5cGUgJiYgY29sLmZpZWxkVHlwZSA9PT0gJ2ltYWdlJyA/IHRydWUgOiBmYWxzZTtcclxuICAgIHJldHVybiByZXRvcm5vO1xyXG4gIH1cclxuICByZXR1cm5Sb3dDbGFzcyhyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcclxuICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbY29sLmZpZWxkXTtcclxuICAgIGxldCByb3dDbGFzczogc3RyaW5nO1xyXG5cclxuICAgIHRoaXMudGFibGVTaXplID4gODAwID8gKHJvd0NsYXNzID0gJ3RleHQtYmFzZScpIDogKHJvd0NsYXNzID0gJ3RleHQtc20nKTtcclxuXHJcbiAgICBpZiAoY29sLmV4cGlyZWREYXRlID09IHRydWUpIHtcclxuICAgICAgbmV3IERhdGUodmFsdWUpIDwgbmV3IERhdGUoKVxyXG4gICAgICAgID8gKHJvd0NsYXNzID0gcm93Q2xhc3MgKyAnIHRleHQtcmVkLTQwMCBmb250LXNlbWlib2xkJylcclxuICAgICAgICA6ICcnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvd0NsYXNzO1xyXG4gIH1cclxuICB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcclxuICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbY29sLmZpZWxkXTtcclxuXHJcbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoIWNvbC5waXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzd2l0Y2ggKGNvbC5waXBlKSB7XHJcbiAgICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICdkZC9NTS95eXl5Jyk7XHJcbiAgICAgICAgY2FzZSAnZGVjaW1hbCc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0odmFsdWUsICcxLjItMicsICdwdC1CUicpO1xyXG4gICAgICAgIGNhc2UgJ2NwZmNucGonOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY3BmQ25walBpcGUudHJhbnNmb3JtKHZhbHVlKTtcclxuICAgICAgICBjYXNlICd0ZWxlZm9uZSc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50ZWxlZm9uZVBpcGUudHJhbnNmb3JtKHZhbHVlKTtcclxuICAgICAgICBjYXNlICdjb2RpZ29maXBlJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNvZGlnb0ZpcGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAnbW9uZXknOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0YXJWYWxvcih2YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAncGVyY2VudGFnZSc6XHJcbiAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9ICVgO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgYWxpZ25Db2x1bmFzSGVhZGVyKGNvbDogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChjb2wuYWxpZ24pIHtcclxuICAgICAgaWYgKGNvbC5hbGlnbiA9PSAncmlnaHQnKSByZXR1cm4gJ2p1c3RpZnktY29udGVudDogZW5kJztcclxuICAgICAgZWxzZSByZXR1cm4gJyc7XHJcbiAgICB9IGVsc2UgcmV0dXJuICcnO1xyXG4gIH1cclxuICBjZW50cmFsaXphckNvbHVuYXMoY29sOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKGNvbC5jZW50cmFsaXplKSB7XHJcbiAgICAgIHJldHVybiAndGV4dC1hbGlnbjogY2VudGVyOyAnO1xyXG4gICAgfSBlbHNlIHJldHVybiAnJztcclxuICB9XHJcbiAgYWxpZ25Db2x1bmFzKGNvbDogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChjb2wuYWxpZ24pIHtcclxuICAgICAgcmV0dXJuIGB0ZXh0LWFsaWduOiAke2NvbC5hbGlnbn1gO1xyXG4gICAgfSBlbHNlIHJldHVybiAnJztcclxuICB9XHJcbiAgcmV0dXJuQ2xhc3NJY29uKHJvd0RhdGE6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucmV0b3JuYXJSb3cocm93RGF0YSwgY29sLCAnaWNvbnJvdycpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuVG9vbHRpcEljb24ocm93RGF0YTogYW55LCBjb2w6IGFueSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXRvcm5hclJvdyhyb3dEYXRhLCBjb2wsICd0b29sdGlwaWNvbnJvdycpO1xyXG4gIH1cclxuICByZXR1cm5DbGFzc0NoaXAocm93RGF0YTogYW55LCBjb2w6IGFueSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYGNoaXAtc3R5bGUgdy1hdXRvIGJvcmRlci1yb3VuZC0yeGwgcC0yIHRleHQtJHt0aGlzLnJldG9ybmFyUm93KFxyXG4gICAgICByb3dEYXRhLFxyXG4gICAgICBjb2wsXHJcbiAgICAgICdzdHlsZWNoaXAnXHJcbiAgICApfSBib3JkZXItJHt0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ3N0eWxlY2hpcCcpfWA7XHJcbiAgfVxyXG4gIHJldG9ybmFyUm93KHJvd0RhdGE6IGFueSwgY29sOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgX3Jvd2FjdGlvbiA9IHRoaXMuY29uZmlnLnJvd3MgPyB0aGlzLmNvbmZpZy5yb3dzW2NvbC5maWVsZF0gOiBudWxsO1xyXG4gICAgY29uc3QgX2ZpZWxkOiBzdHJpbmcgPVxyXG4gICAgICBfcm93YWN0aW9uICYmIF9yb3dhY3Rpb25bZmllbGRdXHJcbiAgICAgICAgPyBfcm93YWN0aW9uW2ZpZWxkXS5jb25zdHJ1Y3RvciA9PT0gRnVuY3Rpb25cclxuICAgICAgICAgID8gX3Jvd2FjdGlvbltmaWVsZF0uYXBwbHkodGhpcywgW3Jvd0RhdGFdKVxyXG4gICAgICAgICAgOiBfcm93YWN0aW9uW2ZpZWxkXVxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIHJldHVybiBfZmllbGQ7XHJcbiAgfVxyXG4gIHNlbGVjdGlvbkNoYW5nZSh2YWx1ZSA9IFtdKSB7XHJcbiAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gIH1cclxuICBmb3JtYXRhclZhbG9yKHZhbG9yOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KCdwdC1CUicsIHtcclxuICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXHJcbiAgICAgIGN1cnJlbmN5OiAnQlJMJyxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KHZhbG9yKTtcclxuICB9XHJcbiAgbG9hZEltYWdlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IHN0cmluZyB7XHJcbiAgICAvKlxyXG4gICAgICBOb3NzYSBjb2x1bmEgZGUgaW1hZ2VtIHRyYWJhbGhhIGNvbSBzdHJpbmdzIGRvIHRpcG86IGJhc2U2NCBvdSB1cmxcclxuICAgICovXHJcbiAgICBsZXQgcmV0b3JubyA9IGBkYXRhOmltYWdlL2pwZztiYXNlNjQsICR7dGhpcy5pbWdEZWZhdWx0fWA7XHJcbiAgICBpZiAocm93RGF0YSAmJiBjb2wgJiYgcm93RGF0YVtjb2wuZmllbGRdICYmIHJvd0RhdGFbY29sLmZpZWxkXSAhPT0gJycpIHtcclxuICAgICAgaWYgKHJvd0RhdGFbY29sLmZpZWxkXS5pbmNsdWRlcygnaHR0cCcpKSByZXRvcm5vID0gcm93RGF0YVtjb2wuZmllbGRdO1xyXG4gICAgICBlbHNlIHJldG9ybm8gPSBgZGF0YTppbWFnZS9qcGc7YmFzZTY0LCAke3Jvd0RhdGFbY29sLmZpZWxkXX1gO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXRvcm5vO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VzdG9tVGVtcGxhdGUodGVtcGxhdGVuYW1lOiBzdHJpbmcpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZXNbdGVtcGxhdGVuYW1lXTtcclxuICB9XHJcbiAgZXhpYmlyQ2FtcG8oZmllbGQ6IGFueSwgcm93RGF0YTogYW55KSB7XHJcbiAgICBsZXQgdmlzaWJsZSA9IGZpZWxkLnZpc2libGUgPyBmaWVsZC52aXNpYmxlKHJvd0RhdGEpIDogdHJ1ZTtcclxuICAgIHJldHVybiB2aXNpYmxlO1xyXG4gIH1cclxuICBwdWJsaWMgYWN0aXZlSXRlbShyb3dEYXRhOiBhbnkpIHtcclxuICAgIHRoaXMub25BY3RpdmVJdGVtLmVtaXQoeyByb3dEYXRhOiByb3dEYXRhfSk7XHJcbiAgfVxyXG4gIHB1YmxpYyBhY3RpdmVJdGVtTG90ZShyb3dEYXRhOiBhbnkpIHtcclxuICAgIHRoaXMub25BY3RpdmVJdGVtTG90ZS5lbWl0KHJvd0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgcmV0b3JuYXJDYW1wbyhhY3Rpb246IEt2TWVudUl0ZW0sIHJvd0RhdGE6IGFueSwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBfZnVuY3Rpb24gPSBhY3Rpb24uZHluYW1pY2ZpZWxkc1xyXG4gICAgICA/IChhY3Rpb24uZHluYW1pY2ZpZWxkc1tmaWVsZF0gYXMgRnVuY3Rpb24pXHJcbiAgICAgIDogbnVsbDtcclxuICAgIGNvbnN0IF9maWVsZDogc3RyaW5nID0gX2Z1bmN0aW9uXHJcbiAgICAgID8gX2Z1bmN0aW9uLmFwcGx5KGFjdGlvbiwgW3Jvd0RhdGFdKVxyXG4gICAgICA6IGFjdGlvbltmaWVsZF07XHJcbiAgICByZXR1cm4gX2ZpZWxkO1xyXG4gIH1cclxuICBjYWxsRGlzYWJsZWQoYWN0aW9uOiBLdk1lbnVJdGVtLCBkYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmIChhY3Rpb24/LmRpc2FibGVkKSB7XHJcbiAgICAgIHJldHVybiBhY3Rpb24uZGlzYWJsZWQoZGF0YSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGNyaWFyTWVudXNNb2RhbChkYXRhOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5hY3Rpb25zICYmIGRhdGEpIHtcclxuICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmNvbmZpZy5hY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMucmV0b3JuYXJDYW1wbyhhY3Rpb24sIGRhdGEsICdpY29uJyk7XHJcbiAgICAgICAgY29uc3QgdG9vbHRpcCA9IHRoaXMucmV0b3JuYXJDYW1wbyhhY3Rpb24sIGRhdGEsICd0b29sdGlwJyk7XHJcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLnJldG9ybmFyQ2FtcG8oYWN0aW9uLCBkYXRhLCAnbGFiZWwnKTtcclxuICAgICAgICBjb25zdCBjb21tYW5kOiBhbnkgPSB0aGlzLnJldG9ybmFyQ2FtcG8oYWN0aW9uLCBkYXRhLCAnY29tbWFuZCcpO1xyXG4gICAgICAgIGNvbnN0IHZpc2libGU6IGJvb2xlYW4gPSBhY3Rpb24udmlzaWJsZVxyXG4gICAgICAgICAgPyBhY3Rpb24udmlzaWJsZShkYXRhKVxyXG4gICAgICAgICAgOiB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGRpc2FibGVkOiBib29sZWFuID0gYWN0aW9uLmRpc2FibGVkXHJcbiAgICAgICAgICA/IGFjdGlvbi5kaXNhYmxlZChkYXRhKVxyXG4gICAgICAgICAgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgY29uc3QgbWVudUluc2VydDogS3ZNZW51SXRlbSA9IHtcclxuICAgICAgICAgIGxhYmVsLFxyXG4gICAgICAgICAgaWNvbixcclxuICAgICAgICAgIHRvb2x0aXAsXHJcbiAgICAgICAgICBjb21tYW5kLFxyXG4gICAgICAgICAgZGlzYWJsZWQsXHJcbiAgICAgICAgICB2aXNpYmxlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBpdGVtID0gdGhpcy5tZW51SXRlbXMuZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+IHguY29tbWFuZCA9PSBtZW51SW5zZXJ0LmNvbW1hbmRcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoaXRlbS5sZW5ndGggPT0gMCkgdGhpcy5tZW51SXRlbXMucHVzaChtZW51SW5zZXJ0KTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmIChtZW51SW5zZXJ0LmxhYmVsICE9IGl0ZW1bMF0ubGFiZWwpIHtcclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAobWVudUluc2VydC52aXNpYmxlICE9IGl0ZW1bMF0udmlzaWJsZSkge1xyXG4gICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLm1lbnVJdGVtcy5pbmRleE9mKGl0ZW1bMF0pO1xyXG4gICAgICAgICAgICB0aGlzLm1lbnVJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChtZW51SW5zZXJ0LmRpc2FibGVkICE9IGl0ZW1bMF0uZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsaWRhTGluaGFBY2FvVmF6aWEocm93RGF0YTogYW55KSB7XHJcbiAgICB2YXIgYWxndW1JdGVtVmlzaXZlbCA9IHRoaXMuY29uZmlnLmFjdGlvbnMuc29tZSgoYSkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIGEudmlzaWJsZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHJldHVybiBhLnZpc2libGUocm93RGF0YSkgPT09IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7IC8vIFJldG9ybmEgdHJ1ZSBzZSBhLnZpc2libGUocm93RGF0YSkgbsOjbyBleGlzdGlyXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiAhYWxndW1JdGVtVmlzaXZlbDtcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG4gIGRvdWJsZUNsaWNrKGU6IGFueSwgcm93RGF0YTogYW55KSB7XHJcbiAgICBsZXQgZXZlbnREb3VibGVDbGljayA9IHsgZXZlbnQ6IGUsIHJvd0RhdGE6IHJvd0RhdGF9O1xyXG5cclxuICAgIGxldCBhcnJheTogc3RyaW5nW10gPSBbXTtcclxuICAgIGUudGFyZ2V0LmNsYXNzTGlzdC5mb3JFYWNoKCh4OiBhbnkpID0+IGFycmF5LnB1c2goeCkpO1xyXG5cclxuICAgIC8vaWYgKGFycmF5LmZpbmQoKHg6IGFueSkgPT4geCA9PSAnbmctc3Rhci1pbnNlcnRlZCcpICE9IHVuZGVmaW5lZClcclxuICAgIHRoaXMuZG91YmxlQ2xpY2tFdmVudC5lbWl0KGV2ZW50RG91YmxlQ2xpY2spO1xyXG4gIH1cclxuXHJcbiAgaXNEaXNhYmxlZENoZWNrYm94KHJvd0RhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvblxyXG4gICAgICA/IHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvbihyb3dEYXRhKVxyXG4gICAgICA6IGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIHJldHVyblRvb2x0aXBSb3cocm93RGF0YTogYW55LCBjb2w6IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXRvcm5hclJvdyhyb3dEYXRhLCBjb2wsICd0b29sdGlwcm93Jyk7XHJcbiAgfVxyXG5cclxuICBpc1N3aXRjaEZpZWxkKGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcclxuICAgIGxldCByZXRvcm5vID0gY29sLmZpZWxkVHlwZSAmJiBjb2wuZmllbGRUeXBlID09PSAnc3dpdGNoJyA/IHRydWUgOiBmYWxzZTtcclxuICAgIHJldHVybiByZXRvcm5vO1xyXG4gIH1cclxuICBvblN3aXRjaENoYW5nZShlc3RhZG86IGFueSwgcm93RGF0YTogYm9vbGVhbiwgY29sOiBhbnkpIHtcclxuICAgIHRoaXMub25Td2l0Y2hUYWJsZUNoYW5nZS5lbWl0KHtcclxuICAgICAgZXN0YWRvOiBlc3RhZG8sXHJcbiAgICAgIHJvd0RhdGE6IHJvd0RhdGEsXHJcbiAgICAgIGNvbDogY29sXHJcbiAgICB9KVxyXG4gIH1cclxuICBpc0J1dHRvbkRpc2FibGUoYWN0aW9uOiBhbnksIHJvd0RhdGE6IGFueSwgY29tbWFuZEV2ZW50OiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKHRoaXMuY2FsbERpc2FibGVkKGFjdGlvbiwgcm93RGF0YSkpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfSBlbHNlIHJldHVybiB0aGlzLmFjdGl2ZUl0ZW0ocm93RGF0YSksIGFjdGlvbj8uY29tbWFuZChjb21tYW5kRXZlbnQpO1xyXG4gIH1cclxuICBpc0Rpc2FibGVFZGl0Um93RnVuY3Rpb24ocm93RGF0YTogYW55KTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRpc2FibGVFZGl0Um93RnVuY3Rpb24gPyB0aGlzLmNvbmZpZy5kaXNhYmxlRWRpdFJvd0Z1bmN0aW9uKHJvd0RhdGEpIDogZmFsc2U7XHJcbiAgfVxyXG59XHJcbiIsIlxyXG48ZGl2IGNsYXNzPVwiY2FyZFwiID5cclxuICA8cC10b2FzdD48L3AtdG9hc3Q+XHJcblxyXG4gIDxwLXBhbmVsXHJcbiAgICAqbmdJZj1cImZpbHRyb3NBdmFuY2Fkb3NcIlxyXG4gICAgaGVhZGVyPVwiRmlsdHJvcyBhdmFuw6dhZG9zXCJcclxuICAgIFt0b2dnbGVhYmxlXT1cInRydWVcIlxyXG4gICAgW2NvbGxhcHNlZF09XCJ0cnVlXCJcclxuICAgIChjb2xsYXBzZWRDaGFuZ2UpPVwiY29sbGFwc2VkID0gIWNvbGxhcHNlZFwiXHJcbiAgICBbc3R5bGVdPVwieyAnbWFyZ2luLWJvdHRvbSc6ICcycHgnIH1cIlxyXG4gID5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJpY29uc1wiPlxyXG4gICAgICA8aVxyXG4gICAgICAgICpuZ0lmPVwiIWNvbGxhcHNlZFwiXHJcbiAgICAgICAgY2xhc3M9XCJwaSBwaS1maWx0ZXJcIlxyXG4gICAgICA+PC9pPlxyXG4gICAgICA8IS0tIMONY29uZSBxdWFuZG8gbyBwYWluZWwgZXN0w6EgYWJlcnRvIC0tPlxyXG4gICAgICA8aVxyXG4gICAgICAgICpuZ0lmPVwiY29sbGFwc2VkXCJcclxuICAgICAgICBjbGFzcz1cInBpIHBpLW1pbnVzXCJcclxuICAgICAgPjwvaT5cclxuICAgICAgPCEtLSDDjWNvbmUgcXVhbmRvIG8gcGFpbmVsIGVzdMOhIGZlY2hhZG8gLS0+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gIDwvcC1wYW5lbD5cclxuXHJcbiAgPHAtdGFibGVcclxuICAjdGVcclxuICAqbmdJZj1cImNvbmZpZ1wiXHJcbiAgW3ZhbHVlXT1cImRhdGFTb3VyY2VcIlxyXG4gIGRhdGFLZXk9XCJpZFwiXHJcbiAgW3RhYmxlU3R5bGVdPVwieyAnbWluLXdpZHRoJzogJzUwcmVtJyB9XCJcclxuICBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiXHJcbiAgW2VkaXRNb2RlXT1cIidyb3cnXCJcclxuICBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcclxuICBzY3JvbGxIZWlnaHQ9XCI0MDBweFwiXHJcbiAgYXBwZW5kVG89XCJib2R5XCJcclxuICBbc3R5bGVDbGFzc109XCIncC1kYXRhdGFibGUtc20nXCJcclxuICBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRJdGVtc1wiXHJcbiAgW3Jvd1NlbGVjdGFibGVdPVwiaXNSb3dTZWxlY3RhYmxlXCJcclxuICBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImdsb2JhbEZpbHRlckZpZWxkc1wiXHJcbiAgW3Jvd3NdPVwicm93c1wiXHJcbiAgW3BhZ2luYXRvcl09XCJwYWdpbmF0b3JcIlxyXG4gIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicm93c1BlclBhZ2VPcHRpb25zXCJcclxuICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxyXG4gIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IC0ge2xhc3R9IGRlIHt7IHRvdGFsUmVjb3JkcyB9fVwiXHJcbiAgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgW3Jvd0hvdmVyXT1cInRydWVcIlxyXG4gIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcclxuICBbbGF6eV09XCJjb25maWcubGF6eVwiXHJcbiAgKG9uTGF6eUxvYWQpPVwicGFnaW5hdGUoJGV2ZW50KVwiXHJcbiAgW2dyb3VwUm93c0J5XT1cImNvbmZpZy5maWVsZEdyb3VwXCJcclxuICBbc2hvd0ZpcnN0TGFzdEljb25dPVwic2hvd0ZpcnN0TGFzdEljb25cIlxyXG4gIFtwYWdlTGlua3NdPVwicGFnZUxpbmtzT3B0aW9uc1wiXHJcbiAgW3Njcm9sbGFibGVdPVwiaXNUYWJsZVNjcm9sbGFibGVcIlxyXG4gIFtzY3JvbGxIZWlnaHRdPVwic2Nyb2xsSGVpZ2h0XCJcclxuICBbcm93VHJhY2tCeV09XCJyb3dUcmFja0J5IFwiXHJcbiAgW3Jlc2l6YWJsZUNvbHVtbnNdPVwidHJ1ZVwiXHJcbiAgPlxyXG5cclxuXHJcblxyXG4gICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGVcclxuICAgICAgcFRlbXBsYXRlPVwiY2FwdGlvblwiXHJcbiAgICAgICpuZ0lmPVwiY29uZmlnLmVuYWJsZUNhdGlvblwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGZsZXgtd3JhcCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkIGNvbC0xMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAqbmdJZj1cImNvbmZpZy50aXRsZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1tZCBmb250LWJvbGQgbXktM1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGNvbmZpZy50aXRsZSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnLnN1YnRpdGxlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtIG1iLTQgZm9udC1tZWRpdW1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBjb25maWcuc3VidGl0bGUgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbWQ6Y29sLTYgbGc6Y29sLTQge3tcclxuICAgICAgICAgICAgdGFtYW5ob1RlbGEgPCA3NjggPyAnY29sLTEwJyA6ICdjb2wtMTInXHJcbiAgICAgICAgICB9fSBtdC0xIG1iLTIgXCI+XHJcbiAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAqbmdJZj1cImNvbmZpZy5lbmFibGVGaWx0ZXJcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInAtaW5wdXQtaWNvbi1sZWZ0XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+XHJcblxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBwSW5wdXRUZXh0XHJcbiAgICAgICAgICAgICAgcEF1dG9Gb2N1c1xyXG4gICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJvbkdsb2JhbEZpbHRlcih0ZSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQZXNxdWlzYXIuLi5cIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiaC0ycmVtXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGNvbC0xIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb25maWcuYWN0aW9uc0xvdGVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0bnMtb3B0aW9uc1wiXHJcbiAgICAgICAgICAgIFtzdHlsZV09XCJ7ICdtYXJnaW4tcmlnaHQnOiAnN3B4JyB9XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIGlkPVwiYWN0aW9uTG90ZUJ0bnNcIlxyXG4gICAgICAgICAgICAgIHBCdXR0b25cclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCB8fCBhY3Rpb24uc2hvd0Fjb2VzTG90ZSkgJiZcclxuICAgICAgICAgICAgICAgIGV4aWJpckNhbXBvKGFjdGlvbiwgdGhpcy5hY3Rpb24pXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbkxvdGVCdG5zIHAtYnV0dG9uLXJhaXNlZCBwLWJ1dHRvbi10ZXh0XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICBhY3Rpb24/LmNvbW1hbmQoY29tbWFuZEV2ZW50KTsgYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXRvcm5hckNhbXBvKGFjdGlvbiwgc2VsZWN0ZWRJdGVtcywgJ3Rvb2x0aXAnKVwiXHJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInYm90dG9tJ1wiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJcclxuICAgICAgICAgICAgICAgIHJldG9ybmFyQ2FtcG8oYWN0aW9uLCBzZWxlY3RlZEl0ZW1zLCAnYnRuQ29sb3InKVxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJldG9ybmFyQ2FtcG8oYWN0aW9uLCBzZWxlY3RlZEl0ZW1zLCAnZGlzYWJsZWQnKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1kLTIyXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJcclxuICAgICAgICAgICAgICAgICAgcmV0b3JuYXJDYW1wbyhhY3Rpb24sIHNlbGVjdGVkSXRlbXMsICdpY29uQnRuQ29sb3InKVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyByZXRvcm5hckNhbXBvKGFjdGlvbiwgc2VsZWN0ZWRJdGVtcywgXCJpY29uXCIpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgIHBUZW1wbGF0ZT1cImhlYWRlclwiXHJcbiAgICAgIGxldC1jb2x1bW5zXHJcbiAgICA+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGhcclxuICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDRyZW07IGJvcmRlci1sZWZ0OiBzb2xpZCA0cHggdHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlU2VsZWN0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8cC10YWJsZUhlYWRlckNoZWNrYm94IChjbGljayk9XCJhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiPjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxyXG4gICAgICAgIDwvdGg+XHJcblxyXG4gICAgICAgIDx0aFxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCJcclxuICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLmZpZWxkXCJcclxuICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5EaXNhYmxlZF09XCJjb2wuc29ydGFibGUgPT09IGZhbHNlXCJcclxuICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwiY29sLndpZHRoXCJcclxuICAgICAgICAgIGNsYXNzPVwidGV4dC1zbVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBbY2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbCkgJiYgYWxpZ25Db2x1bmFzSGVhZGVyKGNvbCkgPT0gJydcclxuICAgICAgICAgICAgICAgID8gJ2ZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWNlbnRlcidcclxuICAgICAgICAgICAgICAgIDogJ2ZsZXggZmxleC1yb3cnXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIFtzdHlsZV09XCJhbGlnbkNvbHVuYXNIZWFkZXIoY29sKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IGNvbC5oZWFkZXIgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxwLXNvcnRJY29uXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuc29ydGFibGUgPT09IHRydWVcIlxyXG4gICAgICAgICAgICAgIFtmaWVsZF09XCJjb2wuZmllbGRcIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAxMHB4XCJcclxuICAgICAgICAgICAgPjwvcC1zb3J0SWNvbj5cclxuXHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaGVhZGVyVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiY29sLmhlYWRlclRvb2x0aXBcIlxyXG4gICAgICAgICAgICA+aW5mbzwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPHRoICpuZ0lmPVwiY29uZmlnLmFjdGlvbnMgJiYgY29uZmlnLmFjdGlvbnMubGVuZ3RoID4gMFwiPjwvdGg+XHJcbiAgICAgICAgPHRoIGlkPVwidGgtZWRpdFwiIHN0eWxlPVwid2lkdGg6IDIwcHhcIj5FZGl0YXI8L3RoPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG4gICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cclxuXHJcblxyXG5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1yb3dEYXRhIGxldC1lZGl0aW5nPVwiZWRpdGluZ1wiIGxldC1yaT1cInJvd0luZGV4XCIgbGV0LWNvbHVtbnM9XCJjb2x1bW5zXCJcclxuICAgICAgbGV0LXJvd2dyb3VwPVwicm93Z3JvdXBcIiBsZXQtcm93c3Bhbj1cInJvd3NwYW5cIj5cclxuICAgICAgPHRyIFtwRWRpdGFibGVSb3ddPVwicm93RGF0YVwiIFtwRWRpdGFibGVSb3dEaXNhYmxlZF09XCJmYWxzZVwiID5cclxuXHJcblxyXG4gICAgICAgIDx0ZFxyXG4gICAgICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlU2VsZWN0XCJcclxuICAgICAgICAgIFtzdHlsZV09XCJhcHBseVN0eWxlKHJvd0RhdGEsIHsgZmllbGQ6ICdjaGVjay1ib3gnLCBoZWFkZXI6ICcnIH0pXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8IS0tPHAtdGFibGVDaGVja2JveCAqbmdJZj1cImlzVmlzaWJsZUNoZWNrYm94KHJvd0RhdGEpXCItLT5cclxuICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3hcclxuICAgICAgICAgICAgW3ZhbHVlXT1cInJvd0RhdGFcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZENoZWNrYm94KHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcclxuICAgICAgICAgID48L3AtdGFibGVDaGVja2JveD5cclxuICAgICAgICA8L3RkPlxyXG5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnM7IGxldCBpID0gaW5kZXhcIj5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcbiAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG4gICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cclxuXHJcbiAgICAgICAgICA8IS0tIENlbHVsYSBxdWUgYXJtYXplbmEgb3MgY29udHJvbGVzIGRlIGVkacOnw6NvIHBhcmEgb3MgY2FtcG9zIC0tPlxyXG4gICAgICAgICAgPHRkICpuZ0lmPVwiY29sLmZpZWxkQ29udHJvbFR5cGVcIlxyXG4gICAgICAgICAgY2xhc3M9XCJyb3dUYWJsZVwiIFtzdHlsZV09XCJcclxuICAgICAgICAgIGFwcGx5U3R5bGUocm93RGF0YSwgY29sKSArXHJcbiAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSArXHJcbiAgICAgICAgICBhbGlnbkNvbHVuYXMoY29sKSBcIiBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcFJvdyhyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHAtY2VsbEVkaXRvciBbbmdDbGFzc109XCJ7J3N3aXRjaCc6IGNvbC5maWVsZENvbnRyb2xUeXBlID09ICdzd2l0Y2gnfVwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gQ29udHJvbGUgZGUgZWRpw6fDo28gZG8gY2FtcG8gLS0+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2wuZmllbGRDb250cm9sVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8a3YtaW5wdXQtdGV4dCBbKG5nTW9kZWwpXT1cInJvd0RhdGFbY29sLmZpZWxkXVwiIFtyZXF1aXJlZF09XCJjb2wucmVxdWlyZWQgPz8gdHJ1ZVwiPjwva3YtaW5wdXQtdGV4dD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrdi1pbnB1dC1udW1iZXIgWyhuZ01vZGVsKV09XCJyb3dEYXRhW2NvbC5maWVsZF1cIiBbcmVxdWlyZWRdPVwiY29sLnJlcXVpcmVkID8/IHRydWVcIj48L2t2LWlucHV0LW51bWJlcj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbWFzaydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8a3YtaW5wdXQtbWFzayBbbWFza109XCJjb2wubWFza1wiIFtyZXF1aXJlZF09XCJjb2wucmVxdWlyZWQgPz8gdHJ1ZVwiIFsobmdNb2RlbCldPVwicm93RGF0YVtjb2wuZmllbGRdXCI+PC9rdi1pbnB1dC1tYXNrPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzd2l0Y2gnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGt2LXN3aXRjaCBbKG5nTW9kZWwpXT1cInJvd0RhdGFbY29sLmZpZWxkXVwiID48L2t2LXN3aXRjaD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2FsZW5kYXInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAzMDBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGt2LWlucHV0LWNhbGVuZGFyIFsobmdNb2RlbCldPVwicm93RGF0YVtjb2wuZmllbGRdXCI+PC9rdi1pbnB1dC1jYWxlbmRhcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDMwMHB4XCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd25cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cImNvbC5maWVsZERyb3BEb3duQ29udHJvbC5kZXNjcmljYW9vYmpldG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwiY29sLmZpZWxkRHJvcERvd25Db250cm9sLmlkb2JqZXRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiY29sLmZpZWxkRHJvcERvd25Db250cm9sLmZpZWxkQ29udHJvbERyb3Bkb3duU291cmNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dEYXRhW2NvbC5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3AtZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBWYWxvciBhdHVhbCBkbyBjYW1wbyAtLT5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2wuZmllbGRDb250cm9sVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZHJvcGRvd24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd0RhdGFbY29sLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgIHJldG9ybmFEZXNjcmljYW9Ecm9wKFxyXG4gICAgICAgICAgICAgICAgICAgICAgcm93RGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbFxyXG4gICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0ge3tyb3dEYXRhW2NvbC5maWVsZF19fSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3dpdGNoJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrdi1zd2l0Y2ggWyhuZ01vZGVsKV09XCJyb3dEYXRhW2NvbC5maWVsZF1cIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwva3Ytc3dpdGNoPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjYWxlbmRhcidcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyByb3dEYXRhW2NvbC5maWVsZF0gfCBkYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxyXG4gICAgICAgICAgPC90ZD5cclxuXHJcblxyXG4gICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cclxuICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcbiAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgICA8dGQgKm5nSWY9XCJyb3dncm91cCAmJiAhY29sLnRlbXBsYXRlICYmICFjb2wuZmllbGRDb250cm9sVHlwZVwiIFthdHRyLnJvd3NwYW5dPVwicm93Z3JvdXAgJiYgY29sLmdyb3VwZWQgPyByb3dzcGFuIDogbnVsbFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicm93VGFibGVcIiBbc3R5bGVdPVwiXHJcbiAgICAgICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCBjb2wpICtcclxuICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSArXHJcbiAgICAgICAgICAgICAgYWxpZ25Db2x1bmFzKGNvbClcclxuICAgICAgICAgICAgXCIgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBSb3cocm93RGF0YSwgY29sKVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtY29sdW1uLXRpdGxlXCI+e3sgY29sLmhlYWRlciB9fTo8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0Jvb2xlYW5GaWVsZChyb3dEYXRhLCBjb2wpOyBlbHNlIGJvb2xlYW5GaWVsZFwiIFtjbGFzc109XCJyZXR1cm5Sb3dDbGFzcyhyb3dEYXRhLCBjb2wpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgIWlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGQgJiYgIWlzSW1hZ2VGaWVsZChjb2wpXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sLmljb25cIiBbY2xhc3NdPVwiY29sLmljb24gKyAnIG1yLTInXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJyZXR1cm5DbGFzc0NoaXAocm93RGF0YSwgY29sKVwiIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCI+e3tcclxuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0ltYWdlRmllbGQoY29sKVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltYWdlXCIgW3NyY109XCJsb2FkSW1hZ2Uocm93RGF0YSwgY29sKVwiIC8+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8aSAqbmdJZj1cImNvbC5pY29uRmllbGRcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtaWNvbnMnOiBjb2wuaW5kSWNvbk1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbXItMic6ICFjb2wuaW5kSWNvbk1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgfVwiIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCI+XHJcbiAgICAgICAgICAgICAge3sgcmV0dXJuQ2xhc3NJY29uKHJvd0RhdGEsIGNvbCkgfX1cclxuICAgICAgICAgICAgPC9pPlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNib29sZWFuRmllbGQ+XHJcbiAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhY29sLmljb25GaWVsZCAmJiAhaXNTd2l0Y2hGaWVsZChjb2wpXCIgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSA/ICd0ZXh0LWdyZWVuLTUwMCcgOiAndGV4dC1yZWQtNTAwJ1xyXG4gICAgICAgICAgICAgICAgXCI+PHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSA/IFwiY2hlY2tcIiA6IFwiY2xvc2VcIiB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvaT5cclxuXHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc1N3aXRjaEZpZWxkKGNvbClcIiBbY2xhc3NdPVwicmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKVwiPlxyXG4gICAgICAgICAgICAgICAgPGt2LXN3aXRjaCAob25Td2l0Y2hDaGFuZ2UpPVwib25Td2l0Y2hDaGFuZ2UoJGV2ZW50LCByb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbD8ub25seVJlYWRGaWVsZCA/PyB0cnVlXCIgW3N3aXRjaFZhbHVlXT1cInRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbClcIj5cclxuICAgICAgICAgICAgICAgIDwva3Ytc3dpdGNoPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgPHRkICpuZ0lmPVwiIXJvd2dyb3VwICYmICFjb2wuZ3JvdXBlZCAmJiAhY29sLnRlbXBsYXRlICYmICFjb2wuZmllbGRDb250cm9sVHlwZVwiIFtzdHlsZV09XCJcclxuICAgICAgICAgICAgICBhcHBseVN0eWxlKHJvd0RhdGEsIGNvbCkgK1xyXG4gICAgICAgICAgICAgIGNlbnRyYWxpemFyQ29sdW5hcyhjb2wpICtcclxuICAgICAgICAgICAgICBhbGlnbkNvbHVuYXMoY29sKVxyXG4gICAgICAgICAgICBcIiBjbGFzcz1cInJvd1RhYmxlXCIgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBSb3cocm93RGF0YSwgY29sKVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtY29sdW1uLXRpdGxlXCI+e3sgY29sLmhlYWRlciB9fTo8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc0Jvb2xlYW5GaWVsZChyb3dEYXRhLCBjb2wpOyBlbHNlIGJvb2xlYW5GaWVsZFwiIFtjbGFzc109XCJyZXR1cm5Sb3dDbGFzcyhyb3dEYXRhLCBjb2wpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgIWlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGQgJiYgIWlzSW1hZ2VGaWVsZChjb2wpXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sLmljb25cIiBbY2xhc3NdPVwiY29sLmljb24gKyAnIG1yLTInXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzc109XCJyZXR1cm5DbGFzc0NoaXAocm93RGF0YSwgY29sKVwiIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNJbWFnZUZpZWxkKGNvbClcIj5cclxuICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWFnZVwiIFtzcmNdPVwibG9hZEltYWdlKHJvd0RhdGEsIGNvbClcIiAvPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2wuaWNvbkZpZWxkXCIgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgJ21hdGVyaWFsLWljb25zJzogY29sLmluZEljb25NYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1yLTInOiAhY29sLmluZEljb25NYXRlcmlhbFxyXG4gICAgICAgICAgICAgIH1cIiBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiPlxyXG4gICAgICAgICAgICAgIHt7IHJldHVybkNsYXNzSWNvbihyb3dEYXRhLCBjb2wpIH19XHJcbiAgICAgICAgICAgIDwvaT5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYm9vbGVhbkZpZWxkPlxyXG4gICAgICAgICAgICAgIDxpICpuZ0lmPVwiIWNvbC5pY29uRmllbGQgJiYgIWlzU3dpdGNoRmllbGQoY29sKVwiIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0gPyAndGV4dC1ncmVlbi01MDAnIDogJ3RleHQtcmVkLTUwMCdcclxuICAgICAgICAgICAgICAgIFwiPjxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyByb3dEYXRhW2NvbC5maWVsZF0gPyBcImNoZWNrXCIgOiBcImNsb3NlXCIgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2k+XHJcblxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNTd2l0Y2hGaWVsZChjb2wpXCIgW2NsYXNzXT1cInJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbClcIj5cclxuICAgICAgICAgICAgICAgIDxrdi1zd2l0Y2ggKG9uU3dpdGNoQ2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2w/Lm9ubHlSZWFkRmllbGQgPz8gdHJ1ZVwiIFtzd2l0Y2hWYWx1ZV09XCJ0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2t2LXN3aXRjaD5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgIDx0ZCAqbmdJZj1cImNvbC50ZW1wbGF0ZSAmJiAhY29sLmZpZWxkQ29udHJvbFR5cGVcIiBbc3R5bGVdPVwiXHJcbiAgICAgICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCBjb2wpICtcclxuICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSArXHJcbiAgICAgICAgICAgICAgYWxpZ25Db2x1bmFzKGNvbClcclxuICAgICAgICAgICAgXCIgY2xhc3M9XCJyb3dUYWJsZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtY29sdW1uLXRpdGxlXCI+e3sgY29sLmhlYWRlciB9fTo8L3NwYW4+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRDdXN0b21UZW1wbGF0ZShjb2wudGVtcGxhdGUubmFtZSlcIlxyXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdldEN1c3RvbVRlbXBsYXRlKGNvbC50ZW1wbGF0ZS5uYW1lKVwiXHJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiByb3dEYXRhIH1cIj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcbiAgICAgIDwhLS0gQ29udHJvbGUgZGUgYcOnw6NvICAtLT5cclxuICAgICAgPHRkIGNsYXNzPVwidGQtdG9vbHNcIlxyXG4gICAgICAgICpuZ0lmPVwiY29uZmlnLmFjdGlvbnMgJiYgY29uZmlnLmFjdGlvbnMubGVuZ3RoID4gMCAmJiAhZWRpdGluZ1wiXHJcbiAgICAgICAgW3N0eWxlXT1cImFwcGx5U3R5bGUocm93RGF0YSwgeyBmaWVsZDogJ2J0bnMtb3B0aW9ucycsIGhlYWRlcjogJycgfSlcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1lbmQgdy1mdWxsIGdhcC0xXCJcclxuICAgICAgICAgICpuZ0lmPVwiYWNvZXNMaW5oYVRhYmVsYVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJtci0xXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPCEtLSA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgaWQ9XCJhY3Rpb25CdG5zXCJcclxuICAgICAgICAgICAgICBwQnV0dG9uXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJleGliaXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbkJ0bnMgcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1yYWlzZWRcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmVJdGVtKHJvd0RhdGEpOyBhY3Rpb24/LmNvbW1hbmQoY29tbWFuZEV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldG9ybmFyQ2FtcG8oYWN0aW9uLCByb3dEYXRhLCAndG9vbHRpcCcpXCJcclxuICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIlxyXG4gICAgICAgICAgICAgICAgYWN0aW9uLnRvb2x0aXBQb3NpdGlvbiA/IGFjdGlvbi50b29sdGlwUG9zaXRpb24gOiAnYm90dG9tJ1xyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNhbGxEaXNhYmxlZChhY3Rpb24sIHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBtZC0xOVwiPlxyXG4gICAgICAgICAgICAgICAge3sgcmV0b3JuYXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEsIFwiaWNvblwiKSB9fTwvc3BhblxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9idXR0b24+IC0tPlxyXG5cclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQge3tcclxuICAgICAgICAgICAgICAgIGNhbGxEaXNhYmxlZChhY3Rpb24sIHJvd0RhdGEpXHJcbiAgICAgICAgICAgICAgICAgID8gJ3RleHQtZ3JheS00MDAgY3Vyc29yLWF1dG8nXHJcbiAgICAgICAgICAgICAgICAgIDogJ2N1cnNvci1wb2ludGVyJ1xyXG4gICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMjBweFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImlzQnV0dG9uRGlzYWJsZShhY3Rpb24sIHJvd0RhdGEsIGNvbW1hbmRFdmVudClcIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXRvcm5hckNhbXBvKGFjdGlvbiwgcm93RGF0YSwgJ3Rvb2x0aXAnKVwiXHJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJcclxuICAgICAgICAgICAgICAgIGFjdGlvbi50b29sdGlwUG9zaXRpb24gPyBhY3Rpb24udG9vbHRpcFBvc2l0aW9uIDogJ2JvdHRvbSdcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgcmV0b3JuYXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEsIFwiaWNvblwiKSB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGxcIlxyXG4gICAgICAgICAgKm5nSWY9XCIhYWNvZXNMaW5oYVRhYmVsYVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPCEtLSA8YnV0dG9uXHJcbiAgICAgICAgICAgIGlkPVwibW9yZVZlcnRCdG5cIlxyXG4gICAgICAgICAgICBwQnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uQnRucyBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJhaXNlZFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJtZW51LnRvZ2dsZSgkZXZlbnQpOyBhY3RpdmVJdGVtKHJvd0RhdGEpXCJcclxuICAgICAgICAgID4gLS0+XHJcbiAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgY3Vyc29yLXBvaW50ZXIgaWNvbi1tb3JlLWhvcml6XCJcclxuICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDIwcHhcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwibWVudS50b2dnbGUoJGV2ZW50KTsgYWN0aXZlSXRlbShyb3dEYXRhKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIG1vcmVfaG9yaXpcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwhLS0gPC9idXR0b24+IC0tPlxyXG5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb25maWcuYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICB7eyBjcmlhck1lbnVzTW9kYWwocm93RGF0YSkgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gPGRpdiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgIHt7IGNyaWFyTWVudXNNb2RhbChyb3dEYXRhKSB9fVxyXG4gICAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgIDxwLW1lbnVcclxuICAgICAgICAgICAgI21lbnVcclxuICAgICAgICAgICAgW3BvcHVwXT1cInRydWVcIlxyXG4gICAgICAgICAgICBbbW9kZWxdPVwibWVudUl0ZW1zXCJcclxuICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgID48L3AtbWVudT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC90ZD5cclxuXHJcbiAgICAgIDx0ZFxyXG4gICAgICBjbGFzcz1cInRkLXRvb2xzXCJcclxuICAgICAgKm5nSWY9XCJjb25maWcuYWN0aW9ucyAmJiBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwICYmIGVkaXRpbmdcIlxyXG4gICAgICBbc3R5bGVdPVwiYXBwbHlTdHlsZShyb3dEYXRhLCB7IGZpZWxkOiAnYnRucy1vcHRpb25zJywgaGVhZGVyOiAnJyB9KVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGwgZ2FwLTFcIlxyXG4gICAgICAgICpuZ0lmPVwiYWNvZXNMaW5oYVRhYmVsYVwiXHJcbiAgICAgID5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1lbmQgdy1mdWxsXCJcclxuICAgICAgICAqbmdJZj1cIiFhY29lc0xpbmhhVGFiZWxhXCJcclxuICAgICAgPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPC90ZD5cclxuXHJcblxyXG5cclxuICAgICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG4gICAgICA8IS0tIENvbnRyb2xlIGRlIGVkacOnw6NvIC0tPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cInRkLWVkaXRcIiA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIFtzdHlsZS5oZWlnaHRdPVwiJzI4cHgnXCIgW3N0eWxlLndpZHRoXT1cIicyOHB4J1wiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVFZGl0Um93RnVuY3Rpb24ocm93RGF0YSlcIiAqbmdJZj1cIiFlZGl0aW5nXCIgcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBwSW5pdEVkaXRhYmxlUm93IGljb249XCJwaSBwaS1wZW5jaWxcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0VkaXRJbml0KHJvd0RhdGEpXCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBbc3R5bGUuaGVpZ2h0XT1cIicyOHB4J1wiIFtzdHlsZS53aWR0aF09XCInMjhweCdcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlRWRpdFJvd0Z1bmN0aW9uKHJvd0RhdGEpXCIgKm5nSWY9XCJlZGl0aW5nXCIgcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBwU2F2ZUVkaXRhYmxlUm93IGljb249XCJwaSBwaS1jaGVja1wiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93RWRpdFNhdmUocm93RGF0YSwgcmkpXCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgcC1idXR0b24tc3VjY2VzcyBtci0yXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gW3N0eWxlLmhlaWdodF09XCInMjhweCdcIiBbc3R5bGUud2lkdGhdPVwiJzI4cHgnXCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZUVkaXRSb3dGdW5jdGlvbihyb3dEYXRhKVwiICpuZ0lmPVwiZWRpdGluZ1wiIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgcENhbmNlbEVkaXRhYmxlUm93IGljb249XCJwaSBwaS10aW1lc1wiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93RWRpdENhbmNlbChyb3dEYXRhLCByaSlcIiBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBwLWJ1dHRvbi1kYW5nZXJcIj48L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGQ+XHJcblxyXG5cclxuXHJcblxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtdGFibGU+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
564
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvdGFibGUtZWRpdC90YWJsZS1lZGl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi90YWJsZS1lZGl0L3RhYmxlLWVkaXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLFlBQVksRUFBMkIsTUFBTSxlQUFlLENBQUM7QUFPaEosT0FBTyxFQUFFLFdBQVcsRUFBZSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTzFELE1BQU0sT0FBTyxrQkFBa0I7SUFTN0IsSUFBcUIsU0FBUyxDQUFDLEtBQXNCO1FBQ25ELElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxJQUFJO1lBQ3hDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLEtBQUs7WUFDekMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSTtZQUN4QyxHQUFHLEtBQUs7U0FDVCxDQUFDO1FBRUYsa0NBQWtDO1FBQ2xDLDJDQUEyQztRQUMzQywrQ0FBK0M7UUFDL0MsUUFBUTtRQUNSLElBQUk7SUFDTixDQUFDO0lBMERELFlBQ21CLFFBQWtCLEVBQ2xCLFdBQXdCLEVBQ3hCLGNBQThCLEVBQzlCLFdBQXdCLEVBQ3hCLFlBQTBCLEVBQzFCLG1CQUF3QztRQUx4QyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtR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QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQXVMUCxjQUFjO3NCQURiLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBIb3N0TGlzdGVuZXIsIFRlbXBsYXRlUmVmLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1lbnVJdGVtLCBNZW51SXRlbUNvbW1hbmRFdmVudCwgU2VsZWN0SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgQ29kaWdvRmlwZVBpcGUsIENwZkNucGpQaXBlLCBLdk1lbnVJdGVtLCBOb3RpZmljYXRpb25TZXJ2aWNlLCBUYWJsZUNvbmZpZywgVGFibGVDb25maWdDb2x1bW4sIFRhYmxlUGFnaW5hdGUsIFRlbGVmb25lUGlwZSB9IGZyb20gJy4uLy4uL3B1YmxpYy1hcGknO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xyXG5pbXBvcnQgVGFibGVFZGl0Q29uZmlnIGZyb20gJy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL3RhYmxlZGl0LmNvbmZpZyc7XHJcbmltcG9ydCB7IFRhYmxlRWRpdENvbmZpZ0NvbHVtbiB9IGZyb20gJy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL3RhYmxlZWRpdC5jb25maWcuY29sdW1uJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi10YWJsZS1lZGl0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtZWRpdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtZWRpdC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZUVkaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlc3tcclxuXHJcblxyXG4gIGNvbmZpZyE6IFRhYmxlRWRpdENvbmZpZztcclxuICBnbG9iYWxGaWx0ZXJGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIGNvbGxhcHNlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgQElucHV0KCdjb25maWcnKSBzZXQgc2V0Q29uZmlnKHZhbHVlOiBUYWJsZUVkaXRDb25maWcpIHtcclxuICAgIHRoaXMuY29uZmlnID0ge1xyXG4gICAgICBlbmFibGVDYXRpb246IHZhbHVlLmVuYWJsZUNhdGlvbiB8fCB0cnVlLFxyXG4gICAgICBlbmFibGVTZWxlY3Q6IHZhbHVlLmVuYWJsZVNlbGVjdCB8fCBmYWxzZSxcclxuICAgICAgZW5hYmxlRmlsdGVyOiB2YWx1ZS5lbmFibGVGaWx0ZXIgfHwgdHJ1ZSxcclxuICAgICAgLi4udmFsdWUsXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIGlmICh0aGlzLmNvbmZpZy5lbmFibGVGaWx0ZXIpIHtcclxuICAgIC8vICAgdGhpcy5jb25maWcuY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcclxuICAgIC8vICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcy5wdXNoKGNvbC5maWVsZCk7XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgZGF0YVNvdXJjZSE6IGFueVtdO1xyXG4gIEBJbnB1dCgpIGVkaXRNb2RlOiAncm93JyB8ICdjZWxsJyA9ICdjZWxsJztcclxuICBASW5wdXQoKSBzZWxlY3RlZEl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkSXRlbSE6IGFueTtcclxuICBASW5wdXQoKSB0b3RhbFJlY29yZHMhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgcGFnaW5hdG9yOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSByb3dzUGVyUGFnZU9wdGlvbnMhOiBudW1iZXJbXTtcclxuICBASW5wdXQoKSByb3dzOiBudW1iZXIgPSA1O1xyXG4gIEBJbnB1dCgpIHBhZ2VMaW5rc09wdGlvbnM6IG51bWJlciA9IDE7XHJcbiAgQElucHV0KCkgc2hvd0ZpcnN0TGFzdEljb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB0YWJsZVNpemUhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgYXBwbHlTdHlsZTogRnVuY3Rpb24gPSAocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKSA9PiAnJztcclxuICBASW5wdXQoKSBhY29lc0xpbmhhVGFiZWxhOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBmaWx0ZXJDb2x1bW5zQnRuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZmlsdHJvc0F2YW5jYWRvczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNjcm9sbEhlaWdodDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgaXNUYWJsZVNjcm9sbGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSByb3dUcmFja0J5OiBGdW5jdGlvbiA9IChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpID0+IGl0ZW07XHJcbiAgQElucHV0KCkgcmVzcG9uc2l2ZUxheW91dDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZXNwYWNhbWVudG9QYWk6IHN0cmluZyA9ICcycHgnO1xyXG4gIEBJbnB1dCgpIGVzcGFjYW1lbnRvTGF0ZXJhbDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgdGFtYW5ob1RvdGFsVGFiZWxhITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHJpZ2h0Q29sbGFwc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAT3V0cHV0KCkgb25GaWx0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBASW5wdXQoJ3RlbXBsYXRlcycpIF90ZW1wbGF0ZXMhOiBhbnk7XHJcbiAgdGFtYW5ob1RlbGEhOiBudW1iZXI7XHJcbiAgc2VsZWN0ZWRTaXplOiBzdHJpbmcgPSAnJztcclxuICBzZWxlY3RlSWVtcyE6IGFueVtdO1xyXG4gIG1lbnVJdGVtczogS3ZNZW51SXRlbVtdID0gW107XHJcbiAgaW1nRGVmYXVsdDogc3RyaW5nID1cclxuICAgICcvOWovNEFBUVNrWkpSZ0FCQVFJQWRnQjJBQUQvNFFCaVJYaHBaZ0FBVFUwQUtnQUFBQWdBQlFFU0FBTUFBQUFCQUFFQUFBRWFBQVVBQUFBQkFBQUFTZ0ViQUFVQUFBQUJBQUFBVWdFb0FBTUFBQUFCQUFNQUFBSVRBQU1BQUFBQkFBRUFBQUFBQUFBQUFBQjJBQUFBQVFBQUFIWUFBQUFCLzlzQVF3QURBZ0lDQWdJREFnSUNBd01EQXdRR0JBUUVCQVFJQmdZRkJna0lDZ29KQ0FrSkNnd1BEQW9MRGdzSkNRMFJEUTRQRUJBUkVBb01FaE1TRUJNUEVCQVEvOXNBUXdFREF3TUVBd1FJQkFRSUVBc0pDeEFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUS84QUFFUWdBa0FDUUF3RVJBQUlSQVFNUkFmL0VBQjBBQVFBQkJBTUJBQUFBQUFBQUFBQUFBQUFHQVFJSENBTUVDUVgveEFCQkVBQUNBUVFBQlFJQ0NBUURCQXNBQUFBQkFnTUFCQVVSQmdjU0lURVRRUWhSQ1JRVkdTSlZsZEV5WVlHUlFsSmlGaU0zT0ZOamNYTjFkcEtUc2JPMC84UUFHZ0VCQUFJREFRQUFBQUFBQUFBQUFBQUFBQUVGQXdRR0F2L0VBRElSQUFJQUJBTUZDQUVGQVFFQkFBQUFBQUFCQWdNRUVTRXhVUVVTUVpId0V4VXlZWEdCb2JIUklqTkN3ZUUwOFNQLzJnQU1Bd0VBQWhFREVRQS9BUEtxZ0ZBS0FVQmRERExjU3BCQkU4a3NqQkVSRkpabUowQUFQSkpxVW5FN0lodFFxN3lKNXc5eWR6MlZpK3M1ZTRYRlJNdTBWMDlTVTcwUnRBUjBqUlBrOVFJMFY5NnM1R3lwa3hYbVBkK1gvbjM1RmJPMnBLbDRRZnFmeHpKOWpPVS9CbU82V2tzWmI2UkpCSXIzVXBPdGEwcFZlbFNPM2dnNzJkN0hhck9YczJuZ3pWL1hwSXE0OXBWTWZHM292emRrbXNNVGlzWDEvWm1NdExQMWRkZm9RTEgxYTNyZlNCdld6L2V0dUNYQkx2dUpLK21CcHh6STVsdDl0MjF4TzNXUThDZ09wZjRuRlpUbyswOFphWG5wYjZQckVDeWRPOWIxMUE2M29mMnJISExnbWVOSitxUGNFeU9YZmNiVjlNQ001UGxQd1prZXBvN0dXeGtlUXlNOXJLUnZlOXFGYnFVTDM4QURXaHJRN1ZxVE5tMDhlU3Q2UC8xRzVCdEtvZzQzOVYrTE1nUEVQSjNQWXFMNnppTGhjckdxN2RFVDA1UnJaT2tKUFVOQWVEMUVuUVgzcXNuN0ttUzF2UzN2ZkQvMzc4aTBrN1VsVEh1eHJkZnh6L3dnYzBNMXZNOXZjUlBGTEV4UjBkU3JLd09pQ0Q0SVB0VlkwNFhabGttb2xkWkZ0UVNLQVVBb0JRQ2dGQVNqZy9sOW1lTFpSS0ZleXNPa3NidVNJbFc3a2FRZHVzN0JCMGREUjJkNkIzYVdobVZPT1VPdjQxTktzcllhVllZeGFkWC9BTitWbXpoN2hIQWNNUkJNVFlJa3BYcGU0ZjhBRksvWWIyeDlqMGc5STB1L1lWME1pbWxVNnRBc2RlSnpzMnBtei8zSXIvWFN5MTFaOW1zNWdLaFRVa1hLNkZCY2FGQ0xqUW9MalFvVGNvVk5CY3BVRW54dUllRWNCeFJDVXkxZ2pTaGVsTGhQd3lwMk90TU81QTZpZWs3WGZ0V0NmU3lxaGZyV092RXp5YWliSWY4QTg0cmVYRHA1WHowWmhQakhsL2wrRVpmVUlhOHNDb0l1NDR5RlU3QTA0NzlCMlJyWjBkalIzc0RuYXFpbVVydThWcitkRG9LU3ZsMUt0RmFHSytWODg4c3I0SzcwK1NMMXBtK0tBVUFvQlFFNTVkY3U1ZUpwbHl1V1I0OFRHM1liS3Rjc0QzVlQ3S0QyTGYwSGZaV3lvYUYxRDM0L0Q5OWNlclZ0ZFhLblhaeS9GOWY3cDFmT01NTVZ2RWx2YnhKSEZHb1JFUlFGVlFOQUFEd0FQYXVpU1VLc3NqblczRTd0NG5JQjg2OUhoc3JRZ3JVQVVBb0JRQ2dGQVVxUVVJb1RjNDVvWXA0bmduaVNTT1JTam82aGxaU05FRUhzUVI3VkRTaVZua2VrM0M3cDRtRGVZbkx1WGhpVnNyaWtlVEZTTjNIY3RiTVQyVmo3cVQ0YitoNzZMYzVYVUxwMzJrdncvWCtlZlQ2T2hybFVMczVuaSsvOTE2dEI2clN5RkFLQWxITC9BSU9sNHV5K3BDcTJGbXlTWFpKTzJVbnRHTkVIYmFJMzdBRStkQTdsRlN1cW1XZVN6L0h1YUZmVnFtbDdxdnZSWHQ1ZWVUV0Y4bm5wYTVzRkRGRkJFa0VFU1J4eHFFUkVVQlZVRFFBQThBRDJycVVrbFpITXR0NHM1UUtrOHRsYWdnVUFvQ2ZjcHVSUE5MbmJrbngvTHZoYTR5RWNEQmJtOWNpSzF0dC85SksybEIxMzZSdGlQQU5ZWjFSTHAxZVl6UElwcHRRN1MwYlA0VDZMYmp1NHRGazRoNXFZS3d1U05tS3pzWnJwQWZsMXNZLy9BSXF1aTJ2QW4rbUZsbERzZU5yOVVTSXJ6QitqYjUyOEsyY3VSNFN5ZUc0dGlpQlkyOXM3VzEyUVBjUnlmZ1AvQUdDVFo5Z2F5U3RxeVkzYUs2TVUzWk02QlhnYVpxdmxzVGxjRGtybkRadkczV1B2N09ReFhGcmRSTkZMRTQ4cXlNQVZQOGpWa21vbGRaRlpGQzRYYUxNNmxTUUtBVUJhUlU1a3BuSE5ERmNSUGIzRVNTUlNLVWRIVU1yS1JvZ2crUWFocE5OTTl3eE9GN3l6TmZlWUhCMHZDT1lJajZUWVhqUEphRUh1cWdqYUhaSjJ1d04rNDBmT3dPV3JhVjBzekR3dkw4ZXgwdEJWcXBsN3I4VUtWL1B6eVN4dGtzdVJGNjB6ZkxvWVpiaVZJSUlua2xrWUlpSXBMTXhPZ0FCNUpOU2s0blpFTnFGWGVSc3B3bmdJdUdlSDdURG9JekpFblZPNkFmN3lWdTdIWUFMRGZZRWpmU0ZIdFhXMDBoVThwUzE3K3ZYd2NoVVRlMm14VE1jWHEvVFYyeXhTd3ZkNXRuMkFLMkRBeTZvSUZBS0F5cDhOWEl6SmZFQnpRc3VDNEpaTFhGd0liM0wzaUFiZ3RFSURkTyszV3hLb3ZudTJ5Q0FhMTZxb1ZOTGNmSGdiTkpUT3BtcURoeFBZbmd6Z3ZoZmw3dzFZOEljSFlhM3htSng4WWpndDRWMEI4MlkrV1ludVdPeVNTU1NhNVdaTWlteE9LTjNaMWt1WERLaFVFQ3NqN2RlRDJLQTF5K01UNFc4Tnp6NE51dUkrSDhkRkR4emhyZHBiQzRqVUsxL0dnMmJXUS80dGpmUVQvQzJ1NEJiZS9RMWpwNDkyTHd2NDh6UXJxTlZNRzlDdjFMNThqeVZkSGpkbzVGS3NwSVpTTkVINUd1bU9XS1VBb0JRRnBIdlVrbytOeGR3OUR4UmdMckV5QlJLNjlkdTdhSFJLUDRUdlIwTjlqb2I2U1I3MXIxVWhWRXB5MzdlcHNVMDNzSnNNelQ2L3YzNDJaclpORE5ielBiM0VUeFN4TVVkSFVxeXNEb2dnK0NEN1Z5VFRoZG1kY21vbGRaRTg1TzhQUlpYUHk1YTVDdEZpbFYxUTZPNVgyRU9pRDJBVmp2WUlZS2FzdGx5Vk1tNzcvajk5ZkpXYlVxSExscVd2NWNmSlcrL3E1bSt1ak9kTHFIa3JVQVVBb0QwaStpNzRWczdUbHJ4ZHhyNlMvVzhsbTF4cGNqdUlyZUJKQUI4Z1d1Vy9zUGxWRHRlTnVaREJvcjljam9OandKUzRvOVg5ZittNjFWQmNDZ0ZBS0E4WS9pMjRWdE9EUGlQNDh3VmhFc1Z2OXAvWGtSUm9JTG1OTGpwQTlnUFcwQjhxNnlpamN5UkRFOVByQTVHdWdVdW9qaFd2M2lZanJaTlVVQW9DbFNDMm9QUmhEbkZ3OUZpcy9GbDdib1dQS3F6c2c3YWxUUWM2QUEwUXluZXlTeFluMnJudHFTRkxtS1l2NWZhL1AzYzZQWmM1ekpXNDg0ZnJoL1pQdVUrTSt6dURMYVJrbFNTK2trdW5XUWExczlLbFJyK0VvaWtlZDczNElxejJiTDNLZFBXNzY5a1ZlMG85K29mbFpmMzlzbVFGYjVvTXVxRHlLQVVBb0QwYitpNjR4czduZ1BqRGdGcFZGM2o4c21XVkNlN1JUd3BFU1BtQTF1Ti9Mckh6cWgydkxhamhqOHJIUWJIbUp3UlFhTzV1N1ZRWEFvQlFDZ1BGejRxT01iUGp6NGh1T3VKY2ZLc3RySmxHdElKRk8xa2p0MFczVndma1JFQ1A1R3VzbzVibHlJWVhwOTRuSTFzeFRLaUtKYS9XQmlxdGsxUlFDZ0ZBV2tWSktJZHpZeG4yandYY3lLa3p5V1VrZDBpeDkvQjZXTERSN0JIYysydGIzb0dxL2FVdHpLZDI0WTljeXcyZE1VdW9WK09IWHVrU1hFV0gyVmlyTEdlcjZ2MU8zamc2K25wNnVoUXU5Yk90NjhicmNsd2RuQW9ORlkwNWtmYVJ1UFYzNW5kSGlzaGpaV29JRkFLQVVCa2JrQnpvemZJWG1aanVQY1JHYmlDTUcyeVZuMWRJdTdOeVBVajM3SHNyS2Zaa1VuWTJEZ3FaQ3FaYmdac1UxUkZUVEZHajJKNWJjek9DK2JYQ2xyeGx3TG1vY2pqcnBSdnBJRWtFbXRtS1ZQS09OOTFQOGlOZ2dubFpzcU9URnVSckU2eVZPZ253NzhEdWlVMWpNZ29EVmo0MHZpenczS1BoZSs1ZThGNVNPNDQ0eTBCZ1BvUHY3SmhjYU16a2Z3eWxUK0JmSUpEbnNBR3NxQ2ljNkpUSTErbGZKVzE5YXBFTGdnZjZuOEhsZDVyb3ptUlFDZ0ZBS0FvM2lwSlIwc3RZREs0cTh4Wm05SVhsdkpCNm5UMWRIV3BYZXRqZXQrTjFqbVFkcEE0TlUxek1rdVBzNDFHbGV6dWR1c2g0UmNQRkR5eXRRQlFDZ0ZBS0FsUEx6bWp6QjVVWnIvYURsNXhWZllTOUlDeUdCd1k1bEIyRmtqWUZKRjM3TUNLeHpaTUU1YnN4WE1zcWRNa1BlbHV4c25oUHBOdWVlUHRGdHN2dzF3amxaRUd2ckQyczhNakg1c0VsQ2YyVVZYeGJKa3Q0Tm9zSWRyemtzVW1SVG1EOUlEOFJQSFZuTGpiTE00N2hhMW1CVnhnN1pvcG1YL3ZwR2VSVC9OQ3ByTEwyYklsdTdWL1V4VGRwMUV4V1R0Nkd1VnpjM0Y1Y1MzZDNQSlBQTTVra2xrWXM3c1Rzc3hQY2tuM05iNlZzRVY3YmVMT09nRkFLQVVBb0NoOFZJUmJROUNnUmNQRkR5eXRRQlFDZ0ZBU2ZnL2xmekg1Z3llbndQd0xuYzRPcnBaN0d3a2xqUS82blVkSy8xSXJISE9seXZIRWtaSmNtWk44RUxabURBL0FKOFQrYlJaWnVCclhGUnYzRFgrVXQxT3Y1cWpzdy9xQldyRnRLbmgvbGYyTnVIWmxURi9HM3VTdUg2TS80aEpVRFNaZmd1RS81WHlVNUkvOEFUQVJXUHZXUm8rdmN5clpNL1ZkZXgxYi9BT2piK0kyelF0YnR3cmZFRCtHM3lqZ24vd0J5TlJVcmFzaDY4aUhzbW9Xbk14OXhSOEczeEw4Skk4MlI1VDVXNmlRYjY4WThWL3NmTUxBenQvY1ZuZ3JxZVBLTCt2c3dSMEZSQm5EeXgrakVPVHhlVHd0N0pqc3hqcnF4dTRUcVNDNWhhS1JEL05XQUlyWlRVU3VqVWNMaGRtZGFwSUZBS0FVQlErS2tJdG9lanFZbS93RHRURldXVDlMMHZybHZIUDBkWFYwOWFodGIwTjYzNTFXT1hIMmtDajFTWjdtUWRuRzRMM3M3Y2p1anhXUXhzclVFQ2dNajhrT1FQTVBuN3hJY0R3UmpsRnZiZExYK1N1ZHJhMlNId1hZQTdZNk9rVUZqbzl0QWtZS2lwbDAwTzlHYkZQVFRLbUxkZzVubzl5YitBdmtqeXdnZ3Z1SXNXdkdtY1FBdmQ1YUlOYkszL1YydXlnSGorUHJiNUVlS29aKzBaMDdDRjdxOHZ5ZEJJMmJKazR4TGVmbitEWTYydGJheXQ0N1N6dDRvSUlsQ1J4UklGUkZIZ0FEc0JXZzIzaXl3U3RnamxxQUtBVUFvQ09jYTh1T0F1WStPT0s0NzRReFdjdHRFS3Q3YkxJMGUvZEhJNmtQODFJTlpKYzJPVTd3T3hqbVNvSnF0R3Jtay9QNzZOdTNqdExuaWJrSGZUZXJHR2tmaDYvbTZ1c2ZLM25idnY1TElUdjhBempzRGIwMjFjZDJmei9KVDFPeVZiZWtjdndhRlpISFpERDVDNXhXV3NwN085czVXZ3VMZWVNcEpGSXAweU1wN2dnZ2dnMWRKcUpYUlNOT0YyZVoxNkVDZ0tIeFVrbzZXV3Z4aXNWZVpRdytxTE8za245UHE2ZXZvVXRyZWpyZXZPcXh6SSt6Z2NlaWI1R1NYQTVrYWdUdGQyNWthNVQ1TVpIZ3Uxalo1bmtzWkpMVjJrTy9CNmxDblovQ0VkQVBHdGE4QVZwN05tT1pUcFBoaDF6TnphTXZzNmgyNDQ5ZTZaTVFhc0N2WmRVRUhaeG1PdTh2a3JURTJFZnFYTjdQSGJ3cHZYVkk3QlZIOXlLaHRRcTdKU2NUc2oyMjVMOHBlSE9Tbkx2RmNCY09XOFlXemlEWGx5RjA5NWRFRDFaM1BrbGo0MzRVS283QVZ5TlJPaXFKamppT3hwNUVOUExVRUpPYXdtWVVBb0JRQ2dGQUtBVUJvVjlKZnlWdzhXTXhYUEhDMmtjRisxMG1KelBwcnI2d3JJeGdtYi9VdlFVSjhrTWc4TFYxc3FvZDNKZnFpazJ2VHF5bkxQSm5uNVYyVVFvQzBtcEpSRHViR1QrenVDN3FOWG1TUzlranRVYU02MXM5VEJqc2ZoS0k0OTk3MXJSTlYrMHBqbDA3dHh3NjVHL3M2V3BsUXI4TWV2ZG9nSEozaUNMRlorWEUzSlZZc3Fxb3JuUTFNbXlnMlNPeERNUEJKWXFLck5sejFMbTdqeWkrK0JaN1ZrT1pMVXlIK1BEeWZ0dzVXdjVHYjY2STU0dXFUeVN6bEwveFY0TS84d1k3L0FQVEhXS2QrMUY2TXl5UDNZZlZIdWJYSEhaaWdGQUtBVUFvQlFDZ0ZBYXkvU0ovOHMrUy84VnNQL3NxdzJaLzBMMFpYYlUvNW42bzhvYTZVNWdvZTFTQzJvUFJoRG5GeEREbGM5RmliYm9hUEZLeU00N2t5dm91TmdrYUhTbzhBaHVvSDJybnRxejFNbUtYRC9IN2Y0KzduUjdMa3VYS2NjV2NYMXcvc2djTTB0dktrOEVyeHl4c0hSMFlobFlIWUlJOEVHcXhOd3U2TEpwUkt6eU5sT0VzL0h4TncvWjVkVEdKSlU2WjBVajhFcTltR2dTVjc5d0QzNlNwOTY2Mm1ucW9sS05lL3IxOEhJVkV2c1owVXJUMXl6WERIMVdGN3JOTSt3RDdWc0dCbmZ3ZVl2ZUhzMWo4L2pXUmJ2R1hVVjVibDE2bEVrYmgxSkh1TmdkcTh4UXFKT0Y4UkRFNFdvbHdOanZ2RlBpWC9BRG5CZnBNZjcxb2QyVStqNWxoM3JVYXJrUHZGUGlYL0FEbkJmcE1mNzA3c3A5SHpIZXRScXVRKzhVK0pmODV3WDZUSCs5TzdLZlI4eDNyVWFya1B2RlBpWC9PY0Yra3gvdlR1eW4wZk1kNjFHcTVEN3hUNGwvem5CZnBNZjcwN3NwOUh6SGV0UnF1USs4VStKZjhBT2NGK2t4L3ZUdXluMGZNZDYxR3E1RDd4VDRsL3puQmZwTWY3MDdzcDlIekhldFJxdVErOFUrSmY4NXdYNlRIKzlPN0tmUjh4M3JVYXJrUHZGUGlYL09jRitreC92VHV5bjBmTWQ2MUdxNUVQNXFmR0J6cDV5Y0lUY0Q4YjVIRnpZdWVhSzRkYmZIcEUvWEdkcitJZC9OWlpOREprUmI4R1ppblYwNm9nM0k4akNsYlpwbHBQdFVrcEh4ZUx1SVl1RjhCZFpaeWhsUmVpM1J2OGNwN0tOYkd4N25SMzBnMXIxTTlVOHB6SDdldlh3YkZQSzdlYkRMMSt2Njk4TDJOYlpwcGJpVjU1NVhrbGtZdTd1eExNeE95U1Q1Sk5jazI0bmQ1blhKS0ZXUmJVRWtvNWY4WXk4STVjR1RwTmhlTWtkMkNEdFZCT3BCb0U3WFpPdmNFanpvamNvcXAwc3pId3ZQOEFQc2FGZlNLcGw3eXZ2UTN0NStXT0dOcytHdHJtd1VNMFZ4RWx4YnlwSkZJb2RIUmd5c3BHd1FSNUJycVU3cTZPWmFhd1p5QTFPWjVhTHFnZ1VBb0JRQ2dGQUtBVUFvQlFGcE5Ua1NrY2MwMFZ2RTl4Y1NwSEZHcGQzZGdxcW9HeVNUNEFxRzBrMnozREM0bnVyTTE5NWdjWXk4WFpnbVBwRmhaczhkb0FPN0tTTnlIWUIyM1NEcjJHaDUyVHkxYlZPcW1YV1N5L0owdEJTS21sN3o4VVNWL0x5emF3dm1zK1JGNjB6ZkZBS0FuSEx2bUpMd3hLdUt5cnZKaXBHN0h1eld6RTkyVWU2aytWL3FPK3cxbFExenAzMmN6dy9YK2VYVHJhNmhWUXQrWDR2dnJoMWJPVU0wVnhFazhFcVNSU0tIUjBZRldVallJSThnaXVqVFRWMHpuR21uWm81QWZuVW5sb3JVRUZhQVVBb0JRQ2dGQVUzcXBCUW41VUpTT09hYUszaWU0dUpVamlqVXU3dXdDcW9HeVNUNEFGUTJsaXowbGQyUmczbUp6RWw0bWxiRllwM2p4VWJkejNEWExBOW1ZZXlqMlgrcDc2Qzg1WFZ6cUh1UWVINzY2OHVqb2FGVTY3U1B4ZlhYWG5CNnJTeUZBS0FVQW9DVThIOHc4MXduSXNKZDc3SGhDZ3M1WlNGVHVXM0dlL1FlcGlUb2FPenNiMFJ1VXRiTXBuYk9IVDhhRmZWYk9sMUY0b0xReE4zYnRua3NjcjRLeWZDeTRZR2JjQnhaZ09Kb2cySXlNY3NnUU84RGZobGo3S1R0VDNJQllBc05ydndUWFJTYW1WVUs4dCszSHI0T2ZtMDg2VCs1RGJGL2ZsZlBOWHh0bWs4RDY5WnpDVkRHcElzVjZoUVdHeDg2RVdHeDg2Q3c2aFFteFFzYUN4U29KUGtaL2kzaC9obU10bDhqSEZJVUxwQXY0cFpPekVhVWR4c3FRR09sMzVJckJQcVpWT3J6SDdjZXZnelNxZWJQOEEyNGI0cGNNT2RzczN4dGttOERDUEdQTURMOFhTK21TMW5ZQlFCYVJ5a3F4MkR0ejI2enNEV3hvYUdodlpQTzFWYk1xblo0TFQ4Nm5SVXRCTHBrbkZhS0xXM3JsbmJCMmV2d1JldE0zaFFDZ0ZBS0FVQW9DNkdhVzNsU2VDVjQ1WTJEbzZNUXlzRHNFRWVDRFVwdUYzUkRTaVZua1R6aDduRm44VkVMYkxRSmxZbFhTTTcrbktPd0EyNEI2aDJQa0ZpVHNtcktUdFNiTFZvMXZMNTYrZk1xNSt5cGN4M2x2ZDE0cmp5K3JLMWlmNHpteHdYa2VsWkw2V3lrZVQwMVM2aEs3OGFZc3ZVcWp2NUxEV2p2UTcxWnk5cFU4eDJ2YjE2Wld6Tm5WRXRYdGYwNlQrQ1MyR1d4V1ZFaHhlU3Rid1JhOVQwSmxrNk43MXZwSjF2Ui9zYTNJSmtFendOUDBkelRqbHh5N0tOTlgxTzNXUThDZ09wZjVmRTRybyswOG5hV2ZxN0tldk1zZlZyenJxSTM1SDk2eHh6SUpmamFYcXpKQkxqbWVCTitpSTFrK2EvQmVONmxTL2x2WkVsTWJKYXhGdkc5c0dicFJsN2VReDNzYTJPOWFjemFWUExkcjM5T2w4RzFMMmRVVEZlMXZYcHRjaUFjUWM0cy9sWWpiWW1CTVZFeTZka2YxSlRzRUhUa0FLTzQ4RHFCR3cxVmsvYWsyWmhCK2xmUE10Skd5cGN0NzB4NzJuQmNPZkh5eHk0a0RtbW11Sm51TGlWNVpaV0x1N3NXWm1KMlNTZTVKUHZWYTI0bmRsbWtvVlpaRnRRU0tBVUFvRC85az0nO1xyXG5cclxuICBpc0V4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbW1hbmRFdmVudCE6IE1lbnVJdGVtQ29tbWFuZEV2ZW50O1xyXG5cclxuXHJcblxyXG5cclxuICAgIHN0YXR1c2VzITogU2VsZWN0SXRlbVtdO1xyXG4gIGNsb25lZERhdGFTb3VyY2U6IHsgW3M6IHN0cmluZ106IGFueSB9ID0ge307XHJcblxyXG5cclxuXHJcbiAgLyoqICBFbWl0ZSBldmVudG8gZGUgc2FsdmFtZW50byBkYSBsaW5oYSAqL1xyXG4gIEBPdXRwdXQoKSBvblJvd1NhdmU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkFjdGl2ZUl0ZW06IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkFjdGl2ZUl0ZW1Mb3RlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25QYWdpbmF0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uU2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZG91YmxlQ2xpY2tFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGZpbHRlckZpZWxkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25Td2l0Y2hUYWJsZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGUsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvZGlnb0ZpcGVQaXBlOiBDb2RpZ29GaXBlUGlwZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3BmQ25walBpcGU6IENwZkNucGpQaXBlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZWxlZm9uZVBpcGU6IFRlbGVmb25lUGlwZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZVxyXG5cclxuICApIHtcclxuICAgIHRoaXMuaXNSb3dTZWxlY3RhYmxlID0gdGhpcy5pc1Jvd1NlbGVjdGFibGUuYmluZCh0aGlzKTtcclxuICB9XHJcbiAgc2VsZWN0ZWRQcm9kdWN0OiBhbnkgPSB7XHJcbiAgICByb3dEYXRhOnt9LFxyXG4gICAgZWRpdGluZzogZmFsc2VcclxuICB9O1xyXG5cclxuICBpdGVtcyE6IE1lbnVJdGVtW107XHJcblxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudGFtYW5ob1RlbGEgPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuXHJcblxyXG4gICAgdGhpcy5pdGVtcyA9IFtcclxuICAgICAgeyBsYWJlbDogJ0VkaXRhciBsaW5oYScsIGljb246ICdwaSBwaS1mdyBwaS1wZW5jaWwnLCBjb21tYW5kOiAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb3dFZGl0JyArIHRoaXMuc2VsZWN0ZWRQcm9kdWN0LnJvd0RhdGFbdGhpcy5jb25maWcuZGF0YUtleV0gKTtcclxuICAgICAgICBpZiAoZWxlbWVudCAmJiAhdGhpcy5jb25maWcuZGlzYWJsZUVkaXRSb3dGdW5jdGlvbj8uKHRoaXMuc2VsZWN0ZWRQcm9kdWN0LnJvd0RhdGEpKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2xpY2soKTsgLy8gRGlzcGFyYSB1bSBldmVudG8gZGUgY2xpcXVlIG5vIGVsZW1lbnRvIGNvbSBJRCAndGVzdGUnXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RXYXJuKFwiQSBlZGnDp8OjbyBkZXNzYSBsaW5oYSBlc3RhIGRlc2FiaWxpdGFkYVwiKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uUm93RWRpdEluaXQodGhpcy5zZWxlY3RlZFByb2R1Y3QpXHJcblxyXG4gICAgICB9fSxcclxuICAgICAgeyBsYWJlbDogJ0NhbmNlbGFyIGVkacOnw6NvJywgaWNvbjogJ3BpIHBpLWZ3IHBpLXRpbWVzJywgY29tbWFuZDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm93Q2FuY2VsJyArIHRoaXMuc2VsZWN0ZWRQcm9kdWN0LnJvd0RhdGFbdGhpcy5jb25maWcuZGF0YUtleV0gKTtcclxuICAgICAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICBlbGVtZW50LmNsaWNrKCk7IC8vIERpc3BhcmEgdW0gZXZlbnRvIGRlIGNsaXF1ZSBubyBlbGVtZW50byBjb20gSUQgJ3Rlc3RlJ1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0V2FybihcIkEgZWRpw6fDo28gZGVzc2EgbGluaGEgZXN0YSBkZXNhYmlsaXRhZGFcIilcclxuICAgICAgICB9XHJcbiAgICAgIH19LFxyXG4gICAgICB7IGxhYmVsOiAnU2FsdmFyIGVkacOnw6NvJywgaWNvbjogJ3BpIHBpLWZ3IHBpLXNhdmUnLCBjb21tYW5kOiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb3dTYXZlJyArIHRoaXMuc2VsZWN0ZWRQcm9kdWN0LnJvd0RhdGFbdGhpcy5jb25maWcuZGF0YUtleV0gKTtcclxuICAgICAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICBlbGVtZW50LmNsaWNrKCk7IC8vIERpc3BhcmEgdW0gZXZlbnRvIGRlIGNsaXF1ZSBubyBlbGVtZW50byBjb20gSUQgJ3Rlc3RlJ1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0V2FybihcIkEgZWRpw6fDo28gZGVzc2EgbGluaGEgZXN0YSBkZXNhYmlsaXRhZGFcIilcclxuICAgICAgICB9XHJcbiAgICAgIH19LFxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcclxuICAgIHRoaXMuaXRlbXNbMF0udmlzaWJsZSA9ICF0aGlzLnNlbGVjdGVkUHJvZHVjdC5lZGl0aW5nICYmIHRoaXMuaXNFZGl0YWJsZVRhYmxlKCkgIT09IGZhbHNlO1xyXG4gICAgdGhpcy5pdGVtc1sxXS52aXNpYmxlPSB0aGlzLnNlbGVjdGVkUHJvZHVjdC5lZGl0aW5nICYmIHRoaXMuaXNFZGl0YWJsZVRhYmxlKCkgIT09IGZhbHNlO1xyXG4gICAgdGhpcy5pdGVtc1syXS52aXNpYmxlPSB0aGlzLnNlbGVjdGVkUHJvZHVjdC5lZGl0aW5nICYmIHRoaXMuaXNFZGl0YWJsZVRhYmxlKCkgIT09IGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIGRiQ2xpY2tFZGl0KCl7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jvd0VkaXQnICsgdGhpcy5zZWxlY3RlZEl0ZW1bdGhpcy5jb25maWcuZGF0YUtleV0gKTtcclxuICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgICAgZWxlbWVudC5jbGljaygpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS50b2FzdFdhcm4oXCJBIGVkacOnw6NvIGRlc3NhIGxpbmhhIGVzdGEgZGVzYWJpbGl0YWRhXCIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgYWN0aXZhdGVFZGl0KCkge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0ZScpO1xyXG4gICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICBlbGVtZW50LmNsaWNrKCk7IC8vIERpc3BhcmEgdW0gZXZlbnRvIGRlIGNsaXF1ZSBubyBlbGVtZW50byBjb20gSUQgJ3Rlc3RlJ1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBpc1Jvd1NlbGVjdGFibGUoZXZlbnQ6IGFueSkge1xyXG4gICAgcmV0dXJuICF0aGlzLmlzRGlzYWJsZWRDaGVja2JveChldmVudC5kYXRhKTtcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgLy9DYWxsZWQgYmVmb3JlIGFueSBvdGhlciBsaWZlY3ljbGUgaG9vay4gVXNlIGl0IHRvIGluamVjdCBkZXBlbmRlbmNpZXMsIGJ1dCBhdm9pZCBhbnkgc2VyaW91cyB3b3JrIGhlcmUuXHJcbiAgICAvL0FkZCAnJHtpbXBsZW1lbnRzIE9uQ2hhbmdlc30nIHRvIHRoZSBjbGFzcy5cclxuICAgIGlmIChjaGFuZ2VzWydzZXRDb25maWcnXSAmJiB0aGlzLmNvbmZpZykge1xyXG5cclxuICAgICAgdGhpcy5jb25maWcuY29sdW1ucy5mb3JFYWNoKChlOlRhYmxlRWRpdENvbmZpZ0NvbHVtbikgPT4ge1xyXG4gICAgICAgIGlmKGUuZmllbGRDb250cm9sVHlwZSA9PSAnZHJvcGRvd24nKXtcclxuICAgICAgICAgIHRoaXMubGlzdGFyRHJvcChlLmZpZWxkRHJvcERvd25Db250cm9sPy5maWVsZENvbnRyb2xEcm9wZG93blNlcnZpY2UsIGUpXHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUm93RWRpdEluaXQocm93RGF0YTogYW55KSB7XHJcbiAgICB0aGlzLmNsb25lZERhdGFTb3VyY2Vbcm93RGF0YS5pZCBhcyBzdHJpbmddID0geyAuLi5yb3dEYXRhIH07XHJcbiAgfVxyXG4gIG9uUm93RWRpdFNhdmUocm93RGF0YTogYW55LCBpbmRleDogYW55KSB7XHJcblxyXG4gICAgbGV0IGVycm9ycyA9IFtdXHJcbiAgICAvL1ZhbGlkYcOnw6NvIGRvIGZvcm11bGFyaW8gZmFrZVxyXG4gICAgdGhpcy5jb25maWcuY29sdW1ucy5mb3JFYWNoKChjb2w6VGFibGVFZGl0Q29uZmlnQ29sdW1uKSA9PiB7XHJcblxyXG4gICAgICBpZihjb2wucmVxdWlyZWQgPz8gdHJ1ZSl7XHJcbiAgICAgICAgaWYoIXJvd0RhdGFbY29sLmZpZWxkXSlcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS50b2FzdFdhcm4oYE8gY2FtcG8gJHtjb2wuaGVhZGVyfSBlIG9icmlnYXTDs3JpbyEgYClcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoY29sLnZhbGlkYXRvcilcclxuICAgICAge1xyXG4gICAgICAgIGNvbnN0IHRlbXBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChyb3dEYXRhW2NvbC5maWVsZF0sIGNvbC52YWxpZGF0b3IgYXMgVmFsaWRhdG9yRm4pO1xyXG4gICAgICAgIHRlbXBGb3JtQ29udHJvbC5tYXJrQWxsQXNUb3VjaGVkKClcclxuICAgICAgICB0ZW1wRm9ybUNvbnRyb2wudmFsaWRcclxuICAgICAgICBpZih0ZW1wRm9ybUNvbnRyb2wuaW52YWxpZCl7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UudG9hc3RXYXJuKGBFcnJvIGFvIHZhbGlkYXIgZGFkb3MgZG8gY2FtcG86ICR7Y29sLmhlYWRlcn0hIGApXHJcbiAgICAgICAgICBlcnJvcnMucHVzaCggeyBlcnJvOiBcIkNhbXBvIGludmFsaWRvXCIsIGNhbXBvOiByb3dEYXRhW2NvbC5maWVsZF0gfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgaWYoZXJyb3JzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHRoaXMub25Sb3dTYXZlLmVtaXQocm93RGF0YSlcclxuICAgICAgZGVsZXRlIHRoaXMuY2xvbmVkRGF0YVNvdXJjZVtyb3dEYXRhLmlkIGFzIHN0cmluZ107XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnRvYXN0V2FybihgRXJybyBkZSB2YWxpZGHDp8OjbyBkZSBkYWRvcyEgYClcclxuICAgICAgLy8gdGhpcy5vblJvd0VkaXRDYW5jZWwocm93RGF0YSwgaW5kZXgpXHJcbiAgICAgIC8vIHRoaXMub25Sb3dFZGl0SW5pdChyb3dEYXRhKVxyXG4gICAgICB0aGlzLmRhdGFTb3VyY2VbaW5kZXhdID0gdGhpcy5jbG9uZWREYXRhU291cmNlW3Jvd0RhdGEuaWQgYXMgc3RyaW5nXTtcclxuICAgICAgZGVsZXRlIHRoaXMuY2xvbmVkRGF0YVNvdXJjZVtyb3dEYXRhLmlkIGFzIHN0cmluZ107XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uUm93RWRpdENhbmNlbChwcm9kdWN0OiBhbnksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZVtpbmRleF0gPSB0aGlzLmNsb25lZERhdGFTb3VyY2VbcHJvZHVjdC5pZCBhcyBzdHJpbmddO1xyXG4gICAgZGVsZXRlIHRoaXMuY2xvbmVkRGF0YVNvdXJjZVtwcm9kdWN0LmlkIGFzIHN0cmluZ107XHJcbn1cclxuXHJcbiAgYXN5bmMgbGlzdGFyRHJvcChzZXJ2aWNlOiBhbnksIGNvbDphbnksIGluZHRvZG9zPzogYm9vbGVhbil7XHJcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbmZpZy5jb2x1bW5zPy5pbmRleE9mKGNvbCk7XHJcblxyXG4gICAgaWYoIWNvbC5maWVsZERyb3BEb3duQ29udHJvbC5maWVsZENvbnRyb2xEcm9wZG93blNvdXJjZSlcclxuICAgICAgYXdhaXQgc2VydmljZS5MaXN0YXIoaW5kdG9kb3MgfHwgJycpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGE6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgICBpZiAoY29sdW1uKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuY29sdW1ucyAmJiBjb2x1bW4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5jb2x1bW5zW2NvbHVtbl0uZmllbGREcm9wRG93bkNvbnRyb2wuZmllbGRDb250cm9sRHJvcGRvd25Tb3VyY2UgPSBkYXRhO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25maWcuY29sdW1uc1tjb2x1bW5dLmZpZWxkRHJvcERvd25Db250cm9sPy5maWVsZENvbnRyb2xEcm9wZG93blNvdXJjZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgZWxzZSByZXR1cm4gdGhpcy5jb25maWcuY29sdW1uc1tjb2x1bW5dLmZpZWxkRHJvcERvd25Db250cm9sPy5maWVsZENvbnRyb2xEcm9wZG93blNvdXJjZVxyXG4gIH1cclxuICByZXRvcm5hRGVzY3JpY2FvRHJvcChyb3dEYXRhOiBhbnlbXSwgY29sOiBUYWJsZUVkaXRDb25maWdDb2x1bW4pe1xyXG5cclxuICAgIGNvbnN0IGRhdGEgPSBjb2wuZmllbGREcm9wRG93bkNvbnRyb2w/LmZpZWxkQ29udHJvbERyb3Bkb3duU291cmNlXHJcbiAgICBjb25zdCBpZG9iamV0byA9IGNvbC5maWVsZERyb3BEb3duQ29udHJvbD8uaWRvYmpldG9cclxuICAgIGNvbnN0IGRlc2NyaWNhb29iamV0byA9IGNvbC5maWVsZERyb3BEb3duQ29udHJvbD8uZGVzY3JpY2Fvb2JqZXRvXHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICBjb25zdCB2YWxvckF0dWFsID0gcm93RGF0YVtjb2wuZmllbGRdXHJcblxyXG4gICAgaWYoZGF0YSAmJiBpZG9iamV0byAmJiBkZXNjcmljYW9vYmpldG8pXHJcbiAgICByZXR1cm4gZGF0YT8uZmluZCgoaXRlbTphbnkpID0+IGl0ZW1baWRvYmpldG9dID09IHZhbG9yQXR1YWwpW2Rlc2NyaWNhb29iamV0b11cclxuICAgIGVsc2UgcmV0dXJuICdDYXJyZWdhbmRvJ1xyXG4gIH1cclxuXHJcblxyXG4gIHB1YmxpYyBvbkdsb2JhbEZpbHRlcih0YWJsZTogVGFibGUsIGV2ZW50OiBFdmVudCkge1xyXG4gICAgdGhpcy5vbkZpbHRlci5lbWl0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xyXG4gICAgdGFibGUuZmlsdGVyR2xvYmFsKChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUsICdjb250YWlucycpO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICBvbldpbmRvd1Jlc2l6ZSgpIHtcclxuICAgIHRoaXMuYWRqdXN0VGFibGVTaXplKCk7XHJcbiAgICB0aGlzLnRhbWFuaG9UZWxhID0gd2luZG93LmlubmVyV2lkdGg7XHJcbiAgfVxyXG4gIGFkanVzdFRhYmxlU2l6ZSgpIHtcclxuICAgIGlmICh0aGlzLnRhYmxlU2l6ZSA8IDgwMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU2l6ZSA9ICdwLWRhdGF0YWJsZS1zbSc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU2l6ZSA9ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgcGFnaW5hdGUoJGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICgkZXZlbnQpIHtcclxuICAgICAgbGV0IHBhZ2luYUluaWNpYWwgPVxyXG4gICAgICAgICgkZXZlbnQ/LmZpcnN0ID4gMCA/ICRldmVudC5maXJzdCAvICRldmVudC5yb3dzIDogJGV2ZW50LmZpcnN0KSArIDE7XHJcbiAgICAgIGxldCB0ZXJtb1Blc3F1aXNhID0gJyc7XHJcbiAgICAgIGxldCBvcmRlbmFjYW8gPSAnJztcclxuXHJcbiAgICAgIGlmICgkZXZlbnQuZ2xvYmFsRmlsdGVyKSB0ZXJtb1Blc3F1aXNhID0gJGV2ZW50Lmdsb2JhbEZpbHRlcjtcclxuXHJcbiAgICAgIGlmICgkZXZlbnQuc29ydEZpZWxkKVxyXG4gICAgICAgIG9yZGVuYWNhbyA9IGAkeyRldmVudC5zb3J0RmllbGR9ICR7XHJcbiAgICAgICAgICAkZXZlbnQuc29ydE9yZGVyID09PSAxID8gJ0FTQycgOiAnREVTQydcclxuICAgICAgICB9YDtcclxuXHJcbiAgICAgIGNvbnN0IG9iamV0bzogVGFibGVQYWdpbmF0ZSA9IHtcclxuICAgICAgICBwYWdpbmFJbmljaWFsOiBwYWdpbmFJbmljaWFsLFxyXG4gICAgICAgIHRhbWFuaG9QYWdpbmE6ICRldmVudC5yb3dzLFxyXG4gICAgICAgIHRlcm1vUGVzcXVpc2E6IHRlcm1vUGVzcXVpc2EsXHJcbiAgICAgICAgb3JkZW5hY2FvOiBvcmRlbmFjYW8sXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLm9uUGFnaW5hdGUuZW1pdChvYmpldG8pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNCb29sZWFuRmllbGQocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gY29sLmZpZWxkVHlwZSA9PSAnYm9vbGVhbic7XHJcbiAgfVxyXG5cclxuICBpc0NoaXBGaWVsZChjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gY29sLmZpZWxkVHlwZSA9PSAnY2hpcCc7XHJcbiAgfVxyXG5cclxuICBpc0ltYWdlRmllbGQoY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJldG9ybm8gPSBjb2wuZmllbGRUeXBlICYmIGNvbC5maWVsZFR5cGUgPT09ICdpbWFnZScgPyB0cnVlIDogZmFsc2U7XHJcbiAgICByZXR1cm4gcmV0b3JubztcclxuICB9XHJcbiAgcmV0dXJuUm93Q2xhc3Mocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKSB7XHJcbiAgICBsZXQgdmFsdWUgPSByb3dEYXRhW2NvbC5maWVsZF07XHJcbiAgICBsZXQgcm93Q2xhc3M6IHN0cmluZztcclxuXHJcbiAgICB0aGlzLnRhYmxlU2l6ZSA+IDgwMCA/IChyb3dDbGFzcyA9ICd0ZXh0LWJhc2UnKSA6IChyb3dDbGFzcyA9ICd0ZXh0LXNtJyk7XHJcblxyXG4gICAgaWYgKGNvbC5leHBpcmVkRGF0ZSA9PSB0cnVlKSB7XHJcbiAgICAgIG5ldyBEYXRlKHZhbHVlKSA8IG5ldyBEYXRlKClcclxuICAgICAgICA/IChyb3dDbGFzcyA9IHJvd0NsYXNzICsgJyB0ZXh0LXJlZC00MDAgZm9udC1zZW1pYm9sZCcpXHJcbiAgICAgICAgOiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiByb3dDbGFzcztcclxuICB9XHJcbiAgdHJhbnNmb3JtVmFsdWUocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKSB7XHJcbiAgICBsZXQgdmFsdWUgPSByb3dEYXRhW2NvbC5maWVsZF07XHJcblxyXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgaWYgKCFjb2wucGlwZSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3dpdGNoIChjb2wucGlwZSkge1xyXG4gICAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAnZGQvTU0veXl5eScpO1xyXG4gICAgICAgIGNhc2UgJ2RlY2ltYWwnOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGVjaW1hbFBpcGUudHJhbnNmb3JtKHZhbHVlLCAnMS4yLTInLCAncHQtQlInKTtcclxuICAgICAgICBjYXNlICdjcGZjbnBqJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNwZkNucGpQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAndGVsZWZvbmUnOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudGVsZWZvbmVQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAnY29kaWdvZmlwZSc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb2RpZ29GaXBlUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xyXG4gICAgICAgIGNhc2UgJ21vbmV5JzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdGFyVmFsb3IodmFsdWUpO1xyXG4gICAgICAgIGNhc2UgJ3BlcmNlbnRhZ2UnOlxyXG4gICAgICAgICAgcmV0dXJuIGAke3ZhbHVlfSAlYDtcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFsaWduQ29sdW5hc0hlYWRlcihjb2w6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoY29sLmFsaWduKSB7XHJcbiAgICAgIGlmIChjb2wuYWxpZ24gPT0gJ3JpZ2h0JykgcmV0dXJuICdqdXN0aWZ5LWNvbnRlbnQ6IGVuZCc7XHJcbiAgICAgIGVsc2UgcmV0dXJuICcnO1xyXG4gICAgfSBlbHNlIHJldHVybiAnJztcclxuICB9XHJcbiAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbDogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChjb2wuY2VudHJhbGl6ZSkge1xyXG4gICAgICByZXR1cm4gJ3RleHQtYWxpZ246IGNlbnRlcjsgJztcclxuICAgIH0gZWxzZSByZXR1cm4gJyc7XHJcbiAgfVxyXG4gIGFsaWduQ29sdW5hcyhjb2w6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoY29sLmFsaWduKSB7XHJcbiAgICAgIHJldHVybiBgdGV4dC1hbGlnbjogJHtjb2wuYWxpZ259YDtcclxuICAgIH0gZWxzZSByZXR1cm4gJyc7XHJcbiAgfVxyXG4gIHJldHVybkNsYXNzSWNvbihyb3dEYXRhOiBhbnksIGNvbDogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ2ljb25yb3cnKTtcclxuICB9XHJcblxyXG4gIHJldHVyblRvb2x0aXBJY29uKHJvd0RhdGE6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMucmV0b3JuYXJSb3cocm93RGF0YSwgY29sLCAndG9vbHRpcGljb25yb3cnKTtcclxuICB9XHJcbiAgcmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGE6IGFueSwgY29sOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGBjaGlwLXN0eWxlIHctYXV0byBib3JkZXItcm91bmQtMnhsIHAtMiB0ZXh0LSR7dGhpcy5yZXRvcm5hclJvdyhcclxuICAgICAgcm93RGF0YSxcclxuICAgICAgY29sLFxyXG4gICAgICAnc3R5bGVjaGlwJ1xyXG4gICAgKX0gYm9yZGVyLSR7dGhpcy5yZXRvcm5hclJvdyhyb3dEYXRhLCBjb2wsICdzdHlsZWNoaXAnKX1gO1xyXG4gIH1cclxuICByZXRvcm5hclJvdyhyb3dEYXRhOiBhbnksIGNvbDogYW55LCBmaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IF9yb3dhY3Rpb24gPSB0aGlzLmNvbmZpZy5yb3dzID8gdGhpcy5jb25maWcucm93c1tjb2wuZmllbGRdIDogbnVsbDtcclxuICAgIGNvbnN0IF9maWVsZDogc3RyaW5nID1cclxuICAgICAgX3Jvd2FjdGlvbiAmJiBfcm93YWN0aW9uW2ZpZWxkXVxyXG4gICAgICAgID8gX3Jvd2FjdGlvbltmaWVsZF0uY29uc3RydWN0b3IgPT09IEZ1bmN0aW9uXHJcbiAgICAgICAgICA/IF9yb3dhY3Rpb25bZmllbGRdLmFwcGx5KHRoaXMsIFtyb3dEYXRhXSlcclxuICAgICAgICAgIDogX3Jvd2FjdGlvbltmaWVsZF1cclxuICAgICAgICA6IG51bGw7XHJcbiAgICByZXR1cm4gX2ZpZWxkO1xyXG4gIH1cclxuICBzZWxlY3Rpb25DaGFuZ2UodmFsdWUgPSBbXSkge1xyXG4gICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICB9XHJcbiAgZm9ybWF0YXJWYWxvcih2YWxvcjogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCgncHQtQlInLCB7XHJcbiAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxyXG4gICAgICBjdXJyZW5jeTogJ0JSTCcsXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdCh2YWxvcik7XHJcbiAgfVxyXG4gIGxvYWRJbWFnZShyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBzdHJpbmcge1xyXG4gICAgLypcclxuICAgICAgTm9zc2EgY29sdW5hIGRlIGltYWdlbSB0cmFiYWxoYSBjb20gc3RyaW5ncyBkbyB0aXBvOiBiYXNlNjQgb3UgdXJsXHJcbiAgICAqL1xyXG4gICAgbGV0IHJldG9ybm8gPSBgZGF0YTppbWFnZS9qcGc7YmFzZTY0LCAke3RoaXMuaW1nRGVmYXVsdH1gO1xyXG4gICAgaWYgKHJvd0RhdGEgJiYgY29sICYmIHJvd0RhdGFbY29sLmZpZWxkXSAmJiByb3dEYXRhW2NvbC5maWVsZF0gIT09ICcnKSB7XHJcbiAgICAgIGlmIChyb3dEYXRhW2NvbC5maWVsZF0uaW5jbHVkZXMoJ2h0dHAnKSkgcmV0b3JubyA9IHJvd0RhdGFbY29sLmZpZWxkXTtcclxuICAgICAgZWxzZSByZXRvcm5vID0gYGRhdGE6aW1hZ2UvanBnO2Jhc2U2NCwgJHtyb3dEYXRhW2NvbC5maWVsZF19YDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmV0b3JubztcclxuICB9XHJcblxyXG4gIGdldEN1c3RvbVRlbXBsYXRlKHRlbXBsYXRlbmFtZTogc3RyaW5nKTogVGVtcGxhdGVSZWY8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVzW3RlbXBsYXRlbmFtZV07XHJcbiAgfVxyXG4gIGV4aWJpckNhbXBvKGZpZWxkOiBhbnksIHJvd0RhdGE6IGFueSkge1xyXG4gICAgbGV0IHZpc2libGUgPSBmaWVsZC52aXNpYmxlID8gZmllbGQudmlzaWJsZShyb3dEYXRhKSA6IHRydWU7XHJcbiAgICByZXR1cm4gdmlzaWJsZTtcclxuICB9XHJcbiAgcHVibGljIGFjdGl2ZUl0ZW0ocm93RGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IHJvd0RhdGE7XHJcbiAgICB0aGlzLm9uQWN0aXZlSXRlbS5lbWl0KHsgcm93RGF0YTogcm93RGF0YX0pO1xyXG4gIH1cclxuICBwdWJsaWMgYWN0aXZlSXRlbUxvdGUocm93RGF0YTogYW55KSB7XHJcbiAgICB0aGlzLm9uQWN0aXZlSXRlbUxvdGUuZW1pdChyb3dEYXRhKTtcclxuICB9XHJcblxyXG4gIHJldG9ybmFyQ2FtcG8oYWN0aW9uOiBLdk1lbnVJdGVtLCByb3dEYXRhOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgX2Z1bmN0aW9uID0gYWN0aW9uLmR5bmFtaWNmaWVsZHNcclxuICAgICAgPyAoYWN0aW9uLmR5bmFtaWNmaWVsZHNbZmllbGRdIGFzIEZ1bmN0aW9uKVxyXG4gICAgICA6IG51bGw7XHJcbiAgICBjb25zdCBfZmllbGQ6IHN0cmluZyA9IF9mdW5jdGlvblxyXG4gICAgICA/IF9mdW5jdGlvbi5hcHBseShhY3Rpb24sIFtyb3dEYXRhXSlcclxuICAgICAgOiBhY3Rpb25bZmllbGRdO1xyXG4gICAgcmV0dXJuIF9maWVsZDtcclxuICB9XHJcbiAgY2FsbERpc2FibGVkKGFjdGlvbjogS3ZNZW51SXRlbSwgZGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoYWN0aW9uPy5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm4gYWN0aW9uLmRpc2FibGVkKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBjcmlhck1lbnVzTW9kYWwoZGF0YTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuYWN0aW9ucyAmJiBkYXRhKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5jb25maWcuYWN0aW9ucy5tYXAoKGFjdGlvbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGljb24gPSB0aGlzLnJldG9ybmFyQ2FtcG8oYWN0aW9uLCBkYXRhLCAnaWNvbicpO1xyXG4gICAgICAgIGNvbnN0IHRvb2x0aXAgPSB0aGlzLnJldG9ybmFyQ2FtcG8oYWN0aW9uLCBkYXRhLCAndG9vbHRpcCcpO1xyXG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5yZXRvcm5hckNhbXBvKGFjdGlvbiwgZGF0YSwgJ2xhYmVsJyk7XHJcbiAgICAgICAgY29uc3QgY29tbWFuZDogYW55ID0gdGhpcy5yZXRvcm5hckNhbXBvKGFjdGlvbiwgZGF0YSwgJ2NvbW1hbmQnKTtcclxuICAgICAgICBjb25zdCB2aXNpYmxlOiBib29sZWFuID0gYWN0aW9uLnZpc2libGVcclxuICAgICAgICAgID8gYWN0aW9uLnZpc2libGUoZGF0YSlcclxuICAgICAgICAgIDogdHJ1ZTtcclxuICAgICAgICBjb25zdCBkaXNhYmxlZDogYm9vbGVhbiA9IGFjdGlvbi5kaXNhYmxlZFxyXG4gICAgICAgICAgPyBhY3Rpb24uZGlzYWJsZWQoZGF0YSlcclxuICAgICAgICAgIDogZmFsc2U7XHJcblxyXG4gICAgICAgIGNvbnN0IG1lbnVJbnNlcnQ6IEt2TWVudUl0ZW0gPSB7XHJcbiAgICAgICAgICBsYWJlbCxcclxuICAgICAgICAgIGljb24sXHJcbiAgICAgICAgICB0b29sdGlwLFxyXG4gICAgICAgICAgY29tbWFuZCxcclxuICAgICAgICAgIGRpc2FibGVkLFxyXG4gICAgICAgICAgdmlzaWJsZSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBsZXQgaXRlbSA9IHRoaXMubWVudUl0ZW1zLmZpbHRlcihcclxuICAgICAgICAgICh4KSA9PiB4LmNvbW1hbmQgPT0gbWVudUluc2VydC5jb21tYW5kXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW0ubGVuZ3RoID09IDApIHRoaXMubWVudUl0ZW1zLnB1c2gobWVudUluc2VydCk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAobWVudUluc2VydC5sYWJlbCAhPSBpdGVtWzBdLmxhYmVsKSB7XHJcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMubWVudUl0ZW1zLmluZGV4T2YoaXRlbVswXSk7XHJcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKG1lbnVJbnNlcnQudmlzaWJsZSAhPSBpdGVtWzBdLnZpc2libGUpIHtcclxuICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5tZW51SXRlbXMuaW5kZXhPZihpdGVtWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5tZW51SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAobWVudUluc2VydC5kaXNhYmxlZCAhPSBpdGVtWzBdLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMubWVudUl0ZW1zLmluZGV4T2YoaXRlbVswXSk7XHJcbiAgICAgICAgICAgIHRoaXMubWVudUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhbGlkYUxpbmhhQWNhb1ZhemlhKHJvd0RhdGE6IGFueSkge1xyXG4gICAgdmFyIGFsZ3VtSXRlbVZpc2l2ZWwgPSB0aGlzLmNvbmZpZy5hY3Rpb25zLnNvbWUoKGEpID0+IHtcclxuICAgICAgaWYgKHR5cGVvZiBhLnZpc2libGUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICByZXR1cm4gYS52aXNpYmxlKHJvd0RhdGEpID09PSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBSZXRvcm5hIHRydWUgc2UgYS52aXNpYmxlKHJvd0RhdGEpIG7Do28gZXhpc3RpclxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gIWFsZ3VtSXRlbVZpc2l2ZWw7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuICBkb3VibGVDbGljayhlOiBhbnksIHJvd0RhdGE6IGFueSkge1xyXG4gICAgbGV0IGV2ZW50RG91YmxlQ2xpY2sgPSB7IGV2ZW50OiBlLCByb3dEYXRhOiByb3dEYXRhfTtcclxuXHJcbiAgICBsZXQgYXJyYXk6IHN0cmluZ1tdID0gW107XHJcbiAgICBlLnRhcmdldC5jbGFzc0xpc3QuZm9yRWFjaCgoeDogYW55KSA9PiBhcnJheS5wdXNoKHgpKTtcclxuXHJcbiAgICAvL2lmIChhcnJheS5maW5kKCh4OiBhbnkpID0+IHggPT0gJ25nLXN0YXItaW5zZXJ0ZWQnKSAhPSB1bmRlZmluZWQpXHJcbiAgICB0aGlzLmRvdWJsZUNsaWNrRXZlbnQuZW1pdChldmVudERvdWJsZUNsaWNrKTtcclxuICB9XHJcblxyXG4gIGlzRGlzYWJsZWRDaGVja2JveChyb3dEYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kaXNhYmxlQ29udHJvbENoZWNrYm94RnVuY3Rpb25cclxuICAgICAgPyB0aGlzLmNvbmZpZy5kaXNhYmxlQ29udHJvbENoZWNrYm94RnVuY3Rpb24ocm93RGF0YSlcclxuICAgICAgOiBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICByZXR1cm5Ub29sdGlwUm93KHJvd0RhdGE6IGFueSwgY29sOiBhbnkpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMucmV0b3JuYXJSb3cocm93RGF0YSwgY29sLCAndG9vbHRpcHJvdycpO1xyXG4gIH1cclxuXHJcbiAgaXNTd2l0Y2hGaWVsZChjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmV0b3JubyA9IGNvbC5maWVsZFR5cGUgJiYgY29sLmZpZWxkVHlwZSA9PT0gJ3N3aXRjaCcgPyB0cnVlIDogZmFsc2U7XHJcbiAgICByZXR1cm4gcmV0b3JubztcclxuICB9XHJcbiAgb25Td2l0Y2hDaGFuZ2UoZXN0YWRvOiBhbnksIHJvd0RhdGE6IGJvb2xlYW4sIGNvbDogYW55KSB7XHJcbiAgICB0aGlzLm9uU3dpdGNoVGFibGVDaGFuZ2UuZW1pdCh7XHJcbiAgICAgIGVzdGFkbzogZXN0YWRvLFxyXG4gICAgICByb3dEYXRhOiByb3dEYXRhLFxyXG4gICAgICBjb2w6IGNvbFxyXG4gICAgfSlcclxuICB9XHJcbiAgaXNCdXR0b25EaXNhYmxlKGFjdGlvbjogYW55LCByb3dEYXRhOiBhbnksIGNvbW1hbmRFdmVudDogYW55KTogYW55IHtcclxuICAgIGlmICh0aGlzLmNhbGxEaXNhYmxlZChhY3Rpb24sIHJvd0RhdGEpKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH0gZWxzZSByZXR1cm4gdGhpcy5hY3RpdmVJdGVtKHJvd0RhdGEpLCBhY3Rpb24/LmNvbW1hbmQoY29tbWFuZEV2ZW50KTtcclxuICB9XHJcbiAgaXNEaXNhYmxlRWRpdFJvd0Z1bmN0aW9uKHJvd0RhdGE6IGFueSk6IGJvb2xlYW4gfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kaXNhYmxlRWRpdFJvd0Z1bmN0aW9uID8gdGhpcy5jb25maWcuZGlzYWJsZUVkaXRSb3dGdW5jdGlvbihyb3dEYXRhKSA6IGZhbHNlO1xyXG4gIH1cclxuICBpc0VkaXRhYmxlVGFibGUoKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5jb2x1bW5zKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7IC8vIFNlIHRoaXMuY29uZmlnLmNvbHVtbnMgZm9yIG51bGwsIHJldG9ybmEgbnVsbFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNvbHVtbnMuc29tZSgoY29sdW1uOiBhbnkpID0+ICdmaWVsZENvbnRyb2xUeXBlJyBpbiBjb2x1bW4pO1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiIsIlxyXG5cclxuPGRpdiBjbGFzcz1cImNhcmRcIiA+XHJcbiAgPHAtdG9hc3Q+PC9wLXRvYXN0PlxyXG5cclxuICA8cC1wYW5lbFxyXG4gICAgKm5nSWY9XCJmaWx0cm9zQXZhbmNhZG9zXCJcclxuICAgIGhlYWRlcj1cIkZpbHRyb3MgYXZhbsOnYWRvc1wiXHJcbiAgICBbdG9nZ2xlYWJsZV09XCJ0cnVlXCJcclxuICAgIFtjb2xsYXBzZWRdPVwidHJ1ZVwiXHJcbiAgICAoY29sbGFwc2VkQ2hhbmdlKT1cImNvbGxhcHNlZCA9ICFjb2xsYXBzZWRcIlxyXG4gICAgW3N0eWxlXT1cInsgJ21hcmdpbi1ib3R0b20nOiAnMnB4JyB9XCJcclxuICA+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyaWNvbnNcIj5cclxuICAgICAgPGlcclxuICAgICAgICAqbmdJZj1cIiFjb2xsYXBzZWRcIlxyXG4gICAgICAgIGNsYXNzPVwicGkgcGktZmlsdGVyXCJcclxuICAgICAgPjwvaT5cclxuICAgICAgPCEtLSDDjWNvbmUgcXVhbmRvIG8gcGFpbmVsIGVzdMOhIGFiZXJ0byAtLT5cclxuICAgICAgPGlcclxuICAgICAgICAqbmdJZj1cImNvbGxhcHNlZFwiXHJcbiAgICAgICAgY2xhc3M9XCJwaSBwaS1taW51c1wiXHJcbiAgICAgID48L2k+XHJcbiAgICAgIDwhLS0gw41jb25lIHF1YW5kbyBvIHBhaW5lbCBlc3TDoSBmZWNoYWRvIC0tPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICA8L3AtcGFuZWw+XHJcblxyXG4gIDxwLWNvbnRleHRNZW51ICNjbSBbbW9kZWxdPVwiaXRlbXNcIj48L3AtY29udGV4dE1lbnU+XHJcbiAgPHAtdGFibGVcclxuICAjdGVcclxuICBbcmVvcmRlcmFibGVDb2x1bW5zXT1cImNvbmZpZy5yZW9yZGVyYWJsZUNvbHVtbnMgfHwgZmFsc2VcIlxyXG4gICpuZ0lmPVwiY29uZmlnXCJcclxuICBbdmFsdWVdPVwiZGF0YVNvdXJjZVwiXHJcbiAgW2RhdGFLZXldPVwiY29uZmlnLmRhdGFLZXlcIlxyXG4gIFt0YWJsZVN0eWxlXT1cInsgJ21pbi13aWR0aCc6ICc1MHJlbScgfVwiXHJcbiAgW2NvbHVtbnNdPVwiY29uZmlnLmNvbHVtbnNcIlxyXG4gIFtlZGl0TW9kZV09XCIncm93J1wiXHJcbiAgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXHJcbiAgc2Nyb2xsSGVpZ2h0PVwiNDAwcHhcIlxyXG4gIGFwcGVuZFRvPVwiYm9keVwiXHJcbiAgW3N0eWxlQ2xhc3NdPVwiJ3AtZGF0YXRhYmxlLXNtJ1wiXHJcbiAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGVkSXRlbXNcIlxyXG4gIFtyb3dTZWxlY3RhYmxlXT1cImlzUm93U2VsZWN0YWJsZVwiXHJcbiAgW2dsb2JhbEZpbHRlckZpZWxkc109XCJnbG9iYWxGaWx0ZXJGaWVsZHNcIlxyXG4gIFtyb3dzXT1cInJvd3NcIlxyXG4gIFtwYWdpbmF0b3JdPVwicGFnaW5hdG9yXCJcclxuICBbcm93c1BlclBhZ2VPcHRpb25zXT1cInJvd3NQZXJQYWdlT3B0aW9uc1wiXHJcbiAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCJcclxuICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwie2ZpcnN0fSAtIHtsYXN0fSBkZSB7eyB0b3RhbFJlY29yZHMgfX1cIlxyXG4gIChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gIFtyb3dIb3Zlcl09XCJ0cnVlXCJcclxuICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXHJcbiAgW2xhenldPVwiY29uZmlnLmxhenlcIlxyXG4gIChvbkxhenlMb2FkKT1cInBhZ2luYXRlKCRldmVudClcIlxyXG4gIFtncm91cFJvd3NCeV09XCJjb25maWcuZmllbGRHcm91cFwiXHJcbiAgW3Nob3dGaXJzdExhc3RJY29uXT1cInNob3dGaXJzdExhc3RJY29uXCJcclxuICBbcGFnZUxpbmtzXT1cInBhZ2VMaW5rc09wdGlvbnNcIlxyXG4gIFtzY3JvbGxhYmxlXT1cImlzVGFibGVTY3JvbGxhYmxlXCJcclxuICBbc2Nyb2xsSGVpZ2h0XT1cInNjcm9sbEhlaWdodFwiXHJcbiAgW3Jvd1RyYWNrQnldPVwicm93VHJhY2tCeSBcIlxyXG4gIFsoY29udGV4dE1lbnVTZWxlY3Rpb24pXT1cInNlbGVjdGVkUHJvZHVjdFwiXHJcbiAgW2NvbnRleHRNZW51XT1cIiBpc0VkaXRhYmxlVGFibGUoKSA/IGNtIDogbnVsbFwiXHJcbiAgPlxyXG5cclxuXHJcblxyXG4gICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGVcclxuICAgICAgcFRlbXBsYXRlPVwiY2FwdGlvblwiXHJcbiAgICAgICpuZ0lmPVwiY29uZmlnLmVuYWJsZUNhdGlvblwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGZsZXgtd3JhcCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkIGNvbC0xMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAqbmdJZj1cImNvbmZpZy50aXRsZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1tZCBmb250LWJvbGQgbXktM1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGNvbmZpZy50aXRsZSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnLnN1YnRpdGxlXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtIG1iLTQgZm9udC1tZWRpdW1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyBjb25maWcuc3VidGl0bGUgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbWQ6Y29sLTYgbGc6Y29sLTQge3tcclxuICAgICAgICAgICAgdGFtYW5ob1RlbGEgPCA3NjggPyAnY29sLTEwJyA6ICdjb2wtMTInXHJcbiAgICAgICAgICB9fSBtdC0xIG1iLTIgXCI+XHJcbiAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAqbmdJZj1cImNvbmZpZy5lbmFibGVGaWx0ZXJcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInAtaW5wdXQtaWNvbi1sZWZ0XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+XHJcblxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBwSW5wdXRUZXh0XHJcbiAgICAgICAgICAgICAgcEF1dG9Gb2N1c1xyXG4gICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJvbkdsb2JhbEZpbHRlcih0ZSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQZXNxdWlzYXIuLi5cIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiaC0ycmVtXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGNvbC0xIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb25maWcuYWN0aW9uc0xvdGVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0bnMtb3B0aW9uc1wiXHJcbiAgICAgICAgICAgIFtzdHlsZV09XCJ7ICdtYXJnaW4tcmlnaHQnOiAnN3B4JyB9XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIGlkPVwiYWN0aW9uTG90ZUJ0bnNcIlxyXG4gICAgICAgICAgICAgIHBCdXR0b25cclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCB8fCBhY3Rpb24uc2hvd0Fjb2VzTG90ZSkgJiZcclxuICAgICAgICAgICAgICAgIGV4aWJpckNhbXBvKGFjdGlvbiwgdGhpcy5hY3Rpb24pXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImFjdGlvbkxvdGVCdG5zIHAtYnV0dG9uLXJhaXNlZCBwLWJ1dHRvbi10ZXh0XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICBhY3Rpb24/LmNvbW1hbmQoY29tbWFuZEV2ZW50KTsgYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXRvcm5hckNhbXBvKGFjdGlvbiwgc2VsZWN0ZWRJdGVtcywgJ3Rvb2x0aXAnKVwiXHJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInYm90dG9tJ1wiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRDb2xvcl09XCJcclxuICAgICAgICAgICAgICAgIHJldG9ybmFyQ2FtcG8oYWN0aW9uLCBzZWxlY3RlZEl0ZW1zLCAnYnRuQ29sb3InKVxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJldG9ybmFyQ2FtcG8oYWN0aW9uLCBzZWxlY3RlZEl0ZW1zLCAnZGlzYWJsZWQnKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1kLTIyXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJcclxuICAgICAgICAgICAgICAgICAgcmV0b3JuYXJDYW1wbyhhY3Rpb24sIHNlbGVjdGVkSXRlbXMsICdpY29uQnRuQ29sb3InKVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyByZXRvcm5hckNhbXBvKGFjdGlvbiwgc2VsZWN0ZWRJdGVtcywgXCJpY29uXCIpIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgIHBUZW1wbGF0ZT1cImhlYWRlclwiXHJcbiAgICAgIGxldC1jb2x1bW5zXHJcbiAgICA+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGhcclxuICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDRyZW07IGJvcmRlci1sZWZ0OiBzb2xpZCA0cHggdHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlU2VsZWN0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8cC10YWJsZUhlYWRlckNoZWNrYm94IChjbGljayk9XCJhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiPjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxyXG4gICAgICAgIDwvdGg+XHJcblxyXG4gICAgICAgIDx0aFxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCJcclxuICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLmZpZWxkXCJcclxuICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5EaXNhYmxlZF09XCJjb2wuc29ydGFibGUgPT09IGZhbHNlXCJcclxuICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwiY29sLndpZHRoXCJcclxuICAgICAgICAgIHBSZW9yZGVyYWJsZUNvbHVtblxyXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIFtjbGFzc109XCJcclxuICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSAmJiBhbGlnbkNvbHVuYXNIZWFkZXIoY29sKSA9PSAnJ1xyXG4gICAgICAgICAgICAgICAgPyAnZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ1xyXG4gICAgICAgICAgICAgICAgOiAnZmxleCBmbGV4LXJvdydcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cImFsaWduQ29sdW5hc0hlYWRlcihjb2wpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4+e3sgY29sLmhlYWRlciB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHAtc29ydEljb25cclxuICAgICAgICAgICAgICAqbmdJZj1cImNvbC5zb3J0YWJsZSA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbC5maWVsZFwiXHJcbiAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDEwcHhcIlxyXG4gICAgICAgICAgICA+PC9wLXNvcnRJY29uPlxyXG5cclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAqbmdJZj1cImNvbC5oZWFkZXJUb29sdGlwXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJjb2wuaGVhZGVyVG9vbHRpcFwiXHJcbiAgICAgICAgICAgID5pbmZvPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgICA8dGggKm5nSWY9XCJjb25maWcuYWN0aW9ucyAmJiBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwXCI+PC90aD5cclxuICAgICAgICA8dGggKm5nSWY9XCJpc0VkaXRhYmxlVGFibGUoKVwiICBpZD1cInRoLWVkaXRcIiBzdHlsZT1cIndpZHRoOiAyMHB4XCI+RWRpdGFyPC90aD5cclxuICAgICAgPC90cj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcblxyXG5cclxuXHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtcm93RGF0YSBsZXQtZWRpdGluZz1cImVkaXRpbmdcIiBsZXQtcmk9XCJyb3dJbmRleFwiIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXHJcbiAgICAgIGxldC1yb3dncm91cD1cInJvd2dyb3VwXCIgbGV0LXJvd3NwYW49XCJyb3dzcGFuXCI+XHJcbiAgICAgIDx0ciBbcEVkaXRhYmxlUm93XT1cInJvd0RhdGFcIiBbcEVkaXRhYmxlUm93RGlzYWJsZWRdPVwiZmFsc2VcIlxyXG4gICAgICBbcENvbnRleHRNZW51Um93XT1cIntyb3dEYXRhLCBlZGl0aW5nfVwiXHJcbiAgICAgID5cclxuXHJcblxyXG4gICAgICAgIDx0ZFxyXG4gICAgICAgICAgKm5nSWY9XCJjb25maWcuZW5hYmxlU2VsZWN0XCJcclxuICAgICAgICAgIFtzdHlsZV09XCJhcHBseVN0eWxlKHJvd0RhdGEsIHsgZmllbGQ6ICdjaGVjay1ib3gnLCBoZWFkZXI6ICcnIH0pXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8IS0tPHAtdGFibGVDaGVja2JveCAqbmdJZj1cImlzVmlzaWJsZUNoZWNrYm94KHJvd0RhdGEpXCItLT5cclxuICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3hcclxuICAgICAgICAgICAgW3ZhbHVlXT1cInJvd0RhdGFcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZENoZWNrYm94KHJvd0RhdGEpXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcclxuICAgICAgICAgID48L3AtdGFibGVDaGVja2JveD5cclxuICAgICAgICA8L3RkPlxyXG5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnM7IGxldCBpID0gaW5kZXhcIj5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcbiAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG4gICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cclxuXHJcbiAgICAgICAgICA8IS0tIENlbHVsYSBxdWUgYXJtYXplbmEgb3MgY29udHJvbGVzIGRlIGVkacOnw6NvIHBhcmEgb3MgY2FtcG9zIC0tPlxyXG4gICAgICAgICAgPHRkICpuZ0lmPVwiY29sLmZpZWxkQ29udHJvbFR5cGVcIlxyXG4gICAgICAgICAgW2lkXT1cIidyb3dUYWJsZScrIHJvd0RhdGFbY29uZmlnLmRhdGFLZXldXCJcclxuICAgICAgICAgIHBTZWxlY3RhYmxlUm93RGJsQ2xpY2s9XCJcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW0ocm93RGF0YSlcIlxyXG4gICAgICAgICAgKGRibGNsaWNrKT1cImRiQ2xpY2tFZGl0KClcIlxyXG4gICAgICAgICAgcFNlbGVjdGFibGVSb3dEYmxDbGljaz1cIlwiXHJcbiAgICAgICAgICBjbGFzcz1cInJvd1RhYmxlXCIgW3N0eWxlXT1cIlxyXG4gICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCBjb2wpICtcclxuICAgICAgICAgIGNlbnRyYWxpemFyQ29sdW5hcyhjb2wpICtcclxuICAgICAgICAgIGFsaWduQ29sdW5hcyhjb2wpIFwiIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwUm93KHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8cC1jZWxsRWRpdG9yIFtuZ0NsYXNzXT1cInsnc3dpdGNoJzogY29sLmZpZWxkQ29udHJvbFR5cGUgPT0gJ3N3aXRjaCd9XCI+XHJcbiAgICAgICAgICAgICAgPCEtLSBDb250cm9sZSBkZSBlZGnDp8OjbyBkbyBjYW1wbyAtLT5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2wuZmllbGRDb250cm9sVHlwZVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAzMDBweFwiIGNsYXNzPVwiZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGt2LWlucHV0LXRleHQgY2xhc3M9XCJjZWxsQ29udHJvbCBjb2xcIiBbKG5nTW9kZWwpXT1cInJvd0RhdGFbY29sLmZpZWxkXVwiIFtyZXF1aXJlZF09XCJjb2wucmVxdWlyZWQgPz8gdHJ1ZVwiPjwva3YtaW5wdXQtdGV4dD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMzAwcHhcIiBjbGFzcz1cImdyaWQgZm9ybWdyaWQgcC1mbHVpZFwiID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxrdi1pbnB1dC1udW1iZXIgY2xhc3M9XCJjZWxsQ29udHJvbCBjb2xcIiBbKG5nTW9kZWwpXT1cInJvd0RhdGFbY29sLmZpZWxkXVwiIFtyZXF1aXJlZF09XCJjb2wucmVxdWlyZWQgPz8gdHJ1ZVwiPjwva3YtaW5wdXQtbnVtYmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidtYXNrJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMzAwcHhcIiBjbGFzcz1cImdyaWQgZm9ybWdyaWQgcC1mbHVpZFwiID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxrdi1pbnB1dC1tYXNrIGNsYXNzPVwiY2VsbENvbnRyb2wgY29sXCIgW21hc2tdPVwiY29sLm1hc2tcIiBbcmVxdWlyZWRdPVwiY29sLnJlcXVpcmVkID8/IHRydWVcIiBbKG5nTW9kZWwpXT1cInJvd0RhdGFbY29sLmZpZWxkXVwiPjwva3YtaW5wdXQtbWFzaz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3dpdGNoJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMzAwcHhcIiBjbGFzcz1cImdyaWQgZm9ybWdyaWQgcC1mbHVpZFwiID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxrdi1zd2l0Y2ggY2xhc3M9XCJjZWxsQ29udHJvbCBjb2xcIiBbKG5nTW9kZWwpXT1cInJvd0RhdGFbY29sLmZpZWxkXVwiID48L2t2LXN3aXRjaD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2FsZW5kYXInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAzMDBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMzAwcHhcIiBjbGFzcz1cImdyaWQgZm9ybWdyaWQgcC1mbHVpZFwiID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxrdi1pbnB1dC1jYWxlbmRhciBjbGFzcz1cImNlbGxDb250cm9sIGNvbFwiIFsobmdNb2RlbCldPVwicm93RGF0YVtjb2wuZmllbGRdXCI+PC9rdi1pbnB1dC1jYWxlbmRhcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDMwMHB4XCIgY2xhc3M9XCJncmlkIGZvcm1ncmlkIHAtZmx1aWRcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cC1kcm9wZG93blxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNlbGxDb250cm9sIGNvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25MYWJlbF09XCJjb2wuZmllbGREcm9wRG93bkNvbnRyb2wuZGVzY3JpY2Fvb2JqZXRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvblZhbHVlXT1cImNvbC5maWVsZERyb3BEb3duQ29udHJvbC5pZG9iamV0b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImNvbC5maWVsZERyb3BEb3duQ29udHJvbC5maWVsZENvbnRyb2xEcm9wZG93blNvdXJjZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93RGF0YVtjb2wuZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gVmFsb3IgYXR1YWwgZG8gY2FtcG8gLS0+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkQ29udHJvbFR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Ryb3Bkb3duJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3dEYXRhW2NvbC5maWVsZF1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXRvcm5hRGVzY3JpY2FvRHJvcChcclxuICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2xcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7cm93RGF0YVtjb2wuZmllbGRdfX0gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3N3aXRjaCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoIFsobmdNb2RlbCldPVwicm93RGF0YVtjb2wuZmllbGRdXCIgW2Rpc2FibGVkXT1cInRydWVcIj48L2t2LXN3aXRjaD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInY2FsZW5kYXInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgcm93RGF0YVtjb2wuZmllbGRdIHwgZGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICB7eyByb3dEYXRhW2NvbC5maWVsZF0gfX1cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cclxuICAgICAgICAgIDwvdGQ+XHJcblxyXG5cclxuICAgIDwhLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcbiAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG4gICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLT5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gICAgICAgICAgPHRkICpuZ0lmPVwicm93Z3JvdXAgJiYgIWNvbC50ZW1wbGF0ZSAmJiAhY29sLmZpZWxkQ29udHJvbFR5cGVcIiBbYXR0ci5yb3dzcGFuXT1cInJvd2dyb3VwICYmIGNvbC5ncm91cGVkID8gcm93c3BhbiA6IG51bGxcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInJvd1RhYmxlXCIgW3N0eWxlXT1cIlxyXG4gICAgICAgICAgICAgIGFwcGx5U3R5bGUocm93RGF0YSwgY29sKSArXHJcbiAgICAgICAgICAgICAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbCkgK1xyXG4gICAgICAgICAgICAgIGFsaWduQ29sdW5hcyhjb2wpXHJcbiAgICAgICAgICAgIFwiIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwUm93KHJvd0RhdGEsIGNvbClcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWNvbHVtbi10aXRsZVwiPnt7IGNvbC5oZWFkZXIgfX06PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNCb29sZWFuRmllbGQocm93RGF0YSwgY29sKTsgZWxzZSBib29sZWFuRmllbGRcIiBbY2xhc3NdPVwicmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICFpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkICYmICFpc0ltYWdlRmllbGQoY29sKVxyXG4gICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbC5pY29uXCIgW2NsYXNzXT1cImNvbC5pY29uICsgJyBtci0yJ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwicmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGEsIGNvbClcIiBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNJbWFnZUZpZWxkKGNvbClcIj5cclxuICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWFnZVwiIFtzcmNdPVwibG9hZEltYWdlKHJvd0RhdGEsIGNvbClcIiAvPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2wuaWNvbkZpZWxkXCIgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgJ21hdGVyaWFsLWljb25zJzogY29sLmluZEljb25NYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1yLTInOiAhY29sLmluZEljb25NYXRlcmlhbFxyXG4gICAgICAgICAgICAgIH1cIiBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiPlxyXG4gICAgICAgICAgICAgIHt7IHJldHVybkNsYXNzSWNvbihyb3dEYXRhLCBjb2wpIH19XHJcbiAgICAgICAgICAgIDwvaT5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYm9vbGVhbkZpZWxkPlxyXG4gICAgICAgICAgICAgIDxpICpuZ0lmPVwiIWNvbC5pY29uRmllbGQgJiYgIWlzU3dpdGNoRmllbGQoY29sKVwiIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0gPyAndGV4dC1ncmVlbi01MDAnIDogJ3RleHQtcmVkLTUwMCdcclxuICAgICAgICAgICAgICAgIFwiPjxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyByb3dEYXRhW2NvbC5maWVsZF0gPyBcImNoZWNrXCIgOiBcImNsb3NlXCIgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2k+XHJcblxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNTd2l0Y2hGaWVsZChjb2wpXCIgW2NsYXNzXT1cInJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbClcIj5cclxuICAgICAgICAgICAgICAgIDxrdi1zd2l0Y2ggKG9uU3dpdGNoQ2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2w/Lm9ubHlSZWFkRmllbGQgPz8gdHJ1ZVwiIFtzd2l0Y2hWYWx1ZV09XCJ0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2t2LXN3aXRjaD5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgIDx0ZCAqbmdJZj1cIiFyb3dncm91cCAmJiAhY29sLmdyb3VwZWQgJiYgIWNvbC50ZW1wbGF0ZSAmJiAhY29sLmZpZWxkQ29udHJvbFR5cGVcIiBbc3R5bGVdPVwiXHJcbiAgICAgICAgICAgICAgYXBwbHlTdHlsZShyb3dEYXRhLCBjb2wpICtcclxuICAgICAgICAgICAgICBjZW50cmFsaXphckNvbHVuYXMoY29sKSArXHJcbiAgICAgICAgICAgICAgYWxpZ25Db2x1bmFzKGNvbClcclxuICAgICAgICAgICAgXCIgY2xhc3M9XCJyb3dUYWJsZVwiIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwUm93KHJvd0RhdGEsIGNvbClcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWNvbHVtbi10aXRsZVwiPnt7IGNvbC5oZWFkZXIgfX06PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNCb29sZWFuRmllbGQocm93RGF0YSwgY29sKTsgZWxzZSBib29sZWFuRmllbGRcIiBbY2xhc3NdPVwicmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICFpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkICYmICFpc0ltYWdlRmllbGQoY29sKVxyXG4gICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbC5pY29uXCIgW2NsYXNzXT1cImNvbC5pY29uICsgJyBtci0yJ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwicmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGEsIGNvbClcIiBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzSW1hZ2VGaWVsZChjb2wpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1hZ2VcIiBbc3JjXT1cImxvYWRJbWFnZShyb3dEYXRhLCBjb2wpXCIgLz5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sLmljb25GaWVsZFwiIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICdtYXRlcmlhbC1pY29ucyc6IGNvbC5pbmRJY29uTWF0ZXJpYWwsXHJcbiAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBtci0yJzogIWNvbC5pbmRJY29uTWF0ZXJpYWxcclxuICAgICAgICAgICAgICB9XCIgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIj5cclxuICAgICAgICAgICAgICB7eyByZXR1cm5DbGFzc0ljb24ocm93RGF0YSwgY29sKSB9fVxyXG4gICAgICAgICAgICA8L2k+XHJcblxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Jvb2xlYW5GaWVsZD5cclxuICAgICAgICAgICAgICA8aSAqbmdJZj1cIiFjb2wuaWNvbkZpZWxkICYmICFpc1N3aXRjaEZpZWxkKGNvbClcIiBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgcm93RGF0YVtjb2wuZmllbGRdID8gJ3RleHQtZ3JlZW4tNTAwJyA6ICd0ZXh0LXJlZC01MDAnXHJcbiAgICAgICAgICAgICAgICBcIj48c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5cclxuICAgICAgICAgICAgICAgICAge3sgcm93RGF0YVtjb2wuZmllbGRdID8gXCJjaGVja1wiIDogXCJjbG9zZVwiIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9pPlxyXG5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzU3dpdGNoRmllbGQoY29sKVwiIFtjbGFzc109XCJyZXR1cm5Sb3dDbGFzcyhyb3dEYXRhLCBjb2wpXCI+XHJcbiAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoIChvblN3aXRjaENoYW5nZSk9XCJvblN3aXRjaENoYW5nZSgkZXZlbnQsIHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sPy5vbmx5UmVhZEZpZWxkID8/IHRydWVcIiBbc3dpdGNoVmFsdWVdPVwidHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9rdi1zd2l0Y2g+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICA8dGQgKm5nSWY9XCJjb2wudGVtcGxhdGUgJiYgIWNvbC5maWVsZENvbnRyb2xUeXBlXCIgW3N0eWxlXT1cIlxyXG4gICAgICAgICAgICAgIGFwcGx5U3R5bGUocm93RGF0YSwgY29sKSArXHJcbiAgICAgICAgICAgICAgY2VudHJhbGl6YXJDb2x1bmFzKGNvbCkgK1xyXG4gICAgICAgICAgICAgIGFsaWduQ29sdW5hcyhjb2wpXHJcbiAgICAgICAgICAgIFwiIGNsYXNzPVwicm93VGFibGVcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWNvbHVtbi10aXRsZVwiPnt7IGNvbC5oZWFkZXIgfX06PC9zcGFuPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Q3VzdG9tVGVtcGxhdGUoY29sLnRlbXBsYXRlLm5hbWUpXCJcclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJnZXRDdXN0b21UZW1wbGF0ZShjb2wudGVtcGxhdGUubmFtZSlcIlxyXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93RGF0YSB9XCI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuICAgICAgPCEtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tPlxyXG4gICAgICA8IS0tIENvbnRyb2xlIGRlIGHDp8OjbyAgLS0+XHJcbiAgICAgIDx0ZCBbbmdDbGFzc109XCJ7J3RkLXRvb2xzJzogaXNFZGl0YWJsZVRhYmxlKCksICd0ZC10b29scy1zdGlja3knOiAhaXNFZGl0YWJsZVRhYmxlKCkgfVwiXHJcbiAgICAgICAgKm5nSWY9XCJjb25maWcuYWN0aW9ucyAmJiBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwICYmICFlZGl0aW5nXCJcclxuICAgICAgICBbc3R5bGVdPVwiYXBwbHlTdHlsZShyb3dEYXRhLCB7IGZpZWxkOiAnYnRucy1vcHRpb25zJywgaGVhZGVyOiAnJyB9KVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGwgZ2FwLTFcIlxyXG4gICAgICAgICAgKm5nSWY9XCJhY29lc0xpbmhhVGFiZWxhXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1yLTFcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8IS0tIDxidXR0b25cclxuICAgICAgICAgICAgICBpZD1cImFjdGlvbkJ0bnNcIlxyXG4gICAgICAgICAgICAgIHBCdXR0b25cclxuICAgICAgICAgICAgICAqbmdJZj1cImV4aWJpckNhbXBvKGFjdGlvbiwgcm93RGF0YSlcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uQnRucyBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXJhaXNlZFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW0ocm93RGF0YSk7IGFjdGlvbj8uY29tbWFuZChjb21tYW5kRXZlbnQpXCJcclxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0b3JuYXJDYW1wbyhhY3Rpb24sIHJvd0RhdGEsICd0b29sdGlwJylcIlxyXG4gICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiXHJcbiAgICAgICAgICAgICAgICBhY3Rpb24udG9vbHRpcFBvc2l0aW9uID8gYWN0aW9uLnRvb2x0aXBQb3NpdGlvbiA6ICdib3R0b20nXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY2FsbERpc2FibGVkKGFjdGlvbiwgcm93RGF0YSlcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1kLTE5XCI+XHJcbiAgICAgICAgICAgICAgICB7eyByZXRvcm5hckNhbXBvKGFjdGlvbiwgcm93RGF0YSwgXCJpY29uXCIpIH19PC9zcGFuXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj4gLS0+XHJcblxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB7e1xyXG4gICAgICAgICAgICAgICAgY2FsbERpc2FibGVkKGFjdGlvbiwgcm93RGF0YSlcclxuICAgICAgICAgICAgICAgICAgPyAndGV4dC1ncmF5LTQwMCBjdXJzb3ItYXV0bydcclxuICAgICAgICAgICAgICAgICAgOiAnY3Vyc29yLXBvaW50ZXInXHJcbiAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiAyMHB4XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiaXNCdXR0b25EaXNhYmxlKGFjdGlvbiwgcm93RGF0YSwgY29tbWFuZEV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldG9ybmFyQ2FtcG8oYWN0aW9uLCByb3dEYXRhLCAndG9vbHRpcCcpXCJcclxuICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIlxyXG4gICAgICAgICAgICAgICAgYWN0aW9uLnRvb2x0aXBQb3NpdGlvbiA/IGFjdGlvbi50b29sdGlwUG9zaXRpb24gOiAnYm90dG9tJ1xyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7eyByZXRvcm5hckNhbXBvKGFjdGlvbiwgcm93RGF0YSwgXCJpY29uXCIpIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtZW5kIHctZnVsbFwiXHJcbiAgICAgICAgICAqbmdJZj1cIiFhY29lc0xpbmhhVGFiZWxhXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8IS0tIDxidXR0b25cclxuICAgICAgICAgICAgaWQ9XCJtb3JlVmVydEJ0blwiXHJcbiAgICAgICAgICAgIHBCdXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25CdG5zIHAtYnV0dG9uLXRleHQgcC1idXR0b24tcmFpc2VkXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm1lbnUudG9nZ2xlKCRldmVudCk7IGFjdGl2ZUl0ZW0ocm93RGF0YSlcIlxyXG4gICAgICAgICAgPiAtLT5cclxuICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBjdXJzb3ItcG9pbnRlciBpY29uLW1vcmUtaG9yaXpcIlxyXG4gICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMjBweFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJtZW51LnRvZ2dsZSgkZXZlbnQpOyBhY3RpdmVJdGVtKHJvd0RhdGEpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgbW9yZV9ob3JpelxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPCEtLSA8L2J1dHRvbj4gLS0+XHJcblxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbmZpZy5hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgIHt7IGNyaWFyTWVudXNNb2RhbChyb3dEYXRhKSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSA8ZGl2ICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNcIj5cclxuICAgICAgICAgICAge3sgY3JpYXJNZW51c01vZGFsKHJvd0RhdGEpIH19XHJcbiAgICAgICAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgICAgICAgPHAtbWVudVxyXG4gICAgICAgICAgICAjbWVudVxyXG4gICAgICAgICAgICBbcG9wdXBdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFttb2RlbF09XCJtZW51SXRlbXNcIlxyXG4gICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIlxyXG4gICAgICAgICAgPjwvcC1tZW51PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3RkPlxyXG5cclxuICAgICAgPHRkXHJcbiAgICAgIGNsYXNzPVwidGQtdG9vbHNcIlxyXG4gICAgICAqbmdJZj1cImNvbmZpZy5hY3Rpb25zICYmIGNvbmZpZy5hY3Rpb25zLmxlbmd0aCA+IDAgJiYgZWRpdGluZ1wiXHJcbiAgICAgIFtzdHlsZV09XCJhcHBseVN0eWxlKHJvd0RhdGEsIHsgZmllbGQ6ICdidG5zLW9wdGlvbnMnLCBoZWFkZXI6ICcnIH0pXCJcclxuICAgID5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtZW5kIHctZnVsbCBnYXAtMVwiXHJcbiAgICAgICAgKm5nSWY9XCJhY29lc0xpbmhhVGFiZWxhXCJcclxuICAgICAgPlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGxcIlxyXG4gICAgICAgICpuZ0lmPVwiIWFjb2VzTGluaGFUYWJlbGFcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8L3RkPlxyXG5cclxuXHJcblxyXG4gICAgICA8IS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0+XHJcbiAgICAgIDwhLS0gQ29udHJvbGUgZGUgZWRpw6fDo28gLS0+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwidGQtZWRpdFwiICpuZ0lmPVwidGhpcy5pc0VkaXRhYmxlVGFibGUoKVwiID5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gW3N0eWxlLmhlaWdodF09XCInMjhweCdcIiBbaWRdPVwiJ3Jvd0VkaXQnICsgcm93RGF0YVtjb25maWcuZGF0YUtleV0gXCIgW3N0eWxlLndpZHRoXT1cIicyOHB4J1wiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVFZGl0Um93RnVuY3Rpb24ocm93RGF0YSlcIiAqbmdJZj1cIiFlZGl0aW5nXCIgcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBwSW5pdEVkaXRhYmxlUm93IGljb249XCJwaSBwaS1wZW5jaWxcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0VkaXRJbml0KHJvd0RhdGEpXCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBbc3R5bGUuaGVpZ2h0XT1cIicyOHB4J1wiIFtzdHlsZS53aWR0aF09XCInMjhweCdcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlRWRpdFJvd0Z1bmN0aW9uKHJvd0RhdGEpXCIgKm5nSWY9XCJlZGl0aW5nXCIgcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBwU2F2ZUVkaXRhYmxlUm93IGljb249XCJwaSBwaS1jaGVja1wiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93RWRpdFNhdmUocm93RGF0YSwgcmkpXCIgW2lkXT1cIidyb3dTYXZlJyArIHJvd0RhdGFbY29uZmlnLmRhdGFLZXldIFwiIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IHAtYnV0dG9uLXN1Y2Nlc3MgbXItMlwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIFtzdHlsZS5oZWlnaHRdPVwiJzI4cHgnXCIgW3N0eWxlLndpZHRoXT1cIicyOHB4J1wiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVFZGl0Um93RnVuY3Rpb24ocm93RGF0YSlcIiAqbmdJZj1cImVkaXRpbmdcIiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIHBDYW5jZWxFZGl0YWJsZVJvdyBpY29uPVwicGkgcGktdGltZXNcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0VkaXRDYW5jZWwocm93RGF0YSwgcmkpXCIgW2lkXT1cIidyb3dDYW5jZWwnICsgcm93RGF0YVtjb25maWcuZGF0YUtleV0gXCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgcC1idXR0b24tZGFuZ2VyXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3RkPlxyXG5cclxuXHJcblxyXG5cclxuICAgICAgPC90cj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLXRhYmxlPlxyXG48L2Rpdj5cclxuIl19
|