keevo-components 2.0.155 → 2.0.156

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.
@@ -655,12 +655,12 @@ export class KvTableDraggableComponent {
655
655
  const previewTable = document.createElement('table');
656
656
  const previewTbody = document.createElement('tbody');
657
657
  const previewRow = document.createElement('tr');
658
- previewTable.style.cssText = `
659
- width: ${tableRect?.width ? Math.min(tableRect.width, 800) : 'auto'}px;
660
- margin: 0;
661
- border-collapse: collapse;
662
- table-layout: fixed;
663
- background: white;
658
+ previewTable.style.cssText = `
659
+ width: ${tableRect?.width ? Math.min(tableRect.width, 800) : 'auto'}px;
660
+ margin: 0;
661
+ border-collapse: collapse;
662
+ table-layout: fixed;
663
+ background: white;
664
664
  `;
665
665
  if (parentTable) {
666
666
  previewTable.className = parentTable.className;
@@ -674,38 +674,38 @@ export class KvTableDraggableComponent {
674
674
  originalCells.forEach((originalCell, index) => {
675
675
  const previewCell = originalCell.cloneNode(true);
676
676
  const cellRect = originalCell.getBoundingClientRect();
677
- previewCell.style.cssText = `
678
- width: ${cellRect.width}px;
679
- min-width: ${cellRect.width}px;
680
- max-width: ${cellRect.width}px;
681
- height: ${cellRect.height}px;
682
- padding: ${window.getComputedStyle(originalCell).padding};
683
- text-align: ${window.getComputedStyle(originalCell).textAlign};
684
- vertical-align: ${window.getComputedStyle(originalCell).verticalAlign};
685
- border: none;
686
- background: transparent;
687
- pointer-events: none;
688
- box-sizing: border-box;
689
- overflow: hidden;
690
- white-space: nowrap;
691
- text-overflow: ellipsis;
677
+ previewCell.style.cssText = `
678
+ width: ${cellRect.width}px;
679
+ min-width: ${cellRect.width}px;
680
+ max-width: ${cellRect.width}px;
681
+ height: ${cellRect.height}px;
682
+ padding: ${window.getComputedStyle(originalCell).padding};
683
+ text-align: ${window.getComputedStyle(originalCell).textAlign};
684
+ vertical-align: ${window.getComputedStyle(originalCell).verticalAlign};
685
+ border: none;
686
+ background: transparent;
687
+ pointer-events: none;
688
+ box-sizing: border-box;
689
+ overflow: hidden;
690
+ white-space: nowrap;
691
+ text-overflow: ellipsis;
692
692
  `;
693
693
  previewRow.appendChild(previewCell);
694
694
  });
695
695
  previewTbody.appendChild(previewRow);
696
696
  previewTable.appendChild(previewTbody);
697
697
  preview.appendChild(previewTable);
698
- preview.style.cssText = `
699
- display: block;
700
- background: white;
701
- border: 1px solid rgba(var(--kv-color-system), 0.2);
702
- border-radius: 8px;
703
- box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15), 0 4px 10px rgba(0, 0, 0, 0.1);
704
- z-index: 1000;
705
- overflow: hidden;
706
- width: ${tableRect?.width ? Math.min(tableRect.width, 800) : 'auto'}px;
707
- max-width: 90vw;
708
- pointer-events: none;
698
+ preview.style.cssText = `
699
+ display: block;
700
+ background: white;
701
+ border: 1px solid rgba(var(--kv-color-system), 0.2);
702
+ border-radius: 8px;
703
+ box-shadow: 0 8px 25px rgba(0, 0, 0, 0.15), 0 4px 10px rgba(0, 0, 0, 0.1);
704
+ z-index: 1000;
705
+ overflow: hidden;
706
+ width: ${tableRect?.width ? Math.min(tableRect.width, 800) : 'auto'}px;
707
+ max-width: 90vw;
708
+ pointer-events: none;
709
709
  `;
710
710
  setTimeout(() => {
711
711
  if (preview) {
@@ -724,11 +724,11 @@ export class KvTableDraggableComponent {
724
724
  this.isDragging = false;
725
725
  }
726
726
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTableDraggableComponent, deps: [{ token: i1.DatePipe }, { token: i1.DecimalPipe }, { token: i2.CpfCnpjPipe }, { token: i3.TelefonePipe }, { token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
727
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvTableDraggableComponent, selector: "kv-table-draggable", inputs: { first: { classPropertyName: "first", publicName: "first", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, ellipsisText: { classPropertyName: "ellipsisText", publicName: "ellipsisText", isSignal: true, isRequired: false, transformFunction: null }, isLoadingSkeleton: { classPropertyName: "isLoadingSkeleton", publicName: "isLoadingSkeleton", isSignal: true, isRequired: false, transformFunction: null }, filterButton: { classPropertyName: "filterButton", publicName: "filterButton", isSignal: true, isRequired: false, transformFunction: null }, filterButtonBadge: { classPropertyName: "filterButtonBadge", publicName: "filterButtonBadge", isSignal: true, isRequired: false, transformFunction: null }, _templates: { classPropertyName: "_templates", publicName: "templates", isSignal: false, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: false, isRequired: false, transformFunction: null }, defaultSortField: { classPropertyName: "defaultSortField", publicName: "defaultSortField", isSignal: false, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: false, isRequired: false, transformFunction: null }, selectedItems: { classPropertyName: "selectedItems", publicName: "selectedItems", isSignal: false, isRequired: false, transformFunction: null }, totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: false, isRequired: false, transformFunction: null }, paginator: { classPropertyName: "paginator", publicName: "paginator", isSignal: false, isRequired: false, transformFunction: null }, rowsPerPageOptions: { classPropertyName: "rowsPerPageOptions", publicName: "rowsPerPageOptions", isSignal: false, isRequired: false, transformFunction: null }, tableSize: { classPropertyName: "tableSize", publicName: "tableSize", isSignal: false, isRequired: false, transformFunction: null }, filterColumnsBtn: { classPropertyName: "filterColumnsBtn", publicName: "filterColumnsBtn", isSignal: false, isRequired: false, transformFunction: null }, replaceEmptyValues: { classPropertyName: "replaceEmptyValues", publicName: "replaceEmptyValues", isSignal: false, isRequired: false, transformFunction: null }, filtrosAvancados: { classPropertyName: "filtrosAvancados", publicName: "filtrosAvancados", isSignal: false, isRequired: false, transformFunction: null }, scrollHeight: { classPropertyName: "scrollHeight", publicName: "scrollHeight", isSignal: false, isRequired: false, transformFunction: null }, isTableScrollable: { classPropertyName: "isTableScrollable", publicName: "isTableScrollable", isSignal: false, isRequired: false, transformFunction: null }, tableCaptalized: { classPropertyName: "tableCaptalized", publicName: "tableCaptalized", isSignal: false, isRequired: false, transformFunction: null }, rowTrackBy: { classPropertyName: "rowTrackBy", publicName: "rowTrackBy", isSignal: false, isRequired: false, transformFunction: null }, responsiveLayout: { classPropertyName: "responsiveLayout", publicName: "responsiveLayout", isSignal: false, isRequired: false, transformFunction: null }, disabledHeaderCheckbox: { classPropertyName: "disabledHeaderCheckbox", publicName: "disabledHeaderCheckbox", isSignal: false, isRequired: false, transformFunction: null }, enableDragDrop: { classPropertyName: "enableDragDrop", publicName: "enableDragDrop", isSignal: false, isRequired: false, transformFunction: null }, dragDropDisabled: { classPropertyName: "dragDropDisabled", publicName: "dragDropDisabled", isSignal: false, isRequired: false, transformFunction: null }, applyStyle: { classPropertyName: "applyStyle", publicName: "applyStyle", isSignal: false, isRequired: false, transformFunction: null }, pageLinksOptions: { classPropertyName: "pageLinksOptions", publicName: "pageLinksOptions", isSignal: false, isRequired: false, transformFunction: null }, showFirstLastIcon: { classPropertyName: "showFirstLastIcon", publicName: "showFirstLastIcon", isSignal: false, isRequired: false, transformFunction: null }, setConfig: { classPropertyName: "setConfig", publicName: "config", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { first: "firstChange", rows: "rowsChange", onActiveItem: "onActiveItem", onActiveItemLote: "onActiveItemLote", onPaginate: "onPaginate", onSelectionChange: "onSelectionChange", doubleClickEvent: "doubleClickEvent", filterField: "filterField", onSwitchTableChange: "onSwitchTableChange", onRowReorder: "onRowReorder" }, host: { listeners: { "window:resize": "onWindowResize($event)", "document:keydown.escape": "onEscapeKey($event)", "document:click": "onClickEvent($event)" } }, queries: [{ propertyName: "templates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "tableCell", first: true, predicate: ["tableCell"], descendants: true, isSignal: true }, { propertyName: "menuFiltroDiv", first: true, predicate: ["menuFiltroDiv"], descendants: true }, { propertyName: "botaoFiltro", first: true, predicate: ["botaoFiltro"], descendants: true }, { propertyName: "inputField", first: true, predicate: ["inputField"], descendants: true }, { propertyName: "table", first: true, predicate: ["table"], descendants: true }, { propertyName: "ptable", first: true, predicate: Table, descendants: true }], ngImport: i0, template: "<div class=\"kv-table-container\">\n @if (config) {\n <p-table\n #dt\n #table\n styleClass=\"p-datatable-sm\"\n [value]=\"dataSource\"\n [(selection)]=\"selectedItems\"\n [rowSelectable]=\"isRowSelectable\"\n [columns]=\"config.columns\"\n [globalFilterFields]=\"globalFilterFields\"\n [rows]=\"rows()\"\n [paginator]=\"paginator\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\n [rowHover]=\"true\"\n [totalRecords]=\"totalRecords\"\n [lazy]=\"config.lazy\"\n [first]=\"first()\"\n (onLazyLoad)=\"paginate($event)\"\n (selectionChange)=\"selectionChange($event)\"\n (onSort)=\"onSort($event)\"\n (onPage)=\"onPage($event)\"\n rowGroupMode=\"rowspan\"\n [groupRowsBy]=\"config.fieldGroup\"\n [showFirstLastIcon]=\"widthPage() > 960 ? true : false\"\n [pageLinks]=\"widthPage() > 960 ? 2 : 1\"\n [responsive]=\"true\"\n [responsiveLayout]=\"responsiveLayout ? 'stack' : ''\"\n [scrollable]=\"isTableScrollable\"\n [scrollHeight]=\"scrollHeight\"\n [rowTrackBy]=\"rowTrackBy\"\n\n cdkDropList\n [cdkDropListData]=\"currentPageData()\"\n (cdkDropListDropped)=\"drop($event)\"\n cdkDropListOrientation=\"vertical\"\n >\n @if (config.enableCation) {\n <ng-template pTemplate=\"caption\">\n <div\n class=\"flex flex-row flex-wrap justify-content-between grid formgrid p-fluid col-12 m-0 mb-2\"\n [style.padding.rem]=\"0.1\"\n >\n <div class=\"col-12 flex flex-column\">\n @if (config.title) {\n <div class=\"text-md font-bold my-3\">\n {{ config.title }}\n </div>\n } @if (config.subtitle) {\n <div class=\"text-sm mb-4 font-medium\">\n {{ config.subtitle }}\n </div>\n }\n </div>\n\n <div\n class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\n widthPage() < 768 ? 'col-10' : 'col-12'\n }} gap-1 p-0\"\n >\n @if (config.enableFilter) {\n <input\n pInputText\n pAutoFocus\n [autofocus]=\"widthPage() > 800\"\n type=\"text\"\n (input)=\"onGlobalFilter(dt, $event)\"\n [placeholder]=\"searchPlaceholder\"\n autocomplete=\"off\"\n #inputField\n class=\"text-sm col-6\"\n />\n } @if(filterColumnsBtn) {\n <div #botaoFiltro>\n <kv-button\n id=\"botaoFiltro\"\n [icon]=\"'align_vertical_top'\"\n (onClick)=\"abrirMenuFiltro($event)\"\n severity=\"tertiary\"\n pTooltip=\"Ocultar/Exibir colunas\"\n size=\"small\"\n >\n </kv-button>\n </div>\n\n <div\n #menuFiltroDiv\n id=\"menuFiltroDiv\"\n [style.visibility]=\"'hidden'\"\n class=\"absolute z-4 bg-gray-200 menu-columns-filtro\"\n >\n <p-card styleClass=\"p-1\">\n <div\n class=\"flex flex-column text-medium w-15rem p-1\"\n *ngFor=\"let col of columnsFilter()\"\n >\n {{ checkMenuFiltro(col) }}\n <p-checkbox\n #filterColumns\n [label]=\"col.header\"\n [binary]=\"true\"\n class=\"checkbox-container\"\n (onChange)=\"dinamicColumnSet($event, col)\"\n [(ngModel)]=\"col.checked\"\n *ngIf=\"!dinamicDisableColumn(col)\"\n ></p-checkbox>\n </div>\n </p-card>\n </div>\n } @if(filterButton()) {\n <p-button\n styleClass=\"kv-button small tertiary text-xs font-medium\"\n label=\"Filtrar\"\n icon=\"pi pi-filter\"\n [badge]=\"filterButtonBadge()\"\n badgeClass=\"text-gray-800\"\n class=\"text-xs\"\n (onClick)=\"op.toggle($event)\"\n ></p-button>\n }\n\n <p-overlayPanel #op>\n <ng-content select=\"[filtro]\"> </ng-content>\n </p-overlayPanel>\n </div>\n\n <div class=\"flex flex-row col-2 justify-content-end gap-2 p-0\">\n @for (action of config.actionsLote; track i; let i = $index) {\n <div class=\"flex align-items-center justify-content-center\">\n @if ((((selectedItems && selectedItems.length > 0) || action.showAcoesLote)) &&\n (getOrExecute(action.visible, selectedItems) ?? true)) {\n <kv-button\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\n [tooltipPosition]=\"'left'\"\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\n [severity]=\"action.severity || 'tertiary'\"\n size=\"small\"\n [label]=\"getOrExecute(action.label, selectedItems) || ''\"\n [items]=\"action.items || []\"\n [popup]=\"(action.items && action.items.length > 0) || false\"\n />\n }\n </div>\n }\n </div>\n </div>\n </ng-template>\n }\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n @if (enableDragDrop) {\n <th style=\"width: 40px; text-align: center;\" class=\"drag-handle-header\">\n </th>\n }\n @if (config.enableSelect) {\n <th>\n <p-tableHeaderCheckbox\n (click)=\"activeItemLote(selectedItems)\"\n [disabled]=\"disabledHeaderCheckbox\"\n ></p-tableHeaderCheckbox>\n </th>\n } @for (col of columns; track $index) {\n <th\n [pSortableColumn]=\"col.field\"\n [pSortableColumnDisabled]=\"col.sortable === false\"\n [style.width]=\"col.width\"\n >\n <div\n class=\"flex flex-row align-items-center {{\n col?.centralize && 'justify-content-center'\n }}\"\n >\n <span class=\"text-xs font-semibold\">{{ col.header }}</span>\n @if (col.sortable) {\n <p-sortIcon [field]=\"col.field\" class=\"pb-1\"></p-sortIcon>\n } @if (col.headerTooltip) {\n <span\n class=\"material-symbols-outlined flex align-items-center\"\n [pTooltip]=\"col.headerTooltip\"\n >info</span\n >\n }\n </div>\n </th>\n } @if (config.actions && config.actions.length > 0) {\n <th></th>\n }\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-rowData\n let-columns=\"columns\"\n let-rowgroup=\"rowgroup\"\n let-rowspan=\"rowspan\"\n let-rowIndex=\"rowIndex\"\n >\n <tr\n cdkDrag\n cdkDragLockAxis=\"y\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [cdkDragDisabled]=\"!enableDragDrop || dragDropDisabled(rowData)\"\n [cdkDragData]=\"selectedItems\"\n\n (dblclick)=\"doubleClick($event, rowData)\"\n [ngClass]=\"{\n capitalize: tableCaptalized,\n last: rowIndex === dataSource.length - 1\n }\"\n class=\"tr-td {{ isDisabledRow(rowData) ? 'disabled-row' : '' }}\"\n >\n\n @if (enableDragDrop) {\n <td cdkDragHandle>\n <span class=\"material-symbols-outlined text-sm\">\n drag_indicator\n </span>\n </td>\n }\n\n @if (config.enableSelect) {\n <td style=\"width: 8px !important\">\n <p-tableCheckbox\n [value]=\"rowData\"\n [disabled]=\"isDisabledCheckbox(rowData)\"\n (click)=\"activeItemLote(selectedItems)\"\n ></p-tableCheckbox>\n </td>\n } @for (col of columns; track $index) {\n <ng-container>\n @if (rowgroup && !col.template) {\n <td\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\n class=\"{{\n col.styleClass\n ? col.styleClass(rowData, col, rowData[col.field])\n : ''\n }}\"\n >\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n @if (!isChipField(col) && !col.iconField && !isImageField(col) &&\n !isEmptyDataSource()) {\n <span\n class=\"flex flex-row gap-2 align-items-center {{\n col?.centralize && 'justify-content-center'\n }} text-xs {{ ellipsisText() && 'ellipsis-text' }}\"\n [pTooltip]=\"\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\n \"\n [tooltipPosition]=\"'bottom'\"\n [style.max-width]=\"\n ellipsisText() && returnMaxWidth()(col.width)\n \"\n >\n @if(col.tagColor) {\n <div\n class=\"tag\"\n [pTooltip]=\"\n col.tooltipTag &&\n col.tooltipTag(rowData, col, rowData[col.field])\n \"\n [style.background-color]=\"\n col.tagColor(rowData, col, rowData[col.field])\n \"\n ></div>\n\n } @if (col.icon) {\n <i [class]=\"col.icon + ' mr-2'\"></i>\n }\n {{ transformValue(rowData, col) }}\n </span>\n } @if (isChipField(col) && !col.iconField) {\n <div>\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n class=\"text-xs\"\n >{{ transformValue(rowData, col) }}</span\n >\n </div>\n } @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\n <div class=\"w-full\">\n @if(!isSwitchField(col)) {\n\n <div\n class=\"w-full flex {{\n col.centralize && 'justify-content-center'\n }}\"\n >\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n\n } @else {\n <div class=\"flex flex-row justify-content-center\">\n <div\n [style]=\"{\n height: '16.8px',\n width: '28.8px',\n 'border-radius': '30px'\n }\"\n >\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n }\n </div>\n }\n </span>\n\n @if (isImageField(col)) {\n <span>\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n } @if (col.iconField) {\n <i\n [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ returnClassIcon(rowData, col) }}\n </i>\n }\n\n <ng-template #booleanField>\n @if (!col.iconField && !isSwitchField(col)) {\n <div\n class=\"flex flex-row gap-2 align-items-center {{\n col?.centralize && 'justify-content-center'\n }}\"\n [pTooltip]=\"\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\n \"\n [tooltipPosition]=\"'bottom'\"\n >\n <i\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span\n class=\"material-symbols-outlined text-lg font-semibold\"\n >\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n </div>\n\n } @if (isSwitchField(col)) {\n <span\n [class]=\"\n returnRowClass(rowData, col) +\n ' flex flex-row align-items-center justify-content-center'\n \"\n style=\"height: 25px\"\n >\n @if(col.switchDisable){\n <kv-switch\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col.switchDisable(rowData, col)\"\n [switchValue]=\"transformValue(rowData, col)\"\n >\n </kv-switch>\n } @else {\n <kv-switch\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col?.onlyReadField ?? true\"\n [switchValue]=\"transformValue(rowData, col)\"\n >\n </kv-switch>\n }\n </span>\n } @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\n <div class=\"w-full\">\n @if(!isSwitchField(col)) {\n <div\n class=\"w-full flex {{\n col.centralize && 'justify-content-center'\n }}\"\n >\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n\n } @else {\n <div class=\"flex flex-row justify-content-center\">\n <div\n [style]=\"{\n height: '16.8px',\n width: '28.8px',\n 'border-radius': '30px'\n }\"\n >\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n }\n </div>\n }\n </ng-template>\n </td>\n } @if (!rowgroup && !col.grouped && !col.template) {\n <td\n #tableCell\n class=\"rowTable {{\n col.styleClass\n ? col.styleClass(rowData, col, rowData[col.field])\n : ''\n }} \"\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\n >\n @if(!isEmptyDataSource()) {\n\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"\n returnRowClass(rowData, col) +\n ' flex flex-row gap-2 align-items-center ' +\n (col?.centralize && 'justify-content-center')\n \"\n [pTooltip]=\"\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\n \"\n [tooltipPosition]=\"'bottom'\"\n [style.max-width]=\"ellipsisText() && returnMaxWidth()(col.width)\"\n >\n @if(col.tagColor) {\n <div\n class=\"tag\"\n [pTooltip]=\"\n col.tooltipTag &&\n col.tooltipTag(rowData, col, rowData[col.field])\n \"\n [style.background-color]=\"\n col.tagColor(rowData, col, rowData[col.field])\n \"\n ></div>\n\n } @if (!isChipField(col) && !col.iconField && !isImageField(col)){\n <span class=\"text-xs {{ ellipsisText() && 'ellipsis-text' }}\">\n @if (col.icon) {\n <i [class]=\"col.icon + ' mr-2'\"></i>\n }\n {{ transformValue(rowData, col) }}\n </span>\n } @if (isChipField(col) && !col.iconField) {\n <div>\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n class=\"text-xs\"\n >\n {{ transformValue(rowData, col) }}</span\n >\n </div>\n }\n </span>\n } @if (isImageField(col)) {\n <span>\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n } @if (col.iconField) {\n <i\n [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ returnClassIcon(rowData, col) }}\n </i>\n }\n\n <ng-template #booleanField>\n @if (!col.iconField && !isSwitchField(col)) {\n <div\n class=\"flex flex-row gap-2 align-items-center {{\n col?.centralize && 'justify-content-center'\n }}\"\n [pTooltip]=\"\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\n \"\n [tooltipPosition]=\"'bottom'\"\n >\n <i\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span\n class=\"material-symbols-outlined text-lg font-semibold\"\n >\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n </div>\n } @if (isSwitchField(col)) {\n\n <span\n [class]=\"\n returnRowClass(rowData, col) +\n ' flex flex-row align-items-center justify-content-center'\n \"\n style=\"height: 25px\"\n >\n @if(col.switchDisable){\n <kv-switch\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col.switchDisable(rowData, col)\"\n [switchValue]=\"transformValue(rowData, col)\"\n >\n </kv-switch>\n } @else {\n <kv-switch\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col?.onlyReadField ?? true\"\n [switchValue]=\"transformValue(rowData, col)\"\n >\n </kv-switch>\n }\n </span>\n }\n </ng-template>\n\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\n <div class=\"w-full\">\n @if(!isSwitchField(col)) {\n <div\n class=\"w-full flex {{\n col.centralize && 'justify-content-center'\n }}\"\n >\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n\n } @else {\n <div class=\"flex flex-row justify-content-center\">\n <div\n [style]=\"{\n height: '16.8px',\n width: '28.8px',\n 'border-radius': '30px'\n }\"\n >\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n }\n </div>\n }\n </td>\n } @if (col.template) {\n <td\n class=\"rowTable {{\n col.styleClass\n ? col.styleClass(rowData, col, rowData[col.field])\n : ''\n }} \"\n >\n @if (getCustomTemplate(col.template.name)) {\n\n <div\n class=\"flex flex-row gap-2 align-items-center {{\n col?.centralize && ' justify-content-center'\n }}\"\n [pTooltip]=\"\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\n \"\n [tooltipPosition]=\"'bottom'\"\n >\n @if(col.tagColor) {\n <div\n class=\"tag\"\n [pTooltip]=\"col.tooltipTag && col.tooltipTag(rowData, col)\"\n [style.background-color]=\"col.tagColor(rowData, col)\"\n ></div>\n } @if(!isEmptyDataSource()) {\n\n <div class=\"w-full\">\n <ng-container\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\n />\n </div>\n }\n </div>\n\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\n <p-skeleton\n [width]=\"widthRandom()(col, rowIndex) + '%'\"\n ></p-skeleton>\n } }\n </td>\n }\n </ng-container>\n } @if (config.actions && config.actions.length > 0) {\n <td>\n <div class=\"flex flex-row justify-content-end w-full\">\n <span\n class=\"material-symbols-outlined cursor-pointer icon-more\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n >\n <!-- more_vert -->\n more_horiz\n </span>\n\n <p-tieredMenu\n #menu\n [popup]=\"true\"\n [model]=\"tableActions[rowIndex - actionsOffset]\"\n appendTo=\"body\"\n >\n <ng-template let-item pTemplate=\"item\">\n <div\n [pTooltip]=\"item.tooltip\"\n tooltipPosition=\"left\"\n class=\"cursor-pointer\"\n >\n <span class=\"text-xs\">\n {{ item.label }}\n </span>\n </div>\n </ng-template>\n </p-tieredMenu>\n <!-- <span pTooltip=\"{{ tableActions[rowIndex - actionsOffset][0]?.tooltip }}\" tooltipPosition=\"top\">a</span> -->\n </div>\n </td>\n }\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\" let-columns>\n <tr>\n <td\n [attr.colspan]=\"columns.length + (enableDragDrop ? 1 : 0) + (config.enableSelect ? 1 : 0) + (config.actions && config.actions.length > 0 ? 1 : 0)\"\n style=\"text-align: center; border-radius: 10px !important\"\n >\n <p class=\"font-medium m-0 text-xs\">Nenhum registro encontrado</p>\n </td>\n </tr>\n </ng-template>\n </p-table>\n }\n</div>\n\n<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\n/>\n\n<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\n/>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";::ng-deep :root{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255;--kv-primary-color: 41, 185, 45;--kv-secondary-color: 0, 37, 66;--kv-tertiary-color: 165, 165, 165;--kv-danger-color: 220, 53, 69;--kv-success-color: 75, 181, 67;--kv-info-color: 58, 170, 208;--kv-warn-color: 241, 90, 36;--kv-contrast-color: 33, 37, 41}::ng-deep .padrao{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-keevocenter{--kv-color-system: 88,25,153;--kv-color-system-cta: 0, 116, 217;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-holos{--kv-color-system: 241,90,36;--kv-color-system-cta: 224, 168, 35;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 240,240,240;--kv-background-card: 2255,255,255}.system-color{color:rgb(var(--kv-color-system),1)}.bg-system-100{background:rgb(var(--kv-color-system),1)}.bg-system-75{background:rgb(var(--kv-color-system),.75)}.bg-system-50{background:rgb(var(--kv-color-system),.5)}.bg-system-25{background:rgb(var(--kv-color-system),.25)}.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-icon,svg{height:.6rem}:host ::ng-deep .inputs{height:1.875rem}:host ::ng-deep .inputs,.p-inputtext,.p-inputtextarea{font-size:.875rem}::ng-deep .p-dialog .p-dialog-header{color:rgb(var(--kv-color-text))!important;background:linear-gradient(0deg,#00000005 .44%,#0000 49.5%),#fff!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word;border-bottom:1px solid rgb(var(--kv-color-text),.15)}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}::ng-deep .p-tooltip{font-size:.825rem!important}::ng-deep p-tablecheckbox p-tableheadercheckbox .p-checkbox{display:flex!important;align-items:center!important;justify-content:right}::ng-deep .p-checkbox{display:flex!important;align-items:center!important;justify-content:center}::ng-deep .kv-button .p-button-loading-icon svg{width:100%;height:100%;display:block}::ng-deep .kv-button .p-button-loading-icon svg g{transform:translate(0)}::ng-deep .kv-button{white-space:nowrap;border:none;padding:.4rem;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:.125rem}::ng-deep .kv-button .kv-button-label{font-weight:500}::ng-deep .small{height:1.625rem;min-width:1.625rem}::ng-deep .small .kv-button-label{font-size:.625rem}::ng-deep .small .kv-button-icon{font-size:.75rem}::ng-deep .small .p-button-loading-icon{width:.55rem;height:.55rem}::ng-deep .normal{height:1.875rem;min-width:1.875rem}::ng-deep .normal .kv-button-label{font-size:.825rem}::ng-deep .normal .kv-button-icon{font-size:1rem}::ng-deep .normal .p-button-loading-icon{width:.75rem;height:.75rem}::ng-deep .large{height:2.125rem;min-width:2.125rem}::ng-deep .large .kv-button-label{font-size:1rem}::ng-deep .large .kv-button-icon{font-size:1.25rem}::ng-deep .large .p-button-loading-icon{width:.875rem;height:.875rem}::ng-deep .primary{background-color:rgb(var(--kv-primary-color))}::ng-deep .primary:hover{background-color:rgba(var(--kv-primary-color),.8)}::ng-deep .primary:active{background-color:rgba(var(--kv-primary-color),.95)}.primary.outline{border:solid .5px rgb(var(--kv-primary-color));background-color:#fff;color:rgb(var(--kv-primary-color))}.primary.outline:hover{background-color:rgb(var(--kv-primary-color));color:#fff}.primary.outline:active{background-color:rgba(var(--kv-primary-color),.8)}.primary.text{opacity:.9;background-color:transparent;color:rgb(var(--kv-primary-color))}.primary.text:hover{background-color:rgba(var(--kv-primary-color),.1)}.primary.text:active{background-color:rgba(var(--kv-primary-color),.2)}::ng-deep .secondary{background-color:rgb(var(--kv-secondary-color))}::ng-deep .secondary:hover{background-color:rgba(var(--kv-secondary-color),.8)}::ng-deep .secondary:active{background-color:rgba(var(--kv-secondary-color),.95)}.secondary.outline{border:solid .5px rgb(var(--kv-secondary-color));background-color:#fff;color:rgb(var(--kv-secondary-color))}.secondary.outline:hover{background-color:rgb(var(--kv-secondary-color));color:#fff}.secondary.outline:active{background-color:rgba(var(--kv-secondary-color),.8)}.secondary.text{background-color:transparent;color:rgb(var(--kv-secondary-color))}.secondary.text:hover{background-color:rgba(var(--kv-secondary-color),.1)}.secondary.text:active{background-color:rgba(var(--kv-secondary-color),.2)}::ng-deep .tertiary{color:#212121;background-color:rgba(var(--kv-tertiary-color),.3)}::ng-deep .tertiary:hover{background-color:rgba(var(--kv-tertiary-color),.8)}::ng-deep .tertiary:active{background-color:rgba(var(--kv-tertiary-color),.95)}.tertiary.outline{border:solid .5px rgb(var(--kv-tertiary-color));background-color:#fff;color:rgb(var(--kv-tertiary-color))}.tertiary.outline:hover{background-color:rgb(var(--kv-tertiary-color));color:#fff}.tertiary.outline:active{background-color:rgba(var(--kv-tertiary-color),.8)}.tertiary.text{background-color:transparent;color:rgb(var(--kv-tertiary-color))}.tertiary.text:hover{background-color:rgba(var(--kv-tertiary-color),.1)}.tertiary.text:active{background-color:rgba(var(--kv-tertiary-color),.2)}::ng-deep .danger{background-color:rgb(var(--kv-danger-color))}::ng-deep .danger:hover{background-color:rgba(var(--kv-danger-color),.8)}::ng-deep .danger:active{background-color:rgba(var(--kv-danger-color),.95)}::ng-deep .danger.outline{border:solid .5px rgb(var(--kv-danger-color));background-color:#fff;color:rgb(var(--kv-danger-color))}::ng-deep .danger.outline:hover{background-color:rgb(var(--kv-danger-color));color:#fff}::ng-deep .danger.outline:active{background-color:rgba(var(--kv-danger-color),.8)}::ng-deep .danger.text{background-color:transparent;color:rgb(var(--kv-danger-color))}::ng-deep .danger.text:hover{background-color:rgba(var(--kv-danger-color),.1)}::ng-deep .danger.text:active{background-color:rgba(var(--kv-danger-color),.2)}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar{width:6px}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-datatable>.p-datatable-wrapper:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.tag{width:5px;height:20px;border-radius:.25rem}::ng-deep .p-panel .p-panel-header{border:none!important}:host ::ng-deep .p-datatable-header{padding:0!important;border-radius:5px!important;background-color:transparent;border:none}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{padding:.15rem;background-color:rgba(var(--kv-color-system),.05);color:rgba(var(--kv-color-text),.6)}::ng-deep .p-datatable-table{border:1px solid rgba(var(--kv-color-system),.1);border-radius:.5rem;overflow:hidden;color:rgb(var(--kv-color-system))}.icon-more{font-weight:500;font-size:1.4rem!important;color:rgb(var(--kv-color-system),.75);transition:all .4s}.icon-more:hover,.icon-more:focus{color:#5e5e5e;transition:color .3s,transform .3s;background-color:#eaeaea;border-radius:50%}.tr-td{overflow-wrap:anywhere}.tr-td:hover{box-shadow:#3c40434d 0 1px 2px,#3c404326 0 2px 6px 2px;background-color:#fff;transition:color .3s,transform .3s;transform:scale(1)}.tr-td:hover.last{box-shadow:-1px -1px 9px -3px #000000bf;-webkit-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75);-moz-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75)}.disabled-row{pointer-events:none;opacity:.6;background-color:#dddddd8e}::ng-deep .p-tooltip{pointer-events:auto}.btn-table{background-color:#29b92d;padding:12px}.btn-table:hover{background-color:#249a29}.btn-table:active{background-color:#1c801f}.btn-table:disabled{background-color:#29b92d}::ng-deep svg.p-icon{width:.65rem;height:.65rem}::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#004172;background:#004172}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}input{height:1.75rem}::ng-deep .p-checkbox .p-checkbox-box{width:1.125rem;height:1.125rem;border:1.5px solid #d1d5db}::ng-deep .p-checkbox{display:flex!important;align-items:center!important;justify-content:right;width:1.625rem!important;height:1.125rem}::ng-deep .p-checkbox-label{font-size:.875rem}::ng-deep .p-datatable .p-paginator-bottom{border:solid #ffffff;scale:.75}::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>div>tr>td{padding:.1rem}::ng-deep .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:.25rem!important}::ng-deep .p-dropdown-panel .p-dropdown-items{padding:.5rem!important}::ng-deep .p-button-label{font-weight:500!important}::ng-deep .p-button .p-button-icon-left{margin-left:.25rem;margin-right:.25rem;font-size:.675rem!important}:host{height:100%}::ng-deep .kv-table-container,::ng-deep p-table{height:100%}::ng-deep p-table .p-datatable{display:flex;flex-direction:column;height:100%}::ng-deep .p-datatable .p-datatable-wrapper{flex:1 1 1}::ng-deep p-table .p-datatable .p-datatable-wrapper,::ng-deep p-table{height:100%}::ng-deep table{height:auto!important}.ellipsis-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;display:inline-block}::ng-deep .p-tieredmenu{padding:.5rem!important}:host ::ng-deep .p-disabled *{pointer-events:auto!important}::ng-deep p-tieredmenusub .p-disabled *:active{pointer-events:none!important;font-size:.75rem!important;padding:.5rem!important}::ng-deep .p-tieredmenu .p-tieredmenu-root-list{font-size:.75rem!important}::ng-deep .p-tieredmenu .p-menuitem>.p-menuitem-content{padding:.5rem}.td-drag-container{cursor:move;font-weight:700}.td-drag-container:active{cursor:grabbing}::ng-deep .drag-handle-header{padding:.5rem!important;text-align:center!important;vertical-align:middle!important;background-color:rgba(var(--kv-color-system),.05)!important}::ng-deep .drag-handle-header .material-symbols-outlined{color:rgba(var(--kv-color-system),.4);font-size:1rem}::ng-deep td[cdkdraghandle]{cursor:grab;padding:.5rem!important;text-align:center!important;vertical-align:middle!important;width:40px!important;min-width:40px!important;max-width:40px!important}::ng-deep td[cdkdraghandle]:hover{background-color:rgba(var(--kv-color-system),.05);transition:background-color .2s ease}::ng-deep td[cdkdraghandle]:active{cursor:grabbing;background-color:rgba(var(--kv-color-system),.1)}::ng-deep td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.6);font-size:1.1rem;transition:color .2s ease,transform .2s ease;display:block}::ng-deep td[cdkdraghandle] .material-symbols-outlined:hover{color:rgba(var(--kv-color-system),.8);transform:scale(1.1)}::ng-deep .cdk-drop-list{width:100%!important}::ng-deep .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1);cursor:grab}::ng-deep .cdk-drag:hover{background-color:rgba(var(--kv-color-system),.02);box-shadow:0 2px 4px #0000001a}::ng-deep .cdk-drag.cdk-drag-dragging{opacity:.4;transform:none!important;position:relative!important}::ng-deep .cdk-drag:active{cursor:grabbing}::ng-deep .cdk-drag:active:hover{box-shadow:none}::ng-deep .cdk-drag-animating{transition:transform .3s cubic-bezier(.25,.8,.25,1)}::ng-deep .cdk-drop-list:not(.cdk-drop-list-dragging) .cdk-drag{transition:all .3s cubic-bezier(.25,.8,.25,1)}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .cdk-drop-list-dragging tr:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1);opacity:.8}::ng-deep .cdk-drop-list-dragging .cdk-drag:not(.cdk-drag-placeholder){opacity:.6}::ng-deep .cdk-drag-placeholder{opacity:.3;background:rgba(var(--kv-color-system),.05);border:2px dashed rgba(var(--kv-color-system),.3);border-radius:4px;height:48px;margin:2px 0;transition:all .3s ease;display:table-row}::ng-deep .cdk-drag-placeholder:hover{background:rgba(var(--kv-color-system),.1);border-color:rgba(var(--kv-color-system),.5)}::ng-deep .cdk-drag-placeholder.cdk-drop-list-receiving{background:#00ff001a;border-color:#00ff0080;border-style:solid}::ng-deep .cdk-drag-preview{display:none!important;box-sizing:border-box;border-radius:8px;box-shadow:0 8px 25px #00000026,0 4px 10px #0000001a;background:#fff;border:1px solid rgba(var(--kv-color-system),.2);opacity:0;z-index:1000;overflow:hidden;visibility:hidden;transition:opacity .2s ease-out;max-width:90vw;position:absolute;animation:dragPreviewFadeIn .2s ease-out}::ng-deep .cdk-drag-preview table{width:100%;border-collapse:collapse;margin:0;background:transparent;border:none!important;border-radius:inherit}::ng-deep .cdk-drag-preview table tbody tr{background:transparent;border:none}::ng-deep .cdk-drag-preview table tbody tr:hover{background:transparent!important;box-shadow:none!important;transform:none!important}::ng-deep .cdk-drag-preview table td{border:none!important;background:transparent!important;white-space:nowrap!important;vertical-align:middle!important;font-size:.75rem!important;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;pointer-events:none;padding:.375rem .5rem!important;border-right:none!important;border-left:none!important}::ng-deep .cdk-drag-preview table td:first-child{border-radius:8px 0 0 8px}::ng-deep .cdk-drag-preview table td:last-child{border-radius:0 8px 8px 0}::ng-deep .cdk-drag-preview table td:not(:first-child):not(:last-child){flex-grow:1;flex-basis:0}::ng-deep .cdk-drag-preview table td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.8)!important;font-weight:700!important;font-size:1rem!important}::ng-deep .cdk-drag-preview table td p-checkbox,::ng-deep .cdk-drag-preview table td p-tableCheckbox,::ng-deep .cdk-drag-preview table td p-tableHeaderCheckbox,::ng-deep .cdk-drag-preview table td kv-switch{pointer-events:none;opacity:.7}::ng-deep .cdk-drag-preview table td button,::ng-deep .cdk-drag-preview table td .kv-button,::ng-deep .cdk-drag-preview table td .icon-more{pointer-events:none;opacity:.6}::ng-deep .cdk-drag-preview table td img{max-width:30px;max-height:30px;object-fit:cover}::ng-deep .cdk-drag-preview table td .p-chip,::ng-deep .cdk-drag-preview table td .p-badge{font-size:.7rem!important;padding:.2rem .4rem!important}@media (max-width: 768px){::ng-deep .cdk-drag-preview{transform:rotate(1deg);max-width:95vw}::ng-deep .cdk-drag-preview table{height:100%!important}::ng-deep .cdk-drag-preview table tbody tr{height:100%;flex-direction:column}::ng-deep .cdk-drag-preview table td{width:100%!important}::ng-deep .cdk-drag-preview table td span{max-width:100%!important;justify-content:start!important}::ng-deep .cdk-drag-preview table td{padding:.25rem .375rem!important;font-size:.7rem!important}::ng-deep .cdk-drag-preview table td[cdkdraghandle] .material-symbols-outlined{font-size:.9rem!important}}::ng-deep .cdk-drag-preview:not(.ready):not(.initializing){opacity:0!important;visibility:hidden!important;transform:scale(0)!important}::ng-deep .cdk-drag-preview.initializing{opacity:0!important;visibility:hidden!important}::ng-deep .cdk-drag-preview.ready{opacity:.95!important;visibility:visible!important;transition:opacity .2s ease-out!important}::ng-deep .cdk-drag-preview.ready table{transform:rotate(1.5deg)}@keyframes dragPreviewFadeIn{0%{opacity:0;visibility:hidden}to{opacity:.95;visibility:visible}}::ng-deep tr.cdk-drag-dragging{display:flex!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle]{cursor:not-allowed!important;opacity:.5}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle]:hover{background-color:transparent!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.3)!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle] .material-symbols-outlined:hover{transform:none!important;color:rgba(var(--kv-color-system),.3)!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: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i5.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { 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.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i8.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }, { kind: "component", type: i9.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "directive", type: i10.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i11.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i12.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i12.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i12.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i13.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i14.TieredMenu, selector: "p-tieredMenu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "autoDisplay", "showTransitionOptions", "hideTransitionOptions", "id", "ariaLabel", "ariaLabelledBy", "disabled", "tabindex"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i15.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: i15.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i15.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i15.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i15.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i16.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i16.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i17.KvSwitchComponent, selector: "kv-switch", inputs: ["readonly", "switchValue"], outputs: ["onSwitchChange"] }, { kind: "component", type: i18.KvButtonComponent, selector: "kv-button", inputs: ["fullWidth", "type", "loading", "severity", "size", "icon", "iconPosition", "label", "disabled", "items", "popup", "popupIcon"], outputs: ["iconChange", "onClick"] }] }); }
727
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.8", type: KvTableDraggableComponent, selector: "kv-table-draggable", inputs: { first: { classPropertyName: "first", publicName: "first", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, ellipsisText: { classPropertyName: "ellipsisText", publicName: "ellipsisText", isSignal: true, isRequired: false, transformFunction: null }, isLoadingSkeleton: { classPropertyName: "isLoadingSkeleton", publicName: "isLoadingSkeleton", isSignal: true, isRequired: false, transformFunction: null }, filterButton: { classPropertyName: "filterButton", publicName: "filterButton", isSignal: true, isRequired: false, transformFunction: null }, filterButtonBadge: { classPropertyName: "filterButtonBadge", publicName: "filterButtonBadge", isSignal: true, isRequired: false, transformFunction: null }, _templates: { classPropertyName: "_templates", publicName: "templates", isSignal: false, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: false, isRequired: false, transformFunction: null }, defaultSortField: { classPropertyName: "defaultSortField", publicName: "defaultSortField", isSignal: false, isRequired: false, transformFunction: null }, dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: false, isRequired: false, transformFunction: null }, selectedItems: { classPropertyName: "selectedItems", publicName: "selectedItems", isSignal: false, isRequired: false, transformFunction: null }, totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: false, isRequired: false, transformFunction: null }, paginator: { classPropertyName: "paginator", publicName: "paginator", isSignal: false, isRequired: false, transformFunction: null }, rowsPerPageOptions: { classPropertyName: "rowsPerPageOptions", publicName: "rowsPerPageOptions", isSignal: false, isRequired: false, transformFunction: null }, tableSize: { classPropertyName: "tableSize", publicName: "tableSize", isSignal: false, isRequired: false, transformFunction: null }, filterColumnsBtn: { classPropertyName: "filterColumnsBtn", publicName: "filterColumnsBtn", isSignal: false, isRequired: false, transformFunction: null }, replaceEmptyValues: { classPropertyName: "replaceEmptyValues", publicName: "replaceEmptyValues", isSignal: false, isRequired: false, transformFunction: null }, filtrosAvancados: { classPropertyName: "filtrosAvancados", publicName: "filtrosAvancados", isSignal: false, isRequired: false, transformFunction: null }, scrollHeight: { classPropertyName: "scrollHeight", publicName: "scrollHeight", isSignal: false, isRequired: false, transformFunction: null }, isTableScrollable: { classPropertyName: "isTableScrollable", publicName: "isTableScrollable", isSignal: false, isRequired: false, transformFunction: null }, tableCaptalized: { classPropertyName: "tableCaptalized", publicName: "tableCaptalized", isSignal: false, isRequired: false, transformFunction: null }, rowTrackBy: { classPropertyName: "rowTrackBy", publicName: "rowTrackBy", isSignal: false, isRequired: false, transformFunction: null }, responsiveLayout: { classPropertyName: "responsiveLayout", publicName: "responsiveLayout", isSignal: false, isRequired: false, transformFunction: null }, disabledHeaderCheckbox: { classPropertyName: "disabledHeaderCheckbox", publicName: "disabledHeaderCheckbox", isSignal: false, isRequired: false, transformFunction: null }, enableDragDrop: { classPropertyName: "enableDragDrop", publicName: "enableDragDrop", isSignal: false, isRequired: false, transformFunction: null }, dragDropDisabled: { classPropertyName: "dragDropDisabled", publicName: "dragDropDisabled", isSignal: false, isRequired: false, transformFunction: null }, applyStyle: { classPropertyName: "applyStyle", publicName: "applyStyle", isSignal: false, isRequired: false, transformFunction: null }, pageLinksOptions: { classPropertyName: "pageLinksOptions", publicName: "pageLinksOptions", isSignal: false, isRequired: false, transformFunction: null }, showFirstLastIcon: { classPropertyName: "showFirstLastIcon", publicName: "showFirstLastIcon", isSignal: false, isRequired: false, transformFunction: null }, setConfig: { classPropertyName: "setConfig", publicName: "config", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { first: "firstChange", rows: "rowsChange", onActiveItem: "onActiveItem", onActiveItemLote: "onActiveItemLote", onPaginate: "onPaginate", onSelectionChange: "onSelectionChange", doubleClickEvent: "doubleClickEvent", filterField: "filterField", onSwitchTableChange: "onSwitchTableChange", onRowReorder: "onRowReorder" }, host: { listeners: { "window:resize": "onWindowResize($event)", "document:keydown.escape": "onEscapeKey($event)", "document:click": "onClickEvent($event)" } }, queries: [{ propertyName: "templates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "tableCell", first: true, predicate: ["tableCell"], descendants: true, isSignal: true }, { propertyName: "menuFiltroDiv", first: true, predicate: ["menuFiltroDiv"], descendants: true }, { propertyName: "botaoFiltro", first: true, predicate: ["botaoFiltro"], descendants: true }, { propertyName: "inputField", first: true, predicate: ["inputField"], descendants: true }, { propertyName: "table", first: true, predicate: ["table"], descendants: true }, { propertyName: "ptable", first: true, predicate: Table, descendants: true }], ngImport: i0, template: "<div class=\"kv-table-container\">\r\n @if (config) {\r\n <p-table\r\n #dt\r\n #table\r\n styleClass=\"p-datatable-sm\"\r\n [value]=\"dataSource\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [columns]=\"config.columns\"\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 [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n [first]=\"first()\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n (onSort)=\"onSort($event)\"\r\n (onPage)=\"onPage($event)\"\r\n rowGroupMode=\"rowspan\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n [showFirstLastIcon]=\"widthPage() > 960 ? true : false\"\r\n [pageLinks]=\"widthPage() > 960 ? 2 : 1\"\r\n [responsive]=\"true\"\r\n [responsiveLayout]=\"responsiveLayout ? 'stack' : ''\"\r\n [scrollable]=\"isTableScrollable\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [rowTrackBy]=\"rowTrackBy\"\r\n\r\n cdkDropList\r\n [cdkDropListData]=\"currentPageData()\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n cdkDropListOrientation=\"vertical\"\r\n >\r\n @if (config.enableCation) {\r\n <ng-template pTemplate=\"caption\">\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between grid formgrid p-fluid col-12 m-0 mb-2\"\r\n [style.padding.rem]=\"0.1\"\r\n >\r\n <div class=\"col-12 flex flex-column\">\r\n @if (config.title) {\r\n <div class=\"text-md font-bold my-3\">\r\n {{ config.title }}\r\n </div>\r\n } @if (config.subtitle) {\r\n <div class=\"text-sm mb-4 font-medium\">\r\n {{ config.subtitle }}\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\r\n widthPage() < 768 ? 'col-10' : 'col-12'\r\n }} gap-1 p-0\"\r\n >\r\n @if (config.enableFilter) {\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"widthPage() > 800\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(dt, $event)\"\r\n [placeholder]=\"searchPlaceholder\"\r\n autocomplete=\"off\"\r\n #inputField\r\n class=\"text-sm col-6\"\r\n />\r\n } @if(filterColumnsBtn) {\r\n <div #botaoFiltro>\r\n <kv-button\r\n id=\"botaoFiltro\"\r\n [icon]=\"'align_vertical_top'\"\r\n (onClick)=\"abrirMenuFiltro($event)\"\r\n severity=\"tertiary\"\r\n pTooltip=\"Ocultar/Exibir colunas\"\r\n size=\"small\"\r\n >\r\n </kv-button>\r\n </div>\r\n\r\n <div\r\n #menuFiltroDiv\r\n id=\"menuFiltroDiv\"\r\n [style.visibility]=\"'hidden'\"\r\n class=\"absolute z-4 bg-gray-200 menu-columns-filtro\"\r\n >\r\n <p-card styleClass=\"p-1\">\r\n <div\r\n class=\"flex flex-column text-medium w-15rem p-1\"\r\n *ngFor=\"let col of columnsFilter()\"\r\n >\r\n {{ checkMenuFiltro(col) }}\r\n <p-checkbox\r\n #filterColumns\r\n [label]=\"col.header\"\r\n [binary]=\"true\"\r\n class=\"checkbox-container\"\r\n (onChange)=\"dinamicColumnSet($event, col)\"\r\n [(ngModel)]=\"col.checked\"\r\n *ngIf=\"!dinamicDisableColumn(col)\"\r\n ></p-checkbox>\r\n </div>\r\n </p-card>\r\n </div>\r\n } @if(filterButton()) {\r\n <p-button\r\n styleClass=\"kv-button small tertiary text-xs font-medium\"\r\n label=\"Filtrar\"\r\n icon=\"pi pi-filter\"\r\n [badge]=\"filterButtonBadge()\"\r\n badgeClass=\"text-gray-800\"\r\n class=\"text-xs\"\r\n (onClick)=\"op.toggle($event)\"\r\n ></p-button>\r\n }\r\n\r\n <p-overlayPanel #op>\r\n <ng-content select=\"[filtro]\"> </ng-content>\r\n </p-overlayPanel>\r\n </div>\r\n\r\n <div class=\"flex flex-row col-2 justify-content-end gap-2 p-0\">\r\n @for (action of config.actionsLote; track i; let i = $index) {\r\n <div class=\"flex align-items-center justify-content-center\">\r\n @if ((((selectedItems && selectedItems.length > 0) || action.showAcoesLote)) &&\r\n (getOrExecute(action.visible, selectedItems) ?? true)) {\r\n <kv-button\r\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\r\n [tooltipPosition]=\"'left'\"\r\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\r\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\r\n [severity]=\"action.severity || 'tertiary'\"\r\n size=\"small\"\r\n [label]=\"getOrExecute(action.label, selectedItems) || ''\"\r\n [items]=\"action.items || []\"\r\n [popup]=\"(action.items && action.items.length > 0) || false\"\r\n />\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n }\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @if (enableDragDrop) {\r\n <th style=\"width: 40px; text-align: center;\" class=\"drag-handle-header\">\r\n </th>\r\n }\r\n @if (config.enableSelect) {\r\n <th>\r\n <p-tableHeaderCheckbox\r\n (click)=\"activeItemLote(selectedItems)\"\r\n [disabled]=\"disabledHeaderCheckbox\"\r\n ></p-tableHeaderCheckbox>\r\n </th>\r\n } @for (col of columns; track $index) {\r\n <th\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.width]=\"col.width\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <span class=\"text-xs font-semibold\">{{ col.header }}</span>\r\n @if (col.sortable) {\r\n <p-sortIcon [field]=\"col.field\" class=\"pb-1\"></p-sortIcon>\r\n } @if (col.headerTooltip) {\r\n <span\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span\r\n >\r\n }\r\n </div>\r\n </th>\r\n } @if (config.actions && config.actions.length > 0) {\r\n <th></th>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowData\r\n let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\"\r\n let-rowspan=\"rowspan\"\r\n let-rowIndex=\"rowIndex\"\r\n >\r\n <tr\r\n cdkDrag\r\n cdkDragLockAxis=\"y\"\r\n (cdkDragStarted)=\"onDragStarted($event)\"\r\n (cdkDragEnded)=\"onDragEnded()\"\r\n [cdkDragDisabled]=\"!enableDragDrop || dragDropDisabled(rowData)\"\r\n [cdkDragData]=\"selectedItems\"\r\n\r\n (dblclick)=\"doubleClick($event, rowData)\"\r\n [ngClass]=\"{\r\n capitalize: tableCaptalized,\r\n last: rowIndex === dataSource.length - 1\r\n }\"\r\n class=\"tr-td {{ isDisabledRow(rowData) ? 'disabled-row' : '' }}\"\r\n >\r\n\r\n @if (enableDragDrop) {\r\n <td cdkDragHandle>\r\n <span class=\"material-symbols-outlined text-sm\">\r\n drag_indicator\r\n </span>\r\n </td>\r\n }\r\n\r\n @if (config.enableSelect) {\r\n <td style=\"width: 8px !important\">\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 } @for (col of columns; track $index) {\r\n <ng-container>\r\n @if (rowgroup && !col.template) {\r\n <td\r\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n class=\"{{\r\n col.styleClass\r\n ? col.styleClass(rowData, col, rowData[col.field])\r\n : ''\r\n }}\"\r\n >\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n @if (!isChipField(col) && !col.iconField && !isImageField(col) &&\r\n !isEmptyDataSource()) {\r\n <span\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }} text-xs {{ ellipsisText() && 'ellipsis-text' }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.max-width]=\"\r\n ellipsisText() && returnMaxWidth()(col.width)\r\n \"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"\r\n col.tooltipTag &&\r\n col.tooltipTag(rowData, col, rowData[col.field])\r\n \"\r\n [style.background-color]=\"\r\n col.tagColor(rowData, col, rowData[col.field])\r\n \"\r\n ></div>\r\n\r\n } @if (col.icon) {\r\n <i [class]=\"col.icon + ' mr-2'\"></i>\r\n }\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n } @if (isChipField(col) && !col.iconField) {\r\n <div>\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n class=\"text-xs\"\r\n >{{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n } @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <div class=\"w-full\">\r\n @if(!isSwitchField(col)) {\r\n\r\n <div\r\n class=\"w-full flex {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n } @else {\r\n <div class=\"flex flex-row justify-content-center\">\r\n <div\r\n [style]=\"{\r\n height: '16.8px',\r\n width: '28.8px',\r\n 'border-radius': '30px'\r\n }\"\r\n >\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </span>\r\n\r\n @if (isImageField(col)) {\r\n <span>\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n } @if (col.iconField) {\r\n <i\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n }\r\n\r\n <ng-template #booleanField>\r\n @if (!col.iconField && !isSwitchField(col)) {\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n >\r\n <i\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span\r\n class=\"material-symbols-outlined text-lg font-semibold\"\r\n >\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </div>\r\n\r\n } @if (isSwitchField(col)) {\r\n <span\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row align-items-center justify-content-center'\r\n \"\r\n style=\"height: 25px\"\r\n >\r\n @if(col.switchDisable){\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col.switchDisable(rowData, col)\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n } @else {\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n }\r\n </span>\r\n } @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <div class=\"w-full\">\r\n @if(!isSwitchField(col)) {\r\n <div\r\n class=\"w-full flex {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n } @else {\r\n <div class=\"flex flex-row justify-content-center\">\r\n <div\r\n [style]=\"{\r\n height: '16.8px',\r\n width: '28.8px',\r\n 'border-radius': '30px'\r\n }\"\r\n >\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </ng-template>\r\n </td>\r\n } @if (!rowgroup && !col.grouped && !col.template) {\r\n <td\r\n #tableCell\r\n class=\"rowTable {{\r\n col.styleClass\r\n ? col.styleClass(rowData, col, rowData[col.field])\r\n : ''\r\n }} \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n @if(!isEmptyDataSource()) {\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row gap-2 align-items-center ' +\r\n (col?.centralize && 'justify-content-center')\r\n \"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.max-width]=\"ellipsisText() && returnMaxWidth()(col.width)\"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"\r\n col.tooltipTag &&\r\n col.tooltipTag(rowData, col, rowData[col.field])\r\n \"\r\n [style.background-color]=\"\r\n col.tagColor(rowData, col, rowData[col.field])\r\n \"\r\n ></div>\r\n\r\n } @if (!isChipField(col) && !col.iconField && !isImageField(col)){\r\n <span class=\"text-xs {{ ellipsisText() && 'ellipsis-text' }}\">\r\n @if (col.icon) {\r\n <i [class]=\"col.icon + ' mr-2'\"></i>\r\n }\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n } @if (isChipField(col) && !col.iconField) {\r\n <div>\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n class=\"text-xs\"\r\n >\r\n {{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n }\r\n </span>\r\n } @if (isImageField(col)) {\r\n <span>\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n } @if (col.iconField) {\r\n <i\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n }\r\n\r\n <ng-template #booleanField>\r\n @if (!col.iconField && !isSwitchField(col)) {\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n >\r\n <i\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span\r\n class=\"material-symbols-outlined text-lg font-semibold\"\r\n >\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </div>\r\n } @if (isSwitchField(col)) {\r\n\r\n <span\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row align-items-center justify-content-center'\r\n \"\r\n style=\"height: 25px\"\r\n >\r\n @if(col.switchDisable){\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col.switchDisable(rowData, col)\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n } @else {\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n }\r\n </span>\r\n }\r\n </ng-template>\r\n\r\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <div class=\"w-full\">\r\n @if(!isSwitchField(col)) {\r\n <div\r\n class=\"w-full flex {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n } @else {\r\n <div class=\"flex flex-row justify-content-center\">\r\n <div\r\n [style]=\"{\r\n height: '16.8px',\r\n width: '28.8px',\r\n 'border-radius': '30px'\r\n }\"\r\n >\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </td>\r\n } @if (col.template) {\r\n <td\r\n class=\"rowTable {{\r\n col.styleClass\r\n ? col.styleClass(rowData, col, rowData[col.field])\r\n : ''\r\n }} \"\r\n >\r\n @if (getCustomTemplate(col.template.name)) {\r\n\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && ' justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"col.tooltipTag && col.tooltipTag(rowData, col)\"\r\n [style.background-color]=\"col.tagColor(rowData, col)\"\r\n ></div>\r\n } @if(!isEmptyDataSource()) {\r\n\r\n <div class=\"w-full\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <p-skeleton\r\n [width]=\"widthRandom()(col, rowIndex) + '%'\"\r\n ></p-skeleton>\r\n } }\r\n </td>\r\n }\r\n </ng-container>\r\n } @if (config.actions && config.actions.length > 0) {\r\n <td>\r\n <div class=\"flex flex-row justify-content-end w-full\">\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n <!-- more_vert -->\r\n more_horiz\r\n </span>\r\n\r\n <p-tieredMenu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"tableActions[rowIndex - actionsOffset]\"\r\n appendTo=\"body\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div\r\n [pTooltip]=\"item.tooltip\"\r\n tooltipPosition=\"left\"\r\n class=\"cursor-pointer\"\r\n >\r\n <span class=\"text-xs\">\r\n {{ item.label }}\r\n </span>\r\n </div>\r\n </ng-template>\r\n </p-tieredMenu>\r\n <!-- <span pTooltip=\"{{ tableActions[rowIndex - actionsOffset][0]?.tooltip }}\" tooltipPosition=\"top\">a</span> -->\r\n </div>\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\" let-columns>\r\n <tr>\r\n <td\r\n [attr.colspan]=\"columns.length + (enableDragDrop ? 1 : 0) + (config.enableSelect ? 1 : 0) + (config.actions && config.actions.length > 0 ? 1 : 0)\"\r\n style=\"text-align: center; border-radius: 10px !important\"\r\n >\r\n <p class=\"font-medium m-0 text-xs\">Nenhum registro encontrado</p>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n }\r\n</div>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\r\n/>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\r\n/>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";::ng-deep :root{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255;--kv-primary-color: 41, 185, 45;--kv-secondary-color: 0, 37, 66;--kv-tertiary-color: 165, 165, 165;--kv-danger-color: 220, 53, 69;--kv-success-color: 75, 181, 67;--kv-info-color: 58, 170, 208;--kv-warn-color: 241, 90, 36;--kv-contrast-color: 33, 37, 41}::ng-deep .padrao{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-keevocenter{--kv-color-system: 88,25,153;--kv-color-system-cta: 0, 116, 217;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-holos{--kv-color-system: 241,90,36;--kv-color-system-cta: 224, 168, 35;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 240,240,240;--kv-background-card: 2255,255,255}.system-color{color:rgb(var(--kv-color-system),1)}.bg-system-100{background:rgb(var(--kv-color-system),1)}.bg-system-75{background:rgb(var(--kv-color-system),.75)}.bg-system-50{background:rgb(var(--kv-color-system),.5)}.bg-system-25{background:rgb(var(--kv-color-system),.25)}.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-icon,svg{height:.6rem}:host ::ng-deep .inputs{height:1.875rem}:host ::ng-deep .inputs,.p-inputtext,.p-inputtextarea{font-size:.875rem}::ng-deep .p-dialog .p-dialog-header{color:rgb(var(--kv-color-text))!important;background:linear-gradient(0deg,#00000005 .44%,#0000 49.5%),#fff!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word;border-bottom:1px solid rgb(var(--kv-color-text),.15)}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}::ng-deep .p-tooltip{font-size:.825rem!important}::ng-deep p-tablecheckbox p-tableheadercheckbox .p-checkbox{display:flex!important;align-items:center!important;justify-content:right}::ng-deep .p-checkbox{display:flex!important;align-items:center!important;justify-content:center}::ng-deep .kv-button .p-button-loading-icon svg{width:100%;height:100%;display:block}::ng-deep .kv-button .p-button-loading-icon svg g{transform:translate(0)}::ng-deep .kv-button{white-space:nowrap;border:none;padding:.4rem;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:.125rem}::ng-deep .kv-button .kv-button-label{font-weight:500}::ng-deep .small{height:1.625rem;min-width:1.625rem}::ng-deep .small .kv-button-label{font-size:.625rem}::ng-deep .small .kv-button-icon{font-size:.75rem}::ng-deep .small .p-button-loading-icon{width:.55rem;height:.55rem}::ng-deep .normal{height:1.875rem;min-width:1.875rem}::ng-deep .normal .kv-button-label{font-size:.825rem}::ng-deep .normal .kv-button-icon{font-size:1rem}::ng-deep .normal .p-button-loading-icon{width:.75rem;height:.75rem}::ng-deep .large{height:2.125rem;min-width:2.125rem}::ng-deep .large .kv-button-label{font-size:1rem}::ng-deep .large .kv-button-icon{font-size:1.25rem}::ng-deep .large .p-button-loading-icon{width:.875rem;height:.875rem}::ng-deep .primary{background-color:rgb(var(--kv-primary-color))}::ng-deep .primary:hover{background-color:rgba(var(--kv-primary-color),.8)}::ng-deep .primary:active{background-color:rgba(var(--kv-primary-color),.95)}.primary.outline{border:solid .5px rgb(var(--kv-primary-color));background-color:#fff;color:rgb(var(--kv-primary-color))}.primary.outline:hover{background-color:rgb(var(--kv-primary-color));color:#fff}.primary.outline:active{background-color:rgba(var(--kv-primary-color),.8)}.primary.text{opacity:.9;background-color:transparent;color:rgb(var(--kv-primary-color))}.primary.text:hover{background-color:rgba(var(--kv-primary-color),.1)}.primary.text:active{background-color:rgba(var(--kv-primary-color),.2)}::ng-deep .secondary{background-color:rgb(var(--kv-secondary-color))}::ng-deep .secondary:hover{background-color:rgba(var(--kv-secondary-color),.8)}::ng-deep .secondary:active{background-color:rgba(var(--kv-secondary-color),.95)}.secondary.outline{border:solid .5px rgb(var(--kv-secondary-color));background-color:#fff;color:rgb(var(--kv-secondary-color))}.secondary.outline:hover{background-color:rgb(var(--kv-secondary-color));color:#fff}.secondary.outline:active{background-color:rgba(var(--kv-secondary-color),.8)}.secondary.text{background-color:transparent;color:rgb(var(--kv-secondary-color))}.secondary.text:hover{background-color:rgba(var(--kv-secondary-color),.1)}.secondary.text:active{background-color:rgba(var(--kv-secondary-color),.2)}::ng-deep .tertiary{color:#212121;background-color:rgba(var(--kv-tertiary-color),.3)}::ng-deep .tertiary:hover{background-color:rgba(var(--kv-tertiary-color),.8)}::ng-deep .tertiary:active{background-color:rgba(var(--kv-tertiary-color),.95)}.tertiary.outline{border:solid .5px rgb(var(--kv-tertiary-color));background-color:#fff;color:rgb(var(--kv-tertiary-color))}.tertiary.outline:hover{background-color:rgb(var(--kv-tertiary-color));color:#fff}.tertiary.outline:active{background-color:rgba(var(--kv-tertiary-color),.8)}.tertiary.text{background-color:transparent;color:rgb(var(--kv-tertiary-color))}.tertiary.text:hover{background-color:rgba(var(--kv-tertiary-color),.1)}.tertiary.text:active{background-color:rgba(var(--kv-tertiary-color),.2)}::ng-deep .danger{background-color:rgb(var(--kv-danger-color))}::ng-deep .danger:hover{background-color:rgba(var(--kv-danger-color),.8)}::ng-deep .danger:active{background-color:rgba(var(--kv-danger-color),.95)}::ng-deep .danger.outline{border:solid .5px rgb(var(--kv-danger-color));background-color:#fff;color:rgb(var(--kv-danger-color))}::ng-deep .danger.outline:hover{background-color:rgb(var(--kv-danger-color));color:#fff}::ng-deep .danger.outline:active{background-color:rgba(var(--kv-danger-color),.8)}::ng-deep .danger.text{background-color:transparent;color:rgb(var(--kv-danger-color))}::ng-deep .danger.text:hover{background-color:rgba(var(--kv-danger-color),.1)}::ng-deep .danger.text:active{background-color:rgba(var(--kv-danger-color),.2)}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar{width:6px}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-datatable>.p-datatable-wrapper:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.tag{width:5px;height:20px;border-radius:.25rem}::ng-deep .p-panel .p-panel-header{border:none!important}:host ::ng-deep .p-datatable-header{padding:0!important;border-radius:5px!important;background-color:transparent;border:none}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{padding:.15rem;background-color:rgba(var(--kv-color-system),.05);color:rgba(var(--kv-color-text),.6)}::ng-deep .p-datatable-table{border:1px solid rgba(var(--kv-color-system),.1);border-radius:.5rem;overflow:hidden;color:rgb(var(--kv-color-system))}.icon-more{font-weight:500;font-size:1.4rem!important;color:rgb(var(--kv-color-system),.75);transition:all .4s}.icon-more:hover,.icon-more:focus{color:#5e5e5e;transition:color .3s,transform .3s;background-color:#eaeaea;border-radius:50%}.tr-td{overflow-wrap:anywhere}.tr-td:hover{box-shadow:#3c40434d 0 1px 2px,#3c404326 0 2px 6px 2px;background-color:#fff;transition:color .3s,transform .3s;transform:scale(1)}.tr-td:hover.last{box-shadow:-1px -1px 9px -3px #000000bf;-webkit-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75);-moz-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75)}.disabled-row{pointer-events:none;opacity:.6;background-color:#dddddd8e}::ng-deep .p-tooltip{pointer-events:auto}.btn-table{background-color:#29b92d;padding:12px}.btn-table:hover{background-color:#249a29}.btn-table:active{background-color:#1c801f}.btn-table:disabled{background-color:#29b92d}::ng-deep svg.p-icon{width:.65rem;height:.65rem}::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#004172;background:#004172}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}input{height:1.75rem}::ng-deep .p-checkbox .p-checkbox-box{width:1.125rem;height:1.125rem;border:1.5px solid #d1d5db}::ng-deep .p-checkbox{display:flex!important;align-items:center!important;justify-content:right;width:1.625rem!important;height:1.125rem}::ng-deep .p-checkbox-label{font-size:.875rem}::ng-deep .p-datatable .p-paginator-bottom{border:solid #ffffff;scale:.75}::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>div>tr>td{padding:.1rem}::ng-deep .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:.25rem!important}::ng-deep .p-dropdown-panel .p-dropdown-items{padding:.5rem!important}::ng-deep .p-button-label{font-weight:500!important}::ng-deep .p-button .p-button-icon-left{margin-left:.25rem;margin-right:.25rem;font-size:.675rem!important}:host{height:100%}::ng-deep .kv-table-container,::ng-deep p-table{height:100%}::ng-deep p-table .p-datatable{display:flex;flex-direction:column;height:100%}::ng-deep .p-datatable .p-datatable-wrapper{flex:1 1 1}::ng-deep p-table .p-datatable .p-datatable-wrapper,::ng-deep p-table{height:100%}::ng-deep table{height:auto!important}.ellipsis-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;display:inline-block}::ng-deep .p-tieredmenu{padding:.5rem!important}:host ::ng-deep .p-disabled *{pointer-events:auto!important}::ng-deep p-tieredmenusub .p-disabled *:active{pointer-events:none!important;font-size:.75rem!important;padding:.5rem!important}::ng-deep .p-tieredmenu .p-tieredmenu-root-list{font-size:.75rem!important}::ng-deep .p-tieredmenu .p-menuitem>.p-menuitem-content{padding:.5rem}.td-drag-container{cursor:move;font-weight:700}.td-drag-container:active{cursor:grabbing}::ng-deep .drag-handle-header{padding:.5rem!important;text-align:center!important;vertical-align:middle!important;background-color:rgba(var(--kv-color-system),.05)!important}::ng-deep .drag-handle-header .material-symbols-outlined{color:rgba(var(--kv-color-system),.4);font-size:1rem}::ng-deep td[cdkdraghandle]{cursor:grab;padding:.5rem!important;text-align:center!important;vertical-align:middle!important;width:40px!important;min-width:40px!important;max-width:40px!important}::ng-deep td[cdkdraghandle]:hover{background-color:rgba(var(--kv-color-system),.05);transition:background-color .2s ease}::ng-deep td[cdkdraghandle]:active{cursor:grabbing;background-color:rgba(var(--kv-color-system),.1)}::ng-deep td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.6);font-size:1.1rem;transition:color .2s ease,transform .2s ease;display:block}::ng-deep td[cdkdraghandle] .material-symbols-outlined:hover{color:rgba(var(--kv-color-system),.8);transform:scale(1.1)}::ng-deep .cdk-drop-list{width:100%!important}::ng-deep .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1);cursor:grab}::ng-deep .cdk-drag:hover{background-color:rgba(var(--kv-color-system),.02);box-shadow:0 2px 4px #0000001a}::ng-deep .cdk-drag.cdk-drag-dragging{opacity:.4;transform:none!important;position:relative!important}::ng-deep .cdk-drag:active{cursor:grabbing}::ng-deep .cdk-drag:active:hover{box-shadow:none}::ng-deep .cdk-drag-animating{transition:transform .3s cubic-bezier(.25,.8,.25,1)}::ng-deep .cdk-drop-list:not(.cdk-drop-list-dragging) .cdk-drag{transition:all .3s cubic-bezier(.25,.8,.25,1)}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .cdk-drop-list-dragging tr:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1);opacity:.8}::ng-deep .cdk-drop-list-dragging .cdk-drag:not(.cdk-drag-placeholder){opacity:.6}::ng-deep .cdk-drag-placeholder{opacity:.3;background:rgba(var(--kv-color-system),.05);border:2px dashed rgba(var(--kv-color-system),.3);border-radius:4px;height:48px;margin:2px 0;transition:all .3s ease;display:table-row}::ng-deep .cdk-drag-placeholder:hover{background:rgba(var(--kv-color-system),.1);border-color:rgba(var(--kv-color-system),.5)}::ng-deep .cdk-drag-placeholder.cdk-drop-list-receiving{background:#00ff001a;border-color:#00ff0080;border-style:solid}::ng-deep .cdk-drag-preview{display:none!important;box-sizing:border-box;border-radius:8px;box-shadow:0 8px 25px #00000026,0 4px 10px #0000001a;background:#fff;border:1px solid rgba(var(--kv-color-system),.2);opacity:0;z-index:1000;overflow:hidden;visibility:hidden;transition:opacity .2s ease-out;max-width:90vw;position:absolute;animation:dragPreviewFadeIn .2s ease-out}::ng-deep .cdk-drag-preview table{width:100%;border-collapse:collapse;margin:0;background:transparent;border:none!important;border-radius:inherit}::ng-deep .cdk-drag-preview table tbody tr{background:transparent;border:none}::ng-deep .cdk-drag-preview table tbody tr:hover{background:transparent!important;box-shadow:none!important;transform:none!important}::ng-deep .cdk-drag-preview table td{border:none!important;background:transparent!important;white-space:nowrap!important;vertical-align:middle!important;font-size:.75rem!important;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;pointer-events:none;padding:.375rem .5rem!important;border-right:none!important;border-left:none!important}::ng-deep .cdk-drag-preview table td:first-child{border-radius:8px 0 0 8px}::ng-deep .cdk-drag-preview table td:last-child{border-radius:0 8px 8px 0}::ng-deep .cdk-drag-preview table td:not(:first-child):not(:last-child){flex-grow:1;flex-basis:0}::ng-deep .cdk-drag-preview table td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.8)!important;font-weight:700!important;font-size:1rem!important}::ng-deep .cdk-drag-preview table td p-checkbox,::ng-deep .cdk-drag-preview table td p-tableCheckbox,::ng-deep .cdk-drag-preview table td p-tableHeaderCheckbox,::ng-deep .cdk-drag-preview table td kv-switch{pointer-events:none;opacity:.7}::ng-deep .cdk-drag-preview table td button,::ng-deep .cdk-drag-preview table td .kv-button,::ng-deep .cdk-drag-preview table td .icon-more{pointer-events:none;opacity:.6}::ng-deep .cdk-drag-preview table td img{max-width:30px;max-height:30px;object-fit:cover}::ng-deep .cdk-drag-preview table td .p-chip,::ng-deep .cdk-drag-preview table td .p-badge{font-size:.7rem!important;padding:.2rem .4rem!important}@media (max-width: 768px){::ng-deep .cdk-drag-preview{transform:rotate(1deg);max-width:95vw}::ng-deep .cdk-drag-preview table{height:100%!important}::ng-deep .cdk-drag-preview table tbody tr{height:100%;flex-direction:column}::ng-deep .cdk-drag-preview table td{width:100%!important}::ng-deep .cdk-drag-preview table td span{max-width:100%!important;justify-content:start!important}::ng-deep .cdk-drag-preview table td{padding:.25rem .375rem!important;font-size:.7rem!important}::ng-deep .cdk-drag-preview table td[cdkdraghandle] .material-symbols-outlined{font-size:.9rem!important}}::ng-deep .cdk-drag-preview:not(.ready):not(.initializing){opacity:0!important;visibility:hidden!important;transform:scale(0)!important}::ng-deep .cdk-drag-preview.initializing{opacity:0!important;visibility:hidden!important}::ng-deep .cdk-drag-preview.ready{opacity:.95!important;visibility:visible!important;transition:opacity .2s ease-out!important}::ng-deep .cdk-drag-preview.ready table{transform:rotate(1.5deg)}@keyframes dragPreviewFadeIn{0%{opacity:0;visibility:hidden}to{opacity:.95;visibility:visible}}::ng-deep tr.cdk-drag-dragging{display:flex!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle]{cursor:not-allowed!important;opacity:.5}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle]:hover{background-color:transparent!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.3)!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle] .material-symbols-outlined:hover{transform:none!important;color:rgba(var(--kv-color-system),.3)!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: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i5.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { 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.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i8.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }, { kind: "component", type: i9.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "directive", type: i10.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i11.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i12.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i12.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i12.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i13.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: i14.TieredMenu, selector: "p-tieredMenu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "autoDisplay", "showTransitionOptions", "hideTransitionOptions", "id", "ariaLabel", "ariaLabelledBy", "disabled", "tabindex"], outputs: ["onShow", "onHide"] }, { kind: "component", type: i15.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: i15.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i15.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i15.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i15.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "directive", type: i16.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i16.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i17.KvSwitchComponent, selector: "kv-switch", inputs: ["readonly", "switchValue"], outputs: ["onSwitchChange"] }, { kind: "component", type: i18.KvButtonComponent, selector: "kv-button", inputs: ["fullWidth", "type", "loading", "severity", "size", "icon", "iconPosition", "label", "disabled", "items", "popup", "popupIcon"], outputs: ["iconChange", "onClick"] }] }); }
728
728
  }
729
729
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: KvTableDraggableComponent, decorators: [{
730
730
  type: Component,
731
- args: [{ selector: 'kv-table-draggable', template: "<div class=\"kv-table-container\">\n @if (config) {\n <p-table\n #dt\n #table\n styleClass=\"p-datatable-sm\"\n [value]=\"dataSource\"\n [(selection)]=\"selectedItems\"\n [rowSelectable]=\"isRowSelectable\"\n [columns]=\"config.columns\"\n [globalFilterFields]=\"globalFilterFields\"\n [rows]=\"rows()\"\n [paginator]=\"paginator\"\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\n [showCurrentPageReport]=\"true\"\n currentPageReportTemplate=\"{first} - {last} de {totalRecords}\"\n [rowHover]=\"true\"\n [totalRecords]=\"totalRecords\"\n [lazy]=\"config.lazy\"\n [first]=\"first()\"\n (onLazyLoad)=\"paginate($event)\"\n (selectionChange)=\"selectionChange($event)\"\n (onSort)=\"onSort($event)\"\n (onPage)=\"onPage($event)\"\n rowGroupMode=\"rowspan\"\n [groupRowsBy]=\"config.fieldGroup\"\n [showFirstLastIcon]=\"widthPage() > 960 ? true : false\"\n [pageLinks]=\"widthPage() > 960 ? 2 : 1\"\n [responsive]=\"true\"\n [responsiveLayout]=\"responsiveLayout ? 'stack' : ''\"\n [scrollable]=\"isTableScrollable\"\n [scrollHeight]=\"scrollHeight\"\n [rowTrackBy]=\"rowTrackBy\"\n\n cdkDropList\n [cdkDropListData]=\"currentPageData()\"\n (cdkDropListDropped)=\"drop($event)\"\n cdkDropListOrientation=\"vertical\"\n >\n @if (config.enableCation) {\n <ng-template pTemplate=\"caption\">\n <div\n class=\"flex flex-row flex-wrap justify-content-between grid formgrid p-fluid col-12 m-0 mb-2\"\n [style.padding.rem]=\"0.1\"\n >\n <div class=\"col-12 flex flex-column\">\n @if (config.title) {\n <div class=\"text-md font-bold my-3\">\n {{ config.title }}\n </div>\n } @if (config.subtitle) {\n <div class=\"text-sm mb-4 font-medium\">\n {{ config.subtitle }}\n </div>\n }\n </div>\n\n <div\n class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\n widthPage() < 768 ? 'col-10' : 'col-12'\n }} gap-1 p-0\"\n >\n @if (config.enableFilter) {\n <input\n pInputText\n pAutoFocus\n [autofocus]=\"widthPage() > 800\"\n type=\"text\"\n (input)=\"onGlobalFilter(dt, $event)\"\n [placeholder]=\"searchPlaceholder\"\n autocomplete=\"off\"\n #inputField\n class=\"text-sm col-6\"\n />\n } @if(filterColumnsBtn) {\n <div #botaoFiltro>\n <kv-button\n id=\"botaoFiltro\"\n [icon]=\"'align_vertical_top'\"\n (onClick)=\"abrirMenuFiltro($event)\"\n severity=\"tertiary\"\n pTooltip=\"Ocultar/Exibir colunas\"\n size=\"small\"\n >\n </kv-button>\n </div>\n\n <div\n #menuFiltroDiv\n id=\"menuFiltroDiv\"\n [style.visibility]=\"'hidden'\"\n class=\"absolute z-4 bg-gray-200 menu-columns-filtro\"\n >\n <p-card styleClass=\"p-1\">\n <div\n class=\"flex flex-column text-medium w-15rem p-1\"\n *ngFor=\"let col of columnsFilter()\"\n >\n {{ checkMenuFiltro(col) }}\n <p-checkbox\n #filterColumns\n [label]=\"col.header\"\n [binary]=\"true\"\n class=\"checkbox-container\"\n (onChange)=\"dinamicColumnSet($event, col)\"\n [(ngModel)]=\"col.checked\"\n *ngIf=\"!dinamicDisableColumn(col)\"\n ></p-checkbox>\n </div>\n </p-card>\n </div>\n } @if(filterButton()) {\n <p-button\n styleClass=\"kv-button small tertiary text-xs font-medium\"\n label=\"Filtrar\"\n icon=\"pi pi-filter\"\n [badge]=\"filterButtonBadge()\"\n badgeClass=\"text-gray-800\"\n class=\"text-xs\"\n (onClick)=\"op.toggle($event)\"\n ></p-button>\n }\n\n <p-overlayPanel #op>\n <ng-content select=\"[filtro]\"> </ng-content>\n </p-overlayPanel>\n </div>\n\n <div class=\"flex flex-row col-2 justify-content-end gap-2 p-0\">\n @for (action of config.actionsLote; track i; let i = $index) {\n <div class=\"flex align-items-center justify-content-center\">\n @if ((((selectedItems && selectedItems.length > 0) || action.showAcoesLote)) &&\n (getOrExecute(action.visible, selectedItems) ?? true)) {\n <kv-button\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\n [tooltipPosition]=\"'left'\"\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\n [severity]=\"action.severity || 'tertiary'\"\n size=\"small\"\n [label]=\"getOrExecute(action.label, selectedItems) || ''\"\n [items]=\"action.items || []\"\n [popup]=\"(action.items && action.items.length > 0) || false\"\n />\n }\n </div>\n }\n </div>\n </div>\n </ng-template>\n }\n\n <ng-template pTemplate=\"header\" let-columns>\n <tr>\n @if (enableDragDrop) {\n <th style=\"width: 40px; text-align: center;\" class=\"drag-handle-header\">\n </th>\n }\n @if (config.enableSelect) {\n <th>\n <p-tableHeaderCheckbox\n (click)=\"activeItemLote(selectedItems)\"\n [disabled]=\"disabledHeaderCheckbox\"\n ></p-tableHeaderCheckbox>\n </th>\n } @for (col of columns; track $index) {\n <th\n [pSortableColumn]=\"col.field\"\n [pSortableColumnDisabled]=\"col.sortable === false\"\n [style.width]=\"col.width\"\n >\n <div\n class=\"flex flex-row align-items-center {{\n col?.centralize && 'justify-content-center'\n }}\"\n >\n <span class=\"text-xs font-semibold\">{{ col.header }}</span>\n @if (col.sortable) {\n <p-sortIcon [field]=\"col.field\" class=\"pb-1\"></p-sortIcon>\n } @if (col.headerTooltip) {\n <span\n class=\"material-symbols-outlined flex align-items-center\"\n [pTooltip]=\"col.headerTooltip\"\n >info</span\n >\n }\n </div>\n </th>\n } @if (config.actions && config.actions.length > 0) {\n <th></th>\n }\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-rowData\n let-columns=\"columns\"\n let-rowgroup=\"rowgroup\"\n let-rowspan=\"rowspan\"\n let-rowIndex=\"rowIndex\"\n >\n <tr\n cdkDrag\n cdkDragLockAxis=\"y\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded()\"\n [cdkDragDisabled]=\"!enableDragDrop || dragDropDisabled(rowData)\"\n [cdkDragData]=\"selectedItems\"\n\n (dblclick)=\"doubleClick($event, rowData)\"\n [ngClass]=\"{\n capitalize: tableCaptalized,\n last: rowIndex === dataSource.length - 1\n }\"\n class=\"tr-td {{ isDisabledRow(rowData) ? 'disabled-row' : '' }}\"\n >\n\n @if (enableDragDrop) {\n <td cdkDragHandle>\n <span class=\"material-symbols-outlined text-sm\">\n drag_indicator\n </span>\n </td>\n }\n\n @if (config.enableSelect) {\n <td style=\"width: 8px !important\">\n <p-tableCheckbox\n [value]=\"rowData\"\n [disabled]=\"isDisabledCheckbox(rowData)\"\n (click)=\"activeItemLote(selectedItems)\"\n ></p-tableCheckbox>\n </td>\n } @for (col of columns; track $index) {\n <ng-container>\n @if (rowgroup && !col.template) {\n <td\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\n class=\"{{\n col.styleClass\n ? col.styleClass(rowData, col, rowData[col.field])\n : ''\n }}\"\n >\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"returnRowClass(rowData, col)\"\n >\n @if (!isChipField(col) && !col.iconField && !isImageField(col) &&\n !isEmptyDataSource()) {\n <span\n class=\"flex flex-row gap-2 align-items-center {{\n col?.centralize && 'justify-content-center'\n }} text-xs {{ ellipsisText() && 'ellipsis-text' }}\"\n [pTooltip]=\"\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\n \"\n [tooltipPosition]=\"'bottom'\"\n [style.max-width]=\"\n ellipsisText() && returnMaxWidth()(col.width)\n \"\n >\n @if(col.tagColor) {\n <div\n class=\"tag\"\n [pTooltip]=\"\n col.tooltipTag &&\n col.tooltipTag(rowData, col, rowData[col.field])\n \"\n [style.background-color]=\"\n col.tagColor(rowData, col, rowData[col.field])\n \"\n ></div>\n\n } @if (col.icon) {\n <i [class]=\"col.icon + ' mr-2'\"></i>\n }\n {{ transformValue(rowData, col) }}\n </span>\n } @if (isChipField(col) && !col.iconField) {\n <div>\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n class=\"text-xs\"\n >{{ transformValue(rowData, col) }}</span\n >\n </div>\n } @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\n <div class=\"w-full\">\n @if(!isSwitchField(col)) {\n\n <div\n class=\"w-full flex {{\n col.centralize && 'justify-content-center'\n }}\"\n >\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n\n } @else {\n <div class=\"flex flex-row justify-content-center\">\n <div\n [style]=\"{\n height: '16.8px',\n width: '28.8px',\n 'border-radius': '30px'\n }\"\n >\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n }\n </div>\n }\n </span>\n\n @if (isImageField(col)) {\n <span>\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n } @if (col.iconField) {\n <i\n [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ returnClassIcon(rowData, col) }}\n </i>\n }\n\n <ng-template #booleanField>\n @if (!col.iconField && !isSwitchField(col)) {\n <div\n class=\"flex flex-row gap-2 align-items-center {{\n col?.centralize && 'justify-content-center'\n }}\"\n [pTooltip]=\"\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\n \"\n [tooltipPosition]=\"'bottom'\"\n >\n <i\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span\n class=\"material-symbols-outlined text-lg font-semibold\"\n >\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n </div>\n\n } @if (isSwitchField(col)) {\n <span\n [class]=\"\n returnRowClass(rowData, col) +\n ' flex flex-row align-items-center justify-content-center'\n \"\n style=\"height: 25px\"\n >\n @if(col.switchDisable){\n <kv-switch\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col.switchDisable(rowData, col)\"\n [switchValue]=\"transformValue(rowData, col)\"\n >\n </kv-switch>\n } @else {\n <kv-switch\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col?.onlyReadField ?? true\"\n [switchValue]=\"transformValue(rowData, col)\"\n >\n </kv-switch>\n }\n </span>\n } @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\n <div class=\"w-full\">\n @if(!isSwitchField(col)) {\n <div\n class=\"w-full flex {{\n col.centralize && 'justify-content-center'\n }}\"\n >\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n\n } @else {\n <div class=\"flex flex-row justify-content-center\">\n <div\n [style]=\"{\n height: '16.8px',\n width: '28.8px',\n 'border-radius': '30px'\n }\"\n >\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n }\n </div>\n }\n </ng-template>\n </td>\n } @if (!rowgroup && !col.grouped && !col.template) {\n <td\n #tableCell\n class=\"rowTable {{\n col.styleClass\n ? col.styleClass(rowData, col, rowData[col.field])\n : ''\n }} \"\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\n >\n @if(!isEmptyDataSource()) {\n\n <span\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\n [class]=\"\n returnRowClass(rowData, col) +\n ' flex flex-row gap-2 align-items-center ' +\n (col?.centralize && 'justify-content-center')\n \"\n [pTooltip]=\"\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\n \"\n [tooltipPosition]=\"'bottom'\"\n [style.max-width]=\"ellipsisText() && returnMaxWidth()(col.width)\"\n >\n @if(col.tagColor) {\n <div\n class=\"tag\"\n [pTooltip]=\"\n col.tooltipTag &&\n col.tooltipTag(rowData, col, rowData[col.field])\n \"\n [style.background-color]=\"\n col.tagColor(rowData, col, rowData[col.field])\n \"\n ></div>\n\n } @if (!isChipField(col) && !col.iconField && !isImageField(col)){\n <span class=\"text-xs {{ ellipsisText() && 'ellipsis-text' }}\">\n @if (col.icon) {\n <i [class]=\"col.icon + ' mr-2'\"></i>\n }\n {{ transformValue(rowData, col) }}\n </span>\n } @if (isChipField(col) && !col.iconField) {\n <div>\n <span\n [class]=\"returnClassChip(rowData, col)\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n class=\"text-xs\"\n >\n {{ transformValue(rowData, col) }}</span\n >\n </div>\n }\n </span>\n } @if (isImageField(col)) {\n <span>\n <span>\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\n </span>\n </span>\n } @if (col.iconField) {\n <i\n [ngClass]=\"{\n 'material-icons': col.indIconMaterial,\n 'material-symbols-outlined mr-2': !col.indIconMaterial\n }\"\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\n >\n {{ returnClassIcon(rowData, col) }}\n </i>\n }\n\n <ng-template #booleanField>\n @if (!col.iconField && !isSwitchField(col)) {\n <div\n class=\"flex flex-row gap-2 align-items-center {{\n col?.centralize && 'justify-content-center'\n }}\"\n [pTooltip]=\"\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\n \"\n [tooltipPosition]=\"'bottom'\"\n >\n <i\n [ngClass]=\"\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\n \"\n ><span\n class=\"material-symbols-outlined text-lg font-semibold\"\n >\n {{ rowData[col.field] ? \"check\" : \"close\" }}\n </span>\n </i>\n </div>\n } @if (isSwitchField(col)) {\n\n <span\n [class]=\"\n returnRowClass(rowData, col) +\n ' flex flex-row align-items-center justify-content-center'\n \"\n style=\"height: 25px\"\n >\n @if(col.switchDisable){\n <kv-switch\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col.switchDisable(rowData, col)\"\n [switchValue]=\"transformValue(rowData, col)\"\n >\n </kv-switch>\n } @else {\n <kv-switch\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\n [disabled]=\"col?.onlyReadField ?? true\"\n [switchValue]=\"transformValue(rowData, col)\"\n >\n </kv-switch>\n }\n </span>\n }\n </ng-template>\n\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\n <div class=\"w-full\">\n @if(!isSwitchField(col)) {\n <div\n class=\"w-full flex {{\n col.centralize && 'justify-content-center'\n }}\"\n >\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n\n } @else {\n <div class=\"flex flex-row justify-content-center\">\n <div\n [style]=\"{\n height: '16.8px',\n width: '28.8px',\n 'border-radius': '30px'\n }\"\n >\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\n </div>\n </div>\n }\n </div>\n }\n </td>\n } @if (col.template) {\n <td\n class=\"rowTable {{\n col.styleClass\n ? col.styleClass(rowData, col, rowData[col.field])\n : ''\n }} \"\n >\n @if (getCustomTemplate(col.template.name)) {\n\n <div\n class=\"flex flex-row gap-2 align-items-center {{\n col?.centralize && ' justify-content-center'\n }}\"\n [pTooltip]=\"\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\n \"\n [tooltipPosition]=\"'bottom'\"\n >\n @if(col.tagColor) {\n <div\n class=\"tag\"\n [pTooltip]=\"col.tooltipTag && col.tooltipTag(rowData, col)\"\n [style.background-color]=\"col.tagColor(rowData, col)\"\n ></div>\n } @if(!isEmptyDataSource()) {\n\n <div class=\"w-full\">\n <ng-container\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\n />\n </div>\n }\n </div>\n\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\n <p-skeleton\n [width]=\"widthRandom()(col, rowIndex) + '%'\"\n ></p-skeleton>\n } }\n </td>\n }\n </ng-container>\n } @if (config.actions && config.actions.length > 0) {\n <td>\n <div class=\"flex flex-row justify-content-end w-full\">\n <span\n class=\"material-symbols-outlined cursor-pointer icon-more\"\n (click)=\"menu.toggle($event); activeItem(rowData)\"\n >\n <!-- more_vert -->\n more_horiz\n </span>\n\n <p-tieredMenu\n #menu\n [popup]=\"true\"\n [model]=\"tableActions[rowIndex - actionsOffset]\"\n appendTo=\"body\"\n >\n <ng-template let-item pTemplate=\"item\">\n <div\n [pTooltip]=\"item.tooltip\"\n tooltipPosition=\"left\"\n class=\"cursor-pointer\"\n >\n <span class=\"text-xs\">\n {{ item.label }}\n </span>\n </div>\n </ng-template>\n </p-tieredMenu>\n <!-- <span pTooltip=\"{{ tableActions[rowIndex - actionsOffset][0]?.tooltip }}\" tooltipPosition=\"top\">a</span> -->\n </div>\n </td>\n }\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\" let-columns>\n <tr>\n <td\n [attr.colspan]=\"columns.length + (enableDragDrop ? 1 : 0) + (config.enableSelect ? 1 : 0) + (config.actions && config.actions.length > 0 ? 1 : 0)\"\n style=\"text-align: center; border-radius: 10px !important\"\n >\n <p class=\"font-medium m-0 text-xs\">Nenhum registro encontrado</p>\n </td>\n </tr>\n </ng-template>\n </p-table>\n }\n</div>\n\n<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\n/>\n\n<link\n rel=\"stylesheet\"\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\n/>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";::ng-deep :root{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255;--kv-primary-color: 41, 185, 45;--kv-secondary-color: 0, 37, 66;--kv-tertiary-color: 165, 165, 165;--kv-danger-color: 220, 53, 69;--kv-success-color: 75, 181, 67;--kv-info-color: 58, 170, 208;--kv-warn-color: 241, 90, 36;--kv-contrast-color: 33, 37, 41}::ng-deep .padrao{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-keevocenter{--kv-color-system: 88,25,153;--kv-color-system-cta: 0, 116, 217;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-holos{--kv-color-system: 241,90,36;--kv-color-system-cta: 224, 168, 35;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 240,240,240;--kv-background-card: 2255,255,255}.system-color{color:rgb(var(--kv-color-system),1)}.bg-system-100{background:rgb(var(--kv-color-system),1)}.bg-system-75{background:rgb(var(--kv-color-system),.75)}.bg-system-50{background:rgb(var(--kv-color-system),.5)}.bg-system-25{background:rgb(var(--kv-color-system),.25)}.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-icon,svg{height:.6rem}:host ::ng-deep .inputs{height:1.875rem}:host ::ng-deep .inputs,.p-inputtext,.p-inputtextarea{font-size:.875rem}::ng-deep .p-dialog .p-dialog-header{color:rgb(var(--kv-color-text))!important;background:linear-gradient(0deg,#00000005 .44%,#0000 49.5%),#fff!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word;border-bottom:1px solid rgb(var(--kv-color-text),.15)}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}::ng-deep .p-tooltip{font-size:.825rem!important}::ng-deep p-tablecheckbox p-tableheadercheckbox .p-checkbox{display:flex!important;align-items:center!important;justify-content:right}::ng-deep .p-checkbox{display:flex!important;align-items:center!important;justify-content:center}::ng-deep .kv-button .p-button-loading-icon svg{width:100%;height:100%;display:block}::ng-deep .kv-button .p-button-loading-icon svg g{transform:translate(0)}::ng-deep .kv-button{white-space:nowrap;border:none;padding:.4rem;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:.125rem}::ng-deep .kv-button .kv-button-label{font-weight:500}::ng-deep .small{height:1.625rem;min-width:1.625rem}::ng-deep .small .kv-button-label{font-size:.625rem}::ng-deep .small .kv-button-icon{font-size:.75rem}::ng-deep .small .p-button-loading-icon{width:.55rem;height:.55rem}::ng-deep .normal{height:1.875rem;min-width:1.875rem}::ng-deep .normal .kv-button-label{font-size:.825rem}::ng-deep .normal .kv-button-icon{font-size:1rem}::ng-deep .normal .p-button-loading-icon{width:.75rem;height:.75rem}::ng-deep .large{height:2.125rem;min-width:2.125rem}::ng-deep .large .kv-button-label{font-size:1rem}::ng-deep .large .kv-button-icon{font-size:1.25rem}::ng-deep .large .p-button-loading-icon{width:.875rem;height:.875rem}::ng-deep .primary{background-color:rgb(var(--kv-primary-color))}::ng-deep .primary:hover{background-color:rgba(var(--kv-primary-color),.8)}::ng-deep .primary:active{background-color:rgba(var(--kv-primary-color),.95)}.primary.outline{border:solid .5px rgb(var(--kv-primary-color));background-color:#fff;color:rgb(var(--kv-primary-color))}.primary.outline:hover{background-color:rgb(var(--kv-primary-color));color:#fff}.primary.outline:active{background-color:rgba(var(--kv-primary-color),.8)}.primary.text{opacity:.9;background-color:transparent;color:rgb(var(--kv-primary-color))}.primary.text:hover{background-color:rgba(var(--kv-primary-color),.1)}.primary.text:active{background-color:rgba(var(--kv-primary-color),.2)}::ng-deep .secondary{background-color:rgb(var(--kv-secondary-color))}::ng-deep .secondary:hover{background-color:rgba(var(--kv-secondary-color),.8)}::ng-deep .secondary:active{background-color:rgba(var(--kv-secondary-color),.95)}.secondary.outline{border:solid .5px rgb(var(--kv-secondary-color));background-color:#fff;color:rgb(var(--kv-secondary-color))}.secondary.outline:hover{background-color:rgb(var(--kv-secondary-color));color:#fff}.secondary.outline:active{background-color:rgba(var(--kv-secondary-color),.8)}.secondary.text{background-color:transparent;color:rgb(var(--kv-secondary-color))}.secondary.text:hover{background-color:rgba(var(--kv-secondary-color),.1)}.secondary.text:active{background-color:rgba(var(--kv-secondary-color),.2)}::ng-deep .tertiary{color:#212121;background-color:rgba(var(--kv-tertiary-color),.3)}::ng-deep .tertiary:hover{background-color:rgba(var(--kv-tertiary-color),.8)}::ng-deep .tertiary:active{background-color:rgba(var(--kv-tertiary-color),.95)}.tertiary.outline{border:solid .5px rgb(var(--kv-tertiary-color));background-color:#fff;color:rgb(var(--kv-tertiary-color))}.tertiary.outline:hover{background-color:rgb(var(--kv-tertiary-color));color:#fff}.tertiary.outline:active{background-color:rgba(var(--kv-tertiary-color),.8)}.tertiary.text{background-color:transparent;color:rgb(var(--kv-tertiary-color))}.tertiary.text:hover{background-color:rgba(var(--kv-tertiary-color),.1)}.tertiary.text:active{background-color:rgba(var(--kv-tertiary-color),.2)}::ng-deep .danger{background-color:rgb(var(--kv-danger-color))}::ng-deep .danger:hover{background-color:rgba(var(--kv-danger-color),.8)}::ng-deep .danger:active{background-color:rgba(var(--kv-danger-color),.95)}::ng-deep .danger.outline{border:solid .5px rgb(var(--kv-danger-color));background-color:#fff;color:rgb(var(--kv-danger-color))}::ng-deep .danger.outline:hover{background-color:rgb(var(--kv-danger-color));color:#fff}::ng-deep .danger.outline:active{background-color:rgba(var(--kv-danger-color),.8)}::ng-deep .danger.text{background-color:transparent;color:rgb(var(--kv-danger-color))}::ng-deep .danger.text:hover{background-color:rgba(var(--kv-danger-color),.1)}::ng-deep .danger.text:active{background-color:rgba(var(--kv-danger-color),.2)}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar{width:6px}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-datatable>.p-datatable-wrapper:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.tag{width:5px;height:20px;border-radius:.25rem}::ng-deep .p-panel .p-panel-header{border:none!important}:host ::ng-deep .p-datatable-header{padding:0!important;border-radius:5px!important;background-color:transparent;border:none}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{padding:.15rem;background-color:rgba(var(--kv-color-system),.05);color:rgba(var(--kv-color-text),.6)}::ng-deep .p-datatable-table{border:1px solid rgba(var(--kv-color-system),.1);border-radius:.5rem;overflow:hidden;color:rgb(var(--kv-color-system))}.icon-more{font-weight:500;font-size:1.4rem!important;color:rgb(var(--kv-color-system),.75);transition:all .4s}.icon-more:hover,.icon-more:focus{color:#5e5e5e;transition:color .3s,transform .3s;background-color:#eaeaea;border-radius:50%}.tr-td{overflow-wrap:anywhere}.tr-td:hover{box-shadow:#3c40434d 0 1px 2px,#3c404326 0 2px 6px 2px;background-color:#fff;transition:color .3s,transform .3s;transform:scale(1)}.tr-td:hover.last{box-shadow:-1px -1px 9px -3px #000000bf;-webkit-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75);-moz-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75)}.disabled-row{pointer-events:none;opacity:.6;background-color:#dddddd8e}::ng-deep .p-tooltip{pointer-events:auto}.btn-table{background-color:#29b92d;padding:12px}.btn-table:hover{background-color:#249a29}.btn-table:active{background-color:#1c801f}.btn-table:disabled{background-color:#29b92d}::ng-deep svg.p-icon{width:.65rem;height:.65rem}::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#004172;background:#004172}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}input{height:1.75rem}::ng-deep .p-checkbox .p-checkbox-box{width:1.125rem;height:1.125rem;border:1.5px solid #d1d5db}::ng-deep .p-checkbox{display:flex!important;align-items:center!important;justify-content:right;width:1.625rem!important;height:1.125rem}::ng-deep .p-checkbox-label{font-size:.875rem}::ng-deep .p-datatable .p-paginator-bottom{border:solid #ffffff;scale:.75}::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>div>tr>td{padding:.1rem}::ng-deep .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:.25rem!important}::ng-deep .p-dropdown-panel .p-dropdown-items{padding:.5rem!important}::ng-deep .p-button-label{font-weight:500!important}::ng-deep .p-button .p-button-icon-left{margin-left:.25rem;margin-right:.25rem;font-size:.675rem!important}:host{height:100%}::ng-deep .kv-table-container,::ng-deep p-table{height:100%}::ng-deep p-table .p-datatable{display:flex;flex-direction:column;height:100%}::ng-deep .p-datatable .p-datatable-wrapper{flex:1 1 1}::ng-deep p-table .p-datatable .p-datatable-wrapper,::ng-deep p-table{height:100%}::ng-deep table{height:auto!important}.ellipsis-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;display:inline-block}::ng-deep .p-tieredmenu{padding:.5rem!important}:host ::ng-deep .p-disabled *{pointer-events:auto!important}::ng-deep p-tieredmenusub .p-disabled *:active{pointer-events:none!important;font-size:.75rem!important;padding:.5rem!important}::ng-deep .p-tieredmenu .p-tieredmenu-root-list{font-size:.75rem!important}::ng-deep .p-tieredmenu .p-menuitem>.p-menuitem-content{padding:.5rem}.td-drag-container{cursor:move;font-weight:700}.td-drag-container:active{cursor:grabbing}::ng-deep .drag-handle-header{padding:.5rem!important;text-align:center!important;vertical-align:middle!important;background-color:rgba(var(--kv-color-system),.05)!important}::ng-deep .drag-handle-header .material-symbols-outlined{color:rgba(var(--kv-color-system),.4);font-size:1rem}::ng-deep td[cdkdraghandle]{cursor:grab;padding:.5rem!important;text-align:center!important;vertical-align:middle!important;width:40px!important;min-width:40px!important;max-width:40px!important}::ng-deep td[cdkdraghandle]:hover{background-color:rgba(var(--kv-color-system),.05);transition:background-color .2s ease}::ng-deep td[cdkdraghandle]:active{cursor:grabbing;background-color:rgba(var(--kv-color-system),.1)}::ng-deep td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.6);font-size:1.1rem;transition:color .2s ease,transform .2s ease;display:block}::ng-deep td[cdkdraghandle] .material-symbols-outlined:hover{color:rgba(var(--kv-color-system),.8);transform:scale(1.1)}::ng-deep .cdk-drop-list{width:100%!important}::ng-deep .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1);cursor:grab}::ng-deep .cdk-drag:hover{background-color:rgba(var(--kv-color-system),.02);box-shadow:0 2px 4px #0000001a}::ng-deep .cdk-drag.cdk-drag-dragging{opacity:.4;transform:none!important;position:relative!important}::ng-deep .cdk-drag:active{cursor:grabbing}::ng-deep .cdk-drag:active:hover{box-shadow:none}::ng-deep .cdk-drag-animating{transition:transform .3s cubic-bezier(.25,.8,.25,1)}::ng-deep .cdk-drop-list:not(.cdk-drop-list-dragging) .cdk-drag{transition:all .3s cubic-bezier(.25,.8,.25,1)}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .cdk-drop-list-dragging tr:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1);opacity:.8}::ng-deep .cdk-drop-list-dragging .cdk-drag:not(.cdk-drag-placeholder){opacity:.6}::ng-deep .cdk-drag-placeholder{opacity:.3;background:rgba(var(--kv-color-system),.05);border:2px dashed rgba(var(--kv-color-system),.3);border-radius:4px;height:48px;margin:2px 0;transition:all .3s ease;display:table-row}::ng-deep .cdk-drag-placeholder:hover{background:rgba(var(--kv-color-system),.1);border-color:rgba(var(--kv-color-system),.5)}::ng-deep .cdk-drag-placeholder.cdk-drop-list-receiving{background:#00ff001a;border-color:#00ff0080;border-style:solid}::ng-deep .cdk-drag-preview{display:none!important;box-sizing:border-box;border-radius:8px;box-shadow:0 8px 25px #00000026,0 4px 10px #0000001a;background:#fff;border:1px solid rgba(var(--kv-color-system),.2);opacity:0;z-index:1000;overflow:hidden;visibility:hidden;transition:opacity .2s ease-out;max-width:90vw;position:absolute;animation:dragPreviewFadeIn .2s ease-out}::ng-deep .cdk-drag-preview table{width:100%;border-collapse:collapse;margin:0;background:transparent;border:none!important;border-radius:inherit}::ng-deep .cdk-drag-preview table tbody tr{background:transparent;border:none}::ng-deep .cdk-drag-preview table tbody tr:hover{background:transparent!important;box-shadow:none!important;transform:none!important}::ng-deep .cdk-drag-preview table td{border:none!important;background:transparent!important;white-space:nowrap!important;vertical-align:middle!important;font-size:.75rem!important;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;pointer-events:none;padding:.375rem .5rem!important;border-right:none!important;border-left:none!important}::ng-deep .cdk-drag-preview table td:first-child{border-radius:8px 0 0 8px}::ng-deep .cdk-drag-preview table td:last-child{border-radius:0 8px 8px 0}::ng-deep .cdk-drag-preview table td:not(:first-child):not(:last-child){flex-grow:1;flex-basis:0}::ng-deep .cdk-drag-preview table td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.8)!important;font-weight:700!important;font-size:1rem!important}::ng-deep .cdk-drag-preview table td p-checkbox,::ng-deep .cdk-drag-preview table td p-tableCheckbox,::ng-deep .cdk-drag-preview table td p-tableHeaderCheckbox,::ng-deep .cdk-drag-preview table td kv-switch{pointer-events:none;opacity:.7}::ng-deep .cdk-drag-preview table td button,::ng-deep .cdk-drag-preview table td .kv-button,::ng-deep .cdk-drag-preview table td .icon-more{pointer-events:none;opacity:.6}::ng-deep .cdk-drag-preview table td img{max-width:30px;max-height:30px;object-fit:cover}::ng-deep .cdk-drag-preview table td .p-chip,::ng-deep .cdk-drag-preview table td .p-badge{font-size:.7rem!important;padding:.2rem .4rem!important}@media (max-width: 768px){::ng-deep .cdk-drag-preview{transform:rotate(1deg);max-width:95vw}::ng-deep .cdk-drag-preview table{height:100%!important}::ng-deep .cdk-drag-preview table tbody tr{height:100%;flex-direction:column}::ng-deep .cdk-drag-preview table td{width:100%!important}::ng-deep .cdk-drag-preview table td span{max-width:100%!important;justify-content:start!important}::ng-deep .cdk-drag-preview table td{padding:.25rem .375rem!important;font-size:.7rem!important}::ng-deep .cdk-drag-preview table td[cdkdraghandle] .material-symbols-outlined{font-size:.9rem!important}}::ng-deep .cdk-drag-preview:not(.ready):not(.initializing){opacity:0!important;visibility:hidden!important;transform:scale(0)!important}::ng-deep .cdk-drag-preview.initializing{opacity:0!important;visibility:hidden!important}::ng-deep .cdk-drag-preview.ready{opacity:.95!important;visibility:visible!important;transition:opacity .2s ease-out!important}::ng-deep .cdk-drag-preview.ready table{transform:rotate(1.5deg)}@keyframes dragPreviewFadeIn{0%{opacity:0;visibility:hidden}to{opacity:.95;visibility:visible}}::ng-deep tr.cdk-drag-dragging{display:flex!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle]{cursor:not-allowed!important;opacity:.5}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle]:hover{background-color:transparent!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.3)!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle] .material-symbols-outlined:hover{transform:none!important;color:rgba(var(--kv-color-system),.3)!important}\n"] }]
731
+ args: [{ selector: 'kv-table-draggable', template: "<div class=\"kv-table-container\">\r\n @if (config) {\r\n <p-table\r\n #dt\r\n #table\r\n styleClass=\"p-datatable-sm\"\r\n [value]=\"dataSource\"\r\n [(selection)]=\"selectedItems\"\r\n [rowSelectable]=\"isRowSelectable\"\r\n [columns]=\"config.columns\"\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 [rowHover]=\"true\"\r\n [totalRecords]=\"totalRecords\"\r\n [lazy]=\"config.lazy\"\r\n [first]=\"first()\"\r\n (onLazyLoad)=\"paginate($event)\"\r\n (selectionChange)=\"selectionChange($event)\"\r\n (onSort)=\"onSort($event)\"\r\n (onPage)=\"onPage($event)\"\r\n rowGroupMode=\"rowspan\"\r\n [groupRowsBy]=\"config.fieldGroup\"\r\n [showFirstLastIcon]=\"widthPage() > 960 ? true : false\"\r\n [pageLinks]=\"widthPage() > 960 ? 2 : 1\"\r\n [responsive]=\"true\"\r\n [responsiveLayout]=\"responsiveLayout ? 'stack' : ''\"\r\n [scrollable]=\"isTableScrollable\"\r\n [scrollHeight]=\"scrollHeight\"\r\n [rowTrackBy]=\"rowTrackBy\"\r\n\r\n cdkDropList\r\n [cdkDropListData]=\"currentPageData()\"\r\n (cdkDropListDropped)=\"drop($event)\"\r\n cdkDropListOrientation=\"vertical\"\r\n >\r\n @if (config.enableCation) {\r\n <ng-template pTemplate=\"caption\">\r\n <div\r\n class=\"flex flex-row flex-wrap justify-content-between grid formgrid p-fluid col-12 m-0 mb-2\"\r\n [style.padding.rem]=\"0.1\"\r\n >\r\n <div class=\"col-12 flex flex-column\">\r\n @if (config.title) {\r\n <div class=\"text-md font-bold my-3\">\r\n {{ config.title }}\r\n </div>\r\n } @if (config.subtitle) {\r\n <div class=\"text-sm mb-4 font-medium\">\r\n {{ config.subtitle }}\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center md:col-6 lg:col-4 {{\r\n widthPage() < 768 ? 'col-10' : 'col-12'\r\n }} gap-1 p-0\"\r\n >\r\n @if (config.enableFilter) {\r\n <input\r\n pInputText\r\n pAutoFocus\r\n [autofocus]=\"widthPage() > 800\"\r\n type=\"text\"\r\n (input)=\"onGlobalFilter(dt, $event)\"\r\n [placeholder]=\"searchPlaceholder\"\r\n autocomplete=\"off\"\r\n #inputField\r\n class=\"text-sm col-6\"\r\n />\r\n } @if(filterColumnsBtn) {\r\n <div #botaoFiltro>\r\n <kv-button\r\n id=\"botaoFiltro\"\r\n [icon]=\"'align_vertical_top'\"\r\n (onClick)=\"abrirMenuFiltro($event)\"\r\n severity=\"tertiary\"\r\n pTooltip=\"Ocultar/Exibir colunas\"\r\n size=\"small\"\r\n >\r\n </kv-button>\r\n </div>\r\n\r\n <div\r\n #menuFiltroDiv\r\n id=\"menuFiltroDiv\"\r\n [style.visibility]=\"'hidden'\"\r\n class=\"absolute z-4 bg-gray-200 menu-columns-filtro\"\r\n >\r\n <p-card styleClass=\"p-1\">\r\n <div\r\n class=\"flex flex-column text-medium w-15rem p-1\"\r\n *ngFor=\"let col of columnsFilter()\"\r\n >\r\n {{ checkMenuFiltro(col) }}\r\n <p-checkbox\r\n #filterColumns\r\n [label]=\"col.header\"\r\n [binary]=\"true\"\r\n class=\"checkbox-container\"\r\n (onChange)=\"dinamicColumnSet($event, col)\"\r\n [(ngModel)]=\"col.checked\"\r\n *ngIf=\"!dinamicDisableColumn(col)\"\r\n ></p-checkbox>\r\n </div>\r\n </p-card>\r\n </div>\r\n } @if(filterButton()) {\r\n <p-button\r\n styleClass=\"kv-button small tertiary text-xs font-medium\"\r\n label=\"Filtrar\"\r\n icon=\"pi pi-filter\"\r\n [badge]=\"filterButtonBadge()\"\r\n badgeClass=\"text-gray-800\"\r\n class=\"text-xs\"\r\n (onClick)=\"op.toggle($event)\"\r\n ></p-button>\r\n }\r\n\r\n <p-overlayPanel #op>\r\n <ng-content select=\"[filtro]\"> </ng-content>\r\n </p-overlayPanel>\r\n </div>\r\n\r\n <div class=\"flex flex-row col-2 justify-content-end gap-2 p-0\">\r\n @for (action of config.actionsLote; track i; let i = $index) {\r\n <div class=\"flex align-items-center justify-content-center\">\r\n @if ((((selectedItems && selectedItems.length > 0) || action.showAcoesLote)) &&\r\n (getOrExecute(action.visible, selectedItems) ?? true)) {\r\n <kv-button\r\n (onClick)=\"action?.command(); activeItemLote(selectedItems)\"\r\n [pTooltip]=\"getOrExecute(action.tooltip, selectedItems)\"\r\n [tooltipPosition]=\"'left'\"\r\n [disabled]=\"getOrExecute(action.disabled, selectedItems) || false\"\r\n [icon]=\"getOrExecute(action.icon, selectedItems)\"\r\n [severity]=\"action.severity || 'tertiary'\"\r\n size=\"small\"\r\n [label]=\"getOrExecute(action.label, selectedItems) || ''\"\r\n [items]=\"action.items || []\"\r\n [popup]=\"(action.items && action.items.length > 0) || false\"\r\n />\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n }\r\n\r\n <ng-template pTemplate=\"header\" let-columns>\r\n <tr>\r\n @if (enableDragDrop) {\r\n <th style=\"width: 40px; text-align: center;\" class=\"drag-handle-header\">\r\n </th>\r\n }\r\n @if (config.enableSelect) {\r\n <th>\r\n <p-tableHeaderCheckbox\r\n (click)=\"activeItemLote(selectedItems)\"\r\n [disabled]=\"disabledHeaderCheckbox\"\r\n ></p-tableHeaderCheckbox>\r\n </th>\r\n } @for (col of columns; track $index) {\r\n <th\r\n [pSortableColumn]=\"col.field\"\r\n [pSortableColumnDisabled]=\"col.sortable === false\"\r\n [style.width]=\"col.width\"\r\n >\r\n <div\r\n class=\"flex flex-row align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <span class=\"text-xs font-semibold\">{{ col.header }}</span>\r\n @if (col.sortable) {\r\n <p-sortIcon [field]=\"col.field\" class=\"pb-1\"></p-sortIcon>\r\n } @if (col.headerTooltip) {\r\n <span\r\n class=\"material-symbols-outlined flex align-items-center\"\r\n [pTooltip]=\"col.headerTooltip\"\r\n >info</span\r\n >\r\n }\r\n </div>\r\n </th>\r\n } @if (config.actions && config.actions.length > 0) {\r\n <th></th>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template\r\n pTemplate=\"body\"\r\n let-rowData\r\n let-columns=\"columns\"\r\n let-rowgroup=\"rowgroup\"\r\n let-rowspan=\"rowspan\"\r\n let-rowIndex=\"rowIndex\"\r\n >\r\n <tr\r\n cdkDrag\r\n cdkDragLockAxis=\"y\"\r\n (cdkDragStarted)=\"onDragStarted($event)\"\r\n (cdkDragEnded)=\"onDragEnded()\"\r\n [cdkDragDisabled]=\"!enableDragDrop || dragDropDisabled(rowData)\"\r\n [cdkDragData]=\"selectedItems\"\r\n\r\n (dblclick)=\"doubleClick($event, rowData)\"\r\n [ngClass]=\"{\r\n capitalize: tableCaptalized,\r\n last: rowIndex === dataSource.length - 1\r\n }\"\r\n class=\"tr-td {{ isDisabledRow(rowData) ? 'disabled-row' : '' }}\"\r\n >\r\n\r\n @if (enableDragDrop) {\r\n <td cdkDragHandle>\r\n <span class=\"material-symbols-outlined text-sm\">\r\n drag_indicator\r\n </span>\r\n </td>\r\n }\r\n\r\n @if (config.enableSelect) {\r\n <td style=\"width: 8px !important\">\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 } @for (col of columns; track $index) {\r\n <ng-container>\r\n @if (rowgroup && !col.template) {\r\n <td\r\n [attr.rowspan]=\"rowgroup && col.grouped ? rowspan : null\"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n class=\"{{\r\n col.styleClass\r\n ? col.styleClass(rowData, col, rowData[col.field])\r\n : ''\r\n }}\"\r\n >\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"returnRowClass(rowData, col)\"\r\n >\r\n @if (!isChipField(col) && !col.iconField && !isImageField(col) &&\r\n !isEmptyDataSource()) {\r\n <span\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }} text-xs {{ ellipsisText() && 'ellipsis-text' }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.max-width]=\"\r\n ellipsisText() && returnMaxWidth()(col.width)\r\n \"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"\r\n col.tooltipTag &&\r\n col.tooltipTag(rowData, col, rowData[col.field])\r\n \"\r\n [style.background-color]=\"\r\n col.tagColor(rowData, col, rowData[col.field])\r\n \"\r\n ></div>\r\n\r\n } @if (col.icon) {\r\n <i [class]=\"col.icon + ' mr-2'\"></i>\r\n }\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n } @if (isChipField(col) && !col.iconField) {\r\n <div>\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n class=\"text-xs\"\r\n >{{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n } @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <div class=\"w-full\">\r\n @if(!isSwitchField(col)) {\r\n\r\n <div\r\n class=\"w-full flex {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n } @else {\r\n <div class=\"flex flex-row justify-content-center\">\r\n <div\r\n [style]=\"{\r\n height: '16.8px',\r\n width: '28.8px',\r\n 'border-radius': '30px'\r\n }\"\r\n >\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </span>\r\n\r\n @if (isImageField(col)) {\r\n <span>\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n } @if (col.iconField) {\r\n <i\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n }\r\n\r\n <ng-template #booleanField>\r\n @if (!col.iconField && !isSwitchField(col)) {\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n >\r\n <i\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span\r\n class=\"material-symbols-outlined text-lg font-semibold\"\r\n >\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </div>\r\n\r\n } @if (isSwitchField(col)) {\r\n <span\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row align-items-center justify-content-center'\r\n \"\r\n style=\"height: 25px\"\r\n >\r\n @if(col.switchDisable){\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col.switchDisable(rowData, col)\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n } @else {\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n }\r\n </span>\r\n } @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <div class=\"w-full\">\r\n @if(!isSwitchField(col)) {\r\n <div\r\n class=\"w-full flex {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n } @else {\r\n <div class=\"flex flex-row justify-content-center\">\r\n <div\r\n [style]=\"{\r\n height: '16.8px',\r\n width: '28.8px',\r\n 'border-radius': '30px'\r\n }\"\r\n >\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </ng-template>\r\n </td>\r\n } @if (!rowgroup && !col.grouped && !col.template) {\r\n <td\r\n #tableCell\r\n class=\"rowTable {{\r\n col.styleClass\r\n ? col.styleClass(rowData, col, rowData[col.field])\r\n : ''\r\n }} \"\r\n [pTooltip]=\"returnTooltipRow(rowData, col)\"\r\n >\r\n @if(!isEmptyDataSource()) {\r\n\r\n <span\r\n *ngIf=\"!isBooleanField(rowData, col); else booleanField\"\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row gap-2 align-items-center ' +\r\n (col?.centralize && 'justify-content-center')\r\n \"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n [style.max-width]=\"ellipsisText() && returnMaxWidth()(col.width)\"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"\r\n col.tooltipTag &&\r\n col.tooltipTag(rowData, col, rowData[col.field])\r\n \"\r\n [style.background-color]=\"\r\n col.tagColor(rowData, col, rowData[col.field])\r\n \"\r\n ></div>\r\n\r\n } @if (!isChipField(col) && !col.iconField && !isImageField(col)){\r\n <span class=\"text-xs {{ ellipsisText() && 'ellipsis-text' }}\">\r\n @if (col.icon) {\r\n <i [class]=\"col.icon + ' mr-2'\"></i>\r\n }\r\n {{ transformValue(rowData, col) }}\r\n </span>\r\n } @if (isChipField(col) && !col.iconField) {\r\n <div>\r\n <span\r\n [class]=\"returnClassChip(rowData, col)\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n class=\"text-xs\"\r\n >\r\n {{ transformValue(rowData, col) }}</span\r\n >\r\n </div>\r\n }\r\n </span>\r\n } @if (isImageField(col)) {\r\n <span>\r\n <span>\r\n <img class=\"image\" [src]=\"loadImage(rowData, col)\" />\r\n </span>\r\n </span>\r\n } @if (col.iconField) {\r\n <i\r\n [ngClass]=\"{\r\n 'material-icons': col.indIconMaterial,\r\n 'material-symbols-outlined mr-2': !col.indIconMaterial\r\n }\"\r\n [pTooltip]=\"returnTooltipIcon(rowData, col)\"\r\n >\r\n {{ returnClassIcon(rowData, col) }}\r\n </i>\r\n }\r\n\r\n <ng-template #booleanField>\r\n @if (!col.iconField && !isSwitchField(col)) {\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && 'justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n >\r\n <i\r\n [ngClass]=\"\r\n rowData[col.field] ? 'text-green-500' : 'text-red-500'\r\n \"\r\n ><span\r\n class=\"material-symbols-outlined text-lg font-semibold\"\r\n >\r\n {{ rowData[col.field] ? \"check\" : \"close\" }}\r\n </span>\r\n </i>\r\n </div>\r\n } @if (isSwitchField(col)) {\r\n\r\n <span\r\n [class]=\"\r\n returnRowClass(rowData, col) +\r\n ' flex flex-row align-items-center justify-content-center'\r\n \"\r\n style=\"height: 25px\"\r\n >\r\n @if(col.switchDisable){\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col.switchDisable(rowData, col)\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n } @else {\r\n <kv-switch\r\n (onSwitchChange)=\"onSwitchChange($event, rowData, col)\"\r\n [disabled]=\"col?.onlyReadField ?? true\"\r\n [switchValue]=\"transformValue(rowData, col)\"\r\n >\r\n </kv-switch>\r\n }\r\n </span>\r\n }\r\n </ng-template>\r\n\r\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <div class=\"w-full\">\r\n @if(!isSwitchField(col)) {\r\n <div\r\n class=\"w-full flex {{\r\n col.centralize && 'justify-content-center'\r\n }}\"\r\n >\r\n <div [style.width]=\"widthRandom()(col, rowIndex) + '%'\">\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n\r\n } @else {\r\n <div class=\"flex flex-row justify-content-center\">\r\n <div\r\n [style]=\"{\r\n height: '16.8px',\r\n width: '28.8px',\r\n 'border-radius': '30px'\r\n }\"\r\n >\r\n <p-skeleton styleClass=\"w-full\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </td>\r\n } @if (col.template) {\r\n <td\r\n class=\"rowTable {{\r\n col.styleClass\r\n ? col.styleClass(rowData, col, rowData[col.field])\r\n : ''\r\n }} \"\r\n >\r\n @if (getCustomTemplate(col.template.name)) {\r\n\r\n <div\r\n class=\"flex flex-row gap-2 align-items-center {{\r\n col?.centralize && ' justify-content-center'\r\n }}\"\r\n [pTooltip]=\"\r\n col.tooltip && col.tooltip(rowData, col, rowData[col.field])\r\n \"\r\n [tooltipPosition]=\"'bottom'\"\r\n >\r\n @if(col.tagColor) {\r\n <div\r\n class=\"tag\"\r\n [pTooltip]=\"col.tooltipTag && col.tooltipTag(rowData, col)\"\r\n [style.background-color]=\"col.tagColor(rowData, col)\"\r\n ></div>\r\n } @if(!isEmptyDataSource()) {\r\n\r\n <div class=\"w-full\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"getCustomTemplate(col.template.name)\"\r\n [ngTemplateOutletContext]=\"{ $implicit: rowData }\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n @if(isEmptyDataSource() && this.isLoadingSkeleton()) {\r\n <p-skeleton\r\n [width]=\"widthRandom()(col, rowIndex) + '%'\"\r\n ></p-skeleton>\r\n } }\r\n </td>\r\n }\r\n </ng-container>\r\n } @if (config.actions && config.actions.length > 0) {\r\n <td>\r\n <div class=\"flex flex-row justify-content-end w-full\">\r\n <span\r\n class=\"material-symbols-outlined cursor-pointer icon-more\"\r\n (click)=\"menu.toggle($event); activeItem(rowData)\"\r\n >\r\n <!-- more_vert -->\r\n more_horiz\r\n </span>\r\n\r\n <p-tieredMenu\r\n #menu\r\n [popup]=\"true\"\r\n [model]=\"tableActions[rowIndex - actionsOffset]\"\r\n appendTo=\"body\"\r\n >\r\n <ng-template let-item pTemplate=\"item\">\r\n <div\r\n [pTooltip]=\"item.tooltip\"\r\n tooltipPosition=\"left\"\r\n class=\"cursor-pointer\"\r\n >\r\n <span class=\"text-xs\">\r\n {{ item.label }}\r\n </span>\r\n </div>\r\n </ng-template>\r\n </p-tieredMenu>\r\n <!-- <span pTooltip=\"{{ tableActions[rowIndex - actionsOffset][0]?.tooltip }}\" tooltipPosition=\"top\">a</span> -->\r\n </div>\r\n </td>\r\n }\r\n </tr>\r\n </ng-template>\r\n\r\n <ng-template pTemplate=\"emptymessage\" let-columns>\r\n <tr>\r\n <td\r\n [attr.colspan]=\"columns.length + (enableDragDrop ? 1 : 0) + (config.enableSelect ? 1 : 0) + (config.actions && config.actions.length > 0 ? 1 : 0)\"\r\n style=\"text-align: center; border-radius: 10px !important\"\r\n >\r\n <p class=\"font-medium m-0 text-xs\">Nenhum registro encontrado</p>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n }\r\n</div>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/icon?family=Material+Icons\"\r\n/>\r\n\r\n<link\r\n rel=\"stylesheet\"\r\n href=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@48,400,0,0\"\r\n/>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap\";@import\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0\";::ng-deep :root{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255;--kv-primary-color: 41, 185, 45;--kv-secondary-color: 0, 37, 66;--kv-tertiary-color: 165, 165, 165;--kv-danger-color: 220, 53, 69;--kv-success-color: 75, 181, 67;--kv-info-color: 58, 170, 208;--kv-warn-color: 241, 90, 36;--kv-contrast-color: 33, 37, 41}::ng-deep .padrao{--kv-color-system: 10,58,120;--kv-color-system-cta: 76, 175, 80;--kv-color-text: 0, 0, 0;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-keevocenter{--kv-color-system: 88,25,153;--kv-color-system-cta: 0, 116, 217;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 248,250,253;--kv-background-card: 255,255,255}::ng-deep .theme-holos{--kv-color-system: 241,90,36;--kv-color-system-cta: 224, 168, 35;--kv-color-text: 0, 0, 0;--kv-color-text-inv: 255, 255, 165;--kv-background-system: 240,240,240;--kv-background-card: 2255,255,255}.system-color{color:rgb(var(--kv-color-system),1)}.bg-system-100{background:rgb(var(--kv-color-system),1)}.bg-system-75{background:rgb(var(--kv-color-system),.75)}.bg-system-50{background:rgb(var(--kv-color-system),.5)}.bg-system-25{background:rgb(var(--kv-color-system),.25)}.material-symbols-outlined{font-family:Material Symbols Outlined!important}*{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-accordion,::ng-deep .p-accordion-header,::ng-deep .p-accordion-content,::ng-deep .p-badge,::ng-deep .p-overlay-badge,::ng-deep .p-breadcrumb,::ng-deep .p-breadcrumb-item,::ng-deep .p-breadcrumb-link,::ng-deep .p-button,::ng-deep .p-calendar,::ng-deep .p-card,::ng-deep .p-card-title,::ng-deep .p-card-subtitle,::ng-deep .p-card-content,::ng-deep .p-checkbox,::ng-deep .p-chip,::ng-deep .p-confirm-dialog,::ng-deep .p-confirm-dialog-message,::ng-deep .p-contextmenu,::ng-deep .p-contextmenu-item,::ng-deep .p-dataview,::ng-deep .p-dataview-content,::ng-deep .p-dialog,::ng-deep .p-dialog-title,::ng-deep .p-dialog-content,::ng-deep .p-dropdown,::ng-deep .p-dropdown-label,::ng-deep .p-dropdown-item,::ng-deep .p-dynamic-dialog,::ng-deep .p-dynamic-dialog-title,::ng-deep .p-dynamic-dialog-content,::ng-deep .p-editor,::ng-deep .p-fieldset,::ng-deep .p-fieldset-legend,::ng-deep .p-fieldset-content,::ng-deep .p-fileupload,::ng-deep .p-inputmask,::ng-deep .p-inputnumber,::ng-deep .p-inputtextarea,::ng-deep .p-inputtext,::ng-deep .p-menu,::ng-deep .p-menuitem,::ng-deep .p-menuitem-text,::ng-deep .p-message,::ng-deep .p-messages,::ng-deep .p-multiselect,::ng-deep .p-multiselect-label,::ng-deep .p-multiselect-item,::ng-deep .p-panelmenu,::ng-deep .p-panelmenu-header,::ng-deep .p-panelmenu-content,::ng-deep .p-panel,::ng-deep .p-panel-header,::ng-deep .p-panel-content,::ng-deep .p-password,::ng-deep .p-picklist,::ng-deep .p-progressbar,::ng-deep .p-radiobutton,::ng-deep .p-rating,::ng-deep .p-sidebar,::ng-deep .p-splitbutton,::ng-deep .p-steps,::ng-deep .p-step,::ng-deep .p-table,::ng-deep .p-datatable,::ng-deep .p-tabview,::ng-deep .p-tabpanel,::ng-deep .p-tag,::ng-deep .p-toast,::ng-deep .p-toolbar,::ng-deep .p-tooltip,::ng-deep .p-tree,::ng-deep .p-treetable,::ng-deep .p-selectbutton,::ng-deep .p-stepper,::ng-deep .p-inputgroup,::ng-deep .p-inputgroup-addon,::ng-deep .p-text{font-family:Inter,Inter var,sans-serif!important}::ng-deep .p-icon,svg{height:.6rem}:host ::ng-deep .inputs{height:1.875rem}:host ::ng-deep .inputs,.p-inputtext,.p-inputtextarea{font-size:.875rem}::ng-deep .p-dialog .p-dialog-header{color:rgb(var(--kv-color-text))!important;background:linear-gradient(0deg,#00000005 .44%,#0000 49.5%),#fff!important;display:flex!important;flex-wrap:wrap;word-wrap:break-word;border-bottom:1px solid rgb(var(--kv-color-text),.15)}::ng-deep .p-dialog{min-width:320px}::ng-deep .p-dialog-content{overflow-x:hidden}::ng-deep .p-dialog-content::-webkit-scrollbar{width:8px}::ng-deep .p-dialog-content::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-dialog-content::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-dialog-content:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-dialog-content::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}::ng-deep .p-dialog-footer{display:flex;justify-content:flex-end;padding:10px;gap:10px}::ng-deep .p-dialog .p-dialog-header .p-dialog-header-icon{display:none}::ng-deep .p-tooltip{font-size:.825rem!important}::ng-deep p-tablecheckbox p-tableheadercheckbox .p-checkbox{display:flex!important;align-items:center!important;justify-content:right}::ng-deep .p-checkbox{display:flex!important;align-items:center!important;justify-content:center}::ng-deep .kv-button .p-button-loading-icon svg{width:100%;height:100%;display:block}::ng-deep .kv-button .p-button-loading-icon svg g{transform:translate(0)}::ng-deep .kv-button{white-space:nowrap;border:none;padding:.4rem;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:.125rem}::ng-deep .kv-button .kv-button-label{font-weight:500}::ng-deep .small{height:1.625rem;min-width:1.625rem}::ng-deep .small .kv-button-label{font-size:.625rem}::ng-deep .small .kv-button-icon{font-size:.75rem}::ng-deep .small .p-button-loading-icon{width:.55rem;height:.55rem}::ng-deep .normal{height:1.875rem;min-width:1.875rem}::ng-deep .normal .kv-button-label{font-size:.825rem}::ng-deep .normal .kv-button-icon{font-size:1rem}::ng-deep .normal .p-button-loading-icon{width:.75rem;height:.75rem}::ng-deep .large{height:2.125rem;min-width:2.125rem}::ng-deep .large .kv-button-label{font-size:1rem}::ng-deep .large .kv-button-icon{font-size:1.25rem}::ng-deep .large .p-button-loading-icon{width:.875rem;height:.875rem}::ng-deep .primary{background-color:rgb(var(--kv-primary-color))}::ng-deep .primary:hover{background-color:rgba(var(--kv-primary-color),.8)}::ng-deep .primary:active{background-color:rgba(var(--kv-primary-color),.95)}.primary.outline{border:solid .5px rgb(var(--kv-primary-color));background-color:#fff;color:rgb(var(--kv-primary-color))}.primary.outline:hover{background-color:rgb(var(--kv-primary-color));color:#fff}.primary.outline:active{background-color:rgba(var(--kv-primary-color),.8)}.primary.text{opacity:.9;background-color:transparent;color:rgb(var(--kv-primary-color))}.primary.text:hover{background-color:rgba(var(--kv-primary-color),.1)}.primary.text:active{background-color:rgba(var(--kv-primary-color),.2)}::ng-deep .secondary{background-color:rgb(var(--kv-secondary-color))}::ng-deep .secondary:hover{background-color:rgba(var(--kv-secondary-color),.8)}::ng-deep .secondary:active{background-color:rgba(var(--kv-secondary-color),.95)}.secondary.outline{border:solid .5px rgb(var(--kv-secondary-color));background-color:#fff;color:rgb(var(--kv-secondary-color))}.secondary.outline:hover{background-color:rgb(var(--kv-secondary-color));color:#fff}.secondary.outline:active{background-color:rgba(var(--kv-secondary-color),.8)}.secondary.text{background-color:transparent;color:rgb(var(--kv-secondary-color))}.secondary.text:hover{background-color:rgba(var(--kv-secondary-color),.1)}.secondary.text:active{background-color:rgba(var(--kv-secondary-color),.2)}::ng-deep .tertiary{color:#212121;background-color:rgba(var(--kv-tertiary-color),.3)}::ng-deep .tertiary:hover{background-color:rgba(var(--kv-tertiary-color),.8)}::ng-deep .tertiary:active{background-color:rgba(var(--kv-tertiary-color),.95)}.tertiary.outline{border:solid .5px rgb(var(--kv-tertiary-color));background-color:#fff;color:rgb(var(--kv-tertiary-color))}.tertiary.outline:hover{background-color:rgb(var(--kv-tertiary-color));color:#fff}.tertiary.outline:active{background-color:rgba(var(--kv-tertiary-color),.8)}.tertiary.text{background-color:transparent;color:rgb(var(--kv-tertiary-color))}.tertiary.text:hover{background-color:rgba(var(--kv-tertiary-color),.1)}.tertiary.text:active{background-color:rgba(var(--kv-tertiary-color),.2)}::ng-deep .danger{background-color:rgb(var(--kv-danger-color))}::ng-deep .danger:hover{background-color:rgba(var(--kv-danger-color),.8)}::ng-deep .danger:active{background-color:rgba(var(--kv-danger-color),.95)}::ng-deep .danger.outline{border:solid .5px rgb(var(--kv-danger-color));background-color:#fff;color:rgb(var(--kv-danger-color))}::ng-deep .danger.outline:hover{background-color:rgb(var(--kv-danger-color));color:#fff}::ng-deep .danger.outline:active{background-color:rgba(var(--kv-danger-color),.8)}::ng-deep .danger.text{background-color:transparent;color:rgb(var(--kv-danger-color))}::ng-deep .danger.text:hover{background-color:rgba(var(--kv-danger-color),.1)}::ng-deep .danger.text:active{background-color:rgba(var(--kv-danger-color),.2)}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar{width:6px}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .p-datatable>.p-datatable-wrapper:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .p-datatable>.p-datatable-wrapper::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.tag{width:5px;height:20px;border-radius:.25rem}::ng-deep .p-panel .p-panel-header{border:none!important}:host ::ng-deep .p-datatable-header{padding:0!important;border-radius:5px!important;background-color:transparent;border:none}::ng-deep .p-datatable.p-datatable-sm .p-datatable-thead>tr>th{padding:.15rem;background-color:rgba(var(--kv-color-system),.05);color:rgba(var(--kv-color-text),.6)}::ng-deep .p-datatable-table{border:1px solid rgba(var(--kv-color-system),.1);border-radius:.5rem;overflow:hidden;color:rgb(var(--kv-color-system))}.icon-more{font-weight:500;font-size:1.4rem!important;color:rgb(var(--kv-color-system),.75);transition:all .4s}.icon-more:hover,.icon-more:focus{color:#5e5e5e;transition:color .3s,transform .3s;background-color:#eaeaea;border-radius:50%}.tr-td{overflow-wrap:anywhere}.tr-td:hover{box-shadow:#3c40434d 0 1px 2px,#3c404326 0 2px 6px 2px;background-color:#fff;transition:color .3s,transform .3s;transform:scale(1)}.tr-td:hover.last{box-shadow:-1px -1px 9px -3px #000000bf;-webkit-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75);-moz-box-shadow:-1px -1px 9px -3px rgba(0,0,0,.75)}.disabled-row{pointer-events:none;opacity:.6;background-color:#dddddd8e}::ng-deep .p-tooltip{pointer-events:auto}.btn-table{background-color:#29b92d;padding:12px}.btn-table:hover{background-color:#249a29}.btn-table:active{background-color:#1c801f}.btn-table:disabled{background-color:#29b92d}::ng-deep svg.p-icon{width:.65rem;height:.65rem}::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:#004172;background:#004172}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:hover{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:active{background-color:#002542}::ng-deep .p-checkbox .p-checkbox-box.p-highlight:disabled{background-color:#002542;opacity:.4;cursor:auto}input{height:1.75rem}::ng-deep .p-checkbox .p-checkbox-box{width:1.125rem;height:1.125rem;border:1.5px solid #d1d5db}::ng-deep .p-checkbox{display:flex!important;align-items:center!important;justify-content:right;width:1.625rem!important;height:1.125rem}::ng-deep .p-checkbox-label{font-size:.875rem}::ng-deep .p-datatable .p-paginator-bottom{border:solid #ffffff;scale:.75}::ng-deep .p-datatable.p-datatable-sm .p-datatable-tbody>div>tr>td{padding:.1rem}::ng-deep .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:.25rem!important}::ng-deep .p-dropdown-panel .p-dropdown-items{padding:.5rem!important}::ng-deep .p-button-label{font-weight:500!important}::ng-deep .p-button .p-button-icon-left{margin-left:.25rem;margin-right:.25rem;font-size:.675rem!important}:host{height:100%}::ng-deep .kv-table-container,::ng-deep p-table{height:100%}::ng-deep p-table .p-datatable{display:flex;flex-direction:column;height:100%}::ng-deep .p-datatable .p-datatable-wrapper{flex:1 1 1}::ng-deep p-table .p-datatable .p-datatable-wrapper,::ng-deep p-table{height:100%}::ng-deep table{height:auto!important}.ellipsis-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;display:inline-block}::ng-deep .p-tieredmenu{padding:.5rem!important}:host ::ng-deep .p-disabled *{pointer-events:auto!important}::ng-deep p-tieredmenusub .p-disabled *:active{pointer-events:none!important;font-size:.75rem!important;padding:.5rem!important}::ng-deep .p-tieredmenu .p-tieredmenu-root-list{font-size:.75rem!important}::ng-deep .p-tieredmenu .p-menuitem>.p-menuitem-content{padding:.5rem}.td-drag-container{cursor:move;font-weight:700}.td-drag-container:active{cursor:grabbing}::ng-deep .drag-handle-header{padding:.5rem!important;text-align:center!important;vertical-align:middle!important;background-color:rgba(var(--kv-color-system),.05)!important}::ng-deep .drag-handle-header .material-symbols-outlined{color:rgba(var(--kv-color-system),.4);font-size:1rem}::ng-deep td[cdkdraghandle]{cursor:grab;padding:.5rem!important;text-align:center!important;vertical-align:middle!important;width:40px!important;min-width:40px!important;max-width:40px!important}::ng-deep td[cdkdraghandle]:hover{background-color:rgba(var(--kv-color-system),.05);transition:background-color .2s ease}::ng-deep td[cdkdraghandle]:active{cursor:grabbing;background-color:rgba(var(--kv-color-system),.1)}::ng-deep td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.6);font-size:1.1rem;transition:color .2s ease,transform .2s ease;display:block}::ng-deep td[cdkdraghandle] .material-symbols-outlined:hover{color:rgba(var(--kv-color-system),.8);transform:scale(1.1)}::ng-deep .cdk-drop-list{width:100%!important}::ng-deep .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1);cursor:grab}::ng-deep .cdk-drag:hover{background-color:rgba(var(--kv-color-system),.02);box-shadow:0 2px 4px #0000001a}::ng-deep .cdk-drag.cdk-drag-dragging{opacity:.4;transform:none!important;position:relative!important}::ng-deep .cdk-drag:active{cursor:grabbing}::ng-deep .cdk-drag:active:hover{box-shadow:none}::ng-deep .cdk-drag-animating{transition:transform .3s cubic-bezier(.25,.8,.25,1)}::ng-deep .cdk-drop-list:not(.cdk-drop-list-dragging) .cdk-drag{transition:all .3s cubic-bezier(.25,.8,.25,1)}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}::ng-deep .cdk-drop-list-dragging tr:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1);opacity:.8}::ng-deep .cdk-drop-list-dragging .cdk-drag:not(.cdk-drag-placeholder){opacity:.6}::ng-deep .cdk-drag-placeholder{opacity:.3;background:rgba(var(--kv-color-system),.05);border:2px dashed rgba(var(--kv-color-system),.3);border-radius:4px;height:48px;margin:2px 0;transition:all .3s ease;display:table-row}::ng-deep .cdk-drag-placeholder:hover{background:rgba(var(--kv-color-system),.1);border-color:rgba(var(--kv-color-system),.5)}::ng-deep .cdk-drag-placeholder.cdk-drop-list-receiving{background:#00ff001a;border-color:#00ff0080;border-style:solid}::ng-deep .cdk-drag-preview{display:none!important;box-sizing:border-box;border-radius:8px;box-shadow:0 8px 25px #00000026,0 4px 10px #0000001a;background:#fff;border:1px solid rgba(var(--kv-color-system),.2);opacity:0;z-index:1000;overflow:hidden;visibility:hidden;transition:opacity .2s ease-out;max-width:90vw;position:absolute;animation:dragPreviewFadeIn .2s ease-out}::ng-deep .cdk-drag-preview table{width:100%;border-collapse:collapse;margin:0;background:transparent;border:none!important;border-radius:inherit}::ng-deep .cdk-drag-preview table tbody tr{background:transparent;border:none}::ng-deep .cdk-drag-preview table tbody tr:hover{background:transparent!important;box-shadow:none!important;transform:none!important}::ng-deep .cdk-drag-preview table td{border:none!important;background:transparent!important;white-space:nowrap!important;vertical-align:middle!important;font-size:.75rem!important;line-height:1.25rem;overflow:hidden;text-overflow:ellipsis;pointer-events:none;padding:.375rem .5rem!important;border-right:none!important;border-left:none!important}::ng-deep .cdk-drag-preview table td:first-child{border-radius:8px 0 0 8px}::ng-deep .cdk-drag-preview table td:last-child{border-radius:0 8px 8px 0}::ng-deep .cdk-drag-preview table td:not(:first-child):not(:last-child){flex-grow:1;flex-basis:0}::ng-deep .cdk-drag-preview table td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.8)!important;font-weight:700!important;font-size:1rem!important}::ng-deep .cdk-drag-preview table td p-checkbox,::ng-deep .cdk-drag-preview table td p-tableCheckbox,::ng-deep .cdk-drag-preview table td p-tableHeaderCheckbox,::ng-deep .cdk-drag-preview table td kv-switch{pointer-events:none;opacity:.7}::ng-deep .cdk-drag-preview table td button,::ng-deep .cdk-drag-preview table td .kv-button,::ng-deep .cdk-drag-preview table td .icon-more{pointer-events:none;opacity:.6}::ng-deep .cdk-drag-preview table td img{max-width:30px;max-height:30px;object-fit:cover}::ng-deep .cdk-drag-preview table td .p-chip,::ng-deep .cdk-drag-preview table td .p-badge{font-size:.7rem!important;padding:.2rem .4rem!important}@media (max-width: 768px){::ng-deep .cdk-drag-preview{transform:rotate(1deg);max-width:95vw}::ng-deep .cdk-drag-preview table{height:100%!important}::ng-deep .cdk-drag-preview table tbody tr{height:100%;flex-direction:column}::ng-deep .cdk-drag-preview table td{width:100%!important}::ng-deep .cdk-drag-preview table td span{max-width:100%!important;justify-content:start!important}::ng-deep .cdk-drag-preview table td{padding:.25rem .375rem!important;font-size:.7rem!important}::ng-deep .cdk-drag-preview table td[cdkdraghandle] .material-symbols-outlined{font-size:.9rem!important}}::ng-deep .cdk-drag-preview:not(.ready):not(.initializing){opacity:0!important;visibility:hidden!important;transform:scale(0)!important}::ng-deep .cdk-drag-preview.initializing{opacity:0!important;visibility:hidden!important}::ng-deep .cdk-drag-preview.ready{opacity:.95!important;visibility:visible!important;transition:opacity .2s ease-out!important}::ng-deep .cdk-drag-preview.ready table{transform:rotate(1.5deg)}@keyframes dragPreviewFadeIn{0%{opacity:0;visibility:hidden}to{opacity:.95;visibility:visible}}::ng-deep tr.cdk-drag-dragging{display:flex!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle]{cursor:not-allowed!important;opacity:.5}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle]:hover{background-color:transparent!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle] .material-symbols-outlined{color:rgba(var(--kv-color-system),.3)!important}::ng-deep tr.cdk-drag-disabled td[cdkdraghandle] .material-symbols-outlined:hover{transform:none!important;color:rgba(var(--kv-color-system),.3)!important}\n"] }]
732
732
  }], ctorParameters: () => [{ type: i1.DatePipe }, { type: i1.DecimalPipe }, { type: i2.CpfCnpjPipe }, { type: i3.TelefonePipe }, { type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { _templates: [{
733
733
  type: Input,
734
734
  args: ['templates']
@@ -823,4 +823,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
823
823
  type: HostListener,
824
824
  args: ['document:click', ['$event']]
825
825
  }] } });
826
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdGFibGUtZHJhZ2dhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LXRhYmxlLWRyYWdnYWJsZS9rdi10YWJsZS1kcmFnZ2FibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdGFibGUtZHJhZ2dhYmxlL2t2LXRhYmxlLWRyYWdnYWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQTZCLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZHLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUdmLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFJTixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLEtBQUssRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFJdEQsT0FBTyxFQUNMLFlBQVksRUFFWixhQUFhLEdBQ2QsTUFBTSx3Q0FBd0MsQ0FBQztBQUtoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFckYsTUFBTSxVQUFVLEdBQ2QsMHFQQUEwcVAsQ0FBQztBQU83cVAsTUFBTSxPQUFPLHlCQUF5QjtJQStEcEMsSUFBcUIsU0FBUyxDQUFDLEtBQWtCO1FBQy9DLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO1lBQ25CLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUk7WUFDeEMsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksS0FBSztZQUN6QyxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxJQUFJO1lBQ3hDLEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQztRQUVILElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFHLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBbUJELFlBQ21CLFFBQWtCLEVBQ2xCLFdBQXdCLEVBQ3hCLFdBQXdCLEVBQ3hCLFlBQTBCLEVBQ25DLFFBQW1CLEVBQ25CLFVBQXNCO1FBTGIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUNuQyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLGVBQVUsR0FBVixVQUFVLENBQVk7UUEvRmhDLFlBQU8sR0FBd0IsRUFBRSxDQUFDO1FBQ2xDLGtCQUFhLEdBQXdCLEVBQUUsQ0FBQztRQUN4Qyx1QkFBa0IsR0FBYSxFQUFFLENBQUM7UUFDbEMsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFDMUIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLFlBQU8sR0FBWSxJQUFJLENBQUM7UUFDeEIsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFFakMsaUJBQVksR0FBaUIsRUFBRSxDQUFDO1FBQ2hDLG1CQUFjLEdBQVUsRUFBRSxDQUFDO1FBQzNCLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBQ2xCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFNUIsaUJBQVksR0FBRyxJQUFJLEdBQUcsQ0FBUztZQUNyQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7U0FDeEUsQ0FBQyxDQUFDO1FBQ0ssa0JBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBUztZQUN0QyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUk7WUFDN0YsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUk7U0FDcEMsQ0FBQyxDQUFDO1FBQ0ssV0FBTSxHQUFHLElBQUksR0FBRyxDQUFTO1lBQy9CLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFFSCxVQUFLLEdBQUcsS0FBSyxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLFNBQUksR0FBRyxLQUFLLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFFeEIsY0FBUyxHQUFHLFNBQVMsQ0FBYSxXQUFXLENBQUMsQ0FBQztRQUUvQyxpQkFBWSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNyQyxzQkFBaUIsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDMUMsaUJBQVksR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDckMsc0JBQWlCLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBRXJCLGdCQUFXLEdBQUcsTUFBTSxDQUEwQixTQUFTLENBQUMsQ0FBQztRQUMxRSxjQUFTLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBR3JCLHNCQUFpQixHQUFXLGNBQWMsQ0FBQztRQUMzQyxxQkFBZ0IsR0FBdUIsU0FBUyxDQUFDO1FBQ2pELGVBQVUsR0FBVSxFQUFFLENBQUM7UUFDdkIsa0JBQWEsR0FBVSxFQUFFLENBQUM7UUFFMUIsY0FBUyxHQUFZLElBQUksQ0FBQztRQUcxQixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsdUJBQWtCLEdBQVksSUFBSSxDQUFDO1FBQ25DLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQyxpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFDbkMsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFDakMsZUFBVSxHQUFzQyxDQUFDLEtBQWEsRUFBRSxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQztRQUNuRixxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFDakMsMkJBQXNCLEdBQVksS0FBSyxDQUFDO1FBQ3hDLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBQy9CLHFCQUFnQixHQUEyQixHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7UUFDdkQsZUFBVSxHQUFhLENBQUMsT0FBWSxFQUFFLEdBQXNCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQWNuRSxpQkFBWSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3JELHFCQUFnQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3pELGVBQVUsR0FBZ0MsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3RCxzQkFBaUIsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxRCxxQkFBZ0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN6RCxnQkFBVyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3BELHdCQUFtQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVELGlCQUFZLEdBQTRGLElBQUksWUFBWSxFQUFFLENBQUM7UUFxQnJJLHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRyxDQUFDO1lBQ25DLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxxQkFBZ0IsR0FBRyxNQUFNLENBQVEsRUFBRSxDQUFDLENBQUM7UUFFckMsbUJBQWMsR0FBYSxFQUFFLENBQUM7UUFFOUIsZ0JBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFRLEVBQUUsR0FBUSxFQUFFLEVBQUU7WUFDbEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzlFLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDeEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBb0JILG1CQUFjLEdBQVUsRUFBRSxDQUFDO1FBRTNCLHNCQUFpQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDaEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekYsQ0FBQyxDQUFDLENBQUE7UUFxaEJGLGtCQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUM1QixNQUFNLGNBQWMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFM0YsT0FBTyxDQUFDLEdBQUcsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO1FBRUgsbUJBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFnQixFQUFFLEVBQUU7WUFDbkQsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO1lBQzNFLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRWhELElBQUksU0FBUyxHQUFHLFVBQVUsR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDO1lBRTNDLE9BQU8sR0FBRyxTQUFTLElBQUksQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUVILG9CQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUM5QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUUzQyxJQUFJLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQztZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sVUFBVSxDQUFDO1lBQ3BCLENBQUM7WUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdCLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBN2xCRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFvQkQsU0FBUztRQUNQLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVTtZQUNmLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNO2dCQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFOUUsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBRTFCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDaEIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQztJQUNILENBQUM7SUFRRCx3QkFBd0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztZQUM3RCxJQUFJLE9BQU8sR0FBUSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDMUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBRXRDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUN0RCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUV4QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDM0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQy9DLElBQUksZ0JBQWdCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM1QixJQUNFLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssUUFBUTtvQkFDdkMsT0FBTyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxRQUFRLEVBQ3ZDLENBQUM7b0JBQ0QsT0FBUSxDQUFDLENBQUMsZ0JBQWdCLENBQVksQ0FBQyxhQUFhLENBQ2pELENBQUMsQ0FBQyxnQkFBZ0IsQ0FBWSxDQUNoQyxDQUFDO2dCQUNKLENBQUM7cUJBQU0sSUFDTCxPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLFNBQVM7b0JBQ3hDLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssU0FBUyxFQUN4QyxDQUFDO29CQUNELE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixDQUFDO3dCQUNoRCxDQUFDLENBQUMsQ0FBQzt3QkFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDOzRCQUNuQixDQUFDLENBQUMsQ0FBQzs0QkFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ1gsQ0FBQztxQkFBTSxJQUNMLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssUUFBUTtvQkFDdkMsT0FBTyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxRQUFRLEVBQ3ZDLENBQUM7b0JBQ0QsT0FBUSxDQUFDLENBQUMsZ0JBQWdCLENBQVksR0FBSSxDQUFDLENBQUMsZ0JBQWdCLENBQVksQ0FBQztnQkFDM0UsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE9BQU8sQ0FBQyxDQUFDO2dCQUNYLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixRQUFRLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZELEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ3JDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFxQixDQUFDO29CQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQzt3QkFDMUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQzFCLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDJCQUEyQixDQUFDLE1BQW1CO1FBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTVDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLE1BQW1CO1FBQ3ZDLElBQUksTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDO1lBRXpCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVsRSxLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0MsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JDLElBQUksSUFBSSxDQUFDLFVBQVU7WUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ2hFLENBQUM7SUFHRCxjQUFjO1FBQ1osSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU0sVUFBVSxDQUFDLE9BQVk7UUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFlBQVksQ0FBSSxNQUFvQixFQUFFLElBQVM7UUFDN0MsT0FBTyxZQUFZLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBWSxFQUFFLEdBQXNCO1FBQ2pELE9BQU8sT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQXNCO1FBQ2hDLE9BQU8sR0FBRyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUM7SUFDakMsQ0FBQztJQUVTLE1BQU0sQ0FBQyxLQUFxQjtRQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBc0I7UUFDakMsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDeEUsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFzQjtRQUNsQyxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxTQUFTLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN6RSxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVU7UUFDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELGtCQUFrQixDQUFDLE9BQVk7UUFDN0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLDhCQUE4QjtZQUMvQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLENBQUM7WUFDckQsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNaLENBQUM7SUFFRCxhQUFhLENBQUMsT0FBWTtRQUN4QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzFFLENBQUM7SUFFTyxhQUFhLENBQUMsT0FBWSxFQUFFLEdBQXNCLEVBQUUsSUFBUztRQUNuRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDdkQsQ0FBQztJQUVELGNBQWM7UUFDWixRQUFRLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZELEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ3JDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFxQixDQUFDO29CQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQzt3QkFDMUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQzFCLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFZLEVBQUUsR0FBc0I7UUFDNUM7O1VBRUU7UUFDRixJQUFJLE9BQU8sR0FBRyw4QkFBOEIsVUFBVSxHQUFHLENBQUM7UUFDMUQsSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN0RSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFBRSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7Z0JBQ2pFLE9BQU8sR0FBRyw4QkFBOEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQ3JFLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRU0sY0FBYyxDQUFDLEtBQVksRUFBRSxLQUFZO1FBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFFLEtBQUssQ0FBQyxNQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLEtBQUssQ0FBQyxZQUFZLENBQUUsS0FBSyxDQUFDLE1BQTJCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBVTtRQUN4QixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxhQUFhLEdBQ2YsQ0FBQyxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xFLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUN2QixJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFFbkIsSUFBSSxLQUFLLENBQUMsWUFBWTtnQkFBRSxhQUFhLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUUzRCxJQUFJLEtBQUssQ0FBQyxTQUFTO2dCQUNqQixTQUFTLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBRTlFLE1BQU0sTUFBTSxHQUFrQjtnQkFDNUIsYUFBYSxFQUFFLGFBQWE7Z0JBQzVCLGFBQWEsRUFBRSxLQUFLLENBQUMsSUFBSTtnQkFDekIsYUFBYSxFQUFFLGFBQWE7Z0JBQzVCLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFO2FBQ2hHLENBQUM7WUFFRixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU3QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDakMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsS0FBVTtRQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTSxjQUFjLENBQUMsYUFBa0I7UUFDdEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQVksRUFBRSxHQUFzQjtRQUNqRCxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLElBQUksUUFBZ0IsQ0FBQztRQUVyQixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBRXpFLElBQUksR0FBRyxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUM1QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRTtnQkFDMUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLFFBQVEsR0FBRyw2QkFBNkIsQ0FBQztnQkFDdkQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNULENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU8sV0FBVyxDQUFDLE9BQVksRUFBRSxHQUFzQjtRQUN0RCxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN0QyxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUM7SUFDN0QsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFZLEVBQUUsR0FBc0I7UUFDakQsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUvQixJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsQixPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLElBQUksS0FBSyxLQUFLLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQ2xILE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUVELElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBRUQsUUFBUSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2pCLEtBQUssTUFBTTtvQkFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzdELEtBQUssVUFBVTtvQkFDYixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUM1RCxLQUFLLGVBQWU7b0JBQ2xCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNuRCxLQUFLLFNBQVM7b0JBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUM3RCxLQUFLLFNBQVM7b0JBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0MsS0FBSyxVQUFVO29CQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVDLEtBQUssWUFBWTtvQkFDZixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDekMsS0FBSyxPQUFPO29CQUNWLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkMsS0FBSyxZQUFZO29CQUNmLE9BQU8sR0FBRyxLQUFLLEtBQUssQ0FBQztnQkFFdkI7b0JBQ0UsTUFBTTtZQUNWLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQWE7UUFDL0IsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUV6QixPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzFDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUUzQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDaEYsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFhO1FBQ3pCLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUU7WUFDL0MsS0FBSyxFQUFFLFVBQVU7WUFDakIsUUFBUSxFQUFFLEtBQUs7U0FDaEIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsZ0JBQWdCLENBQUM7UUFDdkMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxDQUFNLEVBQUUsT0FBWTtRQUM5QixJQUFJLGdCQUFnQixHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFFdEQsSUFBSSxLQUFLLEdBQWEsRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXRELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQVksRUFBRSxHQUFzQixFQUFFLEtBQWE7UUFDN0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3pFLE1BQU0sTUFBTSxHQUNWLFVBQVUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxLQUFLLFFBQVE7Z0JBQzFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMxQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ1gsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFVLEVBQUUsT0FBWTtRQUMxQyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFNUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFZLEVBQUUsR0FBc0I7UUFDbEQsT0FBTywyREFBMkQsSUFBSSxDQUFDLFdBQVcsQ0FDaEYsT0FBTyxFQUNQLEdBQUcsRUFDSCxXQUFXLENBRVgsYUFBYSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQztJQUNoRSxDQUFDO0lBRUQsZUFBZSxDQUFDLE9BQVksRUFBRSxHQUFzQjtRQUNsRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsT0FBWSxFQUFFLEdBQXNCO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELGdCQUFnQixDQUFDLE9BQVksRUFBRSxHQUFzQjtRQUNuRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWE7UUFDeEIsSUFBSSxLQUFhLENBQUM7UUFFbEIsSUFBSSxNQUFNLEdBQWtDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDbEUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FDdEIsQ0FBQztRQUNGLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYTtRQUNyQixJQUFJLEtBQWEsQ0FBQztRQUVsQixJQUFJLE1BQU0sR0FBa0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNsRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQ3hCLENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixJQUFJLGFBQWEsR0FDZixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQztZQUVuRCxJQUFJLGFBQWEsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDL0IsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxDQUFNLEVBQUUsR0FBc0I7UUFDN0MsR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxDQUFDLE9BQU87WUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7WUFDcEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEMsSUFBSSxHQUFHLENBQUMsUUFBUTtZQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsZUFBZSxDQUFDLENBQU07UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDbkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFFN0IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRztZQUN4QixJQUFJLENBQUMsV0FBVyxDQUNkLE1BQU0sRUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FDdkQsQ0FBQzs7WUFFRixJQUFJLENBQUMsV0FBVyxDQUNkLE1BQU0sRUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FDdEQsQ0FBQztRQUVKLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUU3QixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBR0QsV0FBVyxDQUFDLEtBQW9CO1FBQzlCLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBR0QsWUFBWSxDQUFDLEtBQVU7UUFDckIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFLENBQUM7WUFDN0QsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLE1BQXFCLENBQUM7WUFDbkQsTUFBTSxhQUFhLEdBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sV0FBVyxHQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM5RCxNQUFNLGlCQUFpQixHQUNyQixjQUFjLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7Z0JBQzFELEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUMxQyxNQUFNLFlBQVksR0FDaEIsYUFBYSxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUM7Z0JBQ3ZDLFdBQVcsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDO2dCQUNyQyxpQkFBaUIsQ0FBQztZQUVwQixJQUFJLENBQUMsWUFBWTtnQkFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFhLEVBQUUsSUFBWTtRQUNyQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFzQjtRQUNwQyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDekMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQzFCLENBQUM7UUFDRixJQUFJLGFBQWE7WUFBRSxHQUFHLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzs7WUFDbEMsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLFVBQVUsS0FBVSxFQUFFLEtBQVU7WUFDckMsSUFBSSxLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDcEMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNaLENBQUM7aUJBQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDM0MsT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELG9CQUFvQixDQUFDLEdBQXNCO1FBQ3pDLElBQUksR0FBRyxDQUFDLFdBQVc7WUFBRSxPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUM7O1lBQ3ZDLE9BQU8sS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUN6QyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUM5QixDQUFDO1FBQ0YsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsaUJBQWlCLENBQUMsWUFBb0I7UUFDcEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBVyxFQUFFLE9BQVksRUFBRSxHQUFzQjtRQUM5RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO1lBQzVCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFLE9BQU87WUFDaEIsR0FBRyxFQUFFLEdBQUc7U0FDVCxDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUM5QixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87WUFDakIsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNyRCxDQUFDLENBQUMsRUFBRSxDQUNQLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLENBQU07UUFDWCxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRyxDQUFDO0lBQzdCLENBQUM7SUFvQ0QsaURBQWlEO0lBRWpELElBQUksQ0FBQyxLQUF5QjtRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUV4QixJQUFJLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUN4RSxPQUFPO1lBQ1QsQ0FBQztZQUVELE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNDLE1BQU0sbUJBQW1CLEdBQUcscUJBQXFCLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztZQUN4RSxNQUFNLGtCQUFrQixHQUFHLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7WUFFdEUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNyQixNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztnQkFDekQsZUFBZSxDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUUvRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUVwRixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUVoRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztvQkFDckIsYUFBYSxFQUFFLG1CQUFtQjtvQkFDbEMsWUFBWSxFQUFFLGtCQUFrQjtvQkFDaEMsSUFBSSxFQUFFLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUM7b0JBQzlDLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztpQkFDL0IsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksbUJBQW1CLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksa0JBQWtCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDbEcsT0FBTyxDQUFDLElBQUksQ0FBQyw2Q0FBNkMsRUFBRTt3QkFDMUQsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTtxQkFDekMsQ0FBQyxDQUFDO29CQUNILE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUUxRSxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUVoRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztvQkFDckIsYUFBYSxFQUFFLG1CQUFtQjtvQkFDbEMsWUFBWSxFQUFFLGtCQUFrQjtvQkFDaEMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUM7b0JBQ3pDLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztpQkFDL0IsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBRTVCLENBQUM7YUFBTSxDQUFDO1lBQ04saUJBQWlCLENBQ2YsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFDNUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQ3BCLEtBQUssQ0FBQyxhQUFhLEVBQ25CLEtBQUssQ0FBQyxZQUFZLENBQ25CLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVPLG9CQUFvQixDQUFDLGFBQXFCLEVBQUUsWUFBb0I7UUFDdEUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUN0RCxNQUFNLE9BQU8sR0FBRyxhQUFhLElBQUksQ0FBQyxJQUFJLGFBQWEsR0FBRyxlQUFlO1lBQ3RELFlBQVksSUFBSSxDQUFDLElBQUksWUFBWSxHQUFHLGVBQWUsQ0FBQztRQUVuRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFO2dCQUN6QyxhQUFhO2dCQUNiLFlBQVk7Z0JBQ1osZUFBZTtnQkFDZixxQkFBcUIsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsTUFBTTtnQkFDcEQsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNO2dCQUN4QyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDbkIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ2pCLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDO2FBQ3hELENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQW1CO1FBQy9CLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQW9DLENBQUM7UUFFN0UsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFFdkIsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLEVBQUU7WUFDOUIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBd0IsQ0FBQztZQUVuRixJQUFJLE9BQU8sSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3RDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUVsQyxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNoRCxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRXhELE1BQU0sU0FBUyxHQUFHLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxDQUFDO2dCQUN2RCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFFbkQsT0FBTyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQzFCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDO2dCQUVELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRWhELFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHO21CQUNsQixTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Ozs7O1NBS3BFLENBQUM7Z0JBRUYsSUFBSSxXQUFXLEVBQUUsQ0FBQztvQkFDaEIsWUFBWSxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDO29CQUMvQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDaEUsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxDQUFDO29CQUM5RCxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxrQkFBa0IsQ0FBQyxRQUFRLENBQUM7b0JBQzFELFlBQVksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLGtCQUFrQixDQUFDLFVBQVUsQ0FBQztnQkFDaEUsQ0FBQztnQkFFRCxVQUFVLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7Z0JBQzVDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDO2dCQUVoRCxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUM1QyxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBeUIsQ0FBQztvQkFDekUsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLHFCQUFxQixFQUFFLENBQUM7b0JBRXRELFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHO3FCQUNqQixRQUFRLENBQUMsS0FBSzt5QkFDVixRQUFRLENBQUMsS0FBSzt5QkFDZCxRQUFRLENBQUMsS0FBSztzQkFDakIsUUFBUSxDQUFDLE1BQU07dUJBQ2QsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU87MEJBQzFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTOzhCQUMzQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUMsYUFBYTs7Ozs7Ozs7V0FRdEUsQ0FBQztvQkFFRixVQUFVLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN0QyxDQUFDLENBQUMsQ0FBQztnQkFFSCxZQUFZLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNyQyxZQUFZLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN2QyxPQUFPLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUVsQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRzs7Ozs7Ozs7bUJBUWIsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNOzs7U0FHcEUsQ0FBQztnQkFFRixVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksT0FBTyxFQUFFLENBQUM7d0JBQ1osT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7d0JBQ3pDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNqQyxDQUFDO2dCQUNILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUVULENBQUM7aUJBQU0sQ0FBQztnQkFDTixxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzVDLENBQUM7UUFDSCxDQUFDLENBQUM7UUFFRixxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQzs4R0FqNEJVLHlCQUF5QjtrR0FBekIseUJBQXlCLDAySkF5Rm5CLGlCQUFpQix3aEJBRnZCLEtBQUssZ0RDeElsQixxendCQWlxQkE7OzJGRGhuQmEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLG9CQUFvQjs2TUE0Q1YsVUFBVTtzQkFBN0IsS0FBSzt1QkFBQyxXQUFXO2dCQUNULGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ2UsU0FBUztzQkFBN0IsS0FBSzt1QkFBQyxRQUFRO2dCQVdMLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUVxQixhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ0EsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNDLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDZ0IsS0FBSztzQkFBM0MsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNuQixNQUFNO3NCQUF2QixTQUFTO3VCQUFDLEtBQUs7Z0JBRW9CLFNBQVM7c0JBQTVDLGVBQWU7dUJBQUMsaUJBQWlCO2dCQThKbEMsY0FBYztzQkFEYixZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFpVnpDLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyx5QkFBeUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFRbkQsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUsIERlY2ltYWxQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENka0RyYWdEcm9wLCBDZGtEcmFnU3RhcnQsIG1vdmVJdGVtSW5BcnJheSwgdHJhbnNmZXJBcnJheUl0ZW0gfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcblxuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIERvQ2hlY2ssXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbnB1dCxcbiAgbW9kZWwsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgVGFibGUsIFRhYmxlUGFnZUV2ZW50IH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcblxuaW1wb3J0IHsgQ3BmQ25walBpcGUgfSBmcm9tICcuLi8uLi9hcGkvcGlwZXMvY3BmY25wai5waXBlJztcbmltcG9ydCB7XG4gIGdldE9yRXhlY3V0ZSxcbiAgVmFsdWVPckZuLFxuICBtYXBUb01lbnVJdGVtLFxufSBmcm9tICcuLi8uLi9hcGkvY29tcG9uZW50cy90YWJsZS9rdi1tZW51aXRlbSc7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZyB9IGZyb20gJy4uLy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbmZpZyc7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZ0NvbHVtbiB9IGZyb20gJy4uLy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbmZpZy5jb2x1bW4nO1xuaW1wb3J0IHsgVGFibGVQYWdpbmF0ZSB9IGZyb20gJy4uLy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLnBhZ2luYXRlJztcbmltcG9ydCB7IFRlbGVmb25lUGlwZSB9IGZyb20gJy4uLy4uL2FwaS9waXBlcy90ZWxlZm9uZS5waXBlJztcbmltcG9ydCB7IFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vYXBpL2RpcmVjdGl2ZXMvdGVtcGxhdGUvdGVtcGxhdGUuZGlyZWN0aXZlJztcblxuY29uc3QgaW1nRGVmYXVsdCA9XG4gICcvOWovNEFBUVNrWkpSZ0FCQVFJQWRnQjJBQUQvNFFCaVJYaHBaZ0FBVFUwQUtnQUFBQWdBQlFFU0FBTUFBQUFCQUFFQUFBRWFBQVVBQUFBQkFBQUFTZ0ViQUFVQUFBQUJBQUFBVWdFb0FBTUFBQUFCQUFNQUFBSVRBQU1BQUFBQkFBRUFBQUFBQUFBQUFBQjJBQUFBQVFBQUFIWUFBQUFCLzlzQVF3QURBZ0lDQWdJREFnSUNBd01EQXdRR0JBUUVCQVFJQmdZRkJna0lDZ29KQ0FrSkNnd1BEQW9MRGdzSkNRMFJEUTRQRUJBUkVBb01FaE1TRUJNUEVCQVEvOXNBUXdFREF3TUVBd1FJQkFRSUVBc0pDeEFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUS84QUFFUWdBa0FDUUF3RVJBQUlSQVFNUkFmL0VBQjBBQVFBQkJBTUJBQUFBQUFBQUFBQUFBQUFHQVFJSENBTUVDUVgveEFCQkVBQUNBUVFBQlFJQ0NBUURCQXNBQUFBQkFnTUFCQVVSQmdjU0lURVRRUWhSQ1JRVkdTSlZsZEV5WVlHUlFsSmlGaU0zT0ZOamNYTjFkcEtUc2JPMC84UUFHZ0VCQUFJREFRQUFBQUFBQUFBQUFBQUFBQUVGQXdRR0F2L0VBRElSQUFJQUJBTUZDQUVGQVFFQkFBQUFBQUFCQWdNRUVTRXhVUVVTUVpId0V4VXlZWEdCb2JIUklqTkN3ZUUwOFNQLzJnQU1Bd0VBQWhFREVRQS9BUEtxZ0ZBS0FVQmRERExjU3BCQkU4a3NqQkVSRkpabUowQUFQSkpxVW5FN0lodFFxN3lKNXc5eWR6MlZpK3M1ZTRYRlJNdTBWMDlTVTcwUnRBUjBqUlBrOVFJMFY5NnM1R3lwa3hYbVBkK1gvbjM1RmJPMnBLbDRRZnFmeHpKOWpPVS9CbU82V2tzWmI2UkpCSXIzVXBPdGEwcFZlbFNPM2dnNzJkN0hhck9YczJuZ3pWL1hwSXE0OXBWTWZHM292emRrbXNNVGlzWDEvWm1NdExQMWRkZm9RTEgxYTNyZlNCdld6L2V0dUNYQkx2dUpLK21CcHh6STVsdDl0MjF4TzNXUThDZ09wZjRuRlpUbyswOFphWG5wYjZQckVDeWRPOWIxMUE2M29mMnJISExnbWVOSitxUGNFeU9YZmNiVjlNQ001UGxQd1prZXBvN0dXeGtlUXlNOXJLUnZlOXFGYnFVTDM4QURXaHJRN1ZxVE5tMDhlU3Q2UC8xRzVCdEtvZzQzOVYrTE1nUEVQSjNQWXFMNnppTGhjckdxN2RFVDA1UnJaT2tKUFVOQWVEMUVuUVgzcXNuN0ttUzF2UzN2ZkQvMzc4aTBrN1VsVEh1eHJkZnh6L3dnYzBNMXZNOXZjUlBGTEV4UjBkU3JLd09pQ0Q0SVB0VlkwNFhabGttb2xkWkZ0UVNLQVVBb0JRQ2dGQVNqZy9sOW1lTFpSS0ZleXNPa3NidVNJbFc3a2FRZHVzN0JCMGREUjJkNkIzYVdobVZPT1VPdjQxTktzcllhVllZeGFkWC9BTitWbXpoN2hIQWNNUkJNVFlJa3BYcGU0ZjhBRksvWWIyeDlqMGc5STB1L1lWME1pbWxVNnRBc2RlSnpzMnBtei8zSXIvWFN5MTFaOW1zNWdLaFRVa1hLNkZCY2FGQ0xqUW9MalFvVGNvVk5CY3BVRW54dUllRWNCeFJDVXkxZ2pTaGVsTGhQd3lwMk90TU81QTZpZWs3WGZ0V0NmU3lxaGZyV092RXp5YWliSWY4QTg0cmVYRHA1WHowWmhQakhsL2wrRVpmVUlhOHNDb0l1NDR5RlU3QTA0NzlCMlJyWjBkalIzc0RuYXFpbVVydThWcitkRG9LU3ZsMUt0RmFHSytWODg4c3I0SzcwK1NMMXBtK0tBVUFvQlFFNTVkY3U1ZUpwbHl1V1I0OFRHM1liS3Rjc0QzVlQ3S0QyTGYwSGZaV3lvYUYxRDM0L0Q5OWNlclZ0ZFhLblhaeS9GOWY3cDFmT01NTVZ2RWx2YnhKSEZHb1JFUlFGVlFOQUFEd0FQYXVpU1VLc3NqblczRTd0NG5JQjg2OUhoc3JRZ3JVQVVBb0JRQ2dGQVVxUVVJb1RjNDVvWXA0bmduaVNTT1JTam82aGxaU05FRUhzUVI3VkRTaVZua2VrM0M3cDRtRGVZbkx1WGhpVnNyaWtlVEZTTjNIY3RiTVQyVmo3cVQ0YitoNzZMYzVYVUxwMzJrdncvWCtlZlQ2T2hybFVMczVuaSsvOTE2dEI2clN5RkFLQWxITC9BSU9sNHV5K3BDcTJGbXlTWFpKTzJVbnRHTkVIYmFJMzdBRStkQTdsRlN1cW1XZVN6L0h1YUZmVnFtbDdxdnZSWHQ1ZWVUV0Y4bm5wYTVzRkRGRkJFa0VFU1J4eHFFUkVVQlZVRFFBQThBRDJycVVrbFpITXR0NHM1UUtrOHRsYWdnVUFvQ2ZjcHVSUE5MbmJrbngvTHZoYTR5RWNEQmJtOWNpSzF0dC85SksybEIxMzZSdGlQQU5ZWjFSTHAxZVl6UElwcHRRN1MwYlA0VDZMYmp1NHRGazRoNXFZS3d1U05tS3pzWnJwQWZsMXNZLy9BSXF1aTJ2QW4rbUZsbERzZU5yOVVTSXJ6QitqYjUyOEsyY3VSNFN5ZUc0dGlpQlkyOXM3VzEyUVBjUnlmZ1AvQUdDVFo5Z2F5U3RxeVkzYUs2TVUzWk02QlhnYVpxdmxzVGxjRGtybkRadkczV1B2N09ReFhGcmRSTkZMRTQ4cXlNQVZQOGpWa21vbGRaRlpGQzRYYUxNNmxTUUtBVUJhUlU1a3BuSE5ERmNSUGIzRVNTUlNLVWRIVU1yS1JvZ2crUWFocE5OTTl3eE9GN3l6TmZlWUhCMHZDT1lJajZUWVhqUEphRUh1cWdqYUhaSjJ1d04rNDBmT3dPV3JhVjBzekR3dkw4ZXgwdEJWcXBsN3I4VUtWL1B6eVN4dGtzdVJGNjB6ZkxvWVpiaVZJSUlua2xrWUlpSXBMTXhPZ0FCNUpOU2s0blpFTnFGWGVSc3B3bmdJdUdlSDdURG9JekpFblZPNkFmN3lWdTdIWUFMRGZZRWpmU0ZIdFhXMDBoVThwUzE3K3ZYd2NoVVRlMm14VE1jWHEvVFYyeXhTd3ZkNXRuMkFLMkRBeTZvSUZBS0F5cDhOWEl6SmZFQnpRc3VDNEpaTFhGd0liM0wzaUFiZ3RFSURkTyszV3hLb3ZudTJ5Q0FhMTZxb1ZOTGNmSGdiTkpUT3BtcURoeFBZbmd6Z3ZoZmw3dzFZOEljSFlhM3htSng4WWpndDRWMEI4MlkrV1ludVdPeVNTU1NhNVdaTWlteE9LTjNaMWt1WERLaFVFQ3NqN2RlRDJLQTF5K01UNFc4Tnp6NE51dUkrSDhkRkR4emhyZHBiQzRqVUsxL0dnMmJXUS80dGpmUVQvQzJ1NEJiZS9RMWpwNDkyTHd2NDh6UXJxTlZNRzlDdjFMNThqeVZkSGpkbzVGS3NwSVpTTkVINUd1bU9XS1VBb0JRRnBIdlVrbytOeGR3OUR4UmdMckV5QlJLNjlkdTdhSFJLUDRUdlIwTjlqb2I2U1I3MXIxVWhWRXB5MzdlcHNVMDNzSnNNelQ2L3YzNDJaclpORE5ielBiM0VUeFN4TVVkSFVxeXNEb2dnK0NEN1Z5VFRoZG1kY21vbGRaRTg1TzhQUlpYUHk1YTVDdEZpbFYxUTZPNVgyRU9pRDJBVmp2WUlZS2FzdGx5Vk1tNzcvajk5ZkpXYlVxSExscVd2NWNmSlcrL3E1bSt1ak9kTHFIa3JVQVVBb0QwaStpNzRWczdUbHJ4ZHhyNlMvVzhsbTF4cGNqdUlyZUJKQUI4Z1d1Vy9zUGxWRHRlTnVaREJvcjljam9OandKUzRvOVg5ZittNjFWQmNDZ0ZBS0E4WS9pMjRWdE9EUGlQNDh3VmhFc1Z2OXAvWGtSUm9JTG1OTGpwQTlnUFcwQjhxNnlpamN5UkRFOVByQTVHdWdVdW9qaFd2M2lZanJaTlVVQW9DbFNDMm9QUmhEbkZ3OUZpcy9GbDdib1dQS3F6c2c3YWxUUWM2QUEwUXluZXlTeFluMnJudHFTRkxtS1l2NWZhL1AzYzZQWmM1ekpXNDg0ZnJoL1pQdVUrTSt6dURMYVJrbFNTK2trdW5XUWExczlLbFJyK0VvaWtlZDczNElxejJiTDNLZFBXNzY5a1ZlMG85K29mbFpmMzlzbVFGYjVvTXVxRHlLQVVBb0QwYitpNjR4czduZ1BqRGdGcFZGM2o4c21XVkNlN1JUd3BFU1BtQTF1Ti9Mckh6cWgydkxhamhqOHJIUWJIbUp3UlFhTzV1N1ZRWEFvQlFDZ1BGejRxT01iUGp6NGh1T3VKY2ZLc3RySmxHdElKRk8xa2p0MFczVndma1JFQ1A1R3VzbzVibHlJWVhwOTRuSTFzeFRLaUtKYS9XQmlxdGsxUlFDZ0ZBV2tWSktJZHpZeG4yandYY3lLa3p5V1VrZDBpeDkvQjZXTERSN0JIYysydGIzb0dxL2FVdHpLZDI0WTljeXcyZE1VdW9WK09IWHVrU1hFV0gyVmlyTEdlcjZ2MU8zamc2K25wNnVoUXU5Yk90NjhicmNsd2RuQW9ORlkwNWtmYVJ1UFYzNW5kSGlzaGpaV29JRkFLQVVCa2JrQnpvemZJWG1aanVQY1JHYmlDTUcyeVZuMWRJdTdOeVBVajM3SHNyS2Zaa1VuWTJEZ3FaQ3FaYmdac1UxUkZUVEZHajJKNWJjek9DK2JYQ2xyeGx3TG1vY2pqcnBSdnBJRWtFbXRtS1ZQS09OOTFQOGlOZ2dubFpzcU9URnVSckU2eVZPZ253NzhEdWlVMWpNZ29EVmo0MHZpenczS1BoZSs1ZThGNVNPNDQ0eTBCZ1BvUHY3SmhjYU16a2Z3eWxUK0JmSUpEbnNBR3NxQ2ljNkpUSTErbGZKVzE5YXBFTGdnZjZuOEhsZDVyb3ptUlFDZ0ZBS0FvM2lwSlIwc3RZREs0cTh4Wm05SVhsdkpCNm5UMWRIV3BYZXRqZXQrTjFqbVFkcEE0TlUxek1rdVBzNDFHbGV6dWR1c2g0UmNQRkR5eXRRQlFDZ0ZBS0FsUEx6bWp6QjVVWnIvYURsNXhWZllTOUlDeUdCd1k1bEIyRmtqWUZKRjM3TUNLeHpaTUU1YnN4WE1zcWRNa1BlbHV4c25oUHBOdWVlUHRGdHN2dzF3amxaRUd2ckQyczhNakg1c0VsQ2YyVVZYeGJKa3Q0Tm9zSWRyemtzVW1SVG1EOUlEOFJQSFZuTGpiTE00N2hhMW1CVnhnN1pvcG1YL3ZwR2VSVC9OQ3ByTEwyYklsdTdWL1V4VGRwMUV4V1R0Nkd1VnpjM0Y1Y1MzZDNQSlBQTTVra2xrWXM3c1Rzc3hQY2tuM05iNlZzRVY3YmVMT09nRkFLQVVBb0NoOFZJUmJROUNnUmNQRkR5eXRRQlFDZ0ZBU2ZnL2xmekg1Z3llbndQd0xuYzRPcnBaN0d3a2xqUS82blVkSy8xSXJISE9seXZIRWtaSmNtWk44RUxabURBL0FKOFQrYlJaWnVCclhGUnYzRFgrVXQxT3Y1cWpzdy9xQldyRnRLbmgvbGYyTnVIWmxURi9HM3VTdUg2TS80aEpVRFNaZmd1RS81WHlVNUkvOEFUQVJXUHZXUm8rdmN5clpNL1ZkZXgxYi9BT2piK0kyelF0YnR3cmZFRCtHM3lqZ24vd0J5TlJVcmFzaDY4aUhzbW9Xbk14OXhSOEczeEw4Skk4MlI1VDVXNmlRYjY4WThWL3NmTUxBenQvY1ZuZ3JxZVBLTCt2c3dSMEZSQm5EeXgrakVPVHhlVHd0N0pqc3hqcnF4dTRUcVNDNWhhS1JEL05XQUlyWlRVU3VqVWNMaGRtZGFwSUZBS0FVQlErS2tJdG9lanFZbS93RHRURldXVDlMMHZybHZIUDBkWFYwOWFodGIwTjYzNTFXT1hIMmtDajFTWjdtUWRuRzRMM3M3Y2p1anhXUXhzclVFQ2dNajhrT1FQTVBuN3hJY0R3UmpsRnZiZExYK1N1ZHJhMlNId1hZQTdZNk9rVUZqbzl0QWtZS2lwbDAwTzlHYkZQVFRLbUxkZzVubzl5YitBdmtqeXdnZ3Z1SXNXdkdtY1FBdmQ1YUlOYkszL1YydXlnSGorUHJiNUVlS29aKzBaMDdDRjdxOHZ5ZEJJMmJKazR4TGVmbitEWTYydGJheXQ0N1N6dDRvSUlsQ1J4UklGUkZIZ0FEc0JXZzIzaXl3U3RnamxxQUtBVUFvQ09jYTh1T0F1WStPT0s0NzRReFdjdHRFS3Q3YkxJMGUvZEhJNmtQODFJTlpKYzJPVTd3T3hqbVNvSnF0R3Jtay9QNzZOdTNqdExuaWJrSGZUZXJHR2tmaDYvbTZ1c2ZLM25idnY1TElUdjhBempzRGIwMjFjZDJmei9KVDFPeVZiZWtjdndhRlpISFpERDVDNXhXV3NwN085czVXZ3VMZWVNcEpGSXAweU1wN2dnZ2dnMWRKcUpYUlNOT0YyZVoxNkVDZ0tIeFVrbzZXV3Z4aXNWZVpRdytxTE8za245UHE2ZXZvVXRyZWpyZXZPcXh6SSt6Z2NlaWI1R1NYQTVrYWdUdGQyNWthNVQ1TVpIZ3Uxalo1bmtzWkpMVjJrTy9CNmxDblovQ0VkQVBHdGE4QVZwN05tT1pUcFBoaDF6TnphTXZzNmgyNDQ5ZTZaTVFhc0N2WmRVRUhaeG1PdTh2a3JURTJFZnFYTjdQSGJ3cHZYVkk3QlZIOXlLaHRRcTdKU2NUc2oyMjVMOHBlSE9Tbkx2RmNCY09XOFlXemlEWGx5RjA5NWRFRDFaM1BrbGo0MzRVS283QVZ5TlJPaXFKamppT3hwNUVOUExVRUpPYXdtWVVBb0JRQ2dGQUtBVUJvVjlKZnlWdzhXTXhYUEhDMmtjRisxMG1KelBwcnI2d3JJeGdtYi9VdlFVSjhrTWc4TFYxc3FvZDNKZnFpazJ2VHF5bkxQSm5uNVYyVVFvQzBtcEpSRHViR1QrenVDN3FOWG1TUzlranRVYU02MXM5VEJqc2ZoS0k0OTk3MXJSTlYrMHBqbDA3dHh3NjVHL3M2V3BsUXI4TWV2ZG9nSEozaUNMRlorWEUzSlZZc3Fxb3JuUTFNbXlnMlNPeERNUEJKWXFLck5sejFMbTdqeWkrK0JaN1ZrT1pMVXlIK1BEeWZ0dzVXdjVHYjY2STU0dXFUeVN6bEwveFY0TS84d1k3L0FQVEhXS2QrMUY2TXl5UDNZZlZIdWJYSEhaaWdGQUtBVUFvQlFDZ0ZBYXkvU0ovOHMrUy84VnNQL3NxdzJaLzBMMFpYYlUvNW42bzhvYTZVNWdvZTFTQzJvUFJoRG5GeEREbGM5RmliYm9hUEZLeU00N2t5dm91TmdrYUhTbzhBaHVvSDJybnRxejFNbUtYRC9IN2Y0KzduUjdMa3VYS2NjV2NYMXcvc2djTTB0dktrOEVyeHl4c0hSMFlobFlIWUlJOEVHcXhOd3U2TEpwUkt6eU5sT0VzL0h4TncvWjVkVEdKSlU2WjBVajhFcTltR2dTVjc5d0QzNlNwOTY2Mm1ucW9sS05lL3IxOEhJVkV2c1owVXJUMXl6WERIMVdGN3JOTSt3RDdWc0dCbmZ3ZVl2ZUhzMWo4L2pXUmJ2R1hVVjVibDE2bEVrYmgxSkh1TmdkcTh4UXFKT0Y4UkRFNFdvbHdOanZ2RlBpWC9BRG5CZnBNZjcxb2QyVStqNWxoM3JVYXJrUHZGUGlYL0FEbkJmcE1mNzA3c3A5SHpIZXRScXVRKzhVK0pmODV3WDZUSCs5TzdLZlI4eDNyVWFya1B2RlBpWC9PY0Yra3gvdlR1eW4wZk1kNjFHcTVEN3hUNGwvem5CZnBNZjcwN3NwOUh6SGV0UnF1USs4VStKZjhBT2NGK2t4L3ZUdXluMGZNZDYxR3E1RDd4VDRsL3puQmZwTWY3MDdzcDlIekhldFJxdVErOFUrSmY4NXdYNlRIKzlPN0tmUjh4M3JVYXJrUHZGUGlYL09jRitreC92VHV5bjBmTWQ2MUdxNUVQNXFmR0J6cDV5Y0lUY0Q4YjVIRnpZdWVhSzRkYmZIcEUvWEdkcitJZC9OWlpOREprUmI4R1ppblYwNm9nM0k4akNsYlpwbHBQdFVrcEh4ZUx1SVl1RjhCZFpaeWhsUmVpM1J2OGNwN0tOYkd4N25SMzBnMXIxTTlVOHB6SDdldlh3YkZQSzdlYkRMMSt2Njk4TDJOYlpwcGJpVjU1NVhrbGtZdTd1eExNeE95U1Q1Sk5jazI0bmQ1blhKS0ZXUmJVRWtvNWY4WXk4STVjR1RwTmhlTWtkMkNEdFZCT3BCb0U3WFpPdmNFanpvamNvcXAwc3pId3ZQOEFQc2FGZlNLcGw3eXZ2UTN0NStXT0dOcytHdHJtd1VNMFZ4RWx4YnlwSkZJb2RIUmd5c3BHd1FSNUJycVU3cTZPWmFhd1p5QTFPWjVhTHFnZ1VBb0JRQ2dGQUtBVUFvQlFGcE5Ua1NrY2MwMFZ2RTl4Y1NwSEZHcGQzZGdxcW9HeVNUNEFxRzBrMnozREM0bnVyTTE5NWdjWXk4WFpnbVBwRmhaczhkb0FPN0tTTnlIWUIyM1NEcjJHaDUyVHkxYlZPcW1YV1N5L0owdEJTS21sN3o4VVNWL0x5emF3dm1zK1JGNjB6ZkZBS0FuSEx2bUpMd3hLdUt5cnZKaXBHN0h1eld6RTkyVWU2aytWL3FPK3cxbFExenAzMmN6dy9YK2VYVHJhNmhWUXQrWDR2dnJoMWJPVU0wVnhFazhFcVNSU0tIUjBZRldVallJSThnaXVqVFRWMHpuR21uWm81QWZuVW5sb3JVRUZhQVVBb0JRQ2dGQVUzcXBCUW41VUpTT09hYUszaWU0dUpVamlqVXU3dXdDcW9HeVNUNEFGUTJsaXowbGQyUmczbUp6RWw0bWxiRllwM2p4VWJkejNEWExBOW1ZZXlqMlgrcDc2Qzg1WFZ6cUh1UWVINzY2OHVqb2FGVTY3U1B4ZlhYWG5CNnJTeUZBS0FVQW9DVThIOHc4MXduSXNKZDc3SGhDZ3M1WlNGVHVXM0dlL1FlcGlUb2FPenNiMFJ1VXRiTXBuYk9IVDhhRmZWYk9sMUY0b0xReE4zYnRua3NjcjRLeWZDeTRZR2JjQnhaZ09Kb2cySXlNY3NnUU84RGZobGo3S1R0VDNJQllBc05ydndUWFJTYW1WVUs4dCszSHI0T2ZtMDg2VCs1RGJGL2ZsZlBOWHh0bWs4RDY5WnpDVkRHcElzVjZoUVdHeDg2RVdHeDg2Q3c2aFFteFFzYUN4U29KUGtaL2kzaC9obU10bDhqSEZJVUxwQXY0cFpPekVhVWR4c3FRR09sMzVJckJQcVpWT3J6SDdjZXZnelNxZWJQOEEyNGI0cGNNT2RzczN4dGttOERDUEdQTURMOFhTK21TMW5ZQlFCYVJ5a3F4MkR0ejI2enNEV3hvYUdodlpQTzFWYk1xblo0TFQ4Nm5SVXRCTHBrbkZhS0xXM3JsbmJCMmV2d1JldE0zaFFDZ0ZBS0FVQW9DNkdhVzNsU2VDVjQ1WTJEbzZNUXlzRHNFRWVDRFVwdUYzUkRTaVZua1R6aDduRm44VkVMYkxRSmxZbFhTTTcrbktPd0EyNEI2aDJQa0ZpVHNtcktUdFNiTFZvMXZMNTYrZk1xNSt5cGN4M2x2ZDE0cmp5K3JLMWlmNHpteHdYa2VsWkw2V3lrZVQwMVM2aEs3OGFZc3ZVcWp2NUxEV2p2UTcxWnk5cFU4eDJ2YjE2Wld6Tm5WRXRYdGYwNlQrQ1MyR1d4V1ZFaHhlU3Rid1JhOVQwSmxrNk43MXZwSjF2Ui9zYTNJSmtFendOUDBkelRqbHh5N0tOTlgxTzNXUThDZ09wZjVmRTRybyswOG5hV2ZxN0tldk1zZlZyenJxSTM1SDk2eHh6SUpmamFYcXpKQkxqbWVCTitpSTFrK2EvQmVONmxTL2x2WkVsTWJKYXhGdkc5c0dicFJsN2VReDNzYTJPOWFjemFWUExkcjM5T2w4RzFMMmRVVEZlMXZYcHRjaUFjUWM0cy9sWWpiWW1CTVZFeTZka2YxSlRzRUhUa0FLTzQ4RHFCR3cxVmsvYWsyWmhCK2xmUE10Skd5cGN0NzB4NzJuQmNPZkh5eHk0a0RtbW11Sm51TGlWNVpaV0x1N3NXWm1KMlNTZTVKUHZWYTI0bmRsbWtvVlpaRnRRU0tBVUFvRC85az0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdrdi10YWJsZS1kcmFnZ2FibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4va3YtdGFibGUtZHJhZ2dhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4va3YtdGFibGUtZHJhZ2dhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEt2VGFibGVEcmFnZ2FibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIERvQ2hlY2ssIEFmdGVyVmlld0luaXQge1xuICBcbiAgY29sdW1uczogVGFibGVDb25maWdDb2x1bW5bXSA9IFtdO1xuICBkZWxldGVkQ29sdW5zOiBUYWJsZUNvbmZpZ0NvbHVtbltdID0gW107XG4gIGdsb2JhbEZpbHRlckZpZWxkczogc3RyaW5nW10gPSBbXTtcbiAgc2VsZWN0ZWRTaXplOiBzdHJpbmcgPSAnJztcbiAgY29sbGFwc2VkOiBib29sZWFuID0gZmFsc2U7XG4gIG1lbnVGaWx0cm86IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2hlY2tlZDogYm9vbGVhbiA9IHRydWU7XG4gIGNoZWNrYm94Q2xpY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBtZW51SXRlbXMhOiBNZW51SXRlbVtdO1xuICB0YWJsZUFjdGlvbnM6IE1lbnVJdGVtW11bXSA9IFtdO1xuICBjdXJyRGF0YVNvdXJjZTogYW55W10gPSBbXTtcbiAgYWN0aW9uc09mZnNldDogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBpc0RyYWdnaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBwcmVwb3NpdGlvbnMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICAgICdkZScsICdkYScsICdkbycsICdlbScsICdubycsICduYScsICdwYXJhJywgJ3BvcicsICdjb20nLCAnYScsICdvJywgJ2UnXG4gIF0pO1xuICBwcml2YXRlIHJvbWFuTnVtZXJhbHMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICAgICdJJywgJ0lJJywgJ0lJSScsICdJVicsICdWJywgJ1ZJJywgJ1ZJSScsICdWSUlJJywgJ0lYJywgJ1gnLCAnWEknLCAnWElJJywgJ1hJSUknLCAnWElWJywgJ1hWJyxcbiAgICAnWFZJJywgJ1hWSUknLCAnWFZJSUknLCAnWElYJywgJ1hYJ1xuICBdKTtcbiAgcHJpdmF0ZSBzaWdsYXMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICAgICdVSScsICdVWCcsICdUSSdcbiAgXSk7XG5cbiAgZmlyc3QgPSBtb2RlbDxudW1iZXI+KDApO1xuICByb3dzID0gbW9kZWw8bnVtYmVyPig1KTtcbiAgXG4gIHRhYmxlQ2VsbCA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigndGFibGVDZWxsJyk7XG5cbiAgZWxsaXBzaXNUZXh0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBpc0xvYWRpbmdTa2VsZXRvbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgZmlsdGVyQnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBmaWx0ZXJCdXR0b25CYWRnZSA9IGlucHV0PHN0cmluZz4oJycpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdGFibGVDb25maWcgPSBzaWduYWw8VGFibGVDb25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHdpZHRoUGFnZSA9IHNpZ25hbDxudW1iZXI+KDApO1xuXG4gIEBJbnB1dCgndGVtcGxhdGVzJykgX3RlbXBsYXRlcyE6IGFueTtcbiAgQElucHV0KCkgc2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZyA9ICdQZXNxdWlzYXIuLi4nO1xuICBASW5wdXQoKSBkZWZhdWx0U29ydEZpZWxkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGRhdGFTb3VyY2U6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIHRvdGFsUmVjb3JkcyE6IG51bWJlcjtcbiAgQElucHV0KCkgcGFnaW5hdG9yOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgcm93c1BlclBhZ2VPcHRpb25zITogbnVtYmVyW107XG4gIEBJbnB1dCgpIHRhYmxlU2l6ZSE6IG51bWJlcjtcbiAgQElucHV0KCkgZmlsdGVyQ29sdW1uc0J0bjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSByZXBsYWNlRW1wdHlWYWx1ZXM6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBmaWx0cm9zQXZhbmNhZG9zOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNjcm9sbEhlaWdodDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGlzVGFibGVTY3JvbGxhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRhYmxlQ2FwdGFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSByb3dUcmFja0J5OiAoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSA9PiBhbnkgPSAoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSA9PiBpdGVtO1xuICBASW5wdXQoKSByZXNwb25zaXZlTGF5b3V0OiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgZGlzYWJsZWRIZWFkZXJDaGVja2JveDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBlbmFibGVEcmFnRHJvcDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGRyYWdEcm9wRGlzYWJsZWQ6IChpdGVtOiBhbnkpID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZTtcbiAgQElucHV0KCkgYXBwbHlTdHlsZTogRnVuY3Rpb24gPSAocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKSA9PiAnJztcbiAgQElucHV0KCkgcGFnZUxpbmtzT3B0aW9ucyE6IG51bWJlcjtcbiAgQElucHV0KCkgc2hvd0ZpcnN0TGFzdEljb24hOiBib29sZWFuO1xuICBASW5wdXQoJ2NvbmZpZycpIHNldCBzZXRDb25maWcodmFsdWU6IFRhYmxlQ29uZmlnKSB7XG4gICAgdGhpcy50YWJsZUNvbmZpZy5zZXQoe1xuICAgICAgZW5hYmxlQ2F0aW9uOiB2YWx1ZS5lbmFibGVDYXRpb24gfHwgdHJ1ZSxcbiAgICAgIGVuYWJsZVNlbGVjdDogdmFsdWUuZW5hYmxlU2VsZWN0IHx8IGZhbHNlLFxuICAgICAgZW5hYmxlRmlsdGVyOiB2YWx1ZS5lbmFibGVGaWx0ZXIgfHwgdHJ1ZSxcbiAgICAgIC4uLnZhbHVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kZWZpbmlyQ29sdW5hc0NvbmZpZ3VyYXZlaXModGhpcy50YWJsZUNvbmZpZygpISk7XG4gIH1cblxuICBAT3V0cHV0KCkgb25BY3RpdmVJdGVtOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uQWN0aXZlSXRlbUxvdGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25QYWdpbmF0ZTogRXZlbnRFbWl0dGVyPFRhYmxlUGFnaW5hdGU+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25TZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZG91YmxlQ2xpY2tFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBmaWx0ZXJGaWVsZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBvblN3aXRjaFRhYmxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uUm93UmVvcmRlcjogRXZlbnRFbWl0dGVyPHtwcmV2aW91c0luZGV4OiBudW1iZXIsIGN1cnJlbnRJbmRleDogbnVtYmVyLCBpdGVtOiBhbnksIG5ld09yZGVyOiBhbnlbXX0+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBWaWV3Q2hpbGQoJ21lbnVGaWx0cm9EaXYnKSBtZW51RmlsdHJvRGl2ITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnYm90YW9GaWx0cm8nKSBib3Rhb0ZpbHRybyE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2lucHV0RmllbGQnKSBpbnB1dEZpZWxkITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndGFibGUnLCB7IHN0YXRpYzogZmFsc2UgfSkgdGFibGUhOiBUYWJsZTtcbiAgQFZpZXdDaGlsZChUYWJsZSkgcHRhYmxlITogVGFibGU7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZURpcmVjdGl2ZSkgdGVtcGxhdGVzITogUXVlcnlMaXN0PGFueT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjcGZDbnBqUGlwZTogQ3BmQ25walBpcGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZWxlZm9uZVBpcGU6IFRlbGVmb25lUGlwZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmXG4gICkge1xuICAgIHRoaXMuaXNSb3dTZWxlY3RhYmxlID0gdGhpcy5pc1Jvd1NlbGVjdGFibGUuYmluZCh0aGlzKTtcbiAgfVxuXG4gIGNvbmZpZ3VyYWNhb0VmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy50YWJsZUNvbmZpZygpITtcbiAgICB0aGlzLmRlZmluaXJGaWx0cm9zR2xvYmFpcyhjb25maWcpO1xuICAgIHRoaXMuZGVmaW5pckNvbHVuYXNDb25maWd1cmF2ZWlzKGNvbmZpZyk7XG4gIH0pO1xuXG4gIGRhdGFTb3VyY2VTaWduYWwgPSBzaWduYWw8YW55W10+KFtdKTtcblxuICB3aWR0aFNrZWxldG9uczogbnVtYmVyW10gPSBbXTtcblxuICB3aWR0aFJhbmRvbSA9IGNvbXB1dGVkKCgpID0+IChjb2w6IGFueSwgcm93OiBhbnkpID0+IHtcbiAgICBpZiAoIWNvbC50ZW1wbGF0ZSAmJiAhY29sLmljb24gJiYgIWNvbC5maWVsZFR5cGUgJiYgIWNvbC5ib29sZWFuICYmICFjb2wucGlwZSkge1xuICAgICAgcmV0dXJuIHRoaXMud2lkdGhTa2VsZXRvbnNbcm93XSAqIDEwMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDEwMDtcbiAgICB9XG4gIH0pO1xuXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0RyYWdnaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UgJiYgXG4gICAgICAgICh0aGlzLmRhdGFTb3VyY2UubGVuZ3RoICE9PSB0aGlzLmN1cnJEYXRhU291cmNlLmxlbmd0aCB8fFxuICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhU291cmNlKSAhPT0gSlNPTi5zdHJpbmdpZnkodGhpcy5jdXJyRGF0YVNvdXJjZSkpKSB7XG4gICAgICBcbiAgICAgIHRoaXMuY3VyckRhdGFTb3VyY2UgPSBbLi4udGhpcy5kYXRhU291cmNlXTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZVNpZ25hbC5zZXQoWy4uLnRoaXMuZGF0YVNvdXJjZV0pO1xuICAgICAgdGhpcy5jcmVhdGVUYWJsZUFjdGlvbnMoKTtcbiAgICAgIFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICBkYXRhU291cmNlTW9jazogYW55W10gPSBbXTtcblxuICBpc0VtcHR5RGF0YVNvdXJjZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5kYXRhU291cmNlU2lnbmFsKCkpID09PSBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGFTb3VyY2VNb2NrKTtcbiAgfSlcblxuICBsb2FkaW5nU2tlbGV0b25VdGlsaXRpZXMoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZS5sZW5ndGggPT09IDAgJiYgdGhpcy5pc0xvYWRpbmdTa2VsZXRvbigpKSB7XG4gICAgICBsZXQgcm93SXRlbTogYW55ID0ge307XG4gICAgICB0aGlzLnRhYmxlQ29uZmlnKCk/LmNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgIHJvd0l0ZW1bY29sLmZpZWxkXSA9ICcnO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZGF0YVNvdXJjZU1vY2sgPSBBcnJheSh0aGlzLnJvd3MoKSkuZmlsbCh7IC4uLnJvd0l0ZW0gfSk7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSB0aGlzLmRhdGFTb3VyY2VNb2NrO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93cygpOyBpKyspIHtcbiAgICAgICAgdGhpcy53aWR0aFNrZWxldG9ucy5wdXNoKE1hdGgucmFuZG9tKCkgKiAwLjcgKyAwLjIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubG9hZGluZ1NrZWxldG9uVXRpbGl0aWVzKCk7XG4gICAgdGhpcy5hZGp1c3RUYWJsZVNpemUoKTtcbiAgICB0aGlzLndpZHRoUGFnZS5zZXQod2luZG93LmlubmVyV2lkdGgpO1xuICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgdGhpcy5jb2x1bW5zLnB1c2goY29sKTtcbiAgICB9KTtcbiAgICB0aGlzLmNoZWNrSGlkZUNvbHVtbnMoKTtcbiAgICBcbiAgICBpZiAodGhpcy5kYXRhU291cmNlKSB7XG4gICAgICB0aGlzLmN1cnJEYXRhU291cmNlID0gWy4uLnRoaXMuZGF0YVNvdXJjZV07XG4gICAgICB0aGlzLmRhdGFTb3VyY2VTaWduYWwuc2V0KFsuLi50aGlzLmRhdGFTb3VyY2VdKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZGVmYXVsdFNvcnRGaWVsZCA9IHRoaXMuZGVmYXVsdFNvcnRGaWVsZDtcbiAgICBpZiAoZGVmYXVsdFNvcnRGaWVsZCAmJiB0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0eXBlb2YgYVtkZWZhdWx0U29ydEZpZWxkXSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICB0eXBlb2YgYltkZWZhdWx0U29ydEZpZWxkXSA9PT0gJ3N0cmluZydcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIChhW2RlZmF1bHRTb3J0RmllbGRdIGFzIHN0cmluZykubG9jYWxlQ29tcGFyZShcbiAgICAgICAgICAgIChiW2RlZmF1bHRTb3J0RmllbGRdIGFzIHN0cmluZylcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHR5cGVvZiBhW2RlZmF1bHRTb3J0RmllbGRdID09PSAnYm9vbGVhbicgJiZcbiAgICAgICAgICB0eXBlb2YgYltkZWZhdWx0U29ydEZpZWxkXSA9PT0gJ2Jvb2xlYW4nXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBhW2RlZmF1bHRTb3J0RmllbGRdID09PSBiW2RlZmF1bHRTb3J0RmllbGRdXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogYVtkZWZhdWx0U29ydEZpZWxkXVxuICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgOiAtMTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICB0eXBlb2YgYVtkZWZhdWx0U29ydEZpZWxkXSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICB0eXBlb2YgYltkZWZhdWx0U29ydEZpZWxkXSA9PT0gJ251bWJlcidcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIChhW2RlZmF1bHRTb3J0RmllbGRdIGFzIG51bWJlcikgLSAoYltkZWZhdWx0U29ydEZpZWxkXSBhcyBudW1iZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgdGhpcy5jdXJyRGF0YVNvdXJjZSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xuICAgICAgdGhpcy5kYXRhU291cmNlU2lnbmFsLnNldChbLi4udGhpcy5kYXRhU291cmNlXSk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kaXNhYmxlZC1yb3cnKS5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICByb3cucXVlcnlTZWxlY3RvckFsbCgndGQnKS5mb3JFYWNoKGNlbGwgPT4ge1xuICAgICAgICBjZWxsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICBpZiAoIXRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ3Rvb2x0aXAnKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGRlZmluaXJDb2x1bmFzQ29uZmlndXJhdmVpcyhjb25maWc6IFRhYmxlQ29uZmlnKSB7XG4gICAgdGhpcy5jb2x1bW5zLnNwbGljZSgwLCB0aGlzLmNvbHVtbnMubGVuZ3RoKTtcblxuICAgIGNvbmZpZy5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgIHRoaXMuY29sdW1ucy5wdXNoKGNvbCk7XG4gICAgfSk7XG4gIH1cblxuICBkZWZpbmlyRmlsdHJvc0dsb2JhaXMoY29uZmlnOiBUYWJsZUNvbmZpZykge1xuICAgIGlmIChjb25maWc/LmVuYWJsZUZpbHRlcikge1xuXG4gICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcy5zcGxpY2UoMCwgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHMubGVuZ3RoKTtcblxuICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29uZmlnLmNvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHMucHVzaChjb2x1bW4uZmllbGQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlc2V0VGFibGUoKSB7XG4gICAgaWYgKHRoaXMucHRhYmxlKSB0aGlzLnB0YWJsZS5yZXNldCgpO1xuICAgIGlmICh0aGlzLmlucHV0RmllbGQpIHRoaXMuaW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgb25XaW5kb3dSZXNpemUoKSB7XG4gICAgdGhpcy5hZGp1c3RUYWJsZVNpemUoKTtcbiAgICB0aGlzLndpZHRoUGFnZS5zZXQod2luZG93LmlubmVyV2lkdGgpO1xuICB9XG5cbiAgcHVibGljIGFjdGl2ZUl0ZW0ocm93RGF0YTogYW55KSB7XG4gICAgdGhpcy5vbkFjdGl2ZUl0ZW0uZW1pdChyb3dEYXRhKTtcbiAgfVxuXG4gIGdldE9yRXhlY3V0ZTxUPihhY3Rpb246IFZhbHVlT3JGbjxUPiwgZGF0YTogYW55KTogVCB7XG4gICAgcmV0dXJuIGdldE9yRXhlY3V0ZShhY3Rpb24sIGRhdGEpO1xuICB9XG5cbiAgaXNCb29sZWFuRmllbGQocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiByb3dEYXRhW2NvbC5maWVsZF0gPT0gJ2Jvb2xlYW4nO1xuICB9XG5cbiAgaXNDaGlwRmllbGQoY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb2wuZmllbGRUeXBlID09ICdjaGlwJztcbiAgfVxuXG4gIHByb3RlY3RlZCBvblBhZ2UoZXZlbnQ6IFRhYmxlUGFnZUV2ZW50KSB7XG4gICAgdGhpcy5maXJzdC5zZXQoZXZlbnQuZmlyc3QpO1xuICAgIHRoaXMucm93cy5zZXQoZXZlbnQucm93cyk7XG4gIH1cblxuICBpc0ltYWdlRmllbGQoY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIGxldCByZXRvcm5vID0gY29sLmZpZWxkVHlwZSAmJiBjb2wuZmllbGRUeXBlID09PSAnaW1hZ2UnID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHJldHVybiByZXRvcm5vO1xuICB9XG5cbiAgaXNTd2l0Y2hGaWVsZChjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgbGV0IHJldG9ybm8gPSBjb2wuZmllbGRUeXBlICYmIGNvbC5maWVsZFR5cGUgPT09ICdzd2l0Y2gnID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHJldHVybiByZXRvcm5vO1xuICB9XG5cbiAgaXNSb3dTZWxlY3RhYmxlKGV2ZW50OiBhbnkpIHtcbiAgICByZXR1cm4gIXRoaXMuaXNEaXNhYmxlZENoZWNrYm94KGV2ZW50LmRhdGEpO1xuICB9XG5cbiAgaXNEaXNhYmxlZENoZWNrYm94KHJvd0RhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kaXNhYmxlQ29udHJvbENoZWNrYm94RnVuY3Rpb25cbiAgICAgID8gdGhpcy5jb25maWcuZGlzYWJsZUNvbnRyb2xDaGVja2JveEZ1bmN0aW9uKHJvd0RhdGEpXG4gICAgICA6IGZhbHNlO1xuICB9XG5cbiAgaXNEaXNhYmxlZFJvdyhyb3dEYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZGlzYWJsZVJvdyA/IHRoaXMuY29uZmlnLmRpc2FibGVSb3cocm93RGF0YSkgOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3R5bGVDbGFzcyhyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4sIGRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNvbCA/IGNvbC5zdHlsZUNsYXNzIShyb3dEYXRhLCBjb2wsIGRhdGEpIDogJydcbiAgfVxuXG4gIHZlcmlmaWNhQ3Vyc29yKCkge1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kaXNhYmxlZC1yb3cnKS5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICByb3cucXVlcnlTZWxlY3RvckFsbCgndGQnKS5mb3JFYWNoKGNlbGwgPT4ge1xuICAgICAgICBjZWxsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICBpZiAoIXRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ3Rvb2x0aXAnKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRJbWFnZShyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBzdHJpbmcge1xuICAgIC8qXG4gICAgICBOb3NzYSBjb2x1bmEgZGUgaW1hZ2VtIHRyYWJhbGhhIGNvbSBzdHJpbmdzIGRvIHRpcG86IGJhc2U2NCBvdSB1cmxcbiAgICAqL1xuICAgIGxldCByZXRvcm5vID0gYGRhdGE6IGltYWdlIC8ganBnOyBiYXNlNjQsICR7aW1nRGVmYXVsdH0gYDtcbiAgICBpZiAocm93RGF0YSAmJiBjb2wgJiYgcm93RGF0YVtjb2wuZmllbGRdICYmIHJvd0RhdGFbY29sLmZpZWxkXSAhPT0gJycpIHtcbiAgICAgIGlmIChyb3dEYXRhW2NvbC5maWVsZF0uaW5jbHVkZXMoJ2h0dHAnKSkgcmV0b3JubyA9IHJvd0RhdGFbY29sLmZpZWxkXTtcbiAgICAgIGVsc2UgcmV0b3JubyA9IGBkYXRhOiBpbWFnZSAvIGpwZzsgYmFzZTY0LCAke3Jvd0RhdGFbY29sLmZpZWxkXX0gYDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0b3JubztcbiAgfVxuXG4gIHB1YmxpYyBvbkdsb2JhbEZpbHRlcih0YWJsZTogVGFibGUsIGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMuZmlsdGVyRmllbGQuZW1pdCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcbiAgICB0YWJsZS5maWx0ZXJHbG9iYWwoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSwgJ2NvbnRhaW5zJyk7XG4gIH1cblxuICBwdWJsaWMgcGFnaW5hdGUoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgbGV0IHBhZ2luYUluaWNpYWwgPVxuICAgICAgICAoZXZlbnQ/LmZpcnN0ID4gMCA/IGV2ZW50LmZpcnN0IC8gZXZlbnQucm93cyA6IGV2ZW50LmZpcnN0KSArIDE7XG4gICAgICBsZXQgdGVybW9QZXNxdWlzYSA9ICcnO1xuICAgICAgbGV0IG9yZGVuYWNhbyA9ICcnO1xuXG4gICAgICBpZiAoZXZlbnQuZ2xvYmFsRmlsdGVyKSB0ZXJtb1Blc3F1aXNhID0gZXZlbnQuZ2xvYmFsRmlsdGVyO1xuXG4gICAgICBpZiAoZXZlbnQuc29ydEZpZWxkKVxuICAgICAgICBvcmRlbmFjYW8gPSBgJHtldmVudC5zb3J0RmllbGR9ICR7ZXZlbnQuc29ydE9yZGVyID09PSAxID8gJ0FTQycgOiAnREVTQyd9IGA7XG5cbiAgICAgIGNvbnN0IG9iamV0bzogVGFibGVQYWdpbmF0ZSA9IHtcbiAgICAgICAgcGFnaW5hSW5pY2lhbDogcGFnaW5hSW5pY2lhbCxcbiAgICAgICAgdGFtYW5ob1BhZ2luYTogZXZlbnQucm93cyxcbiAgICAgICAgdGVybW9QZXNxdWlzYTogdGVybW9QZXNxdWlzYSxcbiAgICAgICAgb3JkZW5hY2FvOiBvcmRlbmFjYW8sXG4gICAgICAgIG9yZGVybmFjYW9Hcm91cDogeyBjb2x1bW46IGV2ZW50LnNvcnRGaWVsZCwgZGlyZWN0aW9uOiBldmVudC5zb3J0T3JkZXIgPT09IDEgPyAnQVNDJyA6ICdERVNDJyB9LFxuICAgICAgfTtcblxuICAgICAgdGhpcy5vblBhZ2luYXRlLmVtaXQob2JqZXRvKTtcblxuICAgICAgdGhpcy5hY3Rpb25zT2Zmc2V0ID0gZXZlbnQuZmlyc3Q7XG4gICAgICB0aGlzLmNyZWF0ZVRhYmxlQWN0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdGlvbkNoYW5nZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zOiBhbnkpIHtcbiAgICB0aGlzLm9uQWN0aXZlSXRlbUxvdGUuZW1pdChzZWxlY3RlZEl0ZW1zKTtcbiAgfVxuXG4gIHJldHVyblJvd0NsYXNzKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikge1xuICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbY29sLmZpZWxkXTtcbiAgICBsZXQgcm93Q2xhc3M6IHN0cmluZztcblxuICAgIHRoaXMudGFibGVTaXplID4gODAwID8gKHJvd0NsYXNzID0gJ3RleHQtYmFzZScpIDogKHJvd0NsYXNzID0gJ3RleHQtc20nKTtcblxuICAgIGlmIChjb2wuZXhwaXJlZERhdGUgPT0gdHJ1ZSkge1xuICAgICAgbmV3IERhdGUodmFsdWUpIDwgbmV3IERhdGUoKVxuICAgICAgICA/IChyb3dDbGFzcyA9IHJvd0NsYXNzICsgJyB0ZXh0LXJlZC00MDAgZm9udC1zZW1pYm9sZCcpXG4gICAgICAgIDogJyc7XG4gICAgfVxuICAgIHJldHVybiByb3dDbGFzcztcbiAgfVxuXG4gIHByaXZhdGUgZXhwaXJlZEZpbGUocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgbGV0IHZhbHVlID0gcm93RGF0YVsnZGF0YXZlbmNpbWVudG8nXTtcbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpIDwgbmV3IERhdGUoKSAmJiBjb2wuZmllbGQgPT0gJ2FyZWEnO1xuICB9XG5cbiAgdHJhbnNmb3JtVmFsdWUocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKSB7XG4gICAgbGV0IHZhbHVlID0gcm93RGF0YVtjb2wuZmllbGRdO1xuXG4gICAgaWYgKGNvbC50cmFuc2Zvcm0pIHtcbiAgICAgIHJldHVybiBjb2wudHJhbnNmb3JtKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSB1bmRlZmluZWQpICYmIHRoaXMucmVwbGFjZUVtcHR5VmFsdWVzICYmIHRoaXMuaXNMb2FkaW5nU2tlbGV0b24oKSkge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgaWYgKCFjb2wucGlwZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoY29sLnBpcGUpIHtcbiAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAnZGQvTU0veXl5eScsICdVVEMnKTtcbiAgICAgICAgY2FzZSAnZGF0ZXRpbWUnOlxuICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgJ2RkL01NL3l5eXkgaGg6bW0nKTtcbiAgICAgICAgY2FzZSAnZGF0ZU1vbnRoWWVhcic6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAnTU0veXl5eScpO1xuICAgICAgICBjYXNlICdkZWNpbWFsJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5kZWNpbWFsUGlwZS50cmFuc2Zvcm0odmFsdWUsICcxLjItMicsICdwdC1CUicpO1xuICAgICAgICBjYXNlICdjcGZjbnBqJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy5jcGZDbnBqUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xuICAgICAgICBjYXNlICd0ZWxlZm9uZSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMudGVsZWZvbmVQaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICAgIGNhc2UgJ2NhcGl0YWxpemUnOlxuICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybUNhcGl0YWxpemUodmFsdWUpO1xuICAgICAgICBjYXNlICdtb25leSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0YXJWYWxvcih2YWx1ZSk7XG4gICAgICAgIGNhc2UgJ3BlcmNlbnRhZ2UnOlxuICAgICAgICAgIHJldHVybiBgJHt2YWx1ZX0gJSBgO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdHJhbnNmb3JtQ2FwaXRhbGl6ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gdmFsdWU7XG5cbiAgICByZXR1cm4gdmFsdWUuc3BsaXQoJyAnKS5tYXAoKHdvcmQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCB3b3JkVXBwZXIgPSB3b3JkLnRvVXBwZXJDYXNlKCk7XG4gICAgICBjb25zdCB3b3JkTG93ZXIgPSB3b3JkLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmICh0aGlzLnJvbWFuTnVtZXJhbHMuaGFzKHdvcmRVcHBlcikpIHtcbiAgICAgICAgcmV0dXJuIHdvcmQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnNpZ2xhcy5oYXMod29yZFVwcGVyKSkge1xuICAgICAgICByZXR1cm4gd29yZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGluZGV4ICE9PSAwICYmIHRoaXMucHJlcG9zaXRpb25zLmhhcyh3b3JkTG93ZXIpKSB7XG4gICAgICAgIHJldHVybiB3b3JkTG93ZXI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3b3JkLmNoYXJBdCgwKS50b0xvY2FsZVVwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIH0pLmpvaW4oJyAnKTtcbiAgfVxuXG4gIGZvcm1hdGFyVmFsb3IodmFsb3I6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KCdwdC1CUicsIHtcbiAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgY3VycmVuY3k6ICdCUkwnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsb3IpO1xuICB9XG5cbiAgYWRqdXN0VGFibGVTaXplKCkge1xuICAgIGlmICh0aGlzLnRhYmxlU2l6ZSA8IDgwMCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFNpemUgPSAncC1kYXRhdGFibGUtc20nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkU2l6ZSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIGRvdWJsZUNsaWNrKGU6IGFueSwgcm93RGF0YTogYW55KSB7XG4gICAgbGV0IGV2ZW50RG91YmxlQ2xpY2sgPSB7IGV2ZW50OiBlLCByb3dEYXRhOiByb3dEYXRhIH07XG5cbiAgICBsZXQgYXJyYXk6IHN0cmluZ1tdID0gW107XG4gICAgZS50YXJnZXQuY2xhc3NMaXN0LmZvckVhY2goKHg6IGFueSkgPT4gYXJyYXkucHVzaCh4KSk7XG5cbiAgICB0aGlzLmRvdWJsZUNsaWNrRXZlbnQuZW1pdChldmVudERvdWJsZUNsaWNrKTtcbiAgfVxuXG4gIHJldG9ybmFyUm93KHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbiwgZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgX3Jvd2FjdGlvbiA9IHRoaXMuY29uZmlnLnJvd3MgPyB0aGlzLmNvbmZpZy5yb3dzW2NvbC5maWVsZF0gOiBudWxsO1xuICAgIGNvbnN0IF9maWVsZDogc3RyaW5nID1cbiAgICAgIF9yb3dhY3Rpb24gJiYgX3Jvd2FjdGlvbltmaWVsZF1cbiAgICAgICAgPyBfcm93YWN0aW9uW2ZpZWxkXS5jb25zdHJ1Y3RvciA9PT0gRnVuY3Rpb25cbiAgICAgICAgICA/IF9yb3dhY3Rpb25bZmllbGRdLmFwcGx5KHRoaXMsIFtyb3dEYXRhXSlcbiAgICAgICAgICA6IF9yb3dhY3Rpb25bZmllbGRdXG4gICAgICAgIDogbnVsbDtcbiAgICByZXR1cm4gX2ZpZWxkO1xuICB9XG5cbiAgcHJpdmF0ZSBleGliaXJDYW1wbyhmaWVsZDogYW55LCByb3dEYXRhOiBhbnkpIHtcbiAgICBsZXQgdmlzaWJsZSA9IGZpZWxkLnZpc2libGUgPyBmaWVsZC52aXNpYmxlKHJvd0RhdGEpIDogdHJ1ZTtcblxuICAgIHJldHVybiB2aXNpYmxlO1xuICB9XG5cbiAgcmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBjaGlwIC0gc3R5bGUgdyAtIGF1dG8gYm9yZGVyIC0gcm91bmQgLSAyeGwgcCAtIDIgdGV4dCAtICR7dGhpcy5yZXRvcm5hclJvdyhcbiAgICAgIHJvd0RhdGEsXG4gICAgICBjb2wsXG4gICAgICAnc3R5bGVjaGlwJ1xuICAgIClcbiAgICAgIH0gYm9yZGVyIC0gJHt0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ3N0eWxlY2hpcCcpfSBgO1xuICB9XG5cbiAgcmV0dXJuQ2xhc3NJY29uKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmV0b3JuYXJSb3cocm93RGF0YSwgY29sLCAnaWNvbnJvdycpO1xuICB9XG5cbiAgcmV0dXJuVG9vbHRpcEljb24ocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXRvcm5hclJvdyhyb3dEYXRhLCBjb2wsICd0b29sdGlwaWNvbnJvdycpO1xuICB9XG5cbiAgcmV0dXJuVG9vbHRpcFJvdyhyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ3Rvb2x0aXByb3cnKTtcbiAgfVxuXG4gIGRlbGV0ZUNvbHVtbihmaWVsZDogc3RyaW5nKSB7XG4gICAgbGV0IGluZGV4OiBudW1iZXI7XG5cbiAgICBsZXQgY29sdW1uOiBUYWJsZUNvbmZpZ0NvbHVtbiB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlnLmNvbHVtbnMuZmluZChcbiAgICAgIHggPT4geC5maWVsZCA9PSBmaWVsZFxuICAgICk7XG4gICAgaWYgKGNvbHVtbikge1xuICAgICAgaW5kZXggPSB0aGlzLmNvbmZpZy5jb2x1bW5zLmluZGV4T2YoY29sdW1uKTtcbiAgICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMuZGVsZXRlZENvbHVucy5wdXNoKGNvbHVtbik7XG4gICAgfVxuICB9XG5cbiAgYWRkQ29sdW1uKGZpZWxkOiBzdHJpbmcpIHtcbiAgICBsZXQgaW5kZXg6IG51bWJlcjtcblxuICAgIGxldCBjb2x1bW46IFRhYmxlQ29uZmlnQ29sdW1uIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWcuY29sdW1ucy5maW5kKFxuICAgICAgKHgpID0+IHguZmllbGQgPT0gZmllbGRcbiAgICApO1xuXG4gICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgIGxldCBkZWxldGVkQ29sdW1uOiBUYWJsZUNvbmZpZ0NvbHVtbiB8IHVuZGVmaW5lZCA9XG4gICAgICAgIHRoaXMuZGVsZXRlZENvbHVucy5maW5kKCh4KSA9PiB4LmZpZWxkID09IGZpZWxkKTtcblxuICAgICAgaWYgKGRlbGV0ZWRDb2x1bW4gIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGluZGV4ID0gdGhpcy5kZWxldGVkQ29sdW5zLmluZGV4T2YoZGVsZXRlZENvbHVtbik7XG4gICAgICAgIHRoaXMuZGVsZXRlZENvbHVucy5zbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMuY29uZmlnLmNvbHVtbnMucHVzaChkZWxldGVkQ29sdW1uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkaW5hbWljQ29sdW1uU2V0KGU6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikge1xuICAgIGNvbC5jaGVja2VkID0gZS5jaGVja2VkO1xuICAgIGlmIChlLmNoZWNrZWQpIHRoaXMuYWRkQ29sdW1uKGNvbC5maWVsZCk7XG4gICAgZWxzZSB0aGlzLmRlbGV0ZUNvbHVtbihjb2wuZmllbGQpO1xuXG4gICAgaWYgKGNvbC5wb3NpdGlvbikgdGhpcy5jb25maWcuY29sdW1ucy5zb3J0KHRoaXMuc29ydEJ5UG9zaXRpb24oKSk7XG4gIH1cblxuICBhYnJpck1lbnVGaWx0cm8oZTogYW55KSB7XG4gICAgdGhpcy5tZW51RmlsdHJvID0gIXRoaXMubWVudUZpbHRybztcbiAgICB0aGlzLmNoZWNrYm94Q2xpY2tlZCA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMud2lkdGhQYWdlKCkgPCA3MDApXG4gICAgICB0aGlzLnN0eWxlU2V0dGVyKFxuICAgICAgICAnbGVmdCcsXG4gICAgICAgIHRoaXMuYm90YW9GaWx0cm8ubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0IC0gMjg4ICsgJ3B4J1xuICAgICAgKTtcbiAgICBlbHNlXG4gICAgICB0aGlzLnN0eWxlU2V0dGVyKFxuICAgICAgICAnbGVmdCcsXG4gICAgICAgIHRoaXMuYm90YW9GaWx0cm8ubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0ICsgNDAgKyAncHgnXG4gICAgICApO1xuXG4gICAgdGhpcy5zdHlsZVNldHRlcigndG9wJywgdGhpcy5ib3Rhb0ZpbHRyby5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcCArICdweCcpO1xuICAgIHRoaXMuc3R5bGVTZXR0ZXIoJ3Zpc2liaWxpdHknLCB0aGlzLm1lbnVGaWx0cm8gPyAndmlzaWJsZScgOiAnaGlkZGVuJyk7XG4gIH1cblxuICBmZWNoYXJNZW51RmlsdHJvKCkge1xuICAgIHRoaXMubWVudUZpbHRybyA9IGZhbHNlO1xuICAgIHRoaXMuY2hlY2tib3hDbGlja2VkID0gZmFsc2U7XG5cbiAgICB0aGlzLnN0eWxlU2V0dGVyKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnLCBbJyRldmVudCddKVxuICBvbkVzY2FwZUtleShldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLmZpbHRlckNvbHVtbnNCdG4gPT0gdHJ1ZSAmJiB0aGlzLm1lbnVGaWx0cm8gPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5mZWNoYXJNZW51RmlsdHJvKCk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBvbkNsaWNrRXZlbnQoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmZpbHRlckNvbHVtbnNCdG4gPT0gdHJ1ZSAmJiB0aGlzLm1lbnVGaWx0cm8gPT0gdHJ1ZSkge1xuICAgICAgY29uc3QgY2xpY2tlZEVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCBtZW51RmlsdHJvRGl2ID1cbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI21lbnVGaWx0cm9EaXYnKTtcbiAgICAgIGNvbnN0IGJvdGFvRmlsdHJvID1cbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2JvdGFvRmlsdHJvJyk7XG4gICAgICBjb25zdCBpc0NoZWNrYm94Q2xpY2tlZCA9XG4gICAgICAgIGNsaWNrZWRFbGVtZW50LmNsYXNzTGlzdC50b1N0cmluZygpLmluY2x1ZGVzKCdwLWNoZWNrYm94JykgfHxcbiAgICAgICAgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC50b1N0cmluZygpID09ICcnO1xuICAgICAgY29uc3QgaXNJbnNpZGVNZW51ID1cbiAgICAgICAgbWVudUZpbHRyb0Rpdj8uY29udGFpbnMoY2xpY2tlZEVsZW1lbnQpIHx8XG4gICAgICAgIGJvdGFvRmlsdHJvPy5jb250YWlucyhjbGlja2VkRWxlbWVudCkgfHxcbiAgICAgICAgaXNDaGVja2JveENsaWNrZWQ7XG5cbiAgICAgIGlmICghaXNJbnNpZGVNZW51KSB0aGlzLmZlY2hhck1lbnVGaWx0cm8oKTtcbiAgICB9XG4gIH1cblxuICBzdHlsZVNldHRlcihzdHlsZTogc3RyaW5nLCBkYXRhOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZSh0aGlzLm1lbnVGaWx0cm9EaXYubmF0aXZlRWxlbWVudCwgc3R5bGUsIGRhdGEpO1xuICB9XG5cbiAgY2hlY2tNZW51RmlsdHJvKGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcbiAgICBsZXQgZGVsZXRlZENvbHVtbiA9IHRoaXMuZGVsZXRlZENvbHVucy5maW5kKFxuICAgICAgeCA9PiB4LmZpZWxkID09IGNvbC5maWVsZFxuICAgICk7XG4gICAgaWYgKGRlbGV0ZWRDb2x1bW4pIGNvbC5jaGVja2VkID0gZmFsc2U7XG4gICAgZWxzZSBjb2wuY2hlY2tlZCA9IHRydWU7XG4gIH1cblxuICBzb3J0QnlQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGVsZW0xOiBhbnksIGVsZW0yOiBhbnkpIHtcbiAgICAgIGlmIChlbGVtMS5wb3NpdGlvbiA8IGVsZW0yLnBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSBpZiAoZWxlbTEucG9zaXRpb24gPiBlbGVtMi5wb3NpdGlvbikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBkaW5hbWljRGlzYWJsZUNvbHVtbihjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgaWYgKGNvbC5maXhlZENvbHVtbikgcmV0dXJuIGNvbC5maXhlZENvbHVtbjtcbiAgICBlbHNlIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNoZWNrSGlkZUNvbHVtbnMoKSB7XG4gICAgbGV0IGhpZGVDb2x1bW5zQ29uZmlnID0gdGhpcy5jb2x1bW5zLmZpbHRlcihcbiAgICAgIGNvbCA9PiBjb2wuaGlkZUNvbHVtbiA9PSB0cnVlXG4gICAgKTtcbiAgICBoaWRlQ29sdW1uc0NvbmZpZy5mb3JFYWNoKGNvbCA9PiB0aGlzLmRlbGV0ZUNvbHVtbihjb2wuZmllbGQpKTtcbiAgfVxuXG4gIGdldEN1c3RvbVRlbXBsYXRlKHRlbXBsYXRlbmFtZTogc3RyaW5nKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlc1t0ZW1wbGF0ZW5hbWVdO1xuICB9XG5cbiAgb25Td2l0Y2hDaGFuZ2UoZXN0YWRvOiBhbnksIHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikge1xuICAgIHRoaXMub25Td2l0Y2hUYWJsZUNoYW5nZS5lbWl0KHtcbiAgICAgIGVzdGFkbzogZXN0YWRvLFxuICAgICAgcm93RGF0YTogcm93RGF0YSxcbiAgICAgIGNvbDogY29sLFxuICAgIH0pO1xuXG4gICAgcm93RGF0YVtjb2wuZmllbGRdID0gZXN0YWRvO1xuICB9XG5cbiAgY3JlYXRlVGFibGVBY3Rpb25zKCkge1xuICAgIHRoaXMudGFibGVBY3Rpb25zID0gdGhpcy5kYXRhU291cmNlPy5tYXAoKHgpID0+XG4gICAgICB0aGlzLmNvbmZpZy5hY3Rpb25zXG4gICAgICAgID8gdGhpcy5jb25maWcuYWN0aW9ucy5tYXAoKHkpID0+IG1hcFRvTWVudUl0ZW0oeSwgeCkpXG4gICAgICAgIDogW11cbiAgICApO1xuICB9XG5cbiAgb25Tb3J0KGU6IGFueSkge1xuICAgIHRoaXMuZGF0YVNvdXJjZSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xuICB9XG5cbiAgZ2V0IGNvbmZpZygpOiBUYWJsZUNvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVDb25maWcoKSE7XG4gIH1cblxuICBjb2x1bW5zRmlsdGVyID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGR5bmFtaWNDb2x1bW5zID0gKHRoaXMudGFibGVDb25maWcoKT8uY29sdW1ucyA/PyBbXSkuZmlsdGVyKGNvbCA9PiAhY29sLmZpeGVkQ29sdW1uKTtcblxuICAgIHJldHVybiBbLi4uZHluYW1pY0NvbHVtbnMsIC4uLnRoaXMuZGVsZXRlZENvbHVuc107XG4gIH0pO1xuXG4gIHJldHVybk1heFdpZHRoID0gY29tcHV0ZWQoKCkgPT4gKHdpZHRoQ29sOiBzdHJpbmcpID0+IHtcbiAgICBsZXQgd2lkdGhUYWJsZSA9IHRoaXMudGFibGVDZWxsKCk/Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICBsZXQgcGVyY2VudCA9IE51bWJlcih3aWR0aENvbC5yZXBsYWNlKCclJywgJycpKTtcblxuICAgIGxldCB3aWR0aENhbGMgPSB3aWR0aFRhYmxlICogcGVyY2VudCAvIDEwMDtcblxuICAgIHJldHVybiBgJHt3aWR0aENhbGN9cHhgO1xuICB9KTtcblxuICBjdXJyZW50UGFnZURhdGEgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc291cmNlRGF0YSA9IHRoaXMuZGF0YVNvdXJjZVNpZ25hbCgpO1xuICAgIFxuICAgIGlmICghc291cmNlRGF0YSB8fCBzb3VyY2VEYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBcbiAgICBpZiAoIXRoaXMucGFnaW5hdG9yKSB7XG4gICAgICByZXR1cm4gc291cmNlRGF0YTtcbiAgICB9XG4gICAgXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IHRoaXMuZmlyc3QoKTtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMucm93cygpO1xuICAgIHJldHVybiBzb3VyY2VEYXRhLnNsaWNlKHN0YXJ0SW5kZXgsIHN0YXJ0SW5kZXggKyBwYWdlU2l6ZSk7XG4gIH0pO1xuXG5cblxuXG4gIC8vaW5pY2lvIGRhcyBmdW7Dp8O1ZXMgZXNwZWPDrWZpY2FzIGRlIGRyYWcgYW5kIGRyb3BcblxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxhbnlbXT4pIHtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICBcbiAgICBpZiAoZXZlbnQucHJldmlvdXNDb250YWluZXIgPT09IGV2ZW50LmNvbnRhaW5lcikge1xuICAgICAgaWYgKCF0aGlzLmlzVmFsaWREcmFnT3BlcmF0aW9uKGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBjdXJyZW50UGFnZVN0YXJ0SW5kZXggPSB0aGlzLmZpcnN0KCk7XG4gICAgICBjb25zdCBnbG9iYWxQcmV2aW91c0luZGV4ID0gY3VycmVudFBhZ2VTdGFydEluZGV4ICsgZXZlbnQucHJldmlvdXNJbmRleDtcbiAgICAgIGNvbnN0IGdsb2JhbEN1cnJlbnRJbmRleCA9IGN1cnJlbnRQYWdlU3RhcnRJbmRleCArIGV2ZW50LmN1cnJlbnRJbmRleDtcbiAgICAgIFxuICAgICAgaWYgKHRoaXMuY29uZmlnLmxhenkpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFBhZ2VEYXRhQXJyYXkgPSBbLi4udGhpcy5jdXJyZW50UGFnZURhdGEoKV07XG4gICAgICAgIG1vdmVJdGVtSW5BcnJheShjdXJyZW50UGFnZURhdGFBcnJheSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5zcGxpY2UoY3VycmVudFBhZ2VTdGFydEluZGV4LCB0aGlzLnJvd3MoKSwgLi4uY3VycmVudFBhZ2VEYXRhQXJyYXkpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5jdXJyRGF0YVNvdXJjZSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VTaWduYWwuc2V0KFsuLi50aGlzLmRhdGFTb3VyY2VdKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMub25Sb3dSZW9yZGVyLmVtaXQoe1xuICAgICAgICAgIHByZXZpb3VzSW5kZXg6IGdsb2JhbFByZXZpb3VzSW5kZXgsXG4gICAgICAgICAgY3VycmVudEluZGV4OiBnbG9iYWxDdXJyZW50SW5kZXgsXG4gICAgICAgICAgaXRlbTogY3VycmVudFBhZ2VEYXRhQXJyYXlbZXZlbnQuY3VycmVudEluZGV4XSxcbiAgICAgICAgICBuZXdPcmRlcjogWy4uLnRoaXMuZGF0YVNvdXJjZV1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZ2xvYmFsUHJldmlvdXNJbmRleCA+PSB0aGlzLmRhdGFTb3VyY2UubGVuZ3RoIHx8IGdsb2JhbEN1cnJlbnRJbmRleCA+PSB0aGlzLmRhdGFTb3VyY2UubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCfinYwgR2xvYmFsIGluZGljZXMgb3V0c2lkZSBkYXRhU291cmNlIGJvdW5kczonLCB7XG4gICAgICAgICAgICBnbG9iYWxQcmV2aW91c0luZGV4LFxuICAgICAgICAgICAgZ2xvYmFsQ3VycmVudEluZGV4LFxuICAgICAgICAgICAgZGF0YVNvdXJjZUxlbmd0aDogdGhpcy5kYXRhU291cmNlLmxlbmd0aFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuZGF0YVNvdXJjZSwgZ2xvYmFsUHJldmlvdXNJbmRleCwgZ2xvYmFsQ3VycmVudEluZGV4KTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuY3VyckRhdGFTb3VyY2UgPSBbLi4udGhpcy5kYXRhU291cmNlXTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlU2lnbmFsLnNldChbLi4udGhpcy5kYXRhU291cmNlXSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgIHRoaXMub25Sb3dSZW9yZGVyLmVtaXQoe1xuICAgICAgICAgIHByZXZpb3VzSW5kZXg6IGdsb2JhbFByZXZpb3VzSW5kZXgsXG4gICAgICAgICAgY3VycmVudEluZGV4OiBnbG9iYWxDdXJyZW50SW5kZXgsXG4gICAgICAgICAgaXRlbTogdGhpcy5kYXRhU291cmNlW2dsb2JhbEN1cnJlbnRJbmRleF0sXG4gICAgICAgICAgbmV3T3JkZXI6IFsuLi50aGlzLmRhdGFTb3VyY2VdXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLmNyZWF0ZVRhYmxlQWN0aW9ucygpO1xuICAgICAgXG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zZmVyQXJyYXlJdGVtKFxuICAgICAgICBldmVudC5wcmV2aW91c0NvbnRhaW5lci5kYXRhLFxuICAgICAgICBldmVudC5jb250YWluZXIuZGF0YSxcbiAgICAgICAgZXZlbnQucHJldmlvdXNJbmRleCxcbiAgICAgICAgZXZlbnQuY3VycmVudEluZGV4LFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzVmFsaWREcmFnT3BlcmF0aW9uKHByZXZpb3VzSW5kZXg6IG51bWJlciwgY3VycmVudEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50UGFnZVNpemUgPSB0aGlzLmN1cnJlbnRQYWdlRGF0YSgpLmxlbmd0aDtcbiAgICBjb25zdCBpc1ZhbGlkID0gcHJldmlvdXNJbmRleCA+PSAwICYmIHByZXZpb3VzSW5kZXggPCBjdXJyZW50UGFnZVNpemUgJiYgXG4gICAgICAgICAgICAgICAgICAgY3VycmVudEluZGV4ID49IDAgJiYgY3VycmVudEluZGV4IDwgY3VycmVudFBhZ2VTaXplO1xuICAgIFxuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgY29uc29sZS53YXJuKCfimqDvuI8gSW52YWxpZCBkcmFnIG9wZXJhdGlvbjonLCB7XG4gICAgICAgIHByZXZpb3VzSW5kZXgsXG4gICAgICAgIGN1cnJlbnRJbmRleCxcbiAgICAgICAgY3VycmVudFBhZ2VTaXplLFxuICAgICAgICBjdXJyZW50UGFnZURhdGFMZW5ndGg6IHRoaXMuY3VycmVudFBhZ2VEYXRhKCkubGVuZ3RoLFxuICAgICAgICBkYXRhU291cmNlTGVuZ3RoOiB0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLFxuICAgICAgICBmaXJzdDogdGhpcy5maXJzdCgpLFxuICAgICAgICByb3dzOiB0aGlzLnJvd3MoKSxcbiAgICAgICAgY3VycmVudFBhZ2U6IE1hdGguZmxvb3IodGhpcy5maXJzdCgpIC8gdGhpcy5yb3dzKCkpICsgMVxuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBpc1ZhbGlkO1xuICB9XG5cbiAgb25EcmFnU3RhcnRlZChldmVudDogQ2RrRHJhZ1N0YXJ0KTogdm9pZCB7XG4gICAgY29uc3QgZHJhZ2dlZFJvdyA9IGV2ZW50LnNvdXJjZS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTFRhYmxlUm93RWxlbWVudDtcbiAgICBcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICAgIFxuICAgIGNvbnN0IGFwcGx5UHJldmlld1N0eWxlcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHByZXZpZXcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2RrLWRyYWctcHJldmlldycpIGFzIEhUTUxUYWJsZVJvd0VsZW1lbnQ7XG5cbiAgICAgIGlmIChwcmV2aWV3ICYmIGRyYWdnZWRSb3cpIHtcbiAgICAgICAgcHJldmlldy5jbGFzc0xpc3QuYWRkKCdpbml0aWFsaXppbmcnKTtcbiAgICAgICAgcHJldmlldy5jbGFzc0xpc3QucmVtb3ZlKCdyZWFkeScpO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgcGFyZW50VGFibGUgPSBkcmFnZ2VkUm93LmNsb3Nlc3QoJ3RhYmxlJyk7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsQ2VsbHMgPSBkcmFnZ2VkUm93LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkJyk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCB0YWJsZVJlY3QgPSBwYXJlbnRUYWJsZT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHJvd1JlY3QgPSBkcmFnZ2VkUm93LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBcbiAgICAgICAgd2hpbGUgKHByZXZpZXcuZmlyc3RDaGlsZCkge1xuICAgICAgICAgIHByZXZpZXcucmVtb3ZlQ2hpbGQocHJldmlldy5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc3QgcHJldmlld1RhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTtcbiAgICAgICAgY29uc3QgcHJldmlld1Rib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGJvZHknKTtcbiAgICAgICAgY29uc3QgcHJldmlld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XG4gICAgICAgIFxuICAgICAgICBwcmV2aWV3VGFibGUuc3R5bGUuY3NzVGV4dCA9IGBcbiAgICAgICAgICB3aWR0aDogJHt0YWJsZVJlY3Q/LndpZHRoID8gTWF0aC5taW4odGFibGVSZWN0LndpZHRoLCA4MDApIDogJ2F1dG8nfXB4O1xuICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgICAgICAgIHRhYmxlLWxheW91dDogZml4ZWQ7XG4gICAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgICAgIGA7XG4gICAgICAgIFxuICAgICAgICBpZiAocGFyZW50VGFibGUpIHtcbiAgICAgICAgICBwcmV2aWV3VGFibGUuY2xhc3NOYW1lID0gcGFyZW50VGFibGUuY2xhc3NOYW1lO1xuICAgICAgICAgIGNvbnN0IGNvbXB1dGVkVGFibGVTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudFRhYmxlKTtcbiAgICAgICAgICBwcmV2aWV3VGFibGUuc3R5bGUuZm9udEZhbWlseSA9IGNvbXB1dGVkVGFibGVTdHlsZS5mb250RmFtaWx5O1xuICAgICAgICAgIHByZXZpZXdUYWJsZS5zdHlsZS5mb250U2l6ZSA9IGNvbXB1dGVkVGFibGVTdHlsZS5mb250U2l6ZTtcbiAgICAgICAgICBwcmV2aWV3VGFibGUuc3R5bGUubGluZUhlaWdodCA9IGNvbXB1dGVkVGFibGVTdHlsZS5saW5lSGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBwcmV2aWV3Um93LmNsYXNzTmFtZSA9IGRyYWdnZWRSb3cuY2xhc3NOYW1lO1xuICAgICAgICBwcmV2aWV3Um93LnN0eWxlLmhlaWdodCA9IGAke3Jvd1JlY3QuaGVpZ2h0fXB4YDtcbiAgICAgICAgXG4gICAgICAgIG9yaWdpbmFsQ2VsbHMuZm9yRWFjaCgob3JpZ2luYWxDZWxsLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHByZXZpZXdDZWxsID0gb3JpZ2luYWxDZWxsLmNsb25lTm9kZSh0cnVlKSBhcyBIVE1MVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICBjb25zdCBjZWxsUmVjdCA9IG9yaWdpbmFsQ2VsbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICBcbiAgICAgICAgICBwcmV2aWV3Q2VsbC5zdHlsZS5jc3NUZXh0ID0gYFxuICAgICAgICAgICAgd2lkdGg6ICR7Y2VsbFJlY3Qud2lkdGh9cHg7XG4gICAgICAgICAgICBtaW4td2lkdGg6ICR7Y2VsbFJlY3Qud2lkdGh9cHg7XG4gICAgICAgICAgICBtYXgtd2lkdGg6ICR7Y2VsbFJlY3Qud2lkdGh9cHg7XG4gICAgICAgICAgICBoZWlnaHQ6ICR7Y2VsbFJlY3QuaGVpZ2h0fXB4O1xuICAgICAgICAgICAgcGFkZGluZzogJHt3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvcmlnaW5hbENlbGwpLnBhZGRpbmd9O1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogJHt3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvcmlnaW5hbENlbGwpLnRleHRBbGlnbn07XG4gICAgICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogJHt3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvcmlnaW5hbENlbGwpLnZlcnRpY2FsQWxpZ259O1xuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICAgIGA7XG4gICAgICAgICAgXG4gICAgICAgICAgcHJldmlld1Jvdy5hcHBlbmRDaGlsZChwcmV2aWV3Q2VsbCk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgcHJldmlld1Rib2R5LmFwcGVuZENoaWxkKHByZXZpZXdSb3cpO1xuICAgICAgICBwcmV2aWV3VGFibGUuYXBwZW5kQ2hpbGQocHJldmlld1Rib2R5KTtcbiAgICAgICAgcHJldmlldy5hcHBlbmRDaGlsZChwcmV2aWV3VGFibGUpO1xuICAgICAgICBcbiAgICAgICAgcHJldmlldy5zdHlsZS5jc3NUZXh0ID0gYFxuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEodmFyKC0ta3YtY29sb3Itc3lzdGVtKSwgMC4yKTtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7XG4gICAgICAgICAgYm94LXNoYWRvdzogMCA4cHggMjVweCByZ2JhKDAsIDAsIDAsIDAuMTUpLCAwIDRweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICAgICAgICB6LWluZGV4OiAxMDAwO1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgd2lkdGg6ICR7dGFibGVSZWN0Py53aWR0aCA/IE1hdGgubWluKHRhYmxlUmVjdC53aWR0aCwgODAwKSA6ICdhdXRvJ31weDtcbiAgICAgICAgICBtYXgtd2lkdGg6IDkwdnc7XG4gICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIGA7XG4gICAgICAgIFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAocHJldmlldykge1xuICAgICAgICAgICAgcHJldmlldy5jbGFzc0xpc3QucmVtb3ZlKCdpbml0aWFsaXppbmcnKTtcbiAgICAgICAgICAgIHByZXZpZXcuY2xhc3NMaXN0LmFkZCgncmVhZHknKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDUwKTtcbiAgICAgICAgXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYXBwbHlQcmV2aWV3U3R5bGVzKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhcHBseVByZXZpZXdTdHlsZXMpO1xuICB9XG5cbiAgb25EcmFnRW5kZWQoKTogdm9pZCB7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJrdi10YWJsZS1jb250YWluZXJcIj5cbiAgQGlmIChjb25maWcpIHtcbiAgPHAtdGFibGVcbiAgICAjZHRcbiAgICAjdGFibGVcbiAgICBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc21cIlxuICAgIFt2YWx1ZV09XCJkYXRhU291cmNlXCJcbiAgICBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRJdGVtc1wiXG4gICAgW3Jvd1NlbGVjdGFibGVdPVwiaXNSb3dTZWxlY3RhYmxlXCJcbiAgICBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiXG4gICAgW2dsb2JhbEZpbHRlckZpZWxkc109XCJnbG9iYWxGaWx0ZXJGaWVsZHNcIlxuICAgIFtyb3dzXT1cInJvd3MoKVwiXG4gICAgW3BhZ2luYXRvcl09XCJwYWdpbmF0b3JcIlxuICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicm93c1BlclBhZ2VPcHRpb25zXCJcbiAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxuICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IC0ge2xhc3R9IGRlIHt0b3RhbFJlY29yZHN9XCJcbiAgICBbcm93SG92ZXJdPVwidHJ1ZVwiXG4gICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxuICAgIFtsYXp5XT1cImNvbmZpZy5sYXp5XCJcbiAgICBbZmlyc3RdPVwiZmlyc3QoKVwiXG4gICAgKG9uTGF6eUxvYWQpPVwicGFnaW5hdGUoJGV2ZW50KVwiXG4gICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgKG9uU29ydCk9XCJvblNvcnQoJGV2ZW50KVwiXG4gICAgKG9uUGFnZSk9XCJvblBhZ2UoJGV2ZW50KVwiXG4gICAgcm93R3JvdXBNb2RlPVwicm93c3BhblwiXG4gICAgW2dyb3VwUm93c0J5XT1cImNvbmZpZy5maWVsZEdyb3VwXCJcbiAgICBbc2hvd0ZpcnN0TGFzdEljb25dPVwid2lkdGhQYWdlKCkgPiA5NjAgPyB0cnVlIDogZmFsc2VcIlxuICAgIFtwYWdlTGlua3NdPVwid2lkdGhQYWdlKCkgPiA5NjAgPyAyIDogMVwiXG4gICAgW3Jlc3BvbnNpdmVdPVwidHJ1ZVwiXG4gICAgW3Jlc3BvbnNpdmVMYXlvdXRdPVwicmVzcG9uc2l2ZUxheW91dCA/ICdzdGFjaycgOiAnJ1wiXG4gICAgW3Njcm9sbGFibGVdPVwiaXNUYWJsZVNjcm9sbGFibGVcIlxuICAgIFtzY3JvbGxIZWlnaHRdPVwic2Nyb2xsSGVpZ2h0XCJcbiAgICBbcm93VHJhY2tCeV09XCJyb3dUcmFja0J5XCJcblxuICAgIGNka0Ryb3BMaXN0XG4gICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJjdXJyZW50UGFnZURhdGEoKVwiXG4gICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIlxuICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJ2ZXJ0aWNhbFwiXG4gID5cbiAgICBAaWYgKGNvbmZpZy5lbmFibGVDYXRpb24pIHtcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgZmxleC13cmFwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdyaWQgZm9ybWdyaWQgcC1mbHVpZCBjb2wtMTIgbS0wIG1iLTJcIlxuICAgICAgICBbc3R5bGUucGFkZGluZy5yZW1dPVwiMC4xXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBmbGV4IGZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgQGlmIChjb25maWcudGl0bGUpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBmb250LWJvbGQgbXktM1wiPlxuICAgICAgICAgICAge3sgY29uZmlnLnRpdGxlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfSBAaWYgKGNvbmZpZy5zdWJ0aXRsZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtIG1iLTQgZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgIHt7IGNvbmZpZy5zdWJ0aXRsZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbWQ6Y29sLTYgbGc6Y29sLTQge3tcbiAgICAgICAgICAgIHdpZHRoUGFnZSgpIDwgNzY4ID8gJ2NvbC0xMCcgOiAnY29sLTEyJ1xuICAgICAgICAgIH19ICBnYXAtMSBwLTBcIlxuICAgICAgICA+XG4gICAgICAgICAgQGlmIChjb25maWcuZW5hYmxlRmlsdGVyKSB7XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICBwQXV0b0ZvY3VzXG4gICAgICAgICAgICBbYXV0b2ZvY3VzXT1cIndpZHRoUGFnZSgpID4gODAwXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJvbkdsb2JhbEZpbHRlcihkdCwgJGV2ZW50KVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VhcmNoUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICNpbnB1dEZpZWxkXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtc20gY29sLTZcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgfSBAaWYoZmlsdGVyQ29sdW1uc0J0bikge1xuICAgICAgICAgIDxkaXYgI2JvdGFvRmlsdHJvPlxuICAgICAgICAgICAgPGt2LWJ1dHRvblxuICAgICAgICAgICAgICBpZD1cImJvdGFvRmlsdHJvXCJcbiAgICAgICAgICAgICAgW2ljb25dPVwiJ2FsaWduX3ZlcnRpY2FsX3RvcCdcIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJhYnJpck1lbnVGaWx0cm8oJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHNldmVyaXR5PVwidGVydGlhcnlcIlxuICAgICAgICAgICAgICBwVG9vbHRpcD1cIk9jdWx0YXIvRXhpYmlyIGNvbHVuYXNcIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9rdi1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAjbWVudUZpbHRyb0RpdlxuICAgICAgICAgICAgaWQ9XCJtZW51RmlsdHJvRGl2XCJcbiAgICAgICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cIidoaWRkZW4nXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgei00IGJnLWdyYXktMjAwIG1lbnUtY29sdW1ucy1maWx0cm9cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwLWNhcmQgc3R5bGVDbGFzcz1cInAtMVwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIHRleHQtbWVkaXVtIHctMTVyZW0gcC0xXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNGaWx0ZXIoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBjaGVja01lbnVGaWx0cm8oY29sKSB9fVxuICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAjZmlsdGVyQ29sdW1uc1xuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbC5oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgW2JpbmFyeV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tib3gtY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJkaW5hbWljQ29sdW1uU2V0KCRldmVudCwgY29sKVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbC5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRpbmFtaWNEaXNhYmxlQ29sdW1uKGNvbClcIlxuICAgICAgICAgICAgICAgID48L3AtY2hlY2tib3g+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9wLWNhcmQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfSBAaWYoZmlsdGVyQnV0dG9uKCkpIHtcbiAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJrdi1idXR0b24gc21hbGwgdGVydGlhcnkgdGV4dC14cyBmb250LW1lZGl1bVwiXG4gICAgICAgICAgICBsYWJlbD1cIkZpbHRyYXJcIlxuICAgICAgICAgICAgaWNvbj1cInBpIHBpLWZpbHRlclwiXG4gICAgICAgICAgICBbYmFkZ2VdPVwiZmlsdGVyQnV0dG9uQmFkZ2UoKVwiXG4gICAgICAgICAgICBiYWRnZUNsYXNzPVwidGV4dC1ncmF5LTgwMFwiXG4gICAgICAgICAgICBjbGFzcz1cInRleHQteHNcIlxuICAgICAgICAgICAgKG9uQ2xpY2spPVwib3AudG9nZ2xlKCRldmVudClcIlxuICAgICAgICAgID48L3AtYnV0dG9uPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDxwLW92ZXJsYXlQYW5lbCAjb3A+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZmlsdHJvXVwiPiA8L25nLWNvbnRlbnQ+XG4gICAgICAgICAgPC9wLW92ZXJsYXlQYW5lbD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgY29sLTIganVzdGlmeS1jb250ZW50LWVuZCBnYXAtMiBwLTBcIj5cbiAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNMb3RlOyB0cmFjayBpOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgICBAaWYgKCgoKHNlbGVjdGVkSXRlbXMgJiYgc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB8fCBhY3Rpb24uc2hvd0Fjb2VzTG90ZSkpICYmXG4gICAgICAgICAgICAoZ2V0T3JFeGVjdXRlKGFjdGlvbi52aXNpYmxlLCBzZWxlY3RlZEl0ZW1zKSA/PyB0cnVlKSkge1xuICAgICAgICAgICAgPGt2LWJ1dHRvblxuICAgICAgICAgICAgICAob25DbGljayk9XCJhY3Rpb24/LmNvbW1hbmQoKTsgYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIlxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiZ2V0T3JFeGVjdXRlKGFjdGlvbi50b29sdGlwLCBzZWxlY3RlZEl0ZW1zKVwiXG4gICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdldE9yRXhlY3V0ZShhY3Rpb24uZGlzYWJsZWQsIHNlbGVjdGVkSXRlbXMpIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgW2ljb25dPVwiZ2V0T3JFeGVjdXRlKGFjdGlvbi5pY29uLCBzZWxlY3RlZEl0ZW1zKVwiXG4gICAgICAgICAgICAgIFtzZXZlcml0eV09XCJhY3Rpb24uc2V2ZXJpdHkgfHwgJ3RlcnRpYXJ5J1wiXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJnZXRPckV4ZWN1dGUoYWN0aW9uLmxhYmVsLCBzZWxlY3RlZEl0ZW1zKSB8fCAnJ1wiXG4gICAgICAgICAgICAgIFtpdGVtc109XCJhY3Rpb24uaXRlbXMgfHwgW11cIlxuICAgICAgICAgICAgICBbcG9wdXBdPVwiKGFjdGlvbi5pdGVtcyAmJiBhY3Rpb24uaXRlbXMubGVuZ3RoID4gMCkgfHwgZmFsc2VcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICB9XG5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHVtbnM+XG4gICAgICA8dHI+XG4gICAgICAgIEBpZiAoZW5hYmxlRHJhZ0Ryb3ApIHtcbiAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6IDQwcHg7IHRleHQtYWxpZ246IGNlbnRlcjtcIiBjbGFzcz1cImRyYWctaGFuZGxlLWhlYWRlclwiPlxuICAgICAgICA8L3RoPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoY29uZmlnLmVuYWJsZVNlbGVjdCkge1xuICAgICAgICA8dGg+XG4gICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveFxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZEhlYWRlckNoZWNrYm94XCJcbiAgICAgICAgICA+PC9wLXRhYmxlSGVhZGVyQ2hlY2tib3g+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIH0gQGZvciAoY29sIG9mIGNvbHVtbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICA8dGhcbiAgICAgICAgICBbcFNvcnRhYmxlQ29sdW1uXT1cImNvbC5maWVsZFwiXG4gICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbkRpc2FibGVkXT1cImNvbC5zb3J0YWJsZSA9PT0gZmFsc2VcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGhcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciB7e1xuICAgICAgICAgICAgICBjb2w/LmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInXG4gICAgICAgICAgICB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGRcIj57eyBjb2wuaGVhZGVyIH19PC9zcGFuPlxuICAgICAgICAgICAgQGlmIChjb2wuc29ydGFibGUpIHtcbiAgICAgICAgICAgIDxwLXNvcnRJY29uIFtmaWVsZF09XCJjb2wuZmllbGRcIiBjbGFzcz1cInBiLTFcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgICB9IEBpZiAoY29sLmhlYWRlclRvb2x0aXApIHtcbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJjb2wuaGVhZGVyVG9vbHRpcFwiXG4gICAgICAgICAgICAgID5pbmZvPC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIH0gQGlmIChjb25maWcuYWN0aW9ucyAmJiBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIDx0aD48L3RoPlxuICAgICAgICB9XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgIHBUZW1wbGF0ZT1cImJvZHlcIlxuICAgICAgbGV0LXJvd0RhdGFcbiAgICAgIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICBsZXQtcm93Z3JvdXA9XCJyb3dncm91cFwiXG4gICAgICBsZXQtcm93c3Bhbj1cInJvd3NwYW5cIlxuICAgICAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIlxuICAgID5cbiAgICAgIDx0clxuICAgICAgICBjZGtEcmFnXG4gICAgICAgIGNka0RyYWdMb2NrQXhpcz1cInlcIlxuICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAgICAgKGNka0RyYWdFbmRlZCk9XCJvbkRyYWdFbmRlZCgpXCJcbiAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCIhZW5hYmxlRHJhZ0Ryb3AgfHwgZHJhZ0Ryb3BEaXNhYmxlZChyb3dEYXRhKVwiXG4gICAgICAgIFtjZGtEcmFnRGF0YV09XCJzZWxlY3RlZEl0ZW1zXCJcblxuICAgICAgICAoZGJsY2xpY2spPVwiZG91YmxlQ2xpY2soJGV2ZW50LCByb3dEYXRhKVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICBjYXBpdGFsaXplOiB0YWJsZUNhcHRhbGl6ZWQsXG4gICAgICAgICAgbGFzdDogcm93SW5kZXggPT09IGRhdGFTb3VyY2UubGVuZ3RoIC0gMVxuICAgICAgICB9XCJcbiAgICAgICAgY2xhc3M9XCJ0ci10ZCB7eyBpc0Rpc2FibGVkUm93KHJvd0RhdGEpID8gJ2Rpc2FibGVkLXJvdycgOiAnJyB9fVwiXG4gICAgICA+XG5cbiAgICAgICAgQGlmIChlbmFibGVEcmFnRHJvcCkge1xuICAgICAgICA8dGQgY2RrRHJhZ0hhbmRsZT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdGV4dC1zbVwiPlxuICAgICAgICAgICAgZHJhZ19pbmRpY2F0b3JcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIH1cblxuICAgICAgICAgIEBpZiAoY29uZmlnLmVuYWJsZVNlbGVjdCkge1xuICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiA4cHggIWltcG9ydGFudFwiPlxuICAgICAgICAgICAgPHAtdGFibGVDaGVja2JveFxuICAgICAgICAgICAgICBbdmFsdWVdPVwicm93RGF0YVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkQ2hlY2tib3gocm93RGF0YSlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtcylcIlxuICAgICAgICAgICAgPjwvcC10YWJsZUNoZWNrYm94PlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgfSBAZm9yIChjb2wgb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIEBpZiAocm93Z3JvdXAgJiYgIWNvbC50ZW1wbGF0ZSkge1xuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIFthdHRyLnJvd3NwYW5dPVwicm93Z3JvdXAgJiYgY29sLmdyb3VwZWQgPyByb3dzcGFuIDogbnVsbFwiXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwUm93KHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICBjbGFzcz1cInt7XG4gICAgICAgICAgICAgICAgY29sLnN0eWxlQ2xhc3NcbiAgICAgICAgICAgICAgICAgID8gY29sLnN0eWxlQ2xhc3Mocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXG4gICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFpc0Jvb2xlYW5GaWVsZChyb3dEYXRhLCBjb2wpOyBlbHNlIGJvb2xlYW5GaWVsZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cInJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGlmICghaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZCAmJiAhaXNJbWFnZUZpZWxkKGNvbCkgJiZcbiAgICAgICAgICAgICAgICAhaXNFbXB0eURhdGFTb3VyY2UoKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTIgYWxpZ24taXRlbXMtY2VudGVyIHt7XG4gICAgICAgICAgICAgICAgICAgIGNvbD8uY2VudHJhbGl6ZSAmJiAnanVzdGlmeS1jb250ZW50LWNlbnRlcidcbiAgICAgICAgICAgICAgICAgIH19IHRleHQteHMge3sgZWxsaXBzaXNUZXh0KCkgJiYgJ2VsbGlwc2lzLXRleHQnIH19XCJcbiAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgY29sLnRvb2x0aXAgJiYgY29sLnRvb2x0aXAocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInYm90dG9tJ1wiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoXT1cIlxuICAgICAgICAgICAgICAgICAgICBlbGxpcHNpc1RleHQoKSAmJiByZXR1cm5NYXhXaWR0aCgpKGNvbC53aWR0aClcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQGlmKGNvbC50YWdDb2xvcikge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhZ1wiXG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2wudG9vbHRpcFRhZyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbC50b29sdGlwVGFnKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2wudGFnQ29sb3Iocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+PC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIH0gQGlmIChjb2wuaWNvbikge1xuICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cImNvbC5pY29uICsgJyBtci0yJ1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHt7IHRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbCkgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgfSBAaWYgKGlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGQpIHtcbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJldHVybkNsYXNzQ2hpcChyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQteHNcIlxuICAgICAgICAgICAgICAgICAgICA+e3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH0gQGlmKGlzRW1wdHlEYXRhU291cmNlKCkgJiYgdGhpcy5pc0xvYWRpbmdTa2VsZXRvbigpKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgQGlmKCFpc1N3aXRjaEZpZWxkKGNvbCkpIHtcblxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBmbGV4IHt7XG4gICAgICAgICAgICAgICAgICAgICAgY29sLmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInXG4gICAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbc3R5bGUud2lkdGhdPVwid2lkdGhSYW5kb20oKShjb2wsIHJvd0luZGV4KSArICclJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIj48L3Atc2tlbGV0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzE2LjhweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI4LjhweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJhZGl1cyc6ICczMHB4J1xuICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPHAtc2tlbGV0b24gc3R5bGVDbGFzcz1cInctZnVsbFwiPjwvcC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICBAaWYgKGlzSW1hZ2VGaWVsZChjb2wpKSB7XG4gICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltYWdlXCIgW3NyY109XCJsb2FkSW1hZ2Uocm93RGF0YSwgY29sKVwiIC8+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIH0gQGlmIChjb2wuaWNvbkZpZWxkKSB7XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgJ21hdGVyaWFsLWljb25zJzogY29sLmluZEljb25NYXRlcmlhbCxcbiAgICAgICAgICAgICAgICAgICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1yLTInOiAhY29sLmluZEljb25NYXRlcmlhbFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHJldHVybkNsYXNzSWNvbihyb3dEYXRhLCBjb2wpIH19XG4gICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYm9vbGVhbkZpZWxkPlxuICAgICAgICAgICAgICAgIEBpZiAoIWNvbC5pY29uRmllbGQgJiYgIWlzU3dpdGNoRmllbGQoY29sKSkge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXIge3tcbiAgICAgICAgICAgICAgICAgICAgY29sPy5jZW50cmFsaXplICYmICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ1xuICAgICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgICBjb2wudG9vbHRpcCAmJiBjb2wudG9vbHRpcChyb3dEYXRhLCBjb2wsIHJvd0RhdGFbY29sLmZpZWxkXSlcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidib3R0b20nXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhW2NvbC5maWVsZF0gPyAndGV4dC1ncmVlbi01MDAnIDogJ3RleHQtcmVkLTUwMCdcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPjxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHRleHQtbGcgZm9udC1zZW1pYm9sZFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyByb3dEYXRhW2NvbC5maWVsZF0gPyBcImNoZWNrXCIgOiBcImNsb3NlXCIgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgfSBAaWYgKGlzU3dpdGNoRmllbGQoY29sKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbCkgK1xuICAgICAgICAgICAgICAgICAgICAnIGZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXInXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDI1cHhcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIEBpZihjb2wuc3dpdGNoRGlzYWJsZSl7XG4gICAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoXG4gICAgICAgICAgICAgICAgICAgIChvblN3aXRjaENoYW5nZSk9XCJvblN3aXRjaENoYW5nZSgkZXZlbnQsIHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sLnN3aXRjaERpc2FibGUocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIFtzd2l0Y2hWYWx1ZV09XCJ0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwva3Ytc3dpdGNoPlxuICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoXG4gICAgICAgICAgICAgICAgICAgIChvblN3aXRjaENoYW5nZSk9XCJvblN3aXRjaENoYW5nZSgkZXZlbnQsIHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sPy5vbmx5UmVhZEZpZWxkID8/IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbc3dpdGNoVmFsdWVdPVwidHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8L2t2LXN3aXRjaD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgfSBAaWYoaXNFbXB0eURhdGFTb3VyY2UoKSAmJiB0aGlzLmlzTG9hZGluZ1NrZWxldG9uKCkpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICBAaWYoIWlzU3dpdGNoRmllbGQoY29sKSkge1xuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBmbGV4IHt7XG4gICAgICAgICAgICAgICAgICAgICAgY29sLmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInXG4gICAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbc3R5bGUud2lkdGhdPVwid2lkdGhSYW5kb20oKShjb2wsIHJvd0luZGV4KSArICclJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIj48L3Atc2tlbGV0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzE2LjhweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI4LjhweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJhZGl1cyc6ICczMHB4J1xuICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPHAtc2tlbGV0b24gc3R5bGVDbGFzcz1cInctZnVsbFwiPjwvcC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgfSBAaWYgKCFyb3dncm91cCAmJiAhY29sLmdyb3VwZWQgJiYgIWNvbC50ZW1wbGF0ZSkge1xuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICN0YWJsZUNlbGxcbiAgICAgICAgICAgICAgY2xhc3M9XCJyb3dUYWJsZSB7e1xuICAgICAgICAgICAgICAgIGNvbC5zdHlsZUNsYXNzXG4gICAgICAgICAgICAgICAgICA/IGNvbC5zdHlsZUNsYXNzKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxuICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICB9fSBcIlxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcFJvdyhyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQGlmKCFpc0VtcHR5RGF0YVNvdXJjZSgpKSB7XG5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFpc0Jvb2xlYW5GaWVsZChyb3dEYXRhLCBjb2wpOyBlbHNlIGJvb2xlYW5GaWVsZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgcmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKSArXG4gICAgICAgICAgICAgICAgICAnIGZsZXggZmxleC1yb3cgZ2FwLTIgYWxpZ24taXRlbXMtY2VudGVyICcgK1xuICAgICAgICAgICAgICAgICAgKGNvbD8uY2VudHJhbGl6ZSAmJiAnanVzdGlmeS1jb250ZW50LWNlbnRlcicpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICBjb2wudG9vbHRpcCAmJiBjb2wudG9vbHRpcChyb3dEYXRhLCBjb2wsIHJvd0RhdGFbY29sLmZpZWxkXSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGhdPVwiZWxsaXBzaXNUZXh0KCkgJiYgcmV0dXJuTWF4V2lkdGgoKShjb2wud2lkdGgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBpZihjb2wudGFnQ29sb3IpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRhZ1wiXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgIGNvbC50b29sdGlwVGFnICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbC50b29sdGlwVGFnKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIlxuICAgICAgICAgICAgICAgICAgICBjb2wudGFnQ29sb3Iocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L2Rpdj5cblxuICAgICAgICAgICAgICAgIH0gQGlmICghaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZCAmJiAhaXNJbWFnZUZpZWxkKGNvbCkpe1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC14cyB7eyBlbGxpcHNpc1RleHQoKSAmJiAnZWxsaXBzaXMtdGV4dCcgfX1cIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoY29sLmljb24pIHtcbiAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJjb2wuaWNvbiArICcgbXItMidcIj48L2k+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB7eyB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIH0gQGlmIChpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkKSB7XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyZXR1cm5DbGFzc0NoaXAocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICB9IEBpZiAoaXNJbWFnZUZpZWxkKGNvbCkpIHtcbiAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1hZ2VcIiBbc3JjXT1cImxvYWRJbWFnZShyb3dEYXRhLCBjb2wpXCIgLz5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgfSBAaWYgKGNvbC5pY29uRmllbGQpIHtcbiAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtaWNvbnMnOiBjb2wuaW5kSWNvbk1hdGVyaWFsLFxuICAgICAgICAgICAgICAgICAgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbXItMic6ICFjb2wuaW5kSWNvbk1hdGVyaWFsXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgcmV0dXJuQ2xhc3NJY29uKHJvd0RhdGEsIGNvbCkgfX1cbiAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNib29sZWFuRmllbGQ+XG4gICAgICAgICAgICAgICAgQGlmICghY29sLmljb25GaWVsZCAmJiAhaXNTd2l0Y2hGaWVsZChjb2wpKSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlciB7e1xuICAgICAgICAgICAgICAgICAgICBjb2w/LmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInXG4gICAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgIGNvbC50b29sdGlwICYmIGNvbC50b29sdGlwKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSA/ICd0ZXh0LWdyZWVuLTUwMCcgOiAndGV4dC1yZWQtNTAwJ1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdGV4dC1sZyBmb250LXNlbWlib2xkXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSA/IFwiY2hlY2tcIiA6IFwiY2xvc2VcIiB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfSBAaWYgKGlzU3dpdGNoRmllbGQoY29sKSkge1xuXG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKSArXG4gICAgICAgICAgICAgICAgICAgICcgZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlcidcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogMjVweFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgQGlmKGNvbC5zd2l0Y2hEaXNhYmxlKXtcbiAgICAgICAgICAgICAgICAgIDxrdi1zd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgKG9uU3dpdGNoQ2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2wuc3dpdGNoRGlzYWJsZShyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgW3N3aXRjaFZhbHVlXT1cInRyYW5zZm9ybVZhbHVlKHJvd0RhdGEsIGNvbClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPC9rdi1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIDxrdi1zd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgKG9uU3dpdGNoQ2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2w/Lm9ubHlSZWFkRmllbGQgPz8gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzd2l0Y2hWYWx1ZV09XCJ0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwva3Ytc3dpdGNoPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgICAgQGlmKGlzRW1wdHlEYXRhU291cmNlKCkgJiYgdGhpcy5pc0xvYWRpbmdTa2VsZXRvbigpKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICBAaWYoIWlzU3dpdGNoRmllbGQoY29sKSkge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIGZsZXgge3tcbiAgICAgICAgICAgICAgICAgICAgY29sLmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInXG4gICAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBbc3R5bGUud2lkdGhdPVwid2lkdGhSYW5kb20oKShjb2wsIHJvd0luZGV4KSArICclJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cC1za2VsZXRvbiBzdHlsZUNsYXNzPVwidy1mdWxsXCI+PC9wLXNrZWxldG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTYuOHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI4LjhweCcsXG4gICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1yYWRpdXMnOiAnMzBweCdcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIj48L3Atc2tlbGV0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgfSBAaWYgKGNvbC50ZW1wbGF0ZSkge1xuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgIGNsYXNzPVwicm93VGFibGUge3tcbiAgICAgICAgICAgICAgICBjb2wuc3R5bGVDbGFzc1xuICAgICAgICAgICAgICAgICAgPyBjb2wuc3R5bGVDbGFzcyhyb3dEYXRhLCBjb2wsIHJvd0RhdGFbY29sLmZpZWxkXSlcbiAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgfX0gXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQGlmIChnZXRDdXN0b21UZW1wbGF0ZShjb2wudGVtcGxhdGUubmFtZSkpIHtcblxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlciB7e1xuICAgICAgICAgICAgICAgICAgY29sPy5jZW50cmFsaXplICYmICcganVzdGlmeS1jb250ZW50LWNlbnRlcidcbiAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgY29sLnRvb2x0aXAgJiYgY29sLnRvb2x0aXAocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidib3R0b20nXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBpZihjb2wudGFnQ29sb3IpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRhZ1wiXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiY29sLnRvb2x0aXBUYWcgJiYgY29sLnRvb2x0aXBUYWcocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJjb2wudGFnQ29sb3Iocm93RGF0YSwgY29sKVwiXG4gICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgIH0gQGlmKCFpc0VtcHR5RGF0YVNvdXJjZSgpKSB7XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdldEN1c3RvbVRlbXBsYXRlKGNvbC50ZW1wbGF0ZS5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93RGF0YSB9XCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICBAaWYoaXNFbXB0eURhdGFTb3VyY2UoKSAmJiB0aGlzLmlzTG9hZGluZ1NrZWxldG9uKCkpIHtcbiAgICAgICAgICAgICAgPHAtc2tlbGV0b25cbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwid2lkdGhSYW5kb20oKShjb2wsIHJvd0luZGV4KSArICclJ1wiXG4gICAgICAgICAgICAgID48L3Atc2tlbGV0b24+XG4gICAgICAgICAgICAgIH0gfVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICB9IEBpZiAoY29uZmlnLmFjdGlvbnMgJiYgY29uZmlnLmFjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1lbmQgdy1mdWxsXCI+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGN1cnNvci1wb2ludGVyIGljb24tbW9yZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1lbnUudG9nZ2xlKCRldmVudCk7IGFjdGl2ZUl0ZW0ocm93RGF0YSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPCEtLSBtb3JlX3ZlcnQgLS0+XG4gICAgICAgICAgICAgICAgbW9yZV9ob3JpelxuICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgPHAtdGllcmVkTWVudVxuICAgICAgICAgICAgICAgICNtZW51XG4gICAgICAgICAgICAgICAgW3BvcHVwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFttb2RlbF09XCJ0YWJsZUFjdGlvbnNbcm93SW5kZXggLSBhY3Rpb25zT2Zmc2V0XVwiXG4gICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbSBwVGVtcGxhdGU9XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJpdGVtLnRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC14c1wiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9wLXRpZXJlZE1lbnU+XG4gICAgICAgICAgICAgIDwhLS0gPHNwYW4gcFRvb2x0aXA9XCJ7eyB0YWJsZUFjdGlvbnNbcm93SW5kZXggLSBhY3Rpb25zT2Zmc2V0XVswXT8udG9vbHRpcCB9fVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPmE8L3NwYW4+IC0tPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIiBsZXQtY29sdW1ucz5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRkXG4gICAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zLmxlbmd0aCArIChlbmFibGVEcmFnRHJvcCA/IDEgOiAwKSArIChjb25maWcuZW5hYmxlU2VsZWN0ID8gMSA6IDApICsgKGNvbmZpZy5hY3Rpb25zICYmIGNvbmZpZy5hY3Rpb25zLmxlbmd0aCA+IDAgPyAxIDogMClcIlxuICAgICAgICAgIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBib3JkZXItcmFkaXVzOiAxMHB4ICFpbXBvcnRhbnRcIlxuICAgICAgICA+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmb250LW1lZGl1bSBtLTAgdGV4dC14c1wiPk5lbmh1bSByZWdpc3RybyBlbmNvbnRyYWRvPC9wPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3AtdGFibGU+XG4gIH1cbjwvZGl2PlxuXG48bGlua1xuICByZWw9XCJzdHlsZXNoZWV0XCJcbiAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vaWNvbj9mYW1pbHk9TWF0ZXJpYWwrSWNvbnNcIlxuLz5cblxuPGxpbmtcbiAgcmVsPVwic3R5bGVzaGVldFwiXG4gIGhyZWY9XCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PU1hdGVyaWFsK1N5bWJvbHMrT3V0bGluZWQ6b3Bzeix3Z2h0LEZJTEwsR1JBREA0OCw0MDAsMCwwXCJcbi8+XG4iXX0=
826
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdGFibGUtZHJhZ2dhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LXRhYmxlLWRyYWdnYWJsZS9rdi10YWJsZS1kcmFnZ2FibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtdGFibGUtZHJhZ2dhYmxlL2t2LXRhYmxlLWRyYWdnYWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQTZCLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZHLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUdmLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFJTixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLEtBQUssRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFJdEQsT0FBTyxFQUNMLFlBQVksRUFFWixhQUFhLEdBQ2QsTUFBTSx3Q0FBd0MsQ0FBQztBQUtoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFckYsTUFBTSxVQUFVLEdBQ2QsMHFQQUEwcVAsQ0FBQztBQU83cVAsTUFBTSxPQUFPLHlCQUF5QjtJQStEcEMsSUFBcUIsU0FBUyxDQUFDLEtBQWtCO1FBQy9DLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO1lBQ25CLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUk7WUFDeEMsWUFBWSxFQUFFLEtBQUss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QUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUsIERlY2ltYWxQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIENka0RyYWdTdGFydCwgbW92ZUl0ZW1JbkFycmF5LCB0cmFuc2ZlckFycmF5SXRlbSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5cclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgRG9DaGVjayxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBjb21wdXRlZCxcclxuICBlZmZlY3QsXHJcbiAgaW5wdXQsXHJcbiAgbW9kZWwsXHJcbiAgc2lnbmFsLFxyXG4gIHZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IFRhYmxlLCBUYWJsZVBhZ2VFdmVudCB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuXHJcbmltcG9ydCB7IENwZkNucGpQaXBlIH0gZnJvbSAnLi4vLi4vYXBpL3BpcGVzL2NwZmNucGoucGlwZSc7XHJcbmltcG9ydCB7XHJcbiAgZ2V0T3JFeGVjdXRlLFxyXG4gIFZhbHVlT3JGbixcclxuICBtYXBUb01lbnVJdGVtLFxyXG59IGZyb20gJy4uLy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL2t2LW1lbnVpdGVtJztcclxuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi9hcGkvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb25maWcnO1xyXG5pbXBvcnQgeyBUYWJsZUNvbmZpZ0NvbHVtbiB9IGZyb20gJy4uLy4uL2FwaS9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbmZpZy5jb2x1bW4nO1xyXG5pbXBvcnQgeyBUYWJsZVBhZ2luYXRlIH0gZnJvbSAnLi4vLi4vYXBpL2NvbXBvbmVudHMvdGFibGUvdGFibGUucGFnaW5hdGUnO1xyXG5pbXBvcnQgeyBUZWxlZm9uZVBpcGUgfSBmcm9tICcuLi8uLi9hcGkvcGlwZXMvdGVsZWZvbmUucGlwZSc7XHJcbmltcG9ydCB7IFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vYXBpL2RpcmVjdGl2ZXMvdGVtcGxhdGUvdGVtcGxhdGUuZGlyZWN0aXZlJztcclxuXHJcbmNvbnN0IGltZ0RlZmF1bHQgPVxyXG4gICcvOWovNEFBUVNrWkpSZ0FCQVFJQWRnQjJBQUQvNFFCaVJYaHBaZ0FBVFUwQUtnQUFBQWdBQlFFU0FBTUFBQUFCQUFFQUFBRWFBQVVBQUFBQkFBQUFTZ0ViQUFVQUFBQUJBQUFBVWdFb0FBTUFBQUFCQUFNQUFBSVRBQU1BQUFBQkFBRUFBQUFBQUFBQUFBQjJBQUFBQVFBQUFIWUFBQUFCLzlzQVF3QURBZ0lDQWdJREFnSUNBd01EQXdRR0JBUUVCQVFJQmdZRkJna0lDZ29KQ0FrSkNnd1BEQW9MRGdzSkNRMFJEUTRQRUJBUkVBb01FaE1TRUJNUEVCQVEvOXNBUXdFREF3TUVBd1FJQkFRSUVBc0pDeEFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUS84QUFFUWdBa0FDUUF3RVJBQUlSQVFNUkFmL0VBQjBBQVFBQkJBTUJBQUFBQUFBQUFBQUFBQUFHQVFJSENBTUVDUVgveEFCQkVBQUNBUVFBQlFJQ0NBUURCQXNBQUFBQkFnTUFCQVVSQmdjU0lURVRRUWhSQ1JRVkdTSlZsZEV5WVlHUlFsSmlGaU0zT0ZOamNYTjFkcEtUc2JPMC84UUFHZ0VCQUFJREFRQUFBQUFBQUFBQUFBQUFBQUVGQXdRR0F2L0VBRElSQUFJQUJBTUZDQUVGQVFFQkFBQUFBQUFCQWdNRUVTRXhVUVVTUVpId0V4VXlZWEdCb2JIUklqTkN3ZUUwOFNQLzJnQU1Bd0VBQWhFREVRQS9BUEtxZ0ZBS0FVQmRERExjU3BCQkU4a3NqQkVSRkpabUowQUFQSkpxVW5FN0lodFFxN3lKNXc5eWR6MlZpK3M1ZTRYRlJNdTBWMDlTVTcwUnRBUjBqUlBrOVFJMFY5NnM1R3lwa3hYbVBkK1gvbjM1RmJPMnBLbDRRZnFmeHpKOWpPVS9CbU82V2tzWmI2UkpCSXIzVXBPdGEwcFZlbFNPM2dnNzJkN0hhck9YczJuZ3pWL1hwSXE0OXBWTWZHM292emRrbXNNVGlzWDEvWm1NdExQMWRkZm9RTEgxYTNyZlNCdld6L2V0dUNYQkx2dUpLK21CcHh6STVsdDl0MjF4TzNXUThDZ09wZjRuRlpUbyswOFphWG5wYjZQckVDeWRPOWIxMUE2M29mMnJISExnbWVOSitxUGNFeU9YZmNiVjlNQ001UGxQd1prZXBvN0dXeGtlUXlNOXJLUnZlOXFGYnFVTDM4QURXaHJRN1ZxVE5tMDhlU3Q2UC8xRzVCdEtvZzQzOVYrTE1nUEVQSjNQWXFMNnppTGhjckdxN2RFVDA1UnJaT2tKUFVOQWVEMUVuUVgzcXNuN0ttUzF2UzN2ZkQvMzc4aTBrN1VsVEh1eHJkZnh6L3dnYzBNMXZNOXZjUlBGTEV4UjBkU3JLd09pQ0Q0SVB0VlkwNFhabGttb2xkWkZ0UVNLQVVBb0JRQ2dGQVNqZy9sOW1lTFpSS0ZleXNPa3NidVNJbFc3a2FRZHVzN0JCMGREUjJkNkIzYVdobVZPT1VPdjQxTktzcllhVllZeGFkWC9BTitWbXpoN2hIQWNNUkJNVFlJa3BYcGU0ZjhBRksvWWIyeDlqMGc5STB1L1lWME1pbWxVNnRBc2RlSnpzMnBtei8zSXIvWFN5MTFaOW1zNWdLaFRVa1hLNkZCY2FGQ0xqUW9MalFvVGNvVk5CY3BVRW54dUllRWNCeFJDVXkxZ2pTaGVsTGhQd3lwMk90TU81QTZpZWs3WGZ0V0NmU3lxaGZyV092RXp5YWliSWY4QTg0cmVYRHA1WHowWmhQakhsL2wrRVpmVUlhOHNDb0l1NDR5RlU3QTA0NzlCMlJyWjBkalIzc0RuYXFpbVVydThWcitkRG9LU3ZsMUt0RmFHSytWODg4c3I0SzcwK1NMMXBtK0tBVUFvQlFFNTVkY3U1ZUpwbHl1V1I0OFRHM1liS3Rjc0QzVlQ3S0QyTGYwSGZaV3lvYUYxRDM0L0Q5OWNlclZ0ZFhLblhaeS9GOWY3cDFmT01NTVZ2RWx2YnhKSEZHb1JFUlFGVlFOQUFEd0FQYXVpU1VLc3NqblczRTd0NG5JQjg2OUhoc3JRZ3JVQVVBb0JRQ2dGQVVxUVVJb1RjNDVvWXA0bmduaVNTT1JTam82aGxaU05FRUhzUVI3VkRTaVZua2VrM0M3cDRtRGVZbkx1WGhpVnNyaWtlVEZTTjNIY3RiTVQyVmo3cVQ0YitoNzZMYzVYVUxwMzJrdncvWCtlZlQ2T2hybFVMczVuaSsvOTE2dEI2clN5RkFLQWxITC9BSU9sNHV5K3BDcTJGbXlTWFpKTzJVbnRHTkVIYmFJMzdBRStkQTdsRlN1cW1XZVN6L0h1YUZmVnFtbDdxdnZSWHQ1ZWVUV0Y4bm5wYTVzRkRGRkJFa0VFU1J4eHFFUkVVQlZVRFFBQThBRDJycVVrbFpITXR0NHM1UUtrOHRsYWdnVUFvQ2ZjcHVSUE5MbmJrbngvTHZoYTR5RWNEQmJtOWNpSzF0dC85SksybEIxMzZSdGlQQU5ZWjFSTHAxZVl6UElwcHRRN1MwYlA0VDZMYmp1NHRGazRoNXFZS3d1U05tS3pzWnJwQWZsMXNZLy9BSXF1aTJ2QW4rbUZsbERzZU5yOVVTSXJ6QitqYjUyOEsyY3VSNFN5ZUc0dGlpQlkyOXM3VzEyUVBjUnlmZ1AvQUdDVFo5Z2F5U3RxeVkzYUs2TVUzWk02QlhnYVpxdmxzVGxjRGtybkRadkczV1B2N09ReFhGcmRSTkZMRTQ4cXlNQVZQOGpWa21vbGRaRlpGQzRYYUxNNmxTUUtBVUJhUlU1a3BuSE5ERmNSUGIzRVNTUlNLVWRIVU1yS1JvZ2crUWFocE5OTTl3eE9GN3l6TmZlWUhCMHZDT1lJajZUWVhqUEphRUh1cWdqYUhaSjJ1d04rNDBmT3dPV3JhVjBzekR3dkw4ZXgwdEJWcXBsN3I4VUtWL1B6eVN4dGtzdVJGNjB6ZkxvWVpiaVZJSUlua2xrWUlpSXBMTXhPZ0FCNUpOU2s0blpFTnFGWGVSc3B3bmdJdUdlSDdURG9JekpFblZPNkFmN3lWdTdIWUFMRGZZRWpmU0ZIdFhXMDBoVThwUzE3K3ZYd2NoVVRlMm14VE1jWHEvVFYyeXhTd3ZkNXRuMkFLMkRBeTZvSUZBS0F5cDhOWEl6SmZFQnpRc3VDNEpaTFhGd0liM0wzaUFiZ3RFSURkTyszV3hLb3ZudTJ5Q0FhMTZxb1ZOTGNmSGdiTkpUT3BtcURoeFBZbmd6Z3ZoZmw3dzFZOEljSFlhM3htSng4WWpndDRWMEI4MlkrV1ludVdPeVNTU1NhNVdaTWlteE9LTjNaMWt1WERLaFVFQ3NqN2RlRDJLQTF5K01UNFc4Tnp6NE51dUkrSDhkRkR4emhyZHBiQzRqVUsxL0dnMmJXUS80dGpmUVQvQzJ1NEJiZS9RMWpwNDkyTHd2NDh6UXJxTlZNRzlDdjFMNThqeVZkSGpkbzVGS3NwSVpTTkVINUd1bU9XS1VBb0JRRnBIdlVrbytOeGR3OUR4UmdMckV5QlJLNjlkdTdhSFJLUDRUdlIwTjlqb2I2U1I3MXIxVWhWRXB5MzdlcHNVMDNzSnNNelQ2L3YzNDJaclpORE5ielBiM0VUeFN4TVVkSFVxeXNEb2dnK0NEN1Z5VFRoZG1kY21vbGRaRTg1TzhQUlpYUHk1YTVDdEZpbFYxUTZPNVgyRU9pRDJBVmp2WUlZS2FzdGx5Vk1tNzcvajk5ZkpXYlVxSExscVd2NWNmSlcrL3E1bSt1ak9kTHFIa3JVQVVBb0QwaStpNzRWczdUbHJ4ZHhyNlMvVzhsbTF4cGNqdUlyZUJKQUI4Z1d1Vy9zUGxWRHRlTnVaREJvcjljam9OandKUzRvOVg5ZittNjFWQmNDZ0ZBS0E4WS9pMjRWdE9EUGlQNDh3VmhFc1Z2OXAvWGtSUm9JTG1OTGpwQTlnUFcwQjhxNnlpamN5UkRFOVByQTVHdWdVdW9qaFd2M2lZanJaTlVVQW9DbFNDMm9QUmhEbkZ3OUZpcy9GbDdib1dQS3F6c2c3YWxUUWM2QUEwUXluZXlTeFluMnJudHFTRkxtS1l2NWZhL1AzYzZQWmM1ekpXNDg0ZnJoL1pQdVUrTSt6dURMYVJrbFNTK2trdW5XUWExczlLbFJyK0VvaWtlZDczNElxejJiTDNLZFBXNzY5a1ZlMG85K29mbFpmMzlzbVFGYjVvTXVxRHlLQVVBb0QwYitpNjR4czduZ1BqRGdGcFZGM2o4c21XVkNlN1JUd3BFU1BtQTF1Ti9Mckh6cWgydkxhamhqOHJIUWJIbUp3UlFhTzV1N1ZRWEFvQlFDZ1BGejRxT01iUGp6NGh1T3VKY2ZLc3RySmxHdElKRk8xa2p0MFczVndma1JFQ1A1R3VzbzVibHlJWVhwOTRuSTFzeFRLaUtKYS9XQmlxdGsxUlFDZ0ZBV2tWSktJZHpZeG4yandYY3lLa3p5V1VrZDBpeDkvQjZXTERSN0JIYysydGIzb0dxL2FVdHpLZDI0WTljeXcyZE1VdW9WK09IWHVrU1hFV0gyVmlyTEdlcjZ2MU8zamc2K25wNnVoUXU5Yk90NjhicmNsd2RuQW9ORlkwNWtmYVJ1UFYzNW5kSGlzaGpaV29JRkFLQVVCa2JrQnpvemZJWG1aanVQY1JHYmlDTUcyeVZuMWRJdTdOeVBVajM3SHNyS2Zaa1VuWTJEZ3FaQ3FaYmdac1UxUkZUVEZHajJKNWJjek9DK2JYQ2xyeGx3TG1vY2pqcnBSdnBJRWtFbXRtS1ZQS09OOTFQOGlOZ2dubFpzcU9URnVSckU2eVZPZ253NzhEdWlVMWpNZ29EVmo0MHZpenczS1BoZSs1ZThGNVNPNDQ0eTBCZ1BvUHY3SmhjYU16a2Z3eWxUK0JmSUpEbnNBR3NxQ2ljNkpUSTErbGZKVzE5YXBFTGdnZjZuOEhsZDVyb3ptUlFDZ0ZBS0FvM2lwSlIwc3RZREs0cTh4Wm05SVhsdkpCNm5UMWRIV3BYZXRqZXQrTjFqbVFkcEE0TlUxek1rdVBzNDFHbGV6dWR1c2g0UmNQRkR5eXRRQlFDZ0ZBS0FsUEx6bWp6QjVVWnIvYURsNXhWZllTOUlDeUdCd1k1bEIyRmtqWUZKRjM3TUNLeHpaTUU1YnN4WE1zcWRNa1BlbHV4c25oUHBOdWVlUHRGdHN2dzF3amxaRUd2ckQyczhNakg1c0VsQ2YyVVZYeGJKa3Q0Tm9zSWRyemtzVW1SVG1EOUlEOFJQSFZuTGpiTE00N2hhMW1CVnhnN1pvcG1YL3ZwR2VSVC9OQ3ByTEwyYklsdTdWL1V4VGRwMUV4V1R0Nkd1VnpjM0Y1Y1MzZDNQSlBQTTVra2xrWXM3c1Rzc3hQY2tuM05iNlZzRVY3YmVMT09nRkFLQVVBb0NoOFZJUmJROUNnUmNQRkR5eXRRQlFDZ0ZBU2ZnL2xmekg1Z3llbndQd0xuYzRPcnBaN0d3a2xqUS82blVkSy8xSXJISE9seXZIRWtaSmNtWk44RUxabURBL0FKOFQrYlJaWnVCclhGUnYzRFgrVXQxT3Y1cWpzdy9xQldyRnRLbmgvbGYyTnVIWmxURi9HM3VTdUg2TS80aEpVRFNaZmd1RS81WHlVNUkvOEFUQVJXUHZXUm8rdmN5clpNL1ZkZXgxYi9BT2piK0kyelF0YnR3cmZFRCtHM3lqZ24vd0J5TlJVcmFzaDY4aUhzbW9Xbk14OXhSOEczeEw4Skk4MlI1VDVXNmlRYjY4WThWL3NmTUxBenQvY1ZuZ3JxZVBLTCt2c3dSMEZSQm5EeXgrakVPVHhlVHd0N0pqc3hqcnF4dTRUcVNDNWhhS1JEL05XQUlyWlRVU3VqVWNMaGRtZGFwSUZBS0FVQlErS2tJdG9lanFZbS93RHRURldXVDlMMHZybHZIUDBkWFYwOWFodGIwTjYzNTFXT1hIMmtDajFTWjdtUWRuRzRMM3M3Y2p1anhXUXhzclVFQ2dNajhrT1FQTVBuN3hJY0R3UmpsRnZiZExYK1N1ZHJhMlNId1hZQTdZNk9rVUZqbzl0QWtZS2lwbDAwTzlHYkZQVFRLbUxkZzVubzl5YitBdmtqeXdnZ3Z1SXNXdkdtY1FBdmQ1YUlOYkszL1YydXlnSGorUHJiNUVlS29aKzBaMDdDRjdxOHZ5ZEJJMmJKazR4TGVmbitEWTYydGJheXQ0N1N6dDRvSUlsQ1J4UklGUkZIZ0FEc0JXZzIzaXl3U3RnamxxQUtBVUFvQ09jYTh1T0F1WStPT0s0NzRReFdjdHRFS3Q3YkxJMGUvZEhJNmtQODFJTlpKYzJPVTd3T3hqbVNvSnF0R3Jtay9QNzZOdTNqdExuaWJrSGZUZXJHR2tmaDYvbTZ1c2ZLM25idnY1TElUdjhBempzRGIwMjFjZDJmei9KVDFPeVZiZWtjdndhRlpISFpERDVDNXhXV3NwN085czVXZ3VMZWVNcEpGSXAweU1wN2dnZ2dnMWRKcUpYUlNOT0YyZVoxNkVDZ0tIeFVrbzZXV3Z4aXNWZVpRdytxTE8za245UHE2ZXZvVXRyZWpyZXZPcXh6SSt6Z2NlaWI1R1NYQTVrYWdUdGQyNWthNVQ1TVpIZ3Uxalo1bmtzWkpMVjJrTy9CNmxDblovQ0VkQVBHdGE4QVZwN05tT1pUcFBoaDF6TnphTXZzNmgyNDQ5ZTZaTVFhc0N2WmRVRUhaeG1PdTh2a3JURTJFZnFYTjdQSGJ3cHZYVkk3QlZIOXlLaHRRcTdKU2NUc2oyMjVMOHBlSE9Tbkx2RmNCY09XOFlXemlEWGx5RjA5NWRFRDFaM1BrbGo0MzRVS283QVZ5TlJPaXFKamppT3hwNUVOUExVRUpPYXdtWVVBb0JRQ2dGQUtBVUJvVjlKZnlWdzhXTXhYUEhDMmtjRisxMG1KelBwcnI2d3JJeGdtYi9VdlFVSjhrTWc4TFYxc3FvZDNKZnFpazJ2VHF5bkxQSm5uNVYyVVFvQzBtcEpSRHViR1QrenVDN3FOWG1TUzlranRVYU02MXM5VEJqc2ZoS0k0OTk3MXJSTlYrMHBqbDA3dHh3NjVHL3M2V3BsUXI4TWV2ZG9nSEozaUNMRlorWEUzSlZZc3Fxb3JuUTFNbXlnMlNPeERNUEJKWXFLck5sejFMbTdqeWkrK0JaN1ZrT1pMVXlIK1BEeWZ0dzVXdjVHYjY2STU0dXFUeVN6bEwveFY0TS84d1k3L0FQVEhXS2QrMUY2TXl5UDNZZlZIdWJYSEhaaWdGQUtBVUFvQlFDZ0ZBYXkvU0ovOHMrUy84VnNQL3NxdzJaLzBMMFpYYlUvNW42bzhvYTZVNWdvZTFTQzJvUFJoRG5GeEREbGM5RmliYm9hUEZLeU00N2t5dm91TmdrYUhTbzhBaHVvSDJybnRxejFNbUtYRC9IN2Y0KzduUjdMa3VYS2NjV2NYMXcvc2djTTB0dktrOEVyeHl4c0hSMFlobFlIWUlJOEVHcXhOd3U2TEpwUkt6eU5sT0VzL0h4TncvWjVkVEdKSlU2WjBVajhFcTltR2dTVjc5d0QzNlNwOTY2Mm1ucW9sS05lL3IxOEhJVkV2c1owVXJUMXl6WERIMVdGN3JOTSt3RDdWc0dCbmZ3ZVl2ZUhzMWo4L2pXUmJ2R1hVVjVibDE2bEVrYmgxSkh1TmdkcTh4UXFKT0Y4UkRFNFdvbHdOanZ2RlBpWC9BRG5CZnBNZjcxb2QyVStqNWxoM3JVYXJrUHZGUGlYL0FEbkJmcE1mNzA3c3A5SHpIZXRScXVRKzhVK0pmODV3WDZUSCs5TzdLZlI4eDNyVWFya1B2RlBpWC9PY0Yra3gvdlR1eW4wZk1kNjFHcTVEN3hUNGwvem5CZnBNZjcwN3NwOUh6SGV0UnF1USs4VStKZjhBT2NGK2t4L3ZUdXluMGZNZDYxR3E1RDd4VDRsL3puQmZwTWY3MDdzcDlIekhldFJxdVErOFUrSmY4NXdYNlRIKzlPN0tmUjh4M3JVYXJrUHZGUGlYL09jRitreC92VHV5bjBmTWQ2MUdxNUVQNXFmR0J6cDV5Y0lUY0Q4YjVIRnpZdWVhSzRkYmZIcEUvWEdkcitJZC9OWlpOREprUmI4R1ppblYwNm9nM0k4akNsYlpwbHBQdFVrcEh4ZUx1SVl1RjhCZFpaeWhsUmVpM1J2OGNwN0tOYkd4N25SMzBnMXIxTTlVOHB6SDdldlh3YkZQSzdlYkRMMSt2Njk4TDJOYlpwcGJpVjU1NVhrbGtZdTd1eExNeE95U1Q1Sk5jazI0bmQ1blhKS0ZXUmJVRWtvNWY4WXk4STVjR1RwTmhlTWtkMkNEdFZCT3BCb0U3WFpPdmNFanpvamNvcXAwc3pId3ZQOEFQc2FGZlNLcGw3eXZ2UTN0NStXT0dOcytHdHJtd1VNMFZ4RWx4YnlwSkZJb2RIUmd5c3BHd1FSNUJycVU3cTZPWmFhd1p5QTFPWjVhTHFnZ1VBb0JRQ2dGQUtBVUFvQlFGcE5Ua1NrY2MwMFZ2RTl4Y1NwSEZHcGQzZGdxcW9HeVNUNEFxRzBrMnozREM0bnVyTTE5NWdjWXk4WFpnbVBwRmhaczhkb0FPN0tTTnlIWUIyM1NEcjJHaDUyVHkxYlZPcW1YV1N5L0owdEJTS21sN3o4VVNWL0x5emF3dm1zK1JGNjB6ZkZBS0FuSEx2bUpMd3hLdUt5cnZKaXBHN0h1eld6RTkyVWU2aytWL3FPK3cxbFExenAzMmN6dy9YK2VYVHJhNmhWUXQrWDR2dnJoMWJPVU0wVnhFazhFcVNSU0tIUjBZRldVallJSThnaXVqVFRWMHpuR21uWm81QWZuVW5sb3JVRUZhQVVBb0JRQ2dGQVUzcXBCUW41VUpTT09hYUszaWU0dUpVamlqVXU3dXdDcW9HeVNUNEFGUTJsaXowbGQyUmczbUp6RWw0bWxiRllwM2p4VWJkejNEWExBOW1ZZXlqMlgrcDc2Qzg1WFZ6cUh1UWVINzY2OHVqb2FGVTY3U1B4ZlhYWG5CNnJTeUZBS0FVQW9DVThIOHc4MXduSXNKZDc3SGhDZ3M1WlNGVHVXM0dlL1FlcGlUb2FPenNiMFJ1VXRiTXBuYk9IVDhhRmZWYk9sMUY0b0xReE4zYnRua3NjcjRLeWZDeTRZR2JjQnhaZ09Kb2cySXlNY3NnUU84RGZobGo3S1R0VDNJQllBc05ydndUWFJTYW1WVUs4dCszSHI0T2ZtMDg2VCs1RGJGL2ZsZlBOWHh0bWs4RDY5WnpDVkRHcElzVjZoUVdHeDg2RVdHeDg2Q3c2aFFteFFzYUN4U29KUGtaL2kzaC9obU10bDhqSEZJVUxwQXY0cFpPekVhVWR4c3FRR09sMzVJckJQcVpWT3J6SDdjZXZnelNxZWJQOEEyNGI0cGNNT2RzczN4dGttOERDUEdQTURMOFhTK21TMW5ZQlFCYVJ5a3F4MkR0ejI2enNEV3hvYUdodlpQTzFWYk1xblo0TFQ4Nm5SVXRCTHBrbkZhS0xXM3JsbmJCMmV2d1JldE0zaFFDZ0ZBS0FVQW9DNkdhVzNsU2VDVjQ1WTJEbzZNUXlzRHNFRWVDRFVwdUYzUkRTaVZua1R6aDduRm44VkVMYkxRSmxZbFhTTTcrbktPd0EyNEI2aDJQa0ZpVHNtcktUdFNiTFZvMXZMNTYrZk1xNSt5cGN4M2x2ZDE0cmp5K3JLMWlmNHpteHdYa2VsWkw2V3lrZVQwMVM2aEs3OGFZc3ZVcWp2NUxEV2p2UTcxWnk5cFU4eDJ2YjE2Wld6Tm5WRXRYdGYwNlQrQ1MyR1d4V1ZFaHhlU3Rid1JhOVQwSmxrNk43MXZwSjF2Ui9zYTNJSmtFendOUDBkelRqbHh5N0tOTlgxTzNXUThDZ09wZjVmRTRybyswOG5hV2ZxN0tldk1zZlZyenJxSTM1SDk2eHh6SUpmamFYcXpKQkxqbWVCTitpSTFrK2EvQmVONmxTL2x2WkVsTWJKYXhGdkc5c0dicFJsN2VReDNzYTJPOWFjemFWUExkcjM5T2w4RzFMMmRVVEZlMXZYcHRjaUFjUWM0cy9sWWpiWW1CTVZFeTZka2YxSlRzRUhUa0FLTzQ4RHFCR3cxVmsvYWsyWmhCK2xmUE10Skd5cGN0NzB4NzJuQmNPZkh5eHk0a0RtbW11Sm51TGlWNVpaV0x1N3NXWm1KMlNTZTVKUHZWYTI0bmRsbWtvVlpaRnRRU0tBVUFvRC85az0nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrdi10YWJsZS1kcmFnZ2FibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi10YWJsZS1kcmFnZ2FibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2t2LXRhYmxlLWRyYWdnYWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgS3ZUYWJsZURyYWdnYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgRG9DaGVjaywgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgXHJcbiAgY29sdW1uczogVGFibGVDb25maWdDb2x1bW5bXSA9IFtdO1xyXG4gIGRlbGV0ZWRDb2x1bnM6IFRhYmxlQ29uZmlnQ29sdW1uW10gPSBbXTtcclxuICBnbG9iYWxGaWx0ZXJGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcbiAgc2VsZWN0ZWRTaXplOiBzdHJpbmcgPSAnJztcclxuICBjb2xsYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBtZW51RmlsdHJvOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2hlY2tlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgY2hlY2tib3hDbGlja2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbWVudUl0ZW1zITogTWVudUl0ZW1bXTtcclxuICB0YWJsZUFjdGlvbnM6IE1lbnVJdGVtW11bXSA9IFtdO1xyXG4gIGN1cnJEYXRhU291cmNlOiBhbnlbXSA9IFtdO1xyXG4gIGFjdGlvbnNPZmZzZXQ6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBpc0RyYWdnaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgcHJlcG9zaXRpb25zID0gbmV3IFNldDxzdHJpbmc+KFtcclxuICAgICdkZScsICdkYScsICdkbycsICdlbScsICdubycsICduYScsICdwYXJhJywgJ3BvcicsICdjb20nLCAnYScsICdvJywgJ2UnXHJcbiAgXSk7XHJcbiAgcHJpdmF0ZSByb21hbk51bWVyYWxzID0gbmV3IFNldDxzdHJpbmc+KFtcclxuICAgICdJJywgJ0lJJywgJ0lJSScsICdJVicsICdWJywgJ1ZJJywgJ1ZJSScsICdWSUlJJywgJ0lYJywgJ1gnLCAnWEknLCAnWElJJywgJ1hJSUknLCAnWElWJywgJ1hWJyxcclxuICAgICdYVkknLCAnWFZJSScsICdYVklJSScsICdYSVgnLCAnWFgnXHJcbiAgXSk7XHJcbiAgcHJpdmF0ZSBzaWdsYXMgPSBuZXcgU2V0PHN0cmluZz4oW1xyXG4gICAgJ1VJJywgJ1VYJywgJ1RJJ1xyXG4gIF0pO1xyXG5cclxuICBmaXJzdCA9IG1vZGVsPG51bWJlcj4oMCk7XHJcbiAgcm93cyA9IG1vZGVsPG51bWJlcj4oNSk7XHJcbiAgXHJcbiAgdGFibGVDZWxsID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCd0YWJsZUNlbGwnKTtcclxuXHJcbiAgZWxsaXBzaXNUZXh0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGlzTG9hZGluZ1NrZWxldG9uID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGZpbHRlckJ1dHRvbiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBmaWx0ZXJCdXR0b25CYWRnZSA9IGlucHV0PHN0cmluZz4oJycpO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHRhYmxlQ29uZmlnID0gc2lnbmFsPFRhYmxlQ29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHdpZHRoUGFnZSA9IHNpZ25hbDxudW1iZXI+KDApO1xyXG5cclxuICBASW5wdXQoJ3RlbXBsYXRlcycpIF90ZW1wbGF0ZXMhOiBhbnk7XHJcbiAgQElucHV0KCkgc2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZyA9ICdQZXNxdWlzYXIuLi4nO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRTb3J0RmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBkYXRhU291cmNlOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGVkSXRlbXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHBhZ2luYXRvcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgcm93c1BlclBhZ2VPcHRpb25zITogbnVtYmVyW107XHJcbiAgQElucHV0KCkgdGFibGVTaXplITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGZpbHRlckNvbHVtbnNCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSByZXBsYWNlRW1wdHlWYWx1ZXM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGZpbHRyb3NBdmFuY2Fkb3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzY3JvbGxIZWlnaHQ6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGlzVGFibGVTY3JvbGxhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdGFibGVDYXB0YWxpemVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcm93VHJhY2tCeTogKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkgPT4gYW55ID0gKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkgPT4gaXRlbTtcclxuICBASW5wdXQoKSByZXNwb25zaXZlTGF5b3V0OiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBkaXNhYmxlZEhlYWRlckNoZWNrYm94OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZW5hYmxlRHJhZ0Ryb3A6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGRyYWdEcm9wRGlzYWJsZWQ6IChpdGVtOiBhbnkpID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZTtcclxuICBASW5wdXQoKSBhcHBseVN0eWxlOiBGdW5jdGlvbiA9IChyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pID0+ICcnO1xyXG4gIEBJbnB1dCgpIHBhZ2VMaW5rc09wdGlvbnMhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgc2hvd0ZpcnN0TGFzdEljb24hOiBib29sZWFuO1xyXG4gIEBJbnB1dCgnY29uZmlnJykgc2V0IHNldENvbmZpZyh2YWx1ZTogVGFibGVDb25maWcpIHtcclxuICAgIHRoaXMudGFibGVDb25maWcuc2V0KHtcclxuICAgICAgZW5hYmxlQ2F0aW9uOiB2YWx1ZS5lbmFibGVDYXRpb24gfHwgdHJ1ZSxcclxuICAgICAgZW5hYmxlU2VsZWN0OiB2YWx1ZS5lbmFibGVTZWxlY3QgfHwgZmFsc2UsXHJcbiAgICAgIGVuYWJsZUZpbHRlcjogdmFsdWUuZW5hYmxlRmlsdGVyIHx8IHRydWUsXHJcbiAgICAgIC4uLnZhbHVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5kZWZpbmlyQ29sdW5hc0NvbmZpZ3VyYXZlaXModGhpcy50YWJsZUNvbmZpZygpISk7XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgb25BY3RpdmVJdGVtOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25BY3RpdmVJdGVtTG90ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uUGFnaW5hdGU6IEV2ZW50RW1pdHRlcjxUYWJsZVBhZ2luYXRlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25TZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBkb3VibGVDbGlja0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZmlsdGVyRmllbGQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvblN3aXRjaFRhYmxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25Sb3dSZW9yZGVyOiBFdmVudEVtaXR0ZXI8e3ByZXZpb3VzSW5kZXg6IG51bWJlciwgY3VycmVudEluZGV4OiBudW1iZXIsIGl0ZW06IGFueSwgbmV3T3JkZXI6IGFueVtdfT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ21lbnVGaWx0cm9EaXYnKSBtZW51RmlsdHJvRGl2ITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdib3Rhb0ZpbHRybycpIGJvdGFvRmlsdHJvITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdpbnB1dEZpZWxkJykgaW5wdXRGaWVsZCE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgndGFibGUnLCB7IHN0YXRpYzogZmFsc2UgfSkgdGFibGUhOiBUYWJsZTtcclxuICBAVmlld0NoaWxkKFRhYmxlKSBwdGFibGUhOiBUYWJsZTtcclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZURpcmVjdGl2ZSkgdGVtcGxhdGVzITogUXVlcnlMaXN0PGFueT47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlY2ltYWxQaXBlOiBEZWNpbWFsUGlwZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3BmQ25walBpcGU6IENwZkNucGpQaXBlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZWxlZm9uZVBpcGU6IFRlbGVmb25lUGlwZSxcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZlxyXG4gICkge1xyXG4gICAgdGhpcy5pc1Jvd1NlbGVjdGFibGUgPSB0aGlzLmlzUm93U2VsZWN0YWJsZS5iaW5kKHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlndXJhY2FvRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcclxuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMudGFibGVDb25maWcoKSE7XHJcbiAgICB0aGlzLmRlZmluaXJGaWx0cm9zR2xvYmFpcyhjb25maWcpO1xyXG4gICAgdGhpcy5kZWZpbmlyQ29sdW5hc0NvbmZpZ3VyYXZlaXMoY29uZmlnKTtcclxuICB9KTtcclxuXHJcbiAgZGF0YVNvdXJjZVNpZ25hbCA9IHNpZ25hbDxhbnlbXT4oW10pO1xyXG5cclxuICB3aWR0aFNrZWxldG9uczogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgd2lkdGhSYW5kb20gPSBjb21wdXRlZCgoKSA9PiAoY29sOiBhbnksIHJvdzogYW55KSA9PiB7XHJcbiAgICBpZiAoIWNvbC50ZW1wbGF0ZSAmJiAhY29sLmljb24gJiYgIWNvbC5maWVsZFR5cGUgJiYgIWNvbC5ib29sZWFuICYmICFjb2wucGlwZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy53aWR0aFNrZWxldG9uc1tyb3ddICogMTAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIDEwMDtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNEcmFnZ2luZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UgJiYgXHJcbiAgICAgICAgKHRoaXMuZGF0YVNvdXJjZS5sZW5ndGggIT09IHRoaXMuY3VyckRhdGFTb3VyY2UubGVuZ3RoIHx8XHJcbiAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YVNvdXJjZSkgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuY3VyckRhdGFTb3VyY2UpKSkge1xyXG4gICAgICBcclxuICAgICAgdGhpcy5jdXJyRGF0YVNvdXJjZSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2VTaWduYWwuc2V0KFsuLi50aGlzLmRhdGFTb3VyY2VdKTtcclxuICAgICAgdGhpcy5jcmVhdGVUYWJsZUFjdGlvbnMoKTtcclxuICAgICAgXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB9LCAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRhdGFTb3VyY2VNb2NrOiBhbnlbXSA9IFtdO1xyXG5cclxuICBpc0VtcHR5RGF0YVNvdXJjZSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGFTb3VyY2VTaWduYWwoKSkgPT09IEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YVNvdXJjZU1vY2spO1xyXG4gIH0pXHJcblxyXG4gIGxvYWRpbmdTa2VsZXRvblV0aWxpdGllcygpIHtcclxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UubGVuZ3RoID09PSAwICYmIHRoaXMuaXNMb2FkaW5nU2tlbGV0b24oKSkge1xyXG4gICAgICBsZXQgcm93SXRlbTogYW55ID0ge307XHJcbiAgICAgIHRoaXMudGFibGVDb25maWcoKT8uY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcclxuICAgICAgICByb3dJdGVtW2NvbC5maWVsZF0gPSAnJztcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLmRhdGFTb3VyY2VNb2NrID0gQXJyYXkodGhpcy5yb3dzKCkpLmZpbGwoeyAuLi5yb3dJdGVtIH0pO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSB0aGlzLmRhdGFTb3VyY2VNb2NrO1xyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnJvd3MoKTsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy53aWR0aFNrZWxldG9ucy5wdXNoKE1hdGgucmFuZG9tKCkgKiAwLjcgKyAwLjIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubG9hZGluZ1NrZWxldG9uVXRpbGl0aWVzKCk7XHJcbiAgICB0aGlzLmFkanVzdFRhYmxlU2l6ZSgpO1xyXG4gICAgdGhpcy53aWR0aFBhZ2Uuc2V0KHdpbmRvdy5pbm5lcldpZHRoKTtcclxuICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICB0aGlzLmNvbHVtbnMucHVzaChjb2wpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNoZWNrSGlkZUNvbHVtbnMoKTtcclxuICAgIFxyXG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSkge1xyXG4gICAgICB0aGlzLmN1cnJEYXRhU291cmNlID0gWy4uLnRoaXMuZGF0YVNvdXJjZV07XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZVNpZ25hbC5zZXQoWy4uLnRoaXMuZGF0YVNvdXJjZV0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjb25zdCBkZWZhdWx0U29ydEZpZWxkID0gdGhpcy5kZWZhdWx0U29ydEZpZWxkO1xyXG4gICAgaWYgKGRlZmF1bHRTb3J0RmllbGQgJiYgdGhpcy5kYXRhU291cmNlKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdHlwZW9mIGFbZGVmYXVsdFNvcnRGaWVsZF0gPT09ICdzdHJpbmcnICYmXHJcbiAgICAgICAgICB0eXBlb2YgYltkZWZhdWx0U29ydEZpZWxkXSA9PT0gJ3N0cmluZydcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybiAoYVtkZWZhdWx0U29ydEZpZWxkXSBhcyBzdHJpbmcpLmxvY2FsZUNvbXBhcmUoXHJcbiAgICAgICAgICAgIChiW2RlZmF1bHRTb3J0RmllbGRdIGFzIHN0cmluZylcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIHR5cGVvZiBhW2RlZmF1bHRTb3J0RmllbGRdID09PSAnYm9vbGVhbicgJiZcclxuICAgICAgICAgIHR5cGVvZiBiW2RlZmF1bHRTb3J0RmllbGRdID09PSAnYm9vbGVhbidcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHJldHVybiBhW2RlZmF1bHRTb3J0RmllbGRdID09PSBiW2RlZmF1bHRTb3J0RmllbGRdXHJcbiAgICAgICAgICAgID8gMFxyXG4gICAgICAgICAgICA6IGFbZGVmYXVsdFNvcnRGaWVsZF1cclxuICAgICAgICAgICAgICA/IDFcclxuICAgICAgICAgICAgICA6IC0xO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICB0eXBlb2YgYVtkZWZhdWx0U29ydEZpZWxkXSA9PT0gJ251bWJlcicgJiZcclxuICAgICAgICAgIHR5cGVvZiBiW2RlZmF1bHRTb3J0RmllbGRdID09PSAnbnVtYmVyJ1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgcmV0dXJuIChhW2RlZmF1bHRTb3J0RmllbGRdIGFzIG51bWJlcikgLSAoYltkZWZhdWx0U29ydEZpZWxkXSBhcyBudW1iZXIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5jdXJyRGF0YVNvdXJjZSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2VTaWduYWwuc2V0KFsuLi50aGlzLmRhdGFTb3VyY2VdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kaXNhYmxlZC1yb3cnKS5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgIHJvdy5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpLmZvckVhY2goY2VsbCA9PiB7XHJcbiAgICAgICAgY2VsbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50ID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgIGlmICghdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndG9vbHRpcCcpKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVmaW5pckNvbHVuYXNDb25maWd1cmF2ZWlzKGNvbmZpZzogVGFibGVDb25maWcpIHtcclxuICAgIHRoaXMuY29sdW1ucy5zcGxpY2UoMCwgdGhpcy5jb2x1bW5zLmxlbmd0aCk7XHJcblxyXG4gICAgY29uZmlnLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICB0aGlzLmNvbHVtbnMucHVzaChjb2wpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWZpbmlyRmlsdHJvc0dsb2JhaXMoY29uZmlnOiBUYWJsZUNvbmZpZykge1xyXG4gICAgaWYgKGNvbmZpZz8uZW5hYmxlRmlsdGVyKSB7XHJcblxyXG4gICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcy5zcGxpY2UoMCwgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHMubGVuZ3RoKTtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbmZpZy5jb2x1bW5zKSB7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHMucHVzaChjb2x1bW4uZmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldFRhYmxlKCkge1xyXG4gICAgaWYgKHRoaXMucHRhYmxlKSB0aGlzLnB0YWJsZS5yZXNldCgpO1xyXG4gICAgaWYgKHRoaXMuaW5wdXRGaWVsZCkgdGhpcy5pbnB1dEZpZWxkLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxyXG4gIG9uV2luZG93UmVzaXplKCkge1xyXG4gICAgdGhpcy5hZGp1c3RUYWJsZVNpemUoKTtcclxuICAgIHRoaXMud2lkdGhQYWdlLnNldCh3aW5kb3cuaW5uZXJXaWR0aCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWN0aXZlSXRlbShyb3dEYXRhOiBhbnkpIHtcclxuICAgIHRoaXMub25BY3RpdmVJdGVtLmVtaXQocm93RGF0YSk7XHJcbiAgfVxyXG5cclxuICBnZXRPckV4ZWN1dGU8VD4oYWN0aW9uOiBWYWx1ZU9yRm48VD4sIGRhdGE6IGFueSk6IFQge1xyXG4gICAgcmV0dXJuIGdldE9yRXhlY3V0ZShhY3Rpb24sIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgaXNCb29sZWFuRmllbGQocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHJvd0RhdGFbY29sLmZpZWxkXSA9PSAnYm9vbGVhbic7XHJcbiAgfVxyXG5cclxuICBpc0NoaXBGaWVsZChjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gY29sLmZpZWxkVHlwZSA9PSAnY2hpcCc7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgb25QYWdlKGV2ZW50OiBUYWJsZVBhZ2VFdmVudCkge1xyXG4gICAgdGhpcy5maXJzdC5zZXQoZXZlbnQuZmlyc3QpO1xyXG4gICAgdGhpcy5yb3dzLnNldChldmVudC5yb3dzKTtcclxuICB9XHJcblxyXG4gIGlzSW1hZ2VGaWVsZChjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmV0b3JubyA9IGNvbC5maWVsZFR5cGUgJiYgY29sLmZpZWxkVHlwZSA9PT0gJ2ltYWdlJyA/IHRydWUgOiBmYWxzZTtcclxuICAgIHJldHVybiByZXRvcm5vO1xyXG4gIH1cclxuXHJcbiAgaXNTd2l0Y2hGaWVsZChjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmV0b3JubyA9IGNvbC5maWVsZFR5cGUgJiYgY29sLmZpZWxkVHlwZSA9PT0gJ3N3aXRjaCcgPyB0cnVlIDogZmFsc2U7XHJcbiAgICByZXR1cm4gcmV0b3JubztcclxuICB9XHJcblxyXG4gIGlzUm93U2VsZWN0YWJsZShldmVudDogYW55KSB7XHJcbiAgICByZXR1cm4gIXRoaXMuaXNEaXNhYmxlZENoZWNrYm94KGV2ZW50LmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgaXNEaXNhYmxlZENoZWNrYm94KHJvd0RhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvblxyXG4gICAgICA/IHRoaXMuY29uZmlnLmRpc2FibGVDb250cm9sQ2hlY2tib3hGdW5jdGlvbihyb3dEYXRhKVxyXG4gICAgICA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgaXNEaXNhYmxlZFJvdyhyb3dEYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZy5kaXNhYmxlUm93ID8gdGhpcy5jb25maWcuZGlzYWJsZVJvdyhyb3dEYXRhKSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTdHlsZUNsYXNzKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbiwgZGF0YTogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiBjb2wgPyBjb2wuc3R5bGVDbGFzcyEocm93RGF0YSwgY29sLCBkYXRhKSA6ICcnXHJcbiAgfVxyXG5cclxuICB2ZXJpZmljYUN1cnNvcigpIHtcclxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kaXNhYmxlZC1yb3cnKS5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgIHJvdy5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpLmZvckVhY2goY2VsbCA9PiB7XHJcbiAgICAgICAgY2VsbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGV2ZW50ID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgIGlmICghdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndG9vbHRpcCcpKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZEltYWdlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IHN0cmluZyB7XHJcbiAgICAvKlxyXG4gICAgICBOb3NzYSBjb2x1bmEgZGUgaW1hZ2VtIHRyYWJhbGhhIGNvbSBzdHJpbmdzIGRvIHRpcG86IGJhc2U2NCBvdSB1cmxcclxuICAgICovXHJcbiAgICBsZXQgcmV0b3JubyA9IGBkYXRhOiBpbWFnZSAvIGpwZzsgYmFzZTY0LCAke2ltZ0RlZmF1bHR9IGA7XHJcbiAgICBpZiAocm93RGF0YSAmJiBjb2wgJiYgcm93RGF0YVtjb2wuZmllbGRdICYmIHJvd0RhdGFbY29sLmZpZWxkXSAhPT0gJycpIHtcclxuICAgICAgaWYgKHJvd0RhdGFbY29sLmZpZWxkXS5pbmNsdWRlcygnaHR0cCcpKSByZXRvcm5vID0gcm93RGF0YVtjb2wuZmllbGRdO1xyXG4gICAgICBlbHNlIHJldG9ybm8gPSBgZGF0YTogaW1hZ2UgLyBqcGc7IGJhc2U2NCwgJHtyb3dEYXRhW2NvbC5maWVsZF19IGA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJldG9ybm87XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25HbG9iYWxGaWx0ZXIodGFibGU6IFRhYmxlLCBldmVudDogRXZlbnQpIHtcclxuICAgIHRoaXMuZmlsdGVyRmllbGQuZW1pdCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcclxuICAgIHRhYmxlLmZpbHRlckdsb2JhbCgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlLCAnY29udGFpbnMnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwYWdpbmF0ZShldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgbGV0IHBhZ2luYUluaWNpYWwgPVxyXG4gICAgICAgIChldmVudD8uZmlyc3QgPiAwID8gZXZlbnQuZmlyc3QgLyBldmVudC5yb3dzIDogZXZlbnQuZmlyc3QpICsgMTtcclxuICAgICAgbGV0IHRlcm1vUGVzcXVpc2EgPSAnJztcclxuICAgICAgbGV0IG9yZGVuYWNhbyA9ICcnO1xyXG5cclxuICAgICAgaWYgKGV2ZW50Lmdsb2JhbEZpbHRlcikgdGVybW9QZXNxdWlzYSA9IGV2ZW50Lmdsb2JhbEZpbHRlcjtcclxuXHJcbiAgICAgIGlmIChldmVudC5zb3J0RmllbGQpXHJcbiAgICAgICAgb3JkZW5hY2FvID0gYCR7ZXZlbnQuc29ydEZpZWxkfSAke2V2ZW50LnNvcnRPcmRlciA9PT0gMSA/ICdBU0MnIDogJ0RFU0MnfSBgO1xyXG5cclxuICAgICAgY29uc3Qgb2JqZXRvOiBUYWJsZVBhZ2luYXRlID0ge1xyXG4gICAgICAgIHBhZ2luYUluaWNpYWw6IHBhZ2luYUluaWNpYWwsXHJcbiAgICAgICAgdGFtYW5ob1BhZ2luYTogZXZlbnQucm93cyxcclxuICAgICAgICB0ZXJtb1Blc3F1aXNhOiB0ZXJtb1Blc3F1aXNhLFxyXG4gICAgICAgIG9yZGVuYWNhbzogb3JkZW5hY2FvLFxyXG4gICAgICAgIG9yZGVybmFjYW9Hcm91cDogeyBjb2x1bW46IGV2ZW50LnNvcnRGaWVsZCwgZGlyZWN0aW9uOiBldmVudC5zb3J0T3JkZXIgPT09IDEgPyAnQVNDJyA6ICdERVNDJyB9LFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5vblBhZ2luYXRlLmVtaXQob2JqZXRvKTtcclxuXHJcbiAgICAgIHRoaXMuYWN0aW9uc09mZnNldCA9IGV2ZW50LmZpcnN0O1xyXG4gICAgICB0aGlzLmNyZWF0ZVRhYmxlQWN0aW9ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0aW9uQ2hhbmdlKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWN0aXZlSXRlbUxvdGUoc2VsZWN0ZWRJdGVtczogYW55KSB7XHJcbiAgICB0aGlzLm9uQWN0aXZlSXRlbUxvdGUuZW1pdChzZWxlY3RlZEl0ZW1zKTtcclxuICB9XHJcblxyXG4gIHJldHVyblJvd0NsYXNzKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikge1xyXG4gICAgbGV0IHZhbHVlID0gcm93RGF0YVtjb2wuZmllbGRdO1xyXG4gICAgbGV0IHJvd0NsYXNzOiBzdHJpbmc7XHJcblxyXG4gICAgdGhpcy50YWJsZVNpemUgPiA4MDAgPyAocm93Q2xhc3MgPSAndGV4dC1iYXNlJykgOiAocm93Q2xhc3MgPSAndGV4dC1zbScpO1xyXG5cclxuICAgIGlmIChjb2wuZXhwaXJlZERhdGUgPT0gdHJ1ZSkge1xyXG4gICAgICBuZXcgRGF0ZSh2YWx1ZSkgPCBuZXcgRGF0ZSgpXHJcbiAgICAgICAgPyAocm93Q2xhc3MgPSByb3dDbGFzcyArICcgdGV4dC1yZWQtNDAwIGZvbnQtc2VtaWJvbGQnKVxyXG4gICAgICAgIDogJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93Q2xhc3M7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cGlyZWRGaWxlKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHZhbHVlID0gcm93RGF0YVsnZGF0YXZlbmNpbWVudG8nXTtcclxuICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSkgPCBuZXcgRGF0ZSgpICYmIGNvbC5maWVsZCA9PSAnYXJlYSc7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcclxuICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbY29sLmZpZWxkXTtcclxuXHJcbiAgICBpZiAoY29sLnRyYW5zZm9ybSkge1xyXG4gICAgICByZXR1cm4gY29sLnRyYW5zZm9ybSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSAmJiB0aGlzLnJlcGxhY2VFbXB0eVZhbHVlcyAmJiB0aGlzLmlzTG9hZGluZ1NrZWxldG9uKCkpIHtcclxuICAgICAgcmV0dXJuICctJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICBpZiAoIWNvbC5waXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzd2l0Y2ggKGNvbC5waXBlKSB7XHJcbiAgICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICdkZC9NTS95eXl5JywgJ1VUQycpO1xyXG4gICAgICAgIGNhc2UgJ2RhdGV0aW1lJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgJ2RkL01NL3l5eXkgaGg6bW0nKTtcclxuICAgICAgICBjYXNlICdkYXRlTW9udGhZZWFyJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgJ01NL3l5eXknKTtcclxuICAgICAgICBjYXNlICdkZWNpbWFsJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmRlY2ltYWxQaXBlLnRyYW5zZm9ybSh2YWx1ZSwgJzEuMi0yJywgJ3B0LUJSJyk7XHJcbiAgICAgICAgY2FzZSAnY3BmY25waic6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5jcGZDbnBqUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xyXG4gICAgICAgIGNhc2UgJ3RlbGVmb25lJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLnRlbGVmb25lUGlwZS50cmFuc2Zvcm0odmFsdWUpO1xyXG4gICAgICAgIGNhc2UgJ2NhcGl0YWxpemUnOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtQ2FwaXRhbGl6ZSh2YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAnbW9uZXknOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0YXJWYWxvcih2YWx1ZSk7XHJcbiAgICAgICAgY2FzZSAncGVyY2VudGFnZSc6XHJcbiAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9ICUgYDtcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm1DYXBpdGFsaXplKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHZhbHVlO1xyXG5cclxuICAgIHJldHVybiB2YWx1ZS5zcGxpdCgnICcpLm1hcCgod29yZCwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3Qgd29yZFVwcGVyID0gd29yZC50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICBjb25zdCB3b3JkTG93ZXIgPSB3b3JkLnRvTG9jYWxlTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5yb21hbk51bWVyYWxzLmhhcyh3b3JkVXBwZXIpKSB7XHJcbiAgICAgICAgcmV0dXJuIHdvcmQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnNpZ2xhcy5oYXMod29yZFVwcGVyKSkge1xyXG4gICAgICAgIHJldHVybiB3b3JkO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaW5kZXggIT09IDAgJiYgdGhpcy5wcmVwb3NpdGlvbnMuaGFzKHdvcmRMb3dlcikpIHtcclxuICAgICAgICByZXR1cm4gd29yZExvd2VyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gd29yZC5jaGFyQXQoMCkudG9Mb2NhbGVVcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkudG9Mb2NhbGVMb3dlckNhc2UoKTtcclxuICAgIH0pLmpvaW4oJyAnKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdGFyVmFsb3IodmFsb3I6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoJ3B0LUJSJywge1xyXG4gICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcclxuICAgICAgY3VycmVuY3k6ICdCUkwnLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsb3IpO1xyXG4gIH1cclxuXHJcbiAgYWRqdXN0VGFibGVTaXplKCkge1xyXG4gICAgaWYgKHRoaXMudGFibGVTaXplIDwgODAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTaXplID0gJ3AtZGF0YXRhYmxlLXNtJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTaXplID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkb3VibGVDbGljayhlOiBhbnksIHJvd0RhdGE6IGFueSkge1xyXG4gICAgbGV0IGV2ZW50RG91YmxlQ2xpY2sgPSB7IGV2ZW50OiBlLCByb3dEYXRhOiByb3dEYXRhIH07XHJcblxyXG4gICAgbGV0IGFycmF5OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgZS50YXJnZXQuY2xhc3NMaXN0LmZvckVhY2goKHg6IGFueSkgPT4gYXJyYXkucHVzaCh4KSk7XHJcblxyXG4gICAgdGhpcy5kb3VibGVDbGlja0V2ZW50LmVtaXQoZXZlbnREb3VibGVDbGljayk7XHJcbiAgfVxyXG5cclxuICByZXRvcm5hclJvdyhyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4sIGZpZWxkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgX3Jvd2FjdGlvbiA9IHRoaXMuY29uZmlnLnJvd3MgPyB0aGlzLmNvbmZpZy5yb3dzW2NvbC5maWVsZF0gOiBudWxsO1xyXG4gICAgY29uc3QgX2ZpZWxkOiBzdHJpbmcgPVxyXG4gICAgICBfcm93YWN0aW9uICYmIF9yb3dhY3Rpb25bZmllbGRdXHJcbiAgICAgICAgPyBfcm93YWN0aW9uW2ZpZWxkXS5jb25zdHJ1Y3RvciA9PT0gRnVuY3Rpb25cclxuICAgICAgICAgID8gX3Jvd2FjdGlvbltmaWVsZF0uYXBwbHkodGhpcywgW3Jvd0RhdGFdKVxyXG4gICAgICAgICAgOiBfcm93YWN0aW9uW2ZpZWxkXVxyXG4gICAgICAgIDogbnVsbDtcclxuICAgIHJldHVybiBfZmllbGQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4aWJpckNhbXBvKGZpZWxkOiBhbnksIHJvd0RhdGE6IGFueSkge1xyXG4gICAgbGV0IHZpc2libGUgPSBmaWVsZC52aXNpYmxlID8gZmllbGQudmlzaWJsZShyb3dEYXRhKSA6IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIHZpc2libGU7XHJcbiAgfVxyXG5cclxuICByZXR1cm5DbGFzc0NoaXAocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgY2hpcCAtIHN0eWxlIHcgLSBhdXRvIGJvcmRlciAtIHJvdW5kIC0gMnhsIHAgLSAyIHRleHQgLSAke3RoaXMucmV0b3JuYXJSb3coXHJcbiAgICAgIHJvd0RhdGEsXHJcbiAgICAgIGNvbCxcclxuICAgICAgJ3N0eWxlY2hpcCdcclxuICAgIClcclxuICAgICAgfSBib3JkZXIgLSAke3RoaXMucmV0b3JuYXJSb3cocm93RGF0YSwgY29sLCAnc3R5bGVjaGlwJyl9IGA7XHJcbiAgfVxyXG5cclxuICByZXR1cm5DbGFzc0ljb24ocm93RGF0YTogYW55LCBjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnJldG9ybmFyUm93KHJvd0RhdGEsIGNvbCwgJ2ljb25yb3cnKTtcclxuICB9XHJcblxyXG4gIHJldHVyblRvb2x0aXBJY29uKHJvd0RhdGE6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXRvcm5hclJvdyhyb3dEYXRhLCBjb2wsICd0b29sdGlwaWNvbnJvdycpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuVG9vbHRpcFJvdyhyb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMucmV0b3JuYXJSb3cocm93RGF0YSwgY29sLCAndG9vbHRpcHJvdycpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlQ29sdW1uKGZpZWxkOiBzdHJpbmcpIHtcclxuICAgIGxldCBpbmRleDogbnVtYmVyO1xyXG5cclxuICAgIGxldCBjb2x1bW46IFRhYmxlQ29uZmlnQ29sdW1uIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWcuY29sdW1ucy5maW5kKFxyXG4gICAgICB4ID0+IHguZmllbGQgPT0gZmllbGRcclxuICAgICk7XHJcbiAgICBpZiAoY29sdW1uKSB7XHJcbiAgICAgIGluZGV4ID0gdGhpcy5jb25maWcuY29sdW1ucy5pbmRleE9mKGNvbHVtbik7XHJcbiAgICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgdGhpcy5kZWxldGVkQ29sdW5zLnB1c2goY29sdW1uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZENvbHVtbihmaWVsZDogc3RyaW5nKSB7XHJcbiAgICBsZXQgaW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICBsZXQgY29sdW1uOiBUYWJsZUNvbmZpZ0NvbHVtbiB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlnLmNvbHVtbnMuZmluZChcclxuICAgICAgKHgpID0+IHguZmllbGQgPT0gZmllbGRcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCFjb2x1bW4pIHtcclxuICAgICAgbGV0IGRlbGV0ZWRDb2x1bW46IFRhYmxlQ29uZmlnQ29sdW1uIHwgdW5kZWZpbmVkID1cclxuICAgICAgICB0aGlzLmRlbGV0ZWRDb2x1bnMuZmluZCgoeCkgPT4geC5maWVsZCA9PSBmaWVsZCk7XHJcblxyXG4gICAgICBpZiAoZGVsZXRlZENvbHVtbiAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpbmRleCA9IHRoaXMuZGVsZXRlZENvbHVucy5pbmRleE9mKGRlbGV0ZWRDb2x1bW4pO1xyXG4gICAgICAgIHRoaXMuZGVsZXRlZENvbHVucy5zbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5jb25maWcuY29sdW1ucy5wdXNoKGRlbGV0ZWRDb2x1bW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaW5hbWljQ29sdW1uU2V0KGU6IGFueSwgY29sOiBUYWJsZUNvbmZpZ0NvbHVtbikge1xyXG4gICAgY29sLmNoZWNrZWQgPSBlLmNoZWNrZWQ7XHJcbiAgICBpZiAoZS5jaGVja2VkKSB0aGlzLmFkZENvbHVtbihjb2wuZmllbGQpO1xyXG4gICAgZWxzZSB0aGlzLmRlbGV0ZUNvbHVtbihjb2wuZmllbGQpO1xyXG5cclxuICAgIGlmIChjb2wucG9zaXRpb24pIHRoaXMuY29uZmlnLmNvbHVtbnMuc29ydCh0aGlzLnNvcnRCeVBvc2l0aW9uKCkpO1xyXG4gIH1cclxuXHJcbiAgYWJyaXJNZW51RmlsdHJvKGU6IGFueSkge1xyXG4gICAgdGhpcy5tZW51RmlsdHJvID0gIXRoaXMubWVudUZpbHRybztcclxuICAgIHRoaXMuY2hlY2tib3hDbGlja2VkID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMud2lkdGhQYWdlKCkgPCA3MDApXHJcbiAgICAgIHRoaXMuc3R5bGVTZXR0ZXIoXHJcbiAgICAgICAgJ2xlZnQnLFxyXG4gICAgICAgIHRoaXMuYm90YW9GaWx0cm8ubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0IC0gMjg4ICsgJ3B4J1xyXG4gICAgICApO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLnN0eWxlU2V0dGVyKFxyXG4gICAgICAgICdsZWZ0JyxcclxuICAgICAgICB0aGlzLmJvdGFvRmlsdHJvLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdCArIDQwICsgJ3B4J1xyXG4gICAgICApO1xyXG5cclxuICAgIHRoaXMuc3R5bGVTZXR0ZXIoJ3RvcCcsIHRoaXMuYm90YW9GaWx0cm8ubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AgKyAncHgnKTtcclxuICAgIHRoaXMuc3R5bGVTZXR0ZXIoJ3Zpc2liaWxpdHknLCB0aGlzLm1lbnVGaWx0cm8gPyAndmlzaWJsZScgOiAnaGlkZGVuJyk7XHJcbiAgfVxyXG5cclxuICBmZWNoYXJNZW51RmlsdHJvKCkge1xyXG4gICAgdGhpcy5tZW51RmlsdHJvID0gZmFsc2U7XHJcbiAgICB0aGlzLmNoZWNrYm94Q2xpY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc3R5bGVTZXR0ZXIoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXHJcbiAgb25Fc2NhcGVLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmZpbHRlckNvbHVtbnNCdG4gPT0gdHJ1ZSAmJiB0aGlzLm1lbnVGaWx0cm8gPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmZlY2hhck1lbnVGaWx0cm8oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkNsaWNrRXZlbnQoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyQ29sdW1uc0J0biA9PSB0cnVlICYmIHRoaXMubWVudUZpbHRybyA9PSB0cnVlKSB7XHJcbiAgICAgIGNvbnN0IGNsaWNrZWRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBjb25zdCBtZW51RmlsdHJvRGl2ID1cclxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjbWVudUZpbHRyb0RpdicpO1xyXG4gICAgICBjb25zdCBib3Rhb0ZpbHRybyA9XHJcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2JvdGFvRmlsdHJvJyk7XHJcbiAgICAgIGNvbnN0IGlzQ2hlY2tib3hDbGlja2VkID1cclxuICAgICAgICBjbGlja2VkRWxlbWVudC5jbGFzc0xpc3QudG9TdHJpbmcoKS5pbmNsdWRlcygncC1jaGVja2JveCcpIHx8XHJcbiAgICAgICAgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC50b1N0cmluZygpID09ICcnO1xyXG4gICAgICBjb25zdCBpc0luc2lkZU1lbnUgPVxyXG4gICAgICAgIG1lbnVGaWx0cm9EaXY/LmNvbnRhaW5zKGNsaWNrZWRFbGVtZW50KSB8fFxyXG4gICAgICAgIGJvdGFvRmlsdHJvPy5jb250YWlucyhjbGlja2VkRWxlbWVudCkgfHxcclxuICAgICAgICBpc0NoZWNrYm94Q2xpY2tlZDtcclxuXHJcbiAgICAgIGlmICghaXNJbnNpZGVNZW51KSB0aGlzLmZlY2hhck1lbnVGaWx0cm8oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0eWxlU2V0dGVyKHN0eWxlOiBzdHJpbmcsIGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUodGhpcy5tZW51RmlsdHJvRGl2Lm5hdGl2ZUVsZW1lbnQsIHN0eWxlLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIGNoZWNrTWVudUZpbHRybyhjb2w6IFRhYmxlQ29uZmlnQ29sdW1uKSB7XHJcbiAgICBsZXQgZGVsZXRlZENvbHVtbiA9IHRoaXMuZGVsZXRlZENvbHVucy5maW5kKFxyXG4gICAgICB4ID0+IHguZmllbGQgPT0gY29sLmZpZWxkXHJcbiAgICApO1xyXG4gICAgaWYgKGRlbGV0ZWRDb2x1bW4pIGNvbC5jaGVja2VkID0gZmFsc2U7XHJcbiAgICBlbHNlIGNvbC5jaGVja2VkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHNvcnRCeVBvc2l0aW9uKCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlbGVtMTogYW55LCBlbGVtMjogYW55KSB7XHJcbiAgICAgIGlmIChlbGVtMS5wb3NpdGlvbiA8IGVsZW0yLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICB9IGVsc2UgaWYgKGVsZW0xLnBvc2l0aW9uID4gZWxlbTIucG9zaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGRpbmFtaWNEaXNhYmxlQ29sdW1uKGNvbDogVGFibGVDb25maWdDb2x1bW4pOiBib29sZWFuIHtcclxuICAgIGlmIChjb2wuZml4ZWRDb2x1bW4pIHJldHVybiBjb2wuZml4ZWRDb2x1bW47XHJcbiAgICBlbHNlIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNoZWNrSGlkZUNvbHVtbnMoKSB7XHJcbiAgICBsZXQgaGlkZUNvbHVtbnNDb25maWcgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKFxyXG4gICAgICBjb2wgPT4gY29sLmhpZGVDb2x1bW4gPT0gdHJ1ZVxyXG4gICAgKTtcclxuICAgIGhpZGVDb2x1bW5zQ29uZmlnLmZvckVhY2goY29sID0+IHRoaXMuZGVsZXRlQ29sdW1uKGNvbC5maWVsZCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VzdG9tVGVtcGxhdGUodGVtcGxhdGVuYW1lOiBzdHJpbmcpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZXNbdGVtcGxhdGVuYW1lXTtcclxuICB9XHJcblxyXG4gIG9uU3dpdGNoQ2hhbmdlKGVzdGFkbzogYW55LCByb3dEYXRhOiBhbnksIGNvbDogVGFibGVDb25maWdDb2x1bW4pIHtcclxuICAgIHRoaXMub25Td2l0Y2hUYWJsZUNoYW5nZS5lbWl0KHtcclxuICAgICAgZXN0YWRvOiBlc3RhZG8sXHJcbiAgICAgIHJvd0RhdGE6IHJvd0RhdGEsXHJcbiAgICAgIGNvbDogY29sLFxyXG4gICAgfSk7XHJcblxyXG4gICAgcm93RGF0YVtjb2wuZmllbGRdID0gZXN0YWRvO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlVGFibGVBY3Rpb25zKCkge1xyXG4gICAgdGhpcy50YWJsZUFjdGlvbnMgPSB0aGlzLmRhdGFTb3VyY2U/Lm1hcCgoeCkgPT5cclxuICAgICAgdGhpcy5jb25maWcuYWN0aW9uc1xyXG4gICAgICAgID8gdGhpcy5jb25maWcuYWN0aW9ucy5tYXAoKHkpID0+IG1hcFRvTWVudUl0ZW0oeSwgeCkpXHJcbiAgICAgICAgOiBbXVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uU29ydChlOiBhbnkpIHtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNvbmZpZygpOiBUYWJsZUNvbmZpZyB7XHJcbiAgICByZXR1cm4gdGhpcy50YWJsZUNvbmZpZygpITtcclxuICB9XHJcblxyXG4gIGNvbHVtbnNGaWx0ZXIgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCBkeW5hbWljQ29sdW1ucyA9ICh0aGlzLnRhYmxlQ29uZmlnKCk/LmNvbHVtbnMgPz8gW10pLmZpbHRlcihjb2wgPT4gIWNvbC5maXhlZENvbHVtbik7XHJcblxyXG4gICAgcmV0dXJuIFsuLi5keW5hbWljQ29sdW1ucywgLi4udGhpcy5kZWxldGVkQ29sdW5zXTtcclxuICB9KTtcclxuXHJcbiAgcmV0dXJuTWF4V2lkdGggPSBjb21wdXRlZCgoKSA9PiAod2lkdGhDb2w6IHN0cmluZykgPT4ge1xyXG4gICAgbGV0IHdpZHRoVGFibGUgPSB0aGlzLnRhYmxlQ2VsbCgpPy5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGg7XHJcbiAgICBsZXQgcGVyY2VudCA9IE51bWJlcih3aWR0aENvbC5yZXBsYWNlKCclJywgJycpKTtcclxuXHJcbiAgICBsZXQgd2lkdGhDYWxjID0gd2lkdGhUYWJsZSAqIHBlcmNlbnQgLyAxMDA7XHJcblxyXG4gICAgcmV0dXJuIGAke3dpZHRoQ2FsY31weGA7XHJcbiAgfSk7XHJcblxyXG4gIGN1cnJlbnRQYWdlRGF0YSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IHNvdXJjZURhdGEgPSB0aGlzLmRhdGFTb3VyY2VTaWduYWwoKTtcclxuICAgIFxyXG4gICAgaWYgKCFzb3VyY2VEYXRhIHx8IHNvdXJjZURhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgaWYgKCF0aGlzLnBhZ2luYXRvcikge1xyXG4gICAgICByZXR1cm4gc291cmNlRGF0YTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IHRoaXMuZmlyc3QoKTtcclxuICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy5yb3dzKCk7XHJcbiAgICByZXR1cm4gc291cmNlRGF0YS5zbGljZShzdGFydEluZGV4LCBzdGFydEluZGV4ICsgcGFnZVNpemUpO1xyXG4gIH0pO1xyXG5cclxuXHJcblxyXG5cclxuICAvL2luaWNpbyBkYXMgZnVuw6fDtWVzIGVzcGVjw61maWNhcyBkZSBkcmFnIGFuZCBkcm9wXHJcblxyXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPGFueVtdPikge1xyXG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICBcclxuICAgIGlmIChldmVudC5wcmV2aW91c0NvbnRhaW5lciA9PT0gZXZlbnQuY29udGFpbmVyKSB7XHJcbiAgICAgIGlmICghdGhpcy5pc1ZhbGlkRHJhZ09wZXJhdGlvbihldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBjdXJyZW50UGFnZVN0YXJ0SW5kZXggPSB0aGlzLmZpcnN0KCk7XHJcbiAgICAgIGNvbnN0IGdsb2JhbFByZXZpb3VzSW5kZXggPSBjdXJyZW50UGFnZVN0YXJ0SW5kZXggKyBldmVudC5wcmV2aW91c0luZGV4O1xyXG4gICAgICBjb25zdCBnbG9iYWxDdXJyZW50SW5kZXggPSBjdXJyZW50UGFnZVN0YXJ0SW5kZXggKyBldmVudC5jdXJyZW50SW5kZXg7XHJcbiAgICAgIFxyXG4gICAgICBpZiAodGhpcy5jb25maWcubGF6eSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlRGF0YUFycmF5ID0gWy4uLnRoaXMuY3VycmVudFBhZ2VEYXRhKCldO1xyXG4gICAgICAgIG1vdmVJdGVtSW5BcnJheShjdXJyZW50UGFnZURhdGFBcnJheSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2Uuc3BsaWNlKGN1cnJlbnRQYWdlU3RhcnRJbmRleCwgdGhpcy5yb3dzKCksIC4uLmN1cnJlbnRQYWdlRGF0YUFycmF5KTtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmN1cnJEYXRhU291cmNlID0gWy4uLnRoaXMuZGF0YVNvdXJjZV07XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlU2lnbmFsLnNldChbLi4udGhpcy5kYXRhU291cmNlXSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5vblJvd1Jlb3JkZXIuZW1pdCh7XHJcbiAgICAgICAgICBwcmV2aW91c0luZGV4OiBnbG9iYWxQcmV2aW91c0luZGV4LFxyXG4gICAgICAgICAgY3VycmVudEluZGV4OiBnbG9iYWxDdXJyZW50SW5kZXgsXHJcbiAgICAgICAgICBpdGVtOiBjdXJyZW50UGFnZURhdGFBcnJheVtldmVudC5jdXJyZW50SW5kZXhdLFxyXG4gICAgICAgICAgbmV3T3JkZXI6IFsuLi50aGlzLmRhdGFTb3VyY2VdXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGdsb2JhbFByZXZpb3VzSW5kZXggPj0gdGhpcy5kYXRhU291cmNlLmxlbmd0aCB8fCBnbG9iYWxDdXJyZW50SW5kZXggPj0gdGhpcy5kYXRhU291cmNlLmxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKCfinYwgR2xvYmFsIGluZGljZXMgb3V0c2lkZSBkYXRhU291cmNlIGJvdW5kczonLCB7XHJcbiAgICAgICAgICAgIGdsb2JhbFByZXZpb3VzSW5kZXgsXHJcbiAgICAgICAgICAgIGdsb2JhbEN1cnJlbnRJbmRleCxcclxuICAgICAgICAgICAgZGF0YVNvdXJjZUxlbmd0aDogdGhpcy5kYXRhU291cmNlLmxlbmd0aFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmRhdGFTb3VyY2UsIGdsb2JhbFByZXZpb3VzSW5kZXgsIGdsb2JhbEN1cnJlbnRJbmRleCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5jdXJyRGF0YVNvdXJjZSA9IFsuLi50aGlzLmRhdGFTb3VyY2VdO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZVNpZ25hbC5zZXQoWy4uLnRoaXMuZGF0YVNvdXJjZV0pO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgdGhpcy5vblJvd1Jlb3JkZXIuZW1pdCh7XHJcbiAgICAgICAgICBwcmV2aW91c0luZGV4OiBnbG9iYWxQcmV2aW91c0luZGV4LFxyXG4gICAgICAgICAgY3VycmVudEluZGV4OiBnbG9iYWxDdXJyZW50SW5kZXgsXHJcbiAgICAgICAgICBpdGVtOiB0aGlzLmRhdGFTb3VyY2VbZ2xvYmFsQ3VycmVudEluZGV4XSxcclxuICAgICAgICAgIG5ld09yZGVyOiBbLi4udGhpcy5kYXRhU291cmNlXVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLmNyZWF0ZVRhYmxlQWN0aW9ucygpO1xyXG4gICAgICBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRyYW5zZmVyQXJyYXlJdGVtKFxyXG4gICAgICAgIGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmRhdGEsXHJcbiAgICAgICAgZXZlbnQuY29udGFpbmVyLmRhdGEsXHJcbiAgICAgICAgZXZlbnQucHJldmlvdXNJbmRleCxcclxuICAgICAgICBldmVudC5jdXJyZW50SW5kZXgsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzVmFsaWREcmFnT3BlcmF0aW9uKHByZXZpb3VzSW5kZXg6IG51bWJlciwgY3VycmVudEluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGN1cnJlbnRQYWdlU2l6ZSA9IHRoaXMuY3VycmVudFBhZ2VEYXRhKCkubGVuZ3RoO1xyXG4gICAgY29uc3QgaXNWYWxpZCA9IHByZXZpb3VzSW5kZXggPj0gMCAmJiBwcmV2aW91c0luZGV4IDwgY3VycmVudFBhZ2VTaXplICYmIFxyXG4gICAgICAgICAgICAgICAgICAgY3VycmVudEluZGV4ID49IDAgJiYgY3VycmVudEluZGV4IDwgY3VycmVudFBhZ2VTaXplO1xyXG4gICAgXHJcbiAgICBpZiAoIWlzVmFsaWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKCfimqDvuI8gSW52YWxpZCBkcmFnIG9wZXJhdGlvbjonLCB7XHJcbiAgICAgICAgcHJldmlvdXNJbmRleCxcclxuICAgICAgICBjdXJyZW50SW5kZXgsXHJcbiAgICAgICAgY3VycmVudFBhZ2VTaXplLFxyXG4gICAgICAgIGN1cnJlbnRQYWdlRGF0YUxlbmd0aDogdGhpcy5jdXJyZW50UGFnZURhdGEoKS5sZW5ndGgsXHJcbiAgICAgICAgZGF0YVNvdXJjZUxlbmd0aDogdGhpcy5kYXRhU291cmNlLmxlbmd0aCxcclxuICAgICAgICBmaXJzdDogdGhpcy5maXJzdCgpLFxyXG4gICAgICAgIHJvd3M6IHRoaXMucm93cygpLFxyXG4gICAgICAgIGN1cnJlbnRQYWdlOiBNYXRoLmZsb29yKHRoaXMuZmlyc3QoKSAvIHRoaXMucm93cygpKSArIDFcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiBpc1ZhbGlkO1xyXG4gIH1cclxuXHJcbiAgb25EcmFnU3RhcnRlZChldmVudDogQ2RrRHJhZ1N0YXJ0KTogdm9pZCB7XHJcbiAgICBjb25zdCBkcmFnZ2VkUm93ID0gZXZlbnQuc291cmNlLmVsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MVGFibGVSb3dFbGVtZW50O1xyXG4gICAgXHJcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgXHJcbiAgICBjb25zdCBhcHBseVByZXZpZXdTdHlsZXMgPSAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHByZXZpZXcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2RrLWRyYWctcHJldmlldycpIGFzIEhUTUxUYWJsZVJvd0VsZW1lbnQ7XHJcblxyXG4gICAgICBpZiAocHJldmlldyAmJiBkcmFnZ2VkUm93KSB7XHJcbiAgICAgICAgcHJldmlldy5jbGFzc0xpc3QuYWRkKCdpbml0aWFsaXppbmcnKTtcclxuICAgICAgICBwcmV2aWV3LmNsYXNzTGlzdC5yZW1vdmUoJ3JlYWR5Jyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgcGFyZW50VGFibGUgPSBkcmFnZ2VkUm93LmNsb3Nlc3QoJ3RhYmxlJyk7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxDZWxscyA9IGRyYWdnZWRSb3cucXVlcnlTZWxlY3RvckFsbCgndGQnKTtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCB0YWJsZVJlY3QgPSBwYXJlbnRUYWJsZT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgY29uc3Qgcm93UmVjdCA9IGRyYWdnZWRSb3cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgd2hpbGUgKHByZXZpZXcuZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgcHJldmlldy5yZW1vdmVDaGlsZChwcmV2aWV3LmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBwcmV2aWV3VGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpO1xyXG4gICAgICAgIGNvbnN0IHByZXZpZXdUYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3Rib2R5Jyk7XHJcbiAgICAgICAgY29uc3QgcHJldmlld1JvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcHJldmlld1RhYmxlLnN0eWxlLmNzc1RleHQgPSBgXHJcbiAgICAgICAgICB3aWR0aDogJHt0YWJsZVJlY3Q/LndpZHRoID8gTWF0aC5taW4odGFibGVSZWN0LndpZHRoLCA4MDApIDogJ2F1dG8nfXB4O1xyXG4gICAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcclxuICAgICAgICAgIHRhYmxlLWxheW91dDogZml4ZWQ7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcclxuICAgICAgICBgO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChwYXJlbnRUYWJsZSkge1xyXG4gICAgICAgICAgcHJldmlld1RhYmxlLmNsYXNzTmFtZSA9IHBhcmVudFRhYmxlLmNsYXNzTmFtZTtcclxuICAgICAgICAgIGNvbnN0IGNvbXB1dGVkVGFibGVTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudFRhYmxlKTtcclxuICAgICAgICAgIHByZXZpZXdUYWJsZS5zdHlsZS5mb250RmFtaWx5ID0gY29tcHV0ZWRUYWJsZVN0eWxlLmZvbnRGYW1pbHk7XHJcbiAgICAgICAgICBwcmV2aWV3VGFibGUuc3R5bGUuZm9udFNpemUgPSBjb21wdXRlZFRhYmxlU3R5bGUuZm9udFNpemU7XHJcbiAgICAgICAgICBwcmV2aWV3VGFibGUuc3R5bGUubGluZUhlaWdodCA9IGNvbXB1dGVkVGFibGVTdHlsZS5saW5lSGVpZ2h0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBwcmV2aWV3Um93LmNsYXNzTmFtZSA9IGRyYWdnZWRSb3cuY2xhc3NOYW1lO1xyXG4gICAgICAgIHByZXZpZXdSb3cuc3R5bGUuaGVpZ2h0ID0gYCR7cm93UmVjdC5oZWlnaHR9cHhgO1xyXG4gICAgICAgIFxyXG4gICAgICAgIG9yaWdpbmFsQ2VsbHMuZm9yRWFjaCgob3JpZ2luYWxDZWxsLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcHJldmlld0NlbGwgPSBvcmlnaW5hbENlbGwuY2xvbmVOb2RlKHRydWUpIGFzIEhUTUxUYWJsZUNlbGxFbGVtZW50O1xyXG4gICAgICAgICAgY29uc3QgY2VsbFJlY3QgPSBvcmlnaW5hbENlbGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHByZXZpZXdDZWxsLnN0eWxlLmNzc1RleHQgPSBgXHJcbiAgICAgICAgICAgIHdpZHRoOiAke2NlbGxSZWN0LndpZHRofXB4O1xyXG4gICAgICAgICAgICBtaW4td2lkdGg6ICR7Y2VsbFJlY3Qud2lkdGh9cHg7XHJcbiAgICAgICAgICAgIG1heC13aWR0aDogJHtjZWxsUmVjdC53aWR0aH1weDtcclxuICAgICAgICAgICAgaGVpZ2h0OiAke2NlbGxSZWN0LmhlaWdodH1weDtcclxuICAgICAgICAgICAgcGFkZGluZzogJHt3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvcmlnaW5hbENlbGwpLnBhZGRpbmd9O1xyXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiAke3dpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG9yaWdpbmFsQ2VsbCkudGV4dEFsaWdufTtcclxuICAgICAgICAgICAgdmVydGljYWwtYWxpZ246ICR7d2luZG93LmdldENvbXB1dGVkU3R5bGUob3JpZ2luYWxDZWxsKS52ZXJ0aWNhbEFsaWdufTtcclxuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcclxuICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XHJcbiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xyXG4gICAgICAgICAgYDtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgcHJldmlld1Jvdy5hcHBlbmRDaGlsZChwcmV2aWV3Q2VsbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcHJldmlld1Rib2R5LmFwcGVuZENoaWxkKHByZXZpZXdSb3cpO1xyXG4gICAgICAgIHByZXZpZXdUYWJsZS5hcHBlbmRDaGlsZChwcmV2aWV3VGJvZHkpO1xyXG4gICAgICAgIHByZXZpZXcuYXBwZW5kQ2hpbGQocHJldmlld1RhYmxlKTtcclxuICAgICAgICBcclxuICAgICAgICBwcmV2aWV3LnN0eWxlLmNzc1RleHQgPSBgXHJcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgIGJhY2tncm91bmQ6IHdoaXRlO1xyXG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSh2YXIoLS1rdi1jb2xvci1zeXN0ZW0pLCAwLjIpO1xyXG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xyXG4gICAgICAgICAgYm94LXNoYWRvdzogMCA4cHggMjVweCByZ2JhKDAsIDAsIDAsIDAuMTUpLCAwIDRweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcclxuICAgICAgICAgIHotaW5kZXg6IDEwMDA7XHJcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICAgICAgd2lkdGg6ICR7dGFibGVSZWN0Py53aWR0aCA/IE1hdGgubWluKHRhYmxlUmVjdC53aWR0aCwgODAwKSA6ICdhdXRvJ31weDtcclxuICAgICAgICAgIG1heC13aWR0aDogOTB2dztcclxuICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xyXG4gICAgICAgIGA7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAocHJldmlldykge1xyXG4gICAgICAgICAgICBwcmV2aWV3LmNsYXNzTGlzdC5yZW1vdmUoJ2luaXRpYWxpemluZycpO1xyXG4gICAgICAgICAgICBwcmV2aWV3LmNsYXNzTGlzdC5hZGQoJ3JlYWR5Jyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgNTApO1xyXG4gICAgICAgIFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhcHBseVByZXZpZXdTdHlsZXMpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYXBwbHlQcmV2aWV3U3R5bGVzKTtcclxuICB9XHJcblxyXG4gIG9uRHJhZ0VuZGVkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJrdi10YWJsZS1jb250YWluZXJcIj5cclxuICBAaWYgKGNvbmZpZykge1xyXG4gIDxwLXRhYmxlXHJcbiAgICAjZHRcclxuICAgICN0YWJsZVxyXG4gICAgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXNtXCJcclxuICAgIFt2YWx1ZV09XCJkYXRhU291cmNlXCJcclxuICAgIFsoc2VsZWN0aW9uKV09XCJzZWxlY3RlZEl0ZW1zXCJcclxuICAgIFtyb3dTZWxlY3RhYmxlXT1cImlzUm93U2VsZWN0YWJsZVwiXHJcbiAgICBbY29sdW1uc109XCJjb25maWcuY29sdW1uc1wiXHJcbiAgICBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImdsb2JhbEZpbHRlckZpZWxkc1wiXHJcbiAgICBbcm93c109XCJyb3dzKClcIlxyXG4gICAgW3BhZ2luYXRvcl09XCJwYWdpbmF0b3JcIlxyXG4gICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJyb3dzUGVyUGFnZU9wdGlvbnNcIlxyXG4gICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCJcclxuICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IC0ge2xhc3R9IGRlIHt0b3RhbFJlY29yZHN9XCJcclxuICAgIFtyb3dIb3Zlcl09XCJ0cnVlXCJcclxuICAgIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcclxuICAgIFtsYXp5XT1cImNvbmZpZy5sYXp5XCJcclxuICAgIFtmaXJzdF09XCJmaXJzdCgpXCJcclxuICAgIChvbkxhenlMb2FkKT1cInBhZ2luYXRlKCRldmVudClcIlxyXG4gICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAob25Tb3J0KT1cIm9uU29ydCgkZXZlbnQpXCJcclxuICAgIChvblBhZ2UpPVwib25QYWdlKCRldmVudClcIlxyXG4gICAgcm93R3JvdXBNb2RlPVwicm93c3BhblwiXHJcbiAgICBbZ3JvdXBSb3dzQnldPVwiY29uZmlnLmZpZWxkR3JvdXBcIlxyXG4gICAgW3Nob3dGaXJzdExhc3RJY29uXT1cIndpZHRoUGFnZSgpID4gOTYwID8gdHJ1ZSA6IGZhbHNlXCJcclxuICAgIFtwYWdlTGlua3NdPVwid2lkdGhQYWdlKCkgPiA5NjAgPyAyIDogMVwiXHJcbiAgICBbcmVzcG9uc2l2ZV09XCJ0cnVlXCJcclxuICAgIFtyZXNwb25zaXZlTGF5b3V0XT1cInJlc3BvbnNpdmVMYXlvdXQgPyAnc3RhY2snIDogJydcIlxyXG4gICAgW3Njcm9sbGFibGVdPVwiaXNUYWJsZVNjcm9sbGFibGVcIlxyXG4gICAgW3Njcm9sbEhlaWdodF09XCJzY3JvbGxIZWlnaHRcIlxyXG4gICAgW3Jvd1RyYWNrQnldPVwicm93VHJhY2tCeVwiXHJcblxyXG4gICAgY2RrRHJvcExpc3RcclxuICAgIFtjZGtEcm9wTGlzdERhdGFdPVwiY3VycmVudFBhZ2VEYXRhKClcIlxyXG4gICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIlxyXG4gICAgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cInZlcnRpY2FsXCJcclxuICA+XHJcbiAgICBAaWYgKGNvbmZpZy5lbmFibGVDYXRpb24pIHtcclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgZmxleC13cmFwIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdyaWQgZm9ybWdyaWQgcC1mbHVpZCBjb2wtMTIgbS0wIG1iLTJcIlxyXG4gICAgICAgIFtzdHlsZS5wYWRkaW5nLnJlbV09XCIwLjFcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBmbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICBAaWYgKGNvbmZpZy50aXRsZSkge1xyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgZm9udC1ib2xkIG15LTNcIj5cclxuICAgICAgICAgICAge3sgY29uZmlnLnRpdGxlIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH0gQGlmIChjb25maWcuc3VidGl0bGUpIHtcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtIG1iLTQgZm9udC1tZWRpdW1cIj5cclxuICAgICAgICAgICAge3sgY29uZmlnLnN1YnRpdGxlIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBtZDpjb2wtNiBsZzpjb2wtNCB7e1xyXG4gICAgICAgICAgICB3aWR0aFBhZ2UoKSA8IDc2OCA/ICdjb2wtMTAnIDogJ2NvbC0xMidcclxuICAgICAgICAgIH19ICBnYXAtMSBwLTBcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIEBpZiAoY29uZmlnLmVuYWJsZUZpbHRlcikge1xyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIHBJbnB1dFRleHRcclxuICAgICAgICAgICAgcEF1dG9Gb2N1c1xyXG4gICAgICAgICAgICBbYXV0b2ZvY3VzXT1cIndpZHRoUGFnZSgpID4gODAwXCJcclxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAoaW5wdXQpPVwib25HbG9iYWxGaWx0ZXIoZHQsICRldmVudClcIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VhcmNoUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAjaW5wdXRGaWVsZFxyXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtc20gY29sLTZcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIH0gQGlmKGZpbHRlckNvbHVtbnNCdG4pIHtcclxuICAgICAgICAgIDxkaXYgI2JvdGFvRmlsdHJvPlxyXG4gICAgICAgICAgICA8a3YtYnV0dG9uXHJcbiAgICAgICAgICAgICAgaWQ9XCJib3Rhb0ZpbHRyb1wiXHJcbiAgICAgICAgICAgICAgW2ljb25dPVwiJ2FsaWduX3ZlcnRpY2FsX3RvcCdcIlxyXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImFicmlyTWVudUZpbHRybygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICBzZXZlcml0eT1cInRlcnRpYXJ5XCJcclxuICAgICAgICAgICAgICBwVG9vbHRpcD1cIk9jdWx0YXIvRXhpYmlyIGNvbHVuYXNcIlxyXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9rdi1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICNtZW51RmlsdHJvRGl2XHJcbiAgICAgICAgICAgIGlkPVwibWVudUZpbHRyb0RpdlwiXHJcbiAgICAgICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cIidoaWRkZW4nXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSB6LTQgYmctZ3JheS0yMDAgbWVudS1jb2x1bW5zLWZpbHRyb1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxwLWNhcmQgc3R5bGVDbGFzcz1cInAtMVwiPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiB0ZXh0LW1lZGl1bSB3LTE1cmVtIHAtMVwiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNGaWx0ZXIoKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgY2hlY2tNZW51RmlsdHJvKGNvbCkgfX1cclxuICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICNmaWx0ZXJDb2x1bW5zXHJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb2wuaGVhZGVyXCJcclxuICAgICAgICAgICAgICAgICAgW2JpbmFyeV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja2JveC1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwiZGluYW1pY0NvbHVtblNldCgkZXZlbnQsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbC5jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZGluYW1pY0Rpc2FibGVDb2x1bW4oY29sKVwiXHJcbiAgICAgICAgICAgICAgICA+PC9wLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3AtY2FyZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgfSBAaWYoZmlsdGVyQnV0dG9uKCkpIHtcclxuICAgICAgICAgIDxwLWJ1dHRvblxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwia3YtYnV0dG9uIHNtYWxsIHRlcnRpYXJ5IHRleHQteHMgZm9udC1tZWRpdW1cIlxyXG4gICAgICAgICAgICBsYWJlbD1cIkZpbHRyYXJcIlxyXG4gICAgICAgICAgICBpY29uPVwicGkgcGktZmlsdGVyXCJcclxuICAgICAgICAgICAgW2JhZGdlXT1cImZpbHRlckJ1dHRvbkJhZGdlKClcIlxyXG4gICAgICAgICAgICBiYWRnZUNsYXNzPVwidGV4dC1ncmF5LTgwMFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC14c1wiXHJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cIm9wLnRvZ2dsZSgkZXZlbnQpXCJcclxuICAgICAgICAgID48L3AtYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIDxwLW92ZXJsYXlQYW5lbCAjb3A+XHJcbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmaWx0cm9dXCI+IDwvbmctY29udGVudD5cclxuICAgICAgICAgIDwvcC1vdmVybGF5UGFuZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGNvbC0yIGp1c3RpZnktY29udGVudC1lbmQgZ2FwLTIgcC0wXCI+XHJcbiAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgY29uZmlnLmFjdGlvbnNMb3RlOyB0cmFjayBpOyBsZXQgaSA9ICRpbmRleCkge1xyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgQGlmICgoKChzZWxlY3RlZEl0ZW1zICYmIHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkgfHwgYWN0aW9uLnNob3dBY29lc0xvdGUpKSAmJlxyXG4gICAgICAgICAgICAoZ2V0T3JFeGVjdXRlKGFjdGlvbi52aXNpYmxlLCBzZWxlY3RlZEl0ZW1zKSA/PyB0cnVlKSkge1xyXG4gICAgICAgICAgICA8a3YtYnV0dG9uXHJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiYWN0aW9uPy5jb21tYW5kKCk7IGFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcclxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiZ2V0T3JFeGVjdXRlKGFjdGlvbi50b29sdGlwLCBzZWxlY3RlZEl0ZW1zKVwiXHJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInbGVmdCdcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnZXRPckV4ZWN1dGUoYWN0aW9uLmRpc2FibGVkLCBzZWxlY3RlZEl0ZW1zKSB8fCBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgW2ljb25dPVwiZ2V0T3JFeGVjdXRlKGFjdGlvbi5pY29uLCBzZWxlY3RlZEl0ZW1zKVwiXHJcbiAgICAgICAgICAgICAgW3NldmVyaXR5XT1cImFjdGlvbi5zZXZlcml0eSB8fCAndGVydGlhcnknXCJcclxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJnZXRPckV4ZWN1dGUoYWN0aW9uLmxhYmVsLCBzZWxlY3RlZEl0ZW1zKSB8fCAnJ1wiXHJcbiAgICAgICAgICAgICAgW2l0ZW1zXT1cImFjdGlvbi5pdGVtcyB8fCBbXVwiXHJcbiAgICAgICAgICAgICAgW3BvcHVwXT1cIihhY3Rpb24uaXRlbXMgJiYgYWN0aW9uLml0ZW1zLmxlbmd0aCA+IDApIHx8IGZhbHNlXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIH1cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHVtbnM+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICBAaWYgKGVuYWJsZURyYWdEcm9wKSB7XHJcbiAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6IDQwcHg7IHRleHQtYWxpZ246IGNlbnRlcjtcIiBjbGFzcz1cImRyYWctaGFuZGxlLWhlYWRlclwiPlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBpZiAoY29uZmlnLmVuYWJsZVNlbGVjdCkge1xyXG4gICAgICAgIDx0aD5cclxuICAgICAgICAgIDxwLXRhYmxlSGVhZGVyQ2hlY2tib3hcclxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2ZUl0ZW1Mb3RlKHNlbGVjdGVkSXRlbXMpXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkSGVhZGVyQ2hlY2tib3hcIlxyXG4gICAgICAgICAgPjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgfSBAZm9yIChjb2wgb2YgY29sdW1uczsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgPHRoXHJcbiAgICAgICAgICBbcFNvcnRhYmxlQ29sdW1uXT1cImNvbC5maWVsZFwiXHJcbiAgICAgICAgICBbcFNvcnRhYmxlQ29sdW1uRGlzYWJsZWRdPVwiY29sLnNvcnRhYmxlID09PSBmYWxzZVwiXHJcbiAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sLndpZHRoXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIge3tcclxuICAgICAgICAgICAgICBjb2w/LmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInXHJcbiAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGRcIj57eyBjb2wuaGVhZGVyIH19PC9zcGFuPlxyXG4gICAgICAgICAgICBAaWYgKGNvbC5zb3J0YWJsZSkge1xyXG4gICAgICAgICAgICA8cC1zb3J0SWNvbiBbZmllbGRdPVwiY29sLmZpZWxkXCIgY2xhc3M9XCJwYi0xXCI+PC9wLXNvcnRJY29uPlxyXG4gICAgICAgICAgICB9IEBpZiAoY29sLmhlYWRlclRvb2x0aXApIHtcclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJjb2wuaGVhZGVyVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgPmluZm88L3NwYW5cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgIH0gQGlmIChjb25maWcuYWN0aW9ucyAmJiBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGVcclxuICAgICAgcFRlbXBsYXRlPVwiYm9keVwiXHJcbiAgICAgIGxldC1yb3dEYXRhXHJcbiAgICAgIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiXHJcbiAgICAgIGxldC1yb3dncm91cD1cInJvd2dyb3VwXCJcclxuICAgICAgbGV0LXJvd3NwYW49XCJyb3dzcGFuXCJcclxuICAgICAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIlxyXG4gICAgPlxyXG4gICAgICA8dHJcclxuICAgICAgICBjZGtEcmFnXHJcbiAgICAgICAgY2RrRHJhZ0xvY2tBeGlzPVwieVwiXHJcbiAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cIm9uRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGNka0RyYWdFbmRlZCk9XCJvbkRyYWdFbmRlZCgpXCJcclxuICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIiFlbmFibGVEcmFnRHJvcCB8fCBkcmFnRHJvcERpc2FibGVkKHJvd0RhdGEpXCJcclxuICAgICAgICBbY2RrRHJhZ0RhdGFdPVwic2VsZWN0ZWRJdGVtc1wiXHJcblxyXG4gICAgICAgIChkYmxjbGljayk9XCJkb3VibGVDbGljaygkZXZlbnQsIHJvd0RhdGEpXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICBjYXBpdGFsaXplOiB0YWJsZUNhcHRhbGl6ZWQsXHJcbiAgICAgICAgICBsYXN0OiByb3dJbmRleCA9PT0gZGF0YVNvdXJjZS5sZW5ndGggLSAxXHJcbiAgICAgICAgfVwiXHJcbiAgICAgICAgY2xhc3M9XCJ0ci10ZCB7eyBpc0Rpc2FibGVkUm93KHJvd0RhdGEpID8gJ2Rpc2FibGVkLXJvdycgOiAnJyB9fVwiXHJcbiAgICAgID5cclxuXHJcbiAgICAgICAgQGlmIChlbmFibGVEcmFnRHJvcCkge1xyXG4gICAgICAgIDx0ZCBjZGtEcmFnSGFuZGxlPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHRleHQtc21cIj5cclxuICAgICAgICAgICAgZHJhZ19pbmRpY2F0b3JcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgICBAaWYgKGNvbmZpZy5lbmFibGVTZWxlY3QpIHtcclxuICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiA4cHggIWltcG9ydGFudFwiPlxyXG4gICAgICAgICAgICA8cC10YWJsZUNoZWNrYm94XHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInJvd0RhdGFcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkQ2hlY2tib3gocm93RGF0YSlcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmVJdGVtTG90ZShzZWxlY3RlZEl0ZW1zKVwiXHJcbiAgICAgICAgICAgID48L3AtdGFibGVDaGVja2JveD5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICB9IEBmb3IgKGNvbCBvZiBjb2x1bW5zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIEBpZiAocm93Z3JvdXAgJiYgIWNvbC50ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICBbYXR0ci5yb3dzcGFuXT1cInJvd2dyb3VwICYmIGNvbC5ncm91cGVkID8gcm93c3BhbiA6IG51bGxcIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwUm93KHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwie3tcclxuICAgICAgICAgICAgICAgIGNvbC5zdHlsZUNsYXNzXHJcbiAgICAgICAgICAgICAgICAgID8gY29sLnN0eWxlQ2xhc3Mocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgICAgIDogJydcclxuICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNCb29sZWFuRmllbGQocm93RGF0YSwgY29sKTsgZWxzZSBib29sZWFuRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cInJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIEBpZiAoIWlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGQgJiYgIWlzSW1hZ2VGaWVsZChjb2wpICYmXHJcbiAgICAgICAgICAgICAgICAhaXNFbXB0eURhdGFTb3VyY2UoKSkge1xyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlciB7e1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbD8uY2VudHJhbGl6ZSAmJiAnanVzdGlmeS1jb250ZW50LWNlbnRlcidcclxuICAgICAgICAgICAgICAgICAgfX0gdGV4dC14cyB7eyBlbGxpcHNpc1RleHQoKSAmJiAnZWxsaXBzaXMtdGV4dCcgfX1cIlxyXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY29sLnRvb2x0aXAgJiYgY29sLnRvb2x0aXAocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxyXG4gICAgICAgICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGVsbGlwc2lzVGV4dCgpICYmIHJldHVybk1heFdpZHRoKCkoY29sLndpZHRoKVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICBAaWYoY29sLnRhZ0NvbG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29sLnRvb2x0aXBUYWcgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbC50b29sdGlwVGFnKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb2wudGFnQ29sb3Iocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgPjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgfSBAaWYgKGNvbC5pY29uKSB7XHJcbiAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJjb2wuaWNvbiArICcgbXItMidcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgfSBAaWYgKGlzQ2hpcEZpZWxkKGNvbCkgJiYgIWNvbC5pY29uRmllbGQpIHtcclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJldHVybkNsYXNzQ2hpcChyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwicmV0dXJuVG9vbHRpcEljb24ocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXhzXCJcclxuICAgICAgICAgICAgICAgICAgICA+e3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH0gQGlmKGlzRW1wdHlEYXRhU291cmNlKCkgJiYgdGhpcy5pc0xvYWRpbmdTa2VsZXRvbigpKSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgIEBpZighaXNTd2l0Y2hGaWVsZChjb2wpKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgZmxleCB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29sLmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInXHJcbiAgICAgICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbc3R5bGUud2lkdGhdPVwid2lkdGhSYW5kb20oKShjb2wsIHJvd0luZGV4KSArICclJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHAtc2tlbGV0b24gc3R5bGVDbGFzcz1cInctZnVsbFwiPjwvcC1za2VsZXRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzE2LjhweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMjguOHB4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1yYWRpdXMnOiAnMzBweCdcclxuICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIj48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIEBpZiAoaXNJbWFnZUZpZWxkKGNvbCkpIHtcclxuICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1hZ2VcIiBbc3JjXT1cImxvYWRJbWFnZShyb3dEYXRhLCBjb2wpXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgfSBAaWYgKGNvbC5pY29uRmllbGQpIHtcclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtaWNvbnMnOiBjb2wuaW5kSWNvbk1hdGVyaWFsLFxyXG4gICAgICAgICAgICAgICAgICAnbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBtci0yJzogIWNvbC5pbmRJY29uTWF0ZXJpYWxcclxuICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBJY29uKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7IHJldHVybkNsYXNzSWNvbihyb3dEYXRhLCBjb2wpIH19XHJcbiAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNib29sZWFuRmllbGQ+XHJcbiAgICAgICAgICAgICAgICBAaWYgKCFjb2wuaWNvbkZpZWxkICYmICFpc1N3aXRjaEZpZWxkKGNvbCkpIHtcclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0yIGFsaWduLWl0ZW1zLWNlbnRlciB7e1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbD8uY2VudHJhbGl6ZSAmJiAnanVzdGlmeS1jb250ZW50LWNlbnRlcidcclxuICAgICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY29sLnRvb2x0aXAgJiYgY29sLnRvb2x0aXAocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2JvdHRvbSdcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcm93RGF0YVtjb2wuZmllbGRdID8gJ3RleHQtZ3JlZW4tNTAwJyA6ICd0ZXh0LXJlZC01MDAnXHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICA+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB0ZXh0LWxnIGZvbnQtc2VtaWJvbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IHJvd0RhdGFbY29sLmZpZWxkXSA/IFwiY2hlY2tcIiA6IFwiY2xvc2VcIiB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgfSBAaWYgKGlzU3dpdGNoRmllbGQoY29sKSkge1xyXG4gICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblJvd0NsYXNzKHJvd0RhdGEsIGNvbCkgK1xyXG4gICAgICAgICAgICAgICAgICAgICcgZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlcidcclxuICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDI1cHhcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICBAaWYoY29sLnN3aXRjaERpc2FibGUpe1xyXG4gICAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uU3dpdGNoQ2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbC5zd2l0Y2hEaXNhYmxlKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzd2l0Y2hWYWx1ZV09XCJ0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8L2t2LXN3aXRjaD5cclxuICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIDxrdi1zd2l0Y2hcclxuICAgICAgICAgICAgICAgICAgICAob25Td2l0Y2hDaGFuZ2UpPVwib25Td2l0Y2hDaGFuZ2UoJGV2ZW50LCByb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sPy5vbmx5UmVhZEZpZWxkID8/IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzd2l0Y2hWYWx1ZV09XCJ0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8L2t2LXN3aXRjaD5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgfSBAaWYoaXNFbXB0eURhdGFTb3VyY2UoKSAmJiB0aGlzLmlzTG9hZGluZ1NrZWxldG9uKCkpIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgICAgQGlmKCFpc1N3aXRjaEZpZWxkKGNvbCkpIHtcclxuICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIGZsZXgge3tcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbC5jZW50cmFsaXplICYmICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ1xyXG4gICAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoXT1cIndpZHRoUmFuZG9tKCkoY29sLCByb3dJbmRleCkgKyAnJSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIj48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxNi44cHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzI4LjhweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmFkaXVzJzogJzMwcHgnXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cC1za2VsZXRvbiBzdHlsZUNsYXNzPVwidy1mdWxsXCI+PC9wLXNrZWxldG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgfSBAaWYgKCFyb3dncm91cCAmJiAhY29sLmdyb3VwZWQgJiYgIWNvbC50ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICAjdGFibGVDZWxsXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJyb3dUYWJsZSB7e1xyXG4gICAgICAgICAgICAgICAgY29sLnN0eWxlQ2xhc3NcclxuICAgICAgICAgICAgICAgICAgPyBjb2wuc3R5bGVDbGFzcyhyb3dEYXRhLCBjb2wsIHJvd0RhdGFbY29sLmZpZWxkXSlcclxuICAgICAgICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgICAgICAgIH19IFwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cInJldHVyblRvb2x0aXBSb3cocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICBAaWYoIWlzRW1wdHlEYXRhU291cmNlKCkpIHtcclxuXHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzQm9vbGVhbkZpZWxkKHJvd0RhdGEsIGNvbCk7IGVsc2UgYm9vbGVhbkZpZWxkXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuUm93Q2xhc3Mocm93RGF0YSwgY29sKSArXHJcbiAgICAgICAgICAgICAgICAgICcgZmxleCBmbGV4LXJvdyBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXIgJyArXHJcbiAgICAgICAgICAgICAgICAgIChjb2w/LmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInKVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgY29sLnRvb2x0aXAgJiYgY29sLnRvb2x0aXAocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInYm90dG9tJ1wiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoXT1cImVsbGlwc2lzVGV4dCgpICYmIHJldHVybk1heFdpZHRoKCkoY29sLndpZHRoKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgQGlmKGNvbC50YWdDb2xvcikge1xyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRhZ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgICBjb2wudG9vbHRpcFRhZyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbC50b29sdGlwVGFnKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJcclxuICAgICAgICAgICAgICAgICAgICBjb2wudGFnQ29sb3Iocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICA+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgfSBAaWYgKCFpc0NoaXBGaWVsZChjb2wpICYmICFjb2wuaWNvbkZpZWxkICYmICFpc0ltYWdlRmllbGQoY29sKSl7XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQteHMge3sgZWxsaXBzaXNUZXh0KCkgJiYgJ2VsbGlwc2lzLXRleHQnIH19XCI+XHJcbiAgICAgICAgICAgICAgICAgIEBpZiAoY29sLmljb24pIHtcclxuICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cImNvbC5pY29uICsgJyBtci0yJ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB7eyB0cmFuc2Zvcm1WYWx1ZShyb3dEYXRhLCBjb2wpIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICB9IEBpZiAoaXNDaGlwRmllbGQoY29sKSAmJiAhY29sLmljb25GaWVsZCkge1xyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicmV0dXJuQ2xhc3NDaGlwKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQteHNcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgdHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKSB9fTwvc3BhblxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgfSBAaWYgKGlzSW1hZ2VGaWVsZChjb2wpKSB7XHJcbiAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImltYWdlXCIgW3NyY109XCJsb2FkSW1hZ2Uocm93RGF0YSwgY29sKVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIH0gQGlmIChjb2wuaWNvbkZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgJ21hdGVyaWFsLWljb25zJzogY29sLmluZEljb25NYXRlcmlhbCxcclxuICAgICAgICAgICAgICAgICAgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbXItMic6ICFjb2wuaW5kSWNvbk1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJyZXR1cm5Ub29sdGlwSWNvbihyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyByZXR1cm5DbGFzc0ljb24ocm93RGF0YSwgY29sKSB9fVxyXG4gICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYm9vbGVhbkZpZWxkPlxyXG4gICAgICAgICAgICAgICAgQGlmICghY29sLmljb25GaWVsZCAmJiAhaXNTd2l0Y2hGaWVsZChjb2wpKSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXIge3tcclxuICAgICAgICAgICAgICAgICAgICBjb2w/LmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInXHJcbiAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbC50b29sdGlwICYmIGNvbC50b29sdGlwKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxyXG4gICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidib3R0b20nXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbY29sLmZpZWxkXSA/ICd0ZXh0LWdyZWVuLTUwMCcgOiAndGV4dC1yZWQtNTAwJ1xyXG4gICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgdGV4dC1sZyBmb250LXNlbWlib2xkXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyByb3dEYXRhW2NvbC5maWVsZF0gPyBcImNoZWNrXCIgOiBcImNsb3NlXCIgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfSBAaWYgKGlzU3dpdGNoRmllbGQoY29sKSkge1xyXG5cclxuICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5Sb3dDbGFzcyhyb3dEYXRhLCBjb2wpICtcclxuICAgICAgICAgICAgICAgICAgICAnIGZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXInXHJcbiAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAyNXB4XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgQGlmKGNvbC5zd2l0Y2hEaXNhYmxlKXtcclxuICAgICAgICAgICAgICAgICAgPGt2LXN3aXRjaFxyXG4gICAgICAgICAgICAgICAgICAgIChvblN3aXRjaENoYW5nZSk9XCJvblN3aXRjaENoYW5nZSgkZXZlbnQsIHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2wuc3dpdGNoRGlzYWJsZShyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3dpdGNoVmFsdWVdPVwidHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPC9rdi1zd2l0Y2g+XHJcbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICA8a3Ytc3dpdGNoXHJcbiAgICAgICAgICAgICAgICAgICAgKG9uU3dpdGNoQ2hhbmdlKT1cIm9uU3dpdGNoQ2hhbmdlKCRldmVudCwgcm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbD8ub25seVJlYWRGaWVsZCA/PyB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3dpdGNoVmFsdWVdPVwidHJhbnNmb3JtVmFsdWUocm93RGF0YSwgY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPC9rdi1zd2l0Y2g+XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICBAaWYoaXNFbXB0eURhdGFTb3VyY2UoKSAmJiB0aGlzLmlzTG9hZGluZ1NrZWxldG9uKCkpIHtcclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgICBAaWYoIWlzU3dpdGNoRmllbGQoY29sKSkge1xyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBmbGV4IHt7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sLmNlbnRyYWxpemUgJiYgJ2p1c3RpZnktY29udGVudC1jZW50ZXInXHJcbiAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBbc3R5bGUud2lkdGhdPVwid2lkdGhSYW5kb20oKShjb2wsIHJvd0luZGV4KSArICclJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIHN0eWxlQ2xhc3M9XCJ3LWZ1bGxcIj48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTYuOHB4JyxcclxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMjguOHB4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmFkaXVzJzogJzMwcHgnXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8cC1za2VsZXRvbiBzdHlsZUNsYXNzPVwidy1mdWxsXCI+PC9wLXNrZWxldG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgfSBAaWYgKGNvbC50ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICBjbGFzcz1cInJvd1RhYmxlIHt7XHJcbiAgICAgICAgICAgICAgICBjb2wuc3R5bGVDbGFzc1xyXG4gICAgICAgICAgICAgICAgICA/IGNvbC5zdHlsZUNsYXNzKHJvd0RhdGEsIGNvbCwgcm93RGF0YVtjb2wuZmllbGRdKVxyXG4gICAgICAgICAgICAgICAgICA6ICcnXHJcbiAgICAgICAgICAgICAgfX0gXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIEBpZiAoZ2V0Q3VzdG9tVGVtcGxhdGUoY29sLnRlbXBsYXRlLm5hbWUpKSB7XHJcblxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXIge3tcclxuICAgICAgICAgICAgICAgICAgY29sPy5jZW50cmFsaXplICYmICcganVzdGlmeS1jb250ZW50LWNlbnRlcidcclxuICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgY29sLnRvb2x0aXAgJiYgY29sLnRvb2x0aXAocm93RGF0YSwgY29sLCByb3dEYXRhW2NvbC5maWVsZF0pXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInYm90dG9tJ1wiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgQGlmKGNvbC50YWdDb2xvcikge1xyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRhZ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJjb2wudG9vbHRpcFRhZyAmJiBjb2wudG9vbHRpcFRhZyhyb3dEYXRhLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiY29sLnRhZ0NvbG9yKHJvd0RhdGEsIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfSBAaWYoIWlzRW1wdHlEYXRhU291cmNlKCkpIHtcclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJnZXRDdXN0b21UZW1wbGF0ZShjb2wudGVtcGxhdGUubmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcm93RGF0YSB9XCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICBAaWYoaXNFbXB0eURhdGFTb3VyY2UoKSAmJiB0aGlzLmlzTG9hZGluZ1NrZWxldG9uKCkpIHtcclxuICAgICAgICAgICAgICA8cC1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIndpZHRoUmFuZG9tKCkoY29sLCByb3dJbmRleCkgKyAnJSdcIlxyXG4gICAgICAgICAgICAgID48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgICAgICAgfSB9XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgfSBAaWYgKGNvbmZpZy5hY3Rpb25zICYmIGNvbmZpZy5hY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1jb250ZW50LWVuZCB3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGN1cnNvci1wb2ludGVyIGljb24tbW9yZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibWVudS50b2dnbGUoJGV2ZW50KTsgYWN0aXZlSXRlbShyb3dEYXRhKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBtb3JlX3ZlcnQgLS0+XHJcbiAgICAgICAgICAgICAgICBtb3JlX2hvcml6XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICA8cC10aWVyZWRNZW51XHJcbiAgICAgICAgICAgICAgICAjbWVudVxyXG4gICAgICAgICAgICAgICAgW3BvcHVwXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW21vZGVsXT1cInRhYmxlQWN0aW9uc1tyb3dJbmRleCAtIGFjdGlvbnNPZmZzZXRdXCJcclxuICAgICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtIHBUZW1wbGF0ZT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJpdGVtLnRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9wLXRpZXJlZE1lbnU+XHJcbiAgICAgICAgICAgICAgPCEtLSA8c3BhbiBwVG9vbHRpcD1cInt7IHRhYmxlQWN0aW9uc1tyb3dJbmRleCAtIGFjdGlvbnNPZmZzZXRdWzBdPy50b29sdGlwIH19XCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+YTwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCIgbGV0LWNvbHVtbnM+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGRcclxuICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5sZW5ndGggKyAoZW5hYmxlRHJhZ0Ryb3AgPyAxIDogMCkgKyAoY29uZmlnLmVuYWJsZVNlbGVjdCA/IDEgOiAwKSArIChjb25maWcuYWN0aW9ucyAmJiBjb25maWcuYWN0aW9ucy5sZW5ndGggPiAwID8gMSA6IDApXCJcclxuICAgICAgICAgIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyBib3JkZXItcmFkaXVzOiAxMHB4ICFpbXBvcnRhbnRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1tZWRpdW0gbS0wIHRleHQteHNcIj5OZW5odW0gcmVnaXN0cm8gZW5jb250cmFkbzwvcD5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtdGFibGU+XHJcbiAgfVxyXG48L2Rpdj5cclxuXHJcbjxsaW5rXHJcbiAgcmVsPVwic3R5bGVzaGVldFwiXHJcbiAgaHJlZj1cImh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vaWNvbj9mYW1pbHk9TWF0ZXJpYWwrSWNvbnNcIlxyXG4vPlxyXG5cclxuPGxpbmtcclxuICByZWw9XCJzdHlsZXNoZWV0XCJcclxuICBocmVmPVwiaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1NYXRlcmlhbCtTeW1ib2xzK091dGxpbmVkOm9wc3osd2dodCxGSUxMLEdSQURANDgsNDAwLDAsMFwiXHJcbi8+XHJcbiJdfQ==