ngx-vector-components 4.135.0 → 4.136.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## [4.136.0] (06/01/2024)
4
+
5
+ ### Feature
6
+
7
+ - Added `firstLazyLoad` in `data-table.component.ts`
8
+
3
9
  ## [4.135.0] (05/01/2024)
4
10
 
5
11
  ### Feature
@@ -46,12 +46,13 @@ export class DataTableComponent {
46
46
  this.onFilterChanged = new EventEmitter();
47
47
  this.onTabSelected = new EventEmitter();
48
48
  this.onExpandRow = new EventEmitter();
49
+ this.firstLazyLoad = false;
49
50
  this.selectedItems = [];
50
51
  this._selectionMode = null;
51
52
  this._height = 'small';
52
53
  this._tabs = [];
53
54
  this._draw = 1;
54
- this._firstLazyLoadedDone = false;
55
+ this._firstLazyLoadedDone = this.firstLazyLoad;
55
56
  this._filterSubscription = new Subscription();
56
57
  }
57
58
  set data(_data) {
@@ -171,7 +172,7 @@ export class DataTableComponent {
171
172
  };
172
173
  }
173
174
  }
174
- if (this._firstLazyLoadedDone) {
175
+ if (this._firstLazyLoadedDone || this.firstLazyLoad) {
175
176
  this.onLazyLoad.emit(this._lastLazyLoadEvent);
176
177
  }
177
178
  this._firstLazyLoadedDone = true;
@@ -315,7 +316,7 @@ export class DataTableComponent {
315
316
  }
316
317
  }
317
318
  DataTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: DataTableComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
318
- DataTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: DataTableComponent, selector: "vector-data-table", inputs: { columns: "columns", data: "data", exportExcel: "exportExcel", exportPDF: "exportPDF", customFunction: "customFunction", totalRecords: "totalRecords", disabledHeadercheckbox: "disabledHeadercheckbox", filters: "filters", addItemLabel: "addItemLabel", pagination: "pagination", virtualPagination: "virtualPagination", tabs: "tabs", customButtons: "customButtons", addItemButtonPlusSign: "addItemButtonPlusSign", hasActions: "hasActions", hasExpandableIcon: "hasExpandableIcon", addNameColumnExpand: "addNameColumnExpand", expandable: "expandable", expansionTemplate: "expansionTemplate", selectionMode: "selectionMode", selectionType: "selectionType", height: "height" }, outputs: { onLazyLoad: "onLazyLoad", onFilter: "onFilter", onAdd: "onAdd", onExportExcel: "onExportExcel", onExportPDF: "onExportPDF", onSelectedRows: "onSelectedRows", onFilterChanged: "onFilterChanged", onTabSelected: "onTabSelected", onExpandRow: "onExpandRow" }, viewQueries: [{ propertyName: "filtersComponent", first: true, predicate: FiltersComponent, descendants: true, static: true }], ngImport: i0, template: "<div class=\"grid\">\r\n <div class=\"col-12\">\r\n <vector-filters\r\n [fields]=\"filters\"\r\n (onSearch)=\"lazyLoaded({ filter: true, data: $event })\"\r\n (formBuilded)=\"subscribeToFilterChanges()\"\r\n ></vector-filters>\r\n </div>\r\n <div class=\"table-header-actions field\" *ngIf=\"addItemLabel || exportExcel || exportPDF || customFunction\">\r\n <button *ngIf=\"exportExcel\" (click)=\"onExportExcel.emit()\" class=\"export-button export-excel\">\r\n <i class=\"fas fa-file-excel\"></i><span>Excel</span>\r\n </button>\r\n <button *ngIf=\"exportPDF\" (click)=\"onExportPDF.emit()\" class=\"export-button export-pdf\">\r\n <i class=\"fas fa-file-pdf\"></i><span>PDF</span>\r\n </button>\r\n <button\r\n *ngFor=\"let button of customFunction\"\r\n (click)=\"button.clickFunction()\"\r\n class=\"export-button custom-function\"\r\n >\r\n <i *ngIf=\"button?.icon\" class=\"{{ button?.icon }}\"></i><span>{{ button?.label }}</span>\r\n </button>\r\n\r\n <vector-button\r\n *ngFor=\"let button of customButtons\"\r\n class=\"add-item-button\"\r\n [label]=\"button.label\"\r\n (click)=\"button.clickFunction()\"\r\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\r\n ></vector-button>\r\n <vector-button\r\n *ngIf=\"addItemLabel\"\r\n class=\"add-item-button\"\r\n [label]=\"addItemLabel\"\r\n (click)=\"onAdd.emit()\"\r\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\r\n ></vector-button>\r\n </div>\r\n <div class=\"col-12\">\r\n <vector-panel class=\"data-table-panel\">\r\n <p-tabView (onChange)=\"onTabChange($event)\" *ngIf=\"tabs?.length\">\r\n <p-tabPanel *ngFor=\"let tab of tabs\">\r\n <ng-template pTemplate=\"header\">\r\n <em *ngIf=\"tab.icon\" [class]=\"tab.icon\">&nbsp;</em>\r\n <span>{{ tab.name }}</span>\r\n </ng-template>\r\n </p-tabPanel>\r\n </p-tabView>\r\n <p-table\r\n currentPageReportTemplate=\"Mostrando {first} at\u00E9 {last} de {totalRecords} registros\"\r\n sortMode=\"single\"\r\n [rows]=\"10\"\r\n [lazy]=\"pagination && !virtualPagination\"\r\n [value]=\"data\"\r\n [paginator]=\"pagination\"\r\n [totalRecords]=\"totalRecords\"\r\n [showCurrentPageReport]=\"true\"\r\n [rowsPerPageOptions]=\"[10, 25, 50, 100]\"\r\n [responsive]=\"true\"\r\n [resizableColumns]=\"true\"\r\n [scrollable]=\"true\"\r\n scrollDirection=\"vertical\"\r\n responsiveLayout=\"scroll\"\r\n dataKey=\"id\"\r\n [scrollHeight]=\"height\"\r\n [attr.selectionMode]=\"selectionMode\"\r\n [(selection)]=\"selectedItems\"\r\n (onRowSelect)=\"changeSelectedItems($event)\"\r\n (onHeaderCheckboxToggle)=\"changeSelectedItems($event)\"\r\n (onRowUnselect)=\"changeSelectedItems($event)\"\r\n (onLazyLoad)=\"lazyLoaded({ filter: false, data: $event })\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <tr class=\"header\">\r\n <th style=\"max-width: 3rem\" *ngIf=\"selectionType === 'checkbox'\">\r\n <p-tableHeaderCheckbox [disabled]=\"disabledHeadercheckbox\"></p-tableHeaderCheckbox>\r\n </th>\r\n <th style=\"max-width: 150px\" class=\"centered text-center\" *ngIf=\"hasExpandableIcon\">\r\n {{ addNameColumnExpand }}\r\n </th>\r\n <th style=\"max-width: 100px\" class=\"centered\" *ngIf=\"hasActions\">{{ 'app.label.actions' | translate }}</th>\r\n <th\r\n *ngFor=\"let col of columns\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n [pSortableColumn]=\"col.notSortable ? '' : col.field\"\r\n >\r\n {{ col.header }} <p-sortIcon *ngIf=\"!col.notSortable\" [field]=\"col.field\"></p-sortIcon>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-item let-expanded=\"expanded\">\r\n <tr\r\n class=\"row\"\r\n [pSelectableRow]=\"rowData\"\r\n [ngClass]=\"{ expandable: expandable }\"\r\n [pRowToggler]=\"expandable ? item : undefined\"\r\n (click)=\"onRowClick(item)\"\r\n >\r\n <ng-container *ngIf=\"selectionType === 'checkbox'\">\r\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"flex justify-content-center align-items-center\">\r\n <p-tableCheckbox [value]=\"item\" [disabled]=\"item.disabledCheckBox\"></p-tableCheckbox>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectionType === 'radiobutton'\">\r\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"flex justify-content-center align-items-center\">\r\n <p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\r\n </td>\r\n </ng-container>\r\n <td *ngIf=\"hasExpandableIcon\" style=\"max-width: 150px\" class=\"centered\">\r\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\r\n <i\r\n [ngClass]=\"\r\n expanded ? 'actions-menu-button pi pi-chevron-down' : 'actions-menu-button pi pi-chevron-right'\r\n \"\r\n ></i>\r\n </td>\r\n <td *ngIf=\"hasActions\" style=\"max-width: 100px\" class=\"centered\">\r\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\r\n <i class=\"actions-menu-button fas fa-cog\" (click)=\"menu.toggle($event)\"></i>\r\n </td>\r\n <ng-container *ngFor=\"let col of columns\">\r\n <td\r\n *ngIf=\"isHtmlCell(col)\"\r\n class=\"cell\"\r\n [innerHTML]=\"getCellContent(item, col)\"\r\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n ></td>\r\n <td\r\n *ngIf=\"(!isHtmlCell(col) && !!col.getStatus) || isScoreCell(col)\"\r\n class=\"cell\"\r\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n >\r\n <vector-badge\r\n *ngIf=\"isBadgeCell(col)\"\r\n [label]=\"getCellText(item, col)\"\r\n [type]=\"col.getStatus && col.getStatus(item[col.field])\"\r\n [tooltip]=\"getTooltipText(item, col)\"\r\n ></vector-badge>\r\n <vector-score *ngIf=\"isScoreCell(col)\" [score]=\"item[col.field]\"></vector-score>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"row\">\r\n <td class=\"no-results\" [attr.colspan]=\"columns.length + 1\">Nenhum resultado encontrado</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatorright\"> </ng-template>\r\n <ng-template let-item pTemplate=\"paginatordropdownitem\"> {{ item.value }} </ng-template>\r\n <ng-template pTemplate=\"rowexpansion\" let-item>\r\n <tr>\r\n <td [attr.colspan]=\"columns.length + (hasActions ? 1 : 0)\">\r\n <ng-container *ngTemplateOutlet=\"expansionTemplate; context: { item }\"> </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </vector-panel>\r\n </div>\r\n</div>\r\n", styles: [".no-results{padding:15px;background-color:#fff;width:100%}.centered{display:flex;justify-content:center}.table-header-actions{display:flex;justify-content:flex-end;align-items:flex-end;width:100%;padding-right:7px;margin-bottom:15px!important}@media (min-width: 768px){.table-header-actions{margin-top:-3px}}.table-header-actions .export-button{padding:7px 10px;color:#fff;display:flex;align-items:center;border:none;border-radius:5px;margin:5px;font-size:.75rem;cursor:pointer}.table-header-actions .export-button.export-excel{background-color:var(--success-color)}.table-header-actions .export-button.export-excel:hover{background-color:var(--success-color-dark)}.table-header-actions .export-button.export-pdf{background-color:var(--error-color)}.table-header-actions .export-button.export-pdf:hover{background-color:var(--error-color-dark)}.table-header-actions .export-button.custom-function{background-color:var(--theme-primary)}.table-header-actions .export-button.custom-function:hover{background-color:var(--theme-medium)}.table-header-actions .export-button i{color:#fff}.table-header-actions .export-button span{margin-left:5px}.table-header-actions .add-item-button{margin-left:10px}.actions-menu-button{font-size:23px;cursor:pointer;color:var(--theme-medium)}.expandable{cursor:pointer}\n"], components: [{ type: i1.FiltersComponent, selector: "vector-filters", inputs: ["fields"], outputs: ["onSearch", "formBuilded"] }, { type: i2.ButtonComponent, selector: "vector-button", inputs: ["disabled", "label", "type", "leftIcon", "rightIcon", "noShadow", "style"], outputs: ["onClick"] }, { type: i3.PanelComponent, selector: "vector-panel" }, { type: i4.TabView, selector: "p-tabView", inputs: ["orientation", "style", "styleClass", "controlClose", "scrollable", "activeIndex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { type: i4.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { type: i5.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "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", "virtualScrollDelay", "virtualRowHeight", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "minBufferPx", "maxBufferPx", "responsiveLayout", "breakpoint", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { type: i5.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { type: i5.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { type: i5.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { type: i5.TableRadioButton, selector: "p-tableRadioButton", inputs: ["disabled", "value", "index", "inputId", "name", "ariaLabel"] }, { type: i6.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { type: i7.BadgeComponent, selector: "vector-badge", inputs: ["type", "label", "customColor", "customBackgroundColor", "tooltip"] }, { type: i8.ScoreComponent, selector: "vector-score", inputs: ["score"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { type: i5.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.RowToggler, selector: "[pRowToggler]", inputs: ["pRowToggler", "pRowTogglerDisabled"] }, { type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "translate": i11.TranslatePipe } });
319
+ DataTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: DataTableComponent, selector: "vector-data-table", inputs: { columns: "columns", data: "data", exportExcel: "exportExcel", exportPDF: "exportPDF", customFunction: "customFunction", totalRecords: "totalRecords", disabledHeadercheckbox: "disabledHeadercheckbox", filters: "filters", addItemLabel: "addItemLabel", pagination: "pagination", virtualPagination: "virtualPagination", tabs: "tabs", customButtons: "customButtons", addItemButtonPlusSign: "addItemButtonPlusSign", hasActions: "hasActions", hasExpandableIcon: "hasExpandableIcon", addNameColumnExpand: "addNameColumnExpand", expandable: "expandable", expansionTemplate: "expansionTemplate", selectionMode: "selectionMode", selectionType: "selectionType", height: "height", firstLazyLoad: "firstLazyLoad" }, outputs: { onLazyLoad: "onLazyLoad", onFilter: "onFilter", onAdd: "onAdd", onExportExcel: "onExportExcel", onExportPDF: "onExportPDF", onSelectedRows: "onSelectedRows", onFilterChanged: "onFilterChanged", onTabSelected: "onTabSelected", onExpandRow: "onExpandRow" }, viewQueries: [{ propertyName: "filtersComponent", first: true, predicate: FiltersComponent, descendants: true, static: true }], ngImport: i0, template: "<div class=\"grid\">\r\n <div class=\"col-12\">\r\n <vector-filters\r\n [fields]=\"filters\"\r\n (onSearch)=\"lazyLoaded({ filter: true, data: $event })\"\r\n (formBuilded)=\"subscribeToFilterChanges()\"\r\n ></vector-filters>\r\n </div>\r\n <div class=\"table-header-actions field\" *ngIf=\"addItemLabel || exportExcel || exportPDF || customFunction\">\r\n <button *ngIf=\"exportExcel\" (click)=\"onExportExcel.emit()\" class=\"export-button export-excel\">\r\n <i class=\"fas fa-file-excel\"></i><span>Excel</span>\r\n </button>\r\n <button *ngIf=\"exportPDF\" (click)=\"onExportPDF.emit()\" class=\"export-button export-pdf\">\r\n <i class=\"fas fa-file-pdf\"></i><span>PDF</span>\r\n </button>\r\n <button\r\n *ngFor=\"let button of customFunction\"\r\n (click)=\"button.clickFunction()\"\r\n class=\"export-button custom-function\"\r\n >\r\n <i *ngIf=\"button?.icon\" class=\"{{ button?.icon }}\"></i><span>{{ button?.label }}</span>\r\n </button>\r\n\r\n <vector-button\r\n *ngFor=\"let button of customButtons\"\r\n class=\"add-item-button\"\r\n [label]=\"button.label\"\r\n (click)=\"button.clickFunction()\"\r\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\r\n ></vector-button>\r\n <vector-button\r\n *ngIf=\"addItemLabel\"\r\n class=\"add-item-button\"\r\n [label]=\"addItemLabel\"\r\n (click)=\"onAdd.emit()\"\r\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\r\n ></vector-button>\r\n </div>\r\n <div class=\"col-12\">\r\n <vector-panel class=\"data-table-panel\">\r\n <p-tabView (onChange)=\"onTabChange($event)\" *ngIf=\"tabs?.length\">\r\n <p-tabPanel *ngFor=\"let tab of tabs\">\r\n <ng-template pTemplate=\"header\">\r\n <em *ngIf=\"tab.icon\" [class]=\"tab.icon\">&nbsp;</em>\r\n <span>{{ tab.name }}</span>\r\n </ng-template>\r\n </p-tabPanel>\r\n </p-tabView>\r\n <p-table\r\n currentPageReportTemplate=\"Mostrando {first} at\u00E9 {last} de {totalRecords} registros\"\r\n sortMode=\"single\"\r\n [rows]=\"10\"\r\n [lazy]=\"pagination && !virtualPagination\"\r\n [value]=\"data\"\r\n [paginator]=\"pagination\"\r\n [totalRecords]=\"totalRecords\"\r\n [showCurrentPageReport]=\"true\"\r\n [rowsPerPageOptions]=\"[10, 25, 50, 100]\"\r\n [responsive]=\"true\"\r\n [resizableColumns]=\"true\"\r\n [scrollable]=\"true\"\r\n scrollDirection=\"vertical\"\r\n responsiveLayout=\"scroll\"\r\n dataKey=\"id\"\r\n [scrollHeight]=\"height\"\r\n [attr.selectionMode]=\"selectionMode\"\r\n [(selection)]=\"selectedItems\"\r\n (onRowSelect)=\"changeSelectedItems($event)\"\r\n (onHeaderCheckboxToggle)=\"changeSelectedItems($event)\"\r\n (onRowUnselect)=\"changeSelectedItems($event)\"\r\n (onLazyLoad)=\"lazyLoaded({ filter: false, data: $event })\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <tr class=\"header\">\r\n <th style=\"max-width: 3rem\" *ngIf=\"selectionType === 'checkbox'\">\r\n <p-tableHeaderCheckbox [disabled]=\"disabledHeadercheckbox\"></p-tableHeaderCheckbox>\r\n </th>\r\n <th style=\"max-width: 150px\" class=\"centered text-center\" *ngIf=\"hasExpandableIcon\">\r\n {{ addNameColumnExpand }}\r\n </th>\r\n <th style=\"max-width: 100px\" class=\"centered\" *ngIf=\"hasActions\">{{ 'app.label.actions' | translate }}</th>\r\n <th\r\n *ngFor=\"let col of columns\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n [pSortableColumn]=\"col.notSortable ? '' : col.field\"\r\n >\r\n {{ col.header }} <p-sortIcon *ngIf=\"!col.notSortable\" [field]=\"col.field\"></p-sortIcon>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-item let-expanded=\"expanded\">\r\n <tr\r\n class=\"row\"\r\n [pSelectableRow]=\"rowData\"\r\n [ngClass]=\"{ expandable: expandable }\"\r\n [pRowToggler]=\"expandable ? item : undefined\"\r\n (click)=\"onRowClick(item)\"\r\n >\r\n <ng-container *ngIf=\"selectionType === 'checkbox'\">\r\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"flex justify-content-center align-items-center\">\r\n <p-tableCheckbox [value]=\"item\" [disabled]=\"item.disabledCheckBox\"></p-tableCheckbox>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectionType === 'radiobutton'\">\r\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"flex justify-content-center align-items-center\">\r\n <p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\r\n </td>\r\n </ng-container>\r\n <td *ngIf=\"hasExpandableIcon\" style=\"max-width: 150px\" class=\"centered\">\r\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\r\n <i\r\n [ngClass]=\"\r\n expanded ? 'actions-menu-button pi pi-chevron-down' : 'actions-menu-button pi pi-chevron-right'\r\n \"\r\n ></i>\r\n </td>\r\n <td *ngIf=\"hasActions\" style=\"max-width: 100px\" class=\"centered\">\r\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\r\n <i class=\"actions-menu-button fas fa-cog\" (click)=\"menu.toggle($event)\"></i>\r\n </td>\r\n <ng-container *ngFor=\"let col of columns\">\r\n <td\r\n *ngIf=\"isHtmlCell(col)\"\r\n class=\"cell\"\r\n [innerHTML]=\"getCellContent(item, col)\"\r\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n ></td>\r\n <td\r\n *ngIf=\"(!isHtmlCell(col) && !!col.getStatus) || isScoreCell(col)\"\r\n class=\"cell\"\r\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n >\r\n <vector-badge\r\n *ngIf=\"isBadgeCell(col)\"\r\n [label]=\"getCellText(item, col)\"\r\n [type]=\"col.getStatus && col.getStatus(item[col.field])\"\r\n [tooltip]=\"getTooltipText(item, col)\"\r\n ></vector-badge>\r\n <vector-score *ngIf=\"isScoreCell(col)\" [score]=\"item[col.field]\"></vector-score>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"row\">\r\n <td class=\"no-results\" [attr.colspan]=\"columns.length + 1\">Nenhum resultado encontrado</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatorright\"> </ng-template>\r\n <ng-template let-item pTemplate=\"paginatordropdownitem\"> {{ item.value }} </ng-template>\r\n <ng-template pTemplate=\"rowexpansion\" let-item>\r\n <tr>\r\n <td [attr.colspan]=\"columns.length + (hasActions ? 1 : 0)\">\r\n <ng-container *ngTemplateOutlet=\"expansionTemplate; context: { item }\"> </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </vector-panel>\r\n </div>\r\n</div>\r\n", styles: [".no-results{padding:15px;background-color:#fff;width:100%}.centered{display:flex;justify-content:center}.table-header-actions{display:flex;justify-content:flex-end;align-items:flex-end;width:100%;padding-right:7px;margin-bottom:15px!important}@media (min-width: 768px){.table-header-actions{margin-top:-3px}}.table-header-actions .export-button{padding:7px 10px;color:#fff;display:flex;align-items:center;border:none;border-radius:5px;margin:5px;font-size:.75rem;cursor:pointer}.table-header-actions .export-button.export-excel{background-color:var(--success-color)}.table-header-actions .export-button.export-excel:hover{background-color:var(--success-color-dark)}.table-header-actions .export-button.export-pdf{background-color:var(--error-color)}.table-header-actions .export-button.export-pdf:hover{background-color:var(--error-color-dark)}.table-header-actions .export-button.custom-function{background-color:var(--theme-primary)}.table-header-actions .export-button.custom-function:hover{background-color:var(--theme-medium)}.table-header-actions .export-button i{color:#fff}.table-header-actions .export-button span{margin-left:5px}.table-header-actions .add-item-button{margin-left:10px}.actions-menu-button{font-size:23px;cursor:pointer;color:var(--theme-medium)}.expandable{cursor:pointer}\n"], components: [{ type: i1.FiltersComponent, selector: "vector-filters", inputs: ["fields"], outputs: ["onSearch", "formBuilded"] }, { type: i2.ButtonComponent, selector: "vector-button", inputs: ["disabled", "label", "type", "leftIcon", "rightIcon", "noShadow", "style"], outputs: ["onClick"] }, { type: i3.PanelComponent, selector: "vector-panel" }, { type: i4.TabView, selector: "p-tabView", inputs: ["orientation", "style", "styleClass", "controlClose", "scrollable", "activeIndex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { type: i4.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { type: i5.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "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", "virtualScrollDelay", "virtualRowHeight", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "minBufferPx", "maxBufferPx", "responsiveLayout", "breakpoint", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { type: i5.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { type: i5.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { type: i5.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { type: i5.TableRadioButton, selector: "p-tableRadioButton", inputs: ["disabled", "value", "index", "inputId", "name", "ariaLabel"] }, { type: i6.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { type: i7.BadgeComponent, selector: "vector-badge", inputs: ["type", "label", "customColor", "customBackgroundColor", "tooltip"] }, { type: i8.ScoreComponent, selector: "vector-score", inputs: ["score"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { type: i5.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.RowToggler, selector: "[pRowToggler]", inputs: ["pRowToggler", "pRowTogglerDisabled"] }, { type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "translate": i11.TranslatePipe } });
319
320
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: DataTableComponent, decorators: [{
320
321
  type: Component,
321
322
  args: [{ selector: 'vector-data-table', template: "<div class=\"grid\">\r\n <div class=\"col-12\">\r\n <vector-filters\r\n [fields]=\"filters\"\r\n (onSearch)=\"lazyLoaded({ filter: true, data: $event })\"\r\n (formBuilded)=\"subscribeToFilterChanges()\"\r\n ></vector-filters>\r\n </div>\r\n <div class=\"table-header-actions field\" *ngIf=\"addItemLabel || exportExcel || exportPDF || customFunction\">\r\n <button *ngIf=\"exportExcel\" (click)=\"onExportExcel.emit()\" class=\"export-button export-excel\">\r\n <i class=\"fas fa-file-excel\"></i><span>Excel</span>\r\n </button>\r\n <button *ngIf=\"exportPDF\" (click)=\"onExportPDF.emit()\" class=\"export-button export-pdf\">\r\n <i class=\"fas fa-file-pdf\"></i><span>PDF</span>\r\n </button>\r\n <button\r\n *ngFor=\"let button of customFunction\"\r\n (click)=\"button.clickFunction()\"\r\n class=\"export-button custom-function\"\r\n >\r\n <i *ngIf=\"button?.icon\" class=\"{{ button?.icon }}\"></i><span>{{ button?.label }}</span>\r\n </button>\r\n\r\n <vector-button\r\n *ngFor=\"let button of customButtons\"\r\n class=\"add-item-button\"\r\n [label]=\"button.label\"\r\n (click)=\"button.clickFunction()\"\r\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\r\n ></vector-button>\r\n <vector-button\r\n *ngIf=\"addItemLabel\"\r\n class=\"add-item-button\"\r\n [label]=\"addItemLabel\"\r\n (click)=\"onAdd.emit()\"\r\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\r\n ></vector-button>\r\n </div>\r\n <div class=\"col-12\">\r\n <vector-panel class=\"data-table-panel\">\r\n <p-tabView (onChange)=\"onTabChange($event)\" *ngIf=\"tabs?.length\">\r\n <p-tabPanel *ngFor=\"let tab of tabs\">\r\n <ng-template pTemplate=\"header\">\r\n <em *ngIf=\"tab.icon\" [class]=\"tab.icon\">&nbsp;</em>\r\n <span>{{ tab.name }}</span>\r\n </ng-template>\r\n </p-tabPanel>\r\n </p-tabView>\r\n <p-table\r\n currentPageReportTemplate=\"Mostrando {first} at\u00E9 {last} de {totalRecords} registros\"\r\n sortMode=\"single\"\r\n [rows]=\"10\"\r\n [lazy]=\"pagination && !virtualPagination\"\r\n [value]=\"data\"\r\n [paginator]=\"pagination\"\r\n [totalRecords]=\"totalRecords\"\r\n [showCurrentPageReport]=\"true\"\r\n [rowsPerPageOptions]=\"[10, 25, 50, 100]\"\r\n [responsive]=\"true\"\r\n [resizableColumns]=\"true\"\r\n [scrollable]=\"true\"\r\n scrollDirection=\"vertical\"\r\n responsiveLayout=\"scroll\"\r\n dataKey=\"id\"\r\n [scrollHeight]=\"height\"\r\n [attr.selectionMode]=\"selectionMode\"\r\n [(selection)]=\"selectedItems\"\r\n (onRowSelect)=\"changeSelectedItems($event)\"\r\n (onHeaderCheckboxToggle)=\"changeSelectedItems($event)\"\r\n (onRowUnselect)=\"changeSelectedItems($event)\"\r\n (onLazyLoad)=\"lazyLoaded({ filter: false, data: $event })\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <tr class=\"header\">\r\n <th style=\"max-width: 3rem\" *ngIf=\"selectionType === 'checkbox'\">\r\n <p-tableHeaderCheckbox [disabled]=\"disabledHeadercheckbox\"></p-tableHeaderCheckbox>\r\n </th>\r\n <th style=\"max-width: 150px\" class=\"centered text-center\" *ngIf=\"hasExpandableIcon\">\r\n {{ addNameColumnExpand }}\r\n </th>\r\n <th style=\"max-width: 100px\" class=\"centered\" *ngIf=\"hasActions\">{{ 'app.label.actions' | translate }}</th>\r\n <th\r\n *ngFor=\"let col of columns\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n [pSortableColumn]=\"col.notSortable ? '' : col.field\"\r\n >\r\n {{ col.header }} <p-sortIcon *ngIf=\"!col.notSortable\" [field]=\"col.field\"></p-sortIcon>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-item let-expanded=\"expanded\">\r\n <tr\r\n class=\"row\"\r\n [pSelectableRow]=\"rowData\"\r\n [ngClass]=\"{ expandable: expandable }\"\r\n [pRowToggler]=\"expandable ? item : undefined\"\r\n (click)=\"onRowClick(item)\"\r\n >\r\n <ng-container *ngIf=\"selectionType === 'checkbox'\">\r\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"flex justify-content-center align-items-center\">\r\n <p-tableCheckbox [value]=\"item\" [disabled]=\"item.disabledCheckBox\"></p-tableCheckbox>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectionType === 'radiobutton'\">\r\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"flex justify-content-center align-items-center\">\r\n <p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\r\n </td>\r\n </ng-container>\r\n <td *ngIf=\"hasExpandableIcon\" style=\"max-width: 150px\" class=\"centered\">\r\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\r\n <i\r\n [ngClass]=\"\r\n expanded ? 'actions-menu-button pi pi-chevron-down' : 'actions-menu-button pi pi-chevron-right'\r\n \"\r\n ></i>\r\n </td>\r\n <td *ngIf=\"hasActions\" style=\"max-width: 100px\" class=\"centered\">\r\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\r\n <i class=\"actions-menu-button fas fa-cog\" (click)=\"menu.toggle($event)\"></i>\r\n </td>\r\n <ng-container *ngFor=\"let col of columns\">\r\n <td\r\n *ngIf=\"isHtmlCell(col)\"\r\n class=\"cell\"\r\n [innerHTML]=\"getCellContent(item, col)\"\r\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n ></td>\r\n <td\r\n *ngIf=\"(!isHtmlCell(col) && !!col.getStatus) || isScoreCell(col)\"\r\n class=\"cell\"\r\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n >\r\n <vector-badge\r\n *ngIf=\"isBadgeCell(col)\"\r\n [label]=\"getCellText(item, col)\"\r\n [type]=\"col.getStatus && col.getStatus(item[col.field])\"\r\n [tooltip]=\"getTooltipText(item, col)\"\r\n ></vector-badge>\r\n <vector-score *ngIf=\"isScoreCell(col)\" [score]=\"item[col.field]\"></vector-score>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"row\">\r\n <td class=\"no-results\" [attr.colspan]=\"columns.length + 1\">Nenhum resultado encontrado</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatorright\"> </ng-template>\r\n <ng-template let-item pTemplate=\"paginatordropdownitem\"> {{ item.value }} </ng-template>\r\n <ng-template pTemplate=\"rowexpansion\" let-item>\r\n <tr>\r\n <td [attr.colspan]=\"columns.length + (hasActions ? 1 : 0)\">\r\n <ng-container *ngTemplateOutlet=\"expansionTemplate; context: { item }\"> </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </vector-panel>\r\n </div>\r\n</div>\r\n", styles: [".no-results{padding:15px;background-color:#fff;width:100%}.centered{display:flex;justify-content:center}.table-header-actions{display:flex;justify-content:flex-end;align-items:flex-end;width:100%;padding-right:7px;margin-bottom:15px!important}@media (min-width: 768px){.table-header-actions{margin-top:-3px}}.table-header-actions .export-button{padding:7px 10px;color:#fff;display:flex;align-items:center;border:none;border-radius:5px;margin:5px;font-size:.75rem;cursor:pointer}.table-header-actions .export-button.export-excel{background-color:var(--success-color)}.table-header-actions .export-button.export-excel:hover{background-color:var(--success-color-dark)}.table-header-actions .export-button.export-pdf{background-color:var(--error-color)}.table-header-actions .export-button.export-pdf:hover{background-color:var(--error-color-dark)}.table-header-actions .export-button.custom-function{background-color:var(--theme-primary)}.table-header-actions .export-button.custom-function:hover{background-color:var(--theme-medium)}.table-header-actions .export-button i{color:#fff}.table-header-actions .export-button span{margin-left:5px}.table-header-actions .add-item-button{margin-left:10px}.actions-menu-button{font-size:23px;cursor:pointer;color:var(--theme-medium)}.expandable{cursor:pointer}\n"] }]
@@ -381,8 +382,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImpor
381
382
  type: Output
382
383
  }], onExpandRow: [{
383
384
  type: Output
385
+ }], firstLazyLoad: [{
386
+ type: Input
384
387
  }], filtersComponent: [{
385
388
  type: ViewChild,
386
389
  args: [FiltersComponent, { static: true }]
387
390
  }] } });
388
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmVjdG9yLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpZWxkcy9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZlY3Rvci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9maWVsZHMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFnQyxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQXVDLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQWUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU83RSxNQUFNLE9BQU8sa0JBQWtCO0lBNkg3QixZQUFtQixFQUFxQjtRQUFyQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQTNIakMsWUFBTyxHQUFrQixFQUFFLENBQUM7UUFTM0IsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUVuQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FB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Uzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRmlsdGVyQ2hhbmdlZEV2ZW50LCBMaXN0SXRlbSwgU3RhdHVzIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRGF0YVRhYmxlTGF6eUxvYWRFdmVudCwgVGFibGVDb2x1bW4sIFRhYmxlQ29sdW1uVHlwZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9kYXRhLXRhYmxlLm1vZGVsJztcclxuaW1wb3J0IHsgTWFza1V0aWwgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEZpbHRlckZpZWxkLCBGaWx0ZXJzQ29tcG9uZW50IH0gZnJvbSAnLi4vZmlsdGVycy9maWx0ZXJzLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3ZlY3Rvci1kYXRhLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGF0YS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGNvbHVtbnM6IFRhYmxlQ29sdW1uW10gPSBbXTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgZGF0YShfZGF0YTogYW55W10pIHtcclxuICAgIHRoaXMuX2RhdGEgPSBfZGF0YTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuX2RhdGE/LmZpbHRlcigoaXRlbSkgPT4gaXRlbS5zZWxlY3RlZCkgfHwgW107XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgZGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gIH1cclxuICBwcml2YXRlIF9kYXRhOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGV4cG9ydEV4Y2VsID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZXhwb3J0UERGID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgY3VzdG9tRnVuY3Rpb246IHsgbGFiZWw6IHN0cmluZzsgaWNvbj86IHN0cmluZzsgY2xpY2tGdW5jdGlvbjogRnVuY3Rpb24gfVtdIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHRvdGFsUmVjb3JkcyA9IDA7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZGlzYWJsZWRIZWFkZXJjaGVja2JveCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGZpbHRlcnM6IEZpbHRlckZpZWxkW10gPSBbXTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhZGRJdGVtTGFiZWwgPSAnJztcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBwYWdpbmF0aW9uID0gdHJ1ZTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyB2aXJ0dWFsUGFnaW5hdGlvbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCB0YWJzKF90YWJzOiBMaXN0SXRlbVtdKSB7XHJcbiAgICB0aGlzLl90YWJzID0gX3RhYnM7XHJcbiAgICB0aGlzLl90YWJTZWxlY3RlZCA9IF90YWJzWzBdO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjdXN0b21CdXR0b25zOiB7IGxhYmVsOiBzdHJpbmc7IGNsaWNrRnVuY3Rpb246IEZ1bmN0aW9uIH1bXSB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhZGRJdGVtQnV0dG9uUGx1c1NpZ24gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBoYXNBY3Rpb25zOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBoYXNFeHBhbmRhYmxlSWNvbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGFkZE5hbWVDb2x1bW5FeHBhbmQgPSAnJztcclxuICBASW5wdXQoKSBleHBhbmRhYmxlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZXhwYW5zaW9uVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbDtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgc2VsZWN0aW9uTW9kZShfc2VsZWN0aW9uTW9kZSkge1xyXG4gICAgc3dpdGNoIChfc2VsZWN0aW9uTW9kZSkge1xyXG4gICAgICBjYXNlICdzaW5nbGUnOlxyXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGUgPSAnc2luZ2xlJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbXVsdGlwbGUnOlxyXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGUgPSAnbXVsdGlwbGUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGUgPSBudWxsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZWxlY3Rpb25UeXBlOiAnY2hlY2tib3gnIHwgJ3JhZGlvYnV0dG9uJyB8IG51bGwgPSBudWxsO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBoZWlnaHQoX2hlaWdodDogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKF9oZWlnaHQpIHtcclxuICAgICAgY2FzZSAnc21hbGwnOlxyXG4gICAgICAgIHRoaXMuX2hlaWdodCA9ICczMDBweCc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ21lZGl1bSc6XHJcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gJzUwMHB4JztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbGFyZ2UnOlxyXG4gICAgICAgIHRoaXMuX2hlaWdodCA9ICc3MDBweCc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Z1bGwnOlxyXG4gICAgICAgIHRoaXMuX2hlaWdodCA9ICdmbGV4JztcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLl9oZWlnaHQgPSAnMzAwcHgnO1xyXG4gICAgfVxyXG4gIH1cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgb25MYXp5TG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVRhYmxlTGF6eUxvYWRFdmVudD4oKTtcclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgb25GaWx0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgb25BZGQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIG9uRXhwb3J0RXhjZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIG9uRXhwb3J0UERGID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBvblNlbGVjdGVkUm93cyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBvbkZpbHRlckNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlckNoYW5nZWRFdmVudD4oKTtcclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgb25UYWJTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TGlzdEl0ZW0+KCk7XHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIG9uRXhwYW5kUm93OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQFZpZXdDaGlsZChGaWx0ZXJzQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHB1YmxpYyBmaWx0ZXJzQ29tcG9uZW50OiBGaWx0ZXJzQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xyXG5cclxuICBwdWJsaWMgc2VsZWN0ZWRJdGVtczogYW55ID0gW107XHJcblxyXG4gIGdldCB0YWJzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RhYnM7XHJcbiAgfVxyXG4gIGdldCBoZWlnaHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faGVpZ2h0O1xyXG4gIH1cclxuICBnZXQgc2VsZWN0aW9uTW9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0aW9uTW9kZTogJ3NpbmdsZScgfCAnbXVsdGlwbGUnIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfaGVpZ2h0OiBzdHJpbmcgPSAnc21hbGwnO1xyXG4gIHByaXZhdGUgX3RhYnM6IExpc3RJdGVtW10gPSBbXTtcclxuICBwcml2YXRlIF9kcmF3ID0gMTtcclxuICBwcml2YXRlIF9maXJzdExhenlMb2FkZWREb25lID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfbGFzdExhenlMb2FkRXZlbnQ6IERhdGFUYWJsZUxhenlMb2FkRXZlbnQgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfdGFiU2VsZWN0ZWQ6IExpc3RJdGVtIHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX2ZpbHRlclN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIGNkOiBDaGFuZ2VEZXRlY3RvclJlZikge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgIHRoaXMuaGVpZ2h0ID0gJ3NtYWxsJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMucGFnaW5hdGlvbiB8fCB0aGlzLnZpcnR1YWxQYWdpbmF0aW9uKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyc0NvbXBvbmVudD8uc2VhcmNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2ZpbHRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sU3R5bGUoY29sOiBUYWJsZUNvbHVtbikge1xyXG4gICAgcmV0dXJuIHsgJ21pbi13aWR0aCc6IGNvbC53aWR0aCB9O1xyXG4gIH1cclxuXHJcbiAgbGF6eUxvYWRlZChwYXJhbXM6IHsgZmlsdGVyOiBib29sZWFuOyBkYXRhOiBhbnkgfSA9IHsgZmlsdGVyOiBmYWxzZSwgZGF0YTogeyBzdGFydDogMCwgcm93czogMTAgfSB9KSB7XHJcbiAgICBpZiAoIXBhcmFtcy5maWx0ZXIpIHtcclxuICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoKGNvbCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBkYXRhOiBjb2wuZmllbGQsXHJcbiAgICAgICAgICBuYW1lOiBgJHtjb2wuZmllbGQuc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCl9JHtjb2wuZmllbGQuc3Vic3RyaW5nKDEsIGNvbC5maWVsZC5sZW5ndGgpfWAsXHJcbiAgICAgICAgICBvcmRlcmFibGU6IHRydWUsXHJcbiAgICAgICAgICBzZWFyY2g6IHsgdmFsdWU6ICcnLCByZWdleDogZmFsc2UgfSxcclxuICAgICAgICAgIHNlYXJjaGFibGU6IHRydWUsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICh0aGlzLmhhc0FjdGlvbnMpIHtcclxuICAgICAgICBjb2x1bW5zLnVuc2hpZnQoe1xyXG4gICAgICAgICAgZGF0YTogJ2FjdGl2ZScsXHJcbiAgICAgICAgICBuYW1lOiAnQWN0aXZlJyxcclxuICAgICAgICAgIG9yZGVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgIHNlYXJjaDogeyB2YWx1ZTogJycsIHJlZ2V4OiBmYWxzZSB9LFxyXG4gICAgICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9sYXN0TGF6eUxvYWRFdmVudCA9IHtcclxuICAgICAgICAuLi4odGhpcy5fbGFzdExhenlMb2FkRXZlbnQgfHwgKHt9IGFzIGFueSkpLFxyXG4gICAgICAgIHBhZ2U6IHBhcmFtcy5kYXRhLmZpcnN0IC8gcGFyYW1zLmRhdGEucm93cyArIDEsXHJcbiAgICAgICAgc3RhcnQ6IHBhcmFtcy5kYXRhLmZpcnN0LFxyXG4gICAgICAgIGxlbmd0aDogcGFyYW1zLmRhdGEucm93cyxcclxuICAgICAgICBkcmF3OiB0aGlzLl9kcmF3KyssXHJcbiAgICAgICAgb3JkZXI6IHBhcmFtcy5kYXRhLnNvcnRGaWVsZFxyXG4gICAgICAgICAgPyBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY29sdW1uOlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbnMuZmluZEluZGV4KChjb2wpID0+IGNvbC5maWVsZCA9PT0gcGFyYW1zLmRhdGEuc29ydEZpZWxkKSArICh0aGlzLmhhc0FjdGlvbnMgPyAxIDogMCksXHJcbiAgICAgICAgICAgICAgICBkaXI6IHBhcmFtcy5kYXRhLnNvcnRPcmRlciA+IDAgPyAnYXNjJyA6ICdkZXNjJyxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgICA6IFt7IGNvbHVtbjogMCwgZGlyOiAnZGVzYycgfV0sXHJcbiAgICAgICAgY29sdW1uczogY29sdW1ucyxcclxuICAgICAgICB0YWI6IHRoaXMuX3RhYlNlbGVjdGVkLFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbGFzdExhenlMb2FkRXZlbnQgPSB7XHJcbiAgICAgICAgLi4udGhpcy5fbGFzdExhenlMb2FkRXZlbnQsXHJcbiAgICAgICAgLi4ucGFyYW1zLmRhdGEsXHJcbiAgICAgICAgc3RhcnQ6IDAsXHJcbiAgICAgIH07XHJcbiAgICAgIGlmICh0aGlzLl90YWJTZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMuX2xhc3RMYXp5TG9hZEV2ZW50ID0ge1xyXG4gICAgICAgICAgLi4uKHRoaXMuX2xhc3RMYXp5TG9hZEV2ZW50IHx8ICh7fSBhcyBhbnkpKSxcclxuICAgICAgICAgIC4uLnsgU3RhdHVzOiB0aGlzLl90YWJTZWxlY3RlZC5jb2RlIH0sXHJcbiAgICAgICAgICB0YWI6IHRoaXMuX3RhYlNlbGVjdGVkLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fZmlyc3RMYXp5TG9hZGVkRG9uZSkge1xyXG4gICAgICB0aGlzLm9uTGF6eUxvYWQuZW1pdCh0aGlzLl9sYXN0TGF6eUxvYWRFdmVudCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9maXJzdExhenlMb2FkZWREb25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGdldENlbGxDb250ZW50KGl0ZW06IGFueSwgY29sOiBUYWJsZUNvbHVtbikge1xyXG4gICAgY29uc3QgY2VsbFRleHQgPSB0aGlzLmdldENlbGxUZXh0KGl0ZW0sIGNvbCk7XHJcbiAgICBsZXQgY29udGVudCA9IGA8c3BhbiBjbGFzcz1cInAtY29sdW1uLXRpdGxlXCI+JHtjb2wuaGVhZGVyfTwvc3Bhbj48c3BhbiBjbGFzcz1cInctMTAwXCI+YDtcclxuICAgIGlmIChcclxuICAgICAgIWNvbC50eXBlIHx8XHJcbiAgICAgIFtUYWJsZUNvbHVtblR5cGUuRU5VTSwgVGFibGVDb2x1bW5UeXBlLlRFWFQsIFRhYmxlQ29sdW1uVHlwZS5EQVRFVElNRSwgVGFibGVDb2x1bW5UeXBlLkRBVEVdLmluY2x1ZGVzKGNvbC50eXBlKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnRlbnQgKz0gY2VsbFRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoIChjb2wudHlwZSkge1xyXG4gICAgICBjYXNlIFRhYmxlQ29sdW1uVHlwZS5DVVNUT01fU1RZTEU6XHJcbiAgICAgICAgY29udGVudCArPSBgPHNwYW4gY2xhc3M9XCIke2NvbC50ZXh0RmllbGRDbGFzcyA/IGl0ZW1bY29sLnRleHRGaWVsZENsYXNzXSA6ICcnfVwiPiR7Y2VsbFRleHR9PC9zcGFuPmA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgVGFibGVDb2x1bW5UeXBlLkJPT0xFQU46XHJcbiAgICAgICAgY29udGVudCArPSBgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyZWRcIj48aSBjbGFzcz1cIiBzdGF0dXMtdGFibGUtZmllbGQgZmFzIGZhLSR7XHJcbiAgICAgICAgICBjZWxsVGV4dCA/ICdjaGVjayBib29sZWFuLXZhbHVlLXBvc2l0aXZlJyA6ICd0aW1lcyBib29sZWFuLXZhbHVlLW5lZ2F0aXZlJ1xyXG4gICAgICAgIH1cIj48L2k+PC9kaXY+YDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBUYWJsZUNvbHVtblR5cGUuU1RBVFVTX0JBREdFOlxyXG4gICAgICAgIGNvbnRlbnQgKz0gYDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlcmVkXCI+PGkgY2xhc3M9XCJmYXMgZmEtY2lyY2xlIHN0YXR1cy10YWJsZS1maWVsZCAke3RoaXMuZ2V0U3RhdHVzQ29sb3IoXHJcbiAgICAgICAgICBjZWxsVGV4dFxyXG4gICAgICAgICl9XCI+PC9pPjwvZGl2PmA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgVGFibGVDb2x1bW5UeXBlLkFDVElWRV9CT09MRUFOX0JBREdFOlxyXG4gICAgICAgIGNvbnRlbnQgKz0gYDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlcmVkXCI+PGkgY2xhc3M9XCJmYXMgZmEtY2lyY2xlIHN0YXR1cy10YWJsZS1maWVsZCAke3RoaXMuZ2V0QWN0aXZlU3RhdHVzQ29sb3IoXHJcbiAgICAgICAgICBjZWxsVGV4dFxyXG4gICAgICAgICl9XCI+PC9pPjwvZGl2PmA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgVGFibGVDb2x1bW5UeXBlLkJVVFRPTjpcclxuICAgICAgICBjb250ZW50ICs9IGA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJlZFwiPjxpIGNsYXNzPVwiZmFzICR7XHJcbiAgICAgICAgICBjb2wuaWNvbiB8fCAnZmEtY2lyY2xlJ1xyXG4gICAgICAgIH0gc3RhdHVzLXRhYmxlLWZpZWxkIHRhYmxlLWJ1dHRvblwiPjwvaT48L2Rpdj5gO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFRhYmxlQ29sdW1uVHlwZS5NQVNLOlxyXG4gICAgICAgIGNvbnRlbnQgKz0gTWFza1V0aWwuZG9NYXNrU3RyaW5nKGNlbGxUZXh0LCBjb2wubWFzayk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgVGFibGVDb2x1bW5UeXBlLkNVUlJFTkNZOlxyXG4gICAgICAgIGNvbnRlbnQgKz0gTnVtYmVyKGNlbGxUZXh0KS50b0xvY2FsZVN0cmluZygncHQtQlInLCB7XHJcbiAgICAgICAgICBjdXJyZW5jeTogY29sLmN1cnJlbmN5VHlwZSB8fCAnQlJMJyxcclxuICAgICAgICAgIGN1cnJlbmN5RGlzcGxheTogJ25hcnJvd1N5bWJvbCcsXHJcbiAgICAgICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb250ZW50ICs9IGA8L3NwYW4+YDtcclxuICAgIHJldHVybiBjb250ZW50O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENlbGxUZXh0KGl0ZW06IGFueSwgY29sOiBUYWJsZUNvbHVtbikge1xyXG4gICAgaWYgKGNvbC5nZXRFbnVtVHJhbnNsYXRlZCkge1xyXG4gICAgICByZXR1cm4gY29sLmdldEVudW1UcmFuc2xhdGVkKGl0ZW1bY29sLmZpZWxkXSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29sLnR5cGUgPT09IFRhYmxlQ29sdW1uVHlwZS5EQVRFVElNRSAmJiBpdGVtW2NvbC5maWVsZF0pIHtcclxuICAgICAgY29uc3QgZGF0ZVRpbWUgPVxyXG4gICAgICAgIGl0ZW1bY29sLmZpZWxkXSBpbnN0YW5jZW9mIERhdGUgPyBEYXRlVGltZS5mcm9tSlNEYXRlKGl0ZW1bY29sLmZpZWxkXSkgOiBEYXRlVGltZS5mcm9tSVNPKGl0ZW1bY29sLmZpZWxkXSk7XHJcbiAgICAgIHJldHVybiBkYXRlVGltZS50b1VUQygpLnRvRm9ybWF0KCdkZC9NTS95eXl5IEhIOm1tJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29sLnR5cGUgPT09IFRhYmxlQ29sdW1uVHlwZS5EQVRFICYmIGl0ZW1bY29sLmZpZWxkXSkge1xyXG4gICAgICBjb25zdCBkYXRlVGltZSA9XHJcbiAgICAgICAgaXRlbVtjb2wuZmllbGRdIGluc3RhbmNlb2YgRGF0ZSA/IERhdGVUaW1lLmZyb21KU0RhdGUoaXRlbVtjb2wuZmllbGRdKSA6IERhdGVUaW1lLmZyb21JU08oaXRlbVtjb2wuZmllbGRdKTtcclxuICAgICAgcmV0dXJuIGRhdGVUaW1lLnRvVVRDKCkudG9Gb3JtYXQoJ2RkL01NL3l5eXknKTtcclxuICAgIH1cclxuICAgIGlmIChjb2wudHlwZSA9PT0gVGFibGVDb2x1bW5UeXBlLlNUQUNLX0JBREdFKSB7XHJcbiAgICAgIGlmICghaXRlbVtjb2wuZmllbGRdLmxlbmd0aCB8fCBpdGVtW2NvbC5maWVsZF0ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1bY29sLmZpZWxkXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYCske2l0ZW1bY29sLmZpZWxkXS5sZW5ndGh9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGNvbC50eXBlID09PSBUYWJsZUNvbHVtblR5cGUuU1RBVFVTX0JBREdFKSB7XHJcbiAgICAgIHJldHVybiBpdGVtW2NvbC5maWVsZF0gPT0gMCA/IDAgOiBpdGVtW2NvbC5maWVsZF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1bY29sLmZpZWxkIHx8ICcnXSB8fCAnJztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRUb29sdGlwVGV4dChpdGVtOiBhbnksIGNvbDogVGFibGVDb2x1bW4pIHtcclxuICAgIGlmIChcclxuICAgICAgIWNvbC50eXBlIHx8XHJcbiAgICAgICFbVGFibGVDb2x1bW5UeXBlLlNUQUNLX0JBREdFXS5pbmNsdWRlcyhjb2wudHlwZSkgfHxcclxuICAgICAgIUFycmF5LmlzQXJyYXkoaXRlbVtjb2wuZmllbGRdKSB8fFxyXG4gICAgICBpdGVtW2NvbC5maWVsZF0ubGVuZ3RoID09PSAxXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGl0ZW1bY29sLmZpZWxkXSkpIHtcclxuICAgICAgcmV0dXJuIGl0ZW1bY29sLmZpZWxkXTtcclxuICAgIH1cclxuICAgIHJldHVybiBpdGVtW2NvbC5maWVsZF0uam9pbignIC0gJyk7XHJcbiAgfVxyXG5cclxuICBvblRhYkNoYW5nZSgkZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5fdGFiU2VsZWN0ZWQgPSB0aGlzLnRhYnNbJGV2ZW50LmluZGV4XTtcclxuICAgIHRoaXMubGF6eUxvYWRlZCh7IGZpbHRlcjogdHJ1ZSwgZGF0YToge30gfSk7XHJcbiAgICB0aGlzLm9uVGFiU2VsZWN0ZWQuZW1pdCh0aGlzLl90YWJTZWxlY3RlZCk7XHJcbiAgfVxyXG5cclxuICBzdWJzY3JpYmVUb0ZpbHRlckNoYW5nZXMoKSB7XHJcbiAgICB0aGlzLl9maWx0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuX2ZpbHRlclN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAgIE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyc0NvbXBvbmVudD8uZm9ybUdyb3VwLmNvbnRyb2xzIHx8IHt9KS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgdGhpcy5fZmlsdGVyU3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgICB0aGlzLmZpbHRlcnNDb21wb25lbnQ/LmZvcm1Hcm91cFxyXG4gICAgICAgICAgLmdldChrZXkpXHJcbiAgICAgICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgzMDApKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vbkZpbHRlckNoYW5nZWQuZW1pdCh7IGZpZWxkOiBrZXksIHZhbHVlIH0pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5vbkZpbHRlckNoYW5nZWQuZW1pdCh7IGZpZWxkOiBrZXksIHZhbHVlOiB0aGlzLmZpbHRlcnNDb21wb25lbnQ/LmZvcm1Hcm91cC5nZXQoa2V5KT8udmFsdWUgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uUm93Q2xpY2soaXRlbTogYW55KSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMub25FeHBhbmRSb3cuZW1pdChpdGVtKTtcclxuICB9XHJcblxyXG4gIGdldCBsaXN0SGFzQWN0aW9ucygpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGEuc29tZSgoaXRlbSkgPT4gaXRlbS5hY3Rpb25zPy5sZW5ndGgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoYW5nZVNlbGVjdGVkSXRlbXModmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5vblNlbGVjdGVkUm93cy5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNIdG1sQ2VsbChjb2w6IFRhYmxlQ29sdW1uKSB7XHJcbiAgICByZXR1cm4gIWNvbC50eXBlIHx8ICF0aGlzLmlzQmFkZ2VDZWxsKGNvbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNCYWRnZUNlbGwoY29sOiBUYWJsZUNvbHVtbikge1xyXG4gICAgcmV0dXJuIGNvbC50eXBlICYmIFtUYWJsZUNvbHVtblR5cGUuVEVYVF9CQURHRSwgVGFibGVDb2x1bW5UeXBlLlNUQUNLX0JBREdFXS5pbmNsdWRlcyhjb2wudHlwZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNTY29yZUNlbGwoY29sOiBUYWJsZUNvbHVtbikge1xyXG4gICAgcmV0dXJuIGNvbC50eXBlID09PSBUYWJsZUNvbHVtblR5cGUuU0NPUkU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uOiBhbnkpIHtcclxuICAgIGZvciAobGV0IGkgPSBzZWxlY3Rpb24ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgbGV0IGRhdGEgPSBzZWxlY3Rpb25baV07XHJcbiAgICAgIGlmIChkYXRhLmRpc2FibGVkQ2hlY2tCb3gpIHtcclxuICAgICAgICBzZWxlY3Rpb24uc3BsaWNlKGksIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBzZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFN0YXR1c0NvbG9yKHN0YXR1czogU3RhdHVzKSB7XHJcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xyXG4gICAgICBjYXNlIFN0YXR1cy5QRU5ESU5HOlxyXG4gICAgICAgIHJldHVybiAnd2FybmluZyc7XHJcbiAgICAgIGNhc2UgU3RhdHVzLkFQUFJPVkVEOlxyXG4gICAgICAgIHJldHVybiAnc3VjY2Vzcyc7XHJcbiAgICAgIGNhc2UgU3RhdHVzLlJFSkVDVEVEOlxyXG4gICAgICAgIHJldHVybiAnZXJyb3InO1xyXG4gICAgICBjYXNlIFN0YXR1cy5JTkZPOlxyXG4gICAgICAgIHJldHVybiAnaW5mbyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEFjdGl2ZVN0YXR1c0NvbG9yKGFjdGl2ZTogYm9vbGVhbikge1xyXG4gICAgcmV0dXJuIGFjdGl2ZSA/ICdzdWNjZXNzJyA6ICdlcnJvcic7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgPHZlY3Rvci1maWx0ZXJzXHJcbiAgICAgIFtmaWVsZHNdPVwiZmlsdGVyc1wiXHJcbiAgICAgIChvblNlYXJjaCk9XCJsYXp5TG9hZGVkKHsgZmlsdGVyOiB0cnVlLCBkYXRhOiAkZXZlbnQgfSlcIlxyXG4gICAgICAoZm9ybUJ1aWxkZWQpPVwic3Vic2NyaWJlVG9GaWx0ZXJDaGFuZ2VzKClcIlxyXG4gICAgPjwvdmVjdG9yLWZpbHRlcnM+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRlci1hY3Rpb25zIGZpZWxkXCIgKm5nSWY9XCJhZGRJdGVtTGFiZWwgfHwgZXhwb3J0RXhjZWwgfHwgZXhwb3J0UERGIHx8IGN1c3RvbUZ1bmN0aW9uXCI+XHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiZXhwb3J0RXhjZWxcIiAoY2xpY2spPVwib25FeHBvcnRFeGNlbC5lbWl0KClcIiBjbGFzcz1cImV4cG9ydC1idXR0b24gZXhwb3J0LWV4Y2VsXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWZpbGUtZXhjZWxcIj48L2k+PHNwYW4+RXhjZWw8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gKm5nSWY9XCJleHBvcnRQREZcIiAoY2xpY2spPVwib25FeHBvcnRQREYuZW1pdCgpXCIgY2xhc3M9XCJleHBvcnQtYnV0dG9uIGV4cG9ydC1wZGZcIj5cclxuICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZmlsZS1wZGZcIj48L2k+PHNwYW4+UERGPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICpuZ0Zvcj1cImxldCBidXR0b24gb2YgY3VzdG9tRnVuY3Rpb25cIlxyXG4gICAgICAoY2xpY2spPVwiYnV0dG9uLmNsaWNrRnVuY3Rpb24oKVwiXHJcbiAgICAgIGNsYXNzPVwiZXhwb3J0LWJ1dHRvbiBjdXN0b20tZnVuY3Rpb25cIlxyXG4gICAgPlxyXG4gICAgICA8aSAqbmdJZj1cImJ1dHRvbj8uaWNvblwiIGNsYXNzPVwie3sgYnV0dG9uPy5pY29uIH19XCI+PC9pPjxzcGFuPnt7IGJ1dHRvbj8ubGFiZWwgfX08L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8dmVjdG9yLWJ1dHRvblxyXG4gICAgICAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGN1c3RvbUJ1dHRvbnNcIlxyXG4gICAgICBjbGFzcz1cImFkZC1pdGVtLWJ1dHRvblwiXHJcbiAgICAgIFtsYWJlbF09XCJidXR0b24ubGFiZWxcIlxyXG4gICAgICAoY2xpY2spPVwiYnV0dG9uLmNsaWNrRnVuY3Rpb24oKVwiXHJcbiAgICAgIFtyaWdodEljb25dPVwiYWRkSXRlbUJ1dHRvblBsdXNTaWduID8gJ3BpIHBpLXBsdXMnIDogJydcIlxyXG4gICAgPjwvdmVjdG9yLWJ1dHRvbj5cclxuICAgIDx2ZWN0b3ItYnV0dG9uXHJcbiAgICAgICpuZ0lmPVwiYWRkSXRlbUxhYmVsXCJcclxuICAgICAgY2xhc3M9XCJhZGQtaXRlbS1idXR0b25cIlxyXG4gICAgICBbbGFiZWxdPVwiYWRkSXRlbUxhYmVsXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQWRkLmVtaXQoKVwiXHJcbiAgICAgIFtyaWdodEljb25dPVwiYWRkSXRlbUJ1dHRvblBsdXNTaWduID8gJ3BpIHBpLXBsdXMnIDogJydcIlxyXG4gICAgPjwvdmVjdG9yLWJ1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICA8dmVjdG9yLXBhbmVsIGNsYXNzPVwiZGF0YS10YWJsZS1wYW5lbFwiPlxyXG4gICAgICA8cC10YWJWaWV3IChvbkNoYW5nZSk9XCJvblRhYkNoYW5nZSgkZXZlbnQpXCIgKm5nSWY9XCJ0YWJzPy5sZW5ndGhcIj5cclxuICAgICAgICA8cC10YWJQYW5lbCAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnNcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgPGVtICpuZ0lmPVwidGFiLmljb25cIiBbY2xhc3NdPVwidGFiLmljb25cIj4mbmJzcDs8L2VtPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyB0YWIubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9wLXRhYlBhbmVsPlxyXG4gICAgICA8L3AtdGFiVmlldz5cclxuICAgICAgPHAtdGFibGVcclxuICAgICAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwiTW9zdHJhbmRvIHtmaXJzdH0gYXTDqSB7bGFzdH0gZGUge3RvdGFsUmVjb3Jkc30gcmVnaXN0cm9zXCJcclxuICAgICAgICBzb3J0TW9kZT1cInNpbmdsZVwiXHJcbiAgICAgICAgW3Jvd3NdPVwiMTBcIlxyXG4gICAgICAgIFtsYXp5XT1cInBhZ2luYXRpb24gJiYgIXZpcnR1YWxQYWdpbmF0aW9uXCJcclxuICAgICAgICBbdmFsdWVdPVwiZGF0YVwiXHJcbiAgICAgICAgW3BhZ2luYXRvcl09XCJwYWdpbmF0aW9uXCJcclxuICAgICAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXHJcbiAgICAgICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCJcclxuICAgICAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cIlsxMCwgMjUsIDUwLCAxMDBdXCJcclxuICAgICAgICBbcmVzcG9uc2l2ZV09XCJ0cnVlXCJcclxuICAgICAgICBbcmVzaXphYmxlQ29sdW1uc109XCJ0cnVlXCJcclxuICAgICAgICBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICBzY3JvbGxEaXJlY3Rpb249XCJ2ZXJ0aWNhbFwiXHJcbiAgICAgICAgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiXHJcbiAgICAgICAgZGF0YUtleT1cImlkXCJcclxuICAgICAgICBbc2Nyb2xsSGVpZ2h0XT1cImhlaWdodFwiXHJcbiAgICAgICAgW2F0dHIuc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25Nb2RlXCJcclxuICAgICAgICBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRJdGVtc1wiXHJcbiAgICAgICAgKG9uUm93U2VsZWN0KT1cImNoYW5nZVNlbGVjdGVkSXRlbXMoJGV2ZW50KVwiXHJcbiAgICAgICAgKG9uSGVhZGVyQ2hlY2tib3hUb2dnbGUpPVwiY2hhbmdlU2VsZWN0ZWRJdGVtcygkZXZlbnQpXCJcclxuICAgICAgICAob25Sb3dVbnNlbGVjdCk9XCJjaGFuZ2VTZWxlY3RlZEl0ZW1zKCRldmVudClcIlxyXG4gICAgICAgIChvbkxhenlMb2FkKT1cImxhenlMb2FkZWQoeyBmaWx0ZXI6IGZhbHNlLCBkYXRhOiAkZXZlbnQgfSlcIlxyXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICA8dHIgY2xhc3M9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgPHRoIHN0eWxlPVwibWF4LXdpZHRoOiAzcmVtXCIgKm5nSWY9XCJzZWxlY3Rpb25UeXBlID09PSAnY2hlY2tib3gnXCI+XHJcbiAgICAgICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveCBbZGlzYWJsZWRdPVwiZGlzYWJsZWRIZWFkZXJjaGVja2JveFwiPjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICA8dGggc3R5bGU9XCJtYXgtd2lkdGg6IDE1MHB4XCIgY2xhc3M9XCJjZW50ZXJlZCB0ZXh0LWNlbnRlclwiICpuZ0lmPVwiaGFzRXhwYW5kYWJsZUljb25cIj5cclxuICAgICAgICAgICAgICB7eyBhZGROYW1lQ29sdW1uRXhwYW5kIH19XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDx0aCBzdHlsZT1cIm1heC13aWR0aDogMTAwcHhcIiBjbGFzcz1cImNlbnRlcmVkXCIgKm5nSWY9XCJoYXNBY3Rpb25zXCI+e3sgJ2FwcC5sYWJlbC5hY3Rpb25zJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q29sU3R5bGUoY29sKVwiXHJcbiAgICAgICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbl09XCJjb2wubm90U29ydGFibGUgPyAnJyA6IGNvbC5maWVsZFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7eyBjb2wuaGVhZGVyIH19IDxwLXNvcnRJY29uICpuZ0lmPVwiIWNvbC5ub3RTb3J0YWJsZVwiIFtmaWVsZF09XCJjb2wuZmllbGRcIj48L3Atc29ydEljb24+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtcm93RGF0YSBsZXQtaXRlbSBsZXQtZXhwYW5kZWQ9XCJleHBhbmRlZFwiPlxyXG4gICAgICAgICAgPHRyXHJcbiAgICAgICAgICAgIGNsYXNzPVwicm93XCJcclxuICAgICAgICAgICAgW3BTZWxlY3RhYmxlUm93XT1cInJvd0RhdGFcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7IGV4cGFuZGFibGU6IGV4cGFuZGFibGUgfVwiXHJcbiAgICAgICAgICAgIFtwUm93VG9nZ2xlcl09XCJleHBhbmRhYmxlID8gaXRlbSA6IHVuZGVmaW5lZFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKGl0ZW0pXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvblR5cGUgPT09ICdjaGVja2JveCdcIj5cclxuICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJtYXgtd2lkdGg6IDNyZW07IHBhZGRpbmctbGVmdDogMTBweFwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHAtdGFibGVDaGVja2JveCBbdmFsdWVdPVwiaXRlbVwiIFtkaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkQ2hlY2tCb3hcIj48L3AtdGFibGVDaGVja2JveD5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvblR5cGUgPT09ICdyYWRpb2J1dHRvbidcIj5cclxuICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJtYXgtd2lkdGg6IDNyZW07IHBhZGRpbmctbGVmdDogMTBweFwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHAtdGFibGVSYWRpb0J1dHRvbiBbdmFsdWVdPVwiaXRlbVwiPjwvcC10YWJsZVJhZGlvQnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJoYXNFeHBhbmRhYmxlSWNvblwiIHN0eWxlPVwibWF4LXdpZHRoOiAxNTBweFwiIGNsYXNzPVwiY2VudGVyZWRcIj5cclxuICAgICAgICAgICAgICA8cC1tZW51ICNtZW51IFttb2RlbF09XCJpdGVtLmFjdGlvbnNcIiBbcG9wdXBdPVwidHJ1ZVwiIGFwcGVuZFRvPVwiYm9keVwiPjwvcC1tZW51PlxyXG4gICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgZXhwYW5kZWQgPyAnYWN0aW9ucy1tZW51LWJ1dHRvbiBwaSBwaS1jaGV2cm9uLWRvd24nIDogJ2FjdGlvbnMtbWVudS1idXR0b24gcGkgcGktY2hldnJvbi1yaWdodCdcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiaGFzQWN0aW9uc1wiIHN0eWxlPVwibWF4LXdpZHRoOiAxMDBweFwiIGNsYXNzPVwiY2VudGVyZWRcIj5cclxuICAgICAgICAgICAgICA8cC1tZW51ICNtZW51IFttb2RlbF09XCJpdGVtLmFjdGlvbnNcIiBbcG9wdXBdPVwidHJ1ZVwiIGFwcGVuZFRvPVwiYm9keVwiPjwvcC1tZW51PlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiYWN0aW9ucy1tZW51LWJ1dHRvbiBmYXMgZmEtY29nXCIgKGNsaWNrKT1cIm1lbnUudG9nZ2xlKCRldmVudClcIj48L2k+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImlzSHRtbENlbGwoY29sKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNlbGxcIlxyXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRDZWxsQ29udGVudChpdGVtLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2wgJiYgY29sLmNsaWNrRnVuY3Rpb24gJiYgY29sLmNsaWNrRnVuY3Rpb24oaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q29sU3R5bGUoY29sKVwiXHJcbiAgICAgICAgICAgICAgPjwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIighaXNIdG1sQ2VsbChjb2wpICYmICEhY29sLmdldFN0YXR1cykgfHwgaXNTY29yZUNlbGwoY29sKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNlbGxcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbCAmJiBjb2wuY2xpY2tGdW5jdGlvbiAmJiBjb2wuY2xpY2tGdW5jdGlvbihpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRDb2xTdHlsZShjb2wpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8dmVjdG9yLWJhZGdlXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNCYWRnZUNlbGwoY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJnZXRDZWxsVGV4dChpdGVtLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiY29sLmdldFN0YXR1cyAmJiBjb2wuZ2V0U3RhdHVzKGl0ZW1bY29sLmZpZWxkXSlcIlxyXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJnZXRUb29sdGlwVGV4dChpdGVtLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgID48L3ZlY3Rvci1iYWRnZT5cclxuICAgICAgICAgICAgICAgIDx2ZWN0b3Itc2NvcmUgKm5nSWY9XCJpc1Njb3JlQ2VsbChjb2wpXCIgW3Njb3JlXT1cIml0ZW1bY29sLmZpZWxkXVwiPjwvdmVjdG9yLXNjb3JlPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgIDx0ciBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1yZXN1bHRzXCIgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zLmxlbmd0aCArIDFcIj5OZW5odW0gcmVzdWx0YWRvIGVuY29udHJhZG88L3RkPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JyaWdodFwiPiA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbSBwVGVtcGxhdGU9XCJwYWdpbmF0b3Jkcm9wZG93bml0ZW1cIj4ge3sgaXRlbS52YWx1ZSB9fSA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJyb3dleHBhbnNpb25cIiBsZXQtaXRlbT5cclxuICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5sZW5ndGggKyAoaGFzQWN0aW9ucyA/IDEgOiAwKVwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJleHBhbnNpb25UZW1wbGF0ZTsgY29udGV4dDogeyBpdGVtIH1cIj4gPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvcC10YWJsZT5cclxuICAgIDwvdmVjdG9yLXBhbmVsPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
391
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmVjdG9yLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpZWxkcy9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZlY3Rvci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9maWVsZHMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFnQyxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQXVDLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQWUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU83RSxNQUFNLE9BQU8sa0JBQWtCO0lBZ0k3QixZQUFtQixFQUFxQjtRQUFyQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQTlIakMsWUFBTyxHQUFrQixFQUFFLENBQUM7UUFTM0IsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUVuQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FB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QkFEbkIsTUFBTTtnQkFHQSxXQUFXO3NCQURqQixNQUFNO2dCQUlBLGFBQWE7c0JBRG5CLEtBQUs7Z0JBSUMsZ0JBQWdCO3NCQUR0QixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSAnbHV4b24nO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJDaGFuZ2VkRXZlbnQsIExpc3RJdGVtLCBTdGF0dXMgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBEYXRhVGFibGVMYXp5TG9hZEV2ZW50LCBUYWJsZUNvbHVtbiwgVGFibGVDb2x1bW5UeXBlIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2RhdGEtdGFibGUubW9kZWwnO1xyXG5pbXBvcnQgeyBNYXNrVXRpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcclxuaW1wb3J0IHsgRmlsdGVyRmllbGQsIEZpbHRlcnNDb21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXJzL2ZpbHRlcnMuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndmVjdG9yLWRhdGEtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgY29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBkYXRhKF9kYXRhOiBhbnlbXSkge1xyXG4gICAgdGhpcy5fZGF0YSA9IF9kYXRhO1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5fZGF0YT8uZmlsdGVyKChpdGVtKSA9PiBpdGVtLnNlbGVjdGVkKSB8fCBbXTtcclxuICB9XHJcbiAgcHVibGljIGdldCBkYXRhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2RhdGE6IGFueVtdID0gW107XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZXhwb3J0RXhjZWwgPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBleHBvcnRQREYgPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjdXN0b21GdW5jdGlvbjogeyBsYWJlbDogc3RyaW5nOyBpY29uPzogc3RyaW5nOyBjbGlja0Z1bmN0aW9uOiBGdW5jdGlvbiB9W10gfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgdG90YWxSZWNvcmRzID0gMDtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBkaXNhYmxlZEhlYWRlcmNoZWNrYm94ID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZmlsdGVyczogRmlsdGVyRmllbGRbXSA9IFtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGFkZEl0ZW1MYWJlbCA9ICcnO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHBhZ2luYXRpb24gPSB0cnVlO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHZpcnR1YWxQYWdpbmF0aW9uID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHRhYnMoX3RhYnM6IExpc3RJdGVtW10pIHtcclxuICAgIHRoaXMuX3RhYnMgPSBfdGFicztcclxuICAgIHRoaXMuX3RhYlNlbGVjdGVkID0gX3RhYnNbMF07XHJcbiAgfVxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGN1c3RvbUJ1dHRvbnM6IHsgbGFiZWw6IHN0cmluZzsgY2xpY2tGdW5jdGlvbjogRnVuY3Rpb24gfVtdIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGFkZEl0ZW1CdXR0b25QbHVzU2lnbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGhhc0FjdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGhhc0V4cGFuZGFibGVJY29uID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYWRkTmFtZUNvbHVtbkV4cGFuZCA9ICcnO1xyXG4gIEBJbnB1dCgpIGV4cGFuZGFibGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBleHBhbnNpb25UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBzZWxlY3Rpb25Nb2RlKF9zZWxlY3Rpb25Nb2RlKSB7XHJcbiAgICBzd2l0Y2ggKF9zZWxlY3Rpb25Nb2RlKSB7XHJcbiAgICAgIGNhc2UgJ3NpbmdsZSc6XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZSA9ICdzaW5nbGUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdtdWx0aXBsZSc6XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZSA9ICdtdWx0aXBsZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZSA9IG51bGw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNlbGVjdGlvblR5cGU6ICdjaGVja2JveCcgfCAncmFkaW9idXR0b24nIHwgbnVsbCA9IG51bGw7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGhlaWdodChfaGVpZ2h0OiBzdHJpbmcpIHtcclxuICAgIHN3aXRjaCAoX2hlaWdodCkge1xyXG4gICAgICBjYXNlICdzbWFsbCc6XHJcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gJzMwMHB4JztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbWVkaXVtJzpcclxuICAgICAgICB0aGlzLl9oZWlnaHQgPSAnNTAwcHgnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdsYXJnZSc6XHJcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gJzcwMHB4JztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZnVsbCc6XHJcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gJ2ZsZXgnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMuX2hlaWdodCA9ICczMDBweCc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBvbkxhenlMb2FkID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhVGFibGVMYXp5TG9hZEV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBvbkZpbHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBvbkFkZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgb25FeHBvcnRFeGNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgb25FeHBvcnRQREYgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIG9uU2VsZWN0ZWRSb3dzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIG9uRmlsdGVyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyQ2hhbmdlZEV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBvblRhYlNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxMaXN0SXRlbT4oKTtcclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgb25FeHBhbmRSb3c6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBmaXJzdExhenlMb2FkID0gZmFsc2U7XHJcblxyXG4gIEBWaWV3Q2hpbGQoRmlsdGVyc0NvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBwdWJsaWMgZmlsdGVyc0NvbXBvbmVudDogRmlsdGVyc0NvbXBvbmVudCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHVibGljIHNlbGVjdGVkSXRlbXM6IGFueSA9IFtdO1xyXG5cclxuICBnZXQgdGFicygpIHtcclxuICAgIHJldHVybiB0aGlzLl90YWJzO1xyXG4gIH1cclxuICBnZXQgaGVpZ2h0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hlaWdodDtcclxuICB9XHJcbiAgZ2V0IHNlbGVjdGlvbk1vZGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdGlvbk1vZGU6ICdzaW5nbGUnIHwgJ211bHRpcGxlJyB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgX2hlaWdodDogc3RyaW5nID0gJ3NtYWxsJztcclxuICBwcml2YXRlIF90YWJzOiBMaXN0SXRlbVtdID0gW107XHJcbiAgcHJpdmF0ZSBfZHJhdyA9IDE7XHJcbiAgcHJpdmF0ZSBfZmlyc3RMYXp5TG9hZGVkRG9uZSA9IHRoaXMuZmlyc3RMYXp5TG9hZDtcclxuICBwcml2YXRlIF9sYXN0TGF6eUxvYWRFdmVudDogRGF0YVRhYmxlTGF6eUxvYWRFdmVudCB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF90YWJTZWxlY3RlZDogTGlzdEl0ZW0gfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfZmlsdGVyU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5oZWlnaHQpIHtcclxuICAgICAgdGhpcy5oZWlnaHQgPSAnc21hbGwnO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5wYWdpbmF0aW9uIHx8IHRoaXMudmlydHVhbFBhZ2luYXRpb24pIHtcclxuICAgICAgdGhpcy5maWx0ZXJzQ29tcG9uZW50Py5zZWFyY2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZmlsdGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRDb2xTdHlsZShjb2w6IFRhYmxlQ29sdW1uKSB7XHJcbiAgICByZXR1cm4geyAnbWluLXdpZHRoJzogY29sLndpZHRoIH07XHJcbiAgfVxyXG5cclxuICBsYXp5TG9hZGVkKHBhcmFtczogeyBmaWx0ZXI6IGJvb2xlYW47IGRhdGE6IGFueSB9ID0geyBmaWx0ZXI6IGZhbHNlLCBkYXRhOiB7IHN0YXJ0OiAwLCByb3dzOiAxMCB9IH0pIHtcclxuICAgIGlmICghcGFyYW1zLmZpbHRlcikge1xyXG4gICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGRhdGE6IGNvbC5maWVsZCxcclxuICAgICAgICAgIG5hbWU6IGAke2NvbC5maWVsZC5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKX0ke2NvbC5maWVsZC5zdWJzdHJpbmcoMSwgY29sLmZpZWxkLmxlbmd0aCl9YCxcclxuICAgICAgICAgIG9yZGVyYWJsZTogdHJ1ZSxcclxuICAgICAgICAgIHNlYXJjaDogeyB2YWx1ZTogJycsIHJlZ2V4OiBmYWxzZSB9LFxyXG4gICAgICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHRoaXMuaGFzQWN0aW9ucykge1xyXG4gICAgICAgIGNvbHVtbnMudW5zaGlmdCh7XHJcbiAgICAgICAgICBkYXRhOiAnYWN0aXZlJyxcclxuICAgICAgICAgIG5hbWU6ICdBY3RpdmUnLFxyXG4gICAgICAgICAgb3JkZXJhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgc2VhcmNoOiB7IHZhbHVlOiAnJywgcmVnZXg6IGZhbHNlIH0sXHJcbiAgICAgICAgICBzZWFyY2hhYmxlOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2xhc3RMYXp5TG9hZEV2ZW50ID0ge1xyXG4gICAgICAgIC4uLih0aGlzLl9sYXN0TGF6eUxvYWRFdmVudCB8fCAoe30gYXMgYW55KSksXHJcbiAgICAgICAgcGFnZTogcGFyYW1zLmRhdGEuZmlyc3QgLyBwYXJhbXMuZGF0YS5yb3dzICsgMSxcclxuICAgICAgICBzdGFydDogcGFyYW1zLmRhdGEuZmlyc3QsXHJcbiAgICAgICAgbGVuZ3RoOiBwYXJhbXMuZGF0YS5yb3dzLFxyXG4gICAgICAgIGRyYXc6IHRoaXMuX2RyYXcrKyxcclxuICAgICAgICBvcmRlcjogcGFyYW1zLmRhdGEuc29ydEZpZWxkXHJcbiAgICAgICAgICA/IFtcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW46XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1ucy5maW5kSW5kZXgoKGNvbCkgPT4gY29sLmZpZWxkID09PSBwYXJhbXMuZGF0YS5zb3J0RmllbGQpICsgKHRoaXMuaGFzQWN0aW9ucyA/IDEgOiAwKSxcclxuICAgICAgICAgICAgICAgIGRpcjogcGFyYW1zLmRhdGEuc29ydE9yZGVyID4gMCA/ICdhc2MnIDogJ2Rlc2MnLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgIDogW3sgY29sdW1uOiAwLCBkaXI6ICdkZXNjJyB9XSxcclxuICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxyXG4gICAgICAgIHRhYjogdGhpcy5fdGFiU2VsZWN0ZWQsXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9sYXN0TGF6eUxvYWRFdmVudCA9IHtcclxuICAgICAgICAuLi50aGlzLl9sYXN0TGF6eUxvYWRFdmVudCxcclxuICAgICAgICAuLi5wYXJhbXMuZGF0YSxcclxuICAgICAgICBzdGFydDogMCxcclxuICAgICAgfTtcclxuICAgICAgaWYgKHRoaXMuX3RhYlNlbGVjdGVkKSB7XHJcbiAgICAgICAgdGhpcy5fbGFzdExhenlMb2FkRXZlbnQgPSB7XHJcbiAgICAgICAgICAuLi4odGhpcy5fbGFzdExhenlMb2FkRXZlbnQgfHwgKHt9IGFzIGFueSkpLFxyXG4gICAgICAgICAgLi4ueyBTdGF0dXM6IHRoaXMuX3RhYlNlbGVjdGVkLmNvZGUgfSxcclxuICAgICAgICAgIHRhYjogdGhpcy5fdGFiU2VsZWN0ZWQsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9maXJzdExhenlMb2FkZWREb25lIHx8IHRoaXMuZmlyc3RMYXp5TG9hZCkge1xyXG4gICAgICB0aGlzLm9uTGF6eUxvYWQuZW1pdCh0aGlzLl9sYXN0TGF6eUxvYWRFdmVudCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9maXJzdExhenlMb2FkZWREb25lID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGdldENlbGxDb250ZW50KGl0ZW06IGFueSwgY29sOiBUYWJsZUNvbHVtbikge1xyXG4gICAgY29uc3QgY2VsbFRleHQgPSB0aGlzLmdldENlbGxUZXh0KGl0ZW0sIGNvbCk7XHJcbiAgICBsZXQgY29udGVudCA9IGA8c3BhbiBjbGFzcz1cInAtY29sdW1uLXRpdGxlXCI+JHtjb2wuaGVhZGVyfTwvc3Bhbj48c3BhbiBjbGFzcz1cInctMTAwXCI+YDtcclxuICAgIGlmIChcclxuICAgICAgIWNvbC50eXBlIHx8XHJcbiAgICAgIFtUYWJsZUNvbHVtblR5cGUuRU5VTSwgVGFibGVDb2x1bW5UeXBlLlRFWFQsIFRhYmxlQ29sdW1uVHlwZS5EQVRFVElNRSwgVGFibGVDb2x1bW5UeXBlLkRBVEVdLmluY2x1ZGVzKGNvbC50eXBlKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnRlbnQgKz0gY2VsbFRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoIChjb2wudHlwZSkge1xyXG4gICAgICBjYXNlIFRhYmxlQ29sdW1uVHlwZS5DVVNUT01fU1RZTEU6XHJcbiAgICAgICAgY29udGVudCArPSBgPHNwYW4gY2xhc3M9XCIke2NvbC50ZXh0RmllbGRDbGFzcyA/IGl0ZW1bY29sLnRleHRGaWVsZENsYXNzXSA6ICcnfVwiPiR7Y2VsbFRleHR9PC9zcGFuPmA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgVGFibGVDb2x1bW5UeXBlLkJPT0xFQU46XHJcbiAgICAgICAgY29udGVudCArPSBgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyZWRcIj48aSBjbGFzcz1cIiBzdGF0dXMtdGFibGUtZmllbGQgZmFzIGZhLSR7XHJcbiAgICAgICAgICBjZWxsVGV4dCA/ICdjaGVjayBib29sZWFuLXZhbHVlLXBvc2l0aXZlJyA6ICd0aW1lcyBib29sZWFuLXZhbHVlLW5lZ2F0aXZlJ1xyXG4gICAgICAgIH1cIj48L2k+PC9kaXY+YDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBUYWJsZUNvbHVtblR5cGUuU1RBVFVTX0JBREdFOlxyXG4gICAgICAgIGNvbnRlbnQgKz0gYDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlcmVkXCI+PGkgY2xhc3M9XCJmYXMgZmEtY2lyY2xlIHN0YXR1cy10YWJsZS1maWVsZCAke3RoaXMuZ2V0U3RhdHVzQ29sb3IoXHJcbiAgICAgICAgICBjZWxsVGV4dFxyXG4gICAgICAgICl9XCI+PC9pPjwvZGl2PmA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgVGFibGVDb2x1bW5UeXBlLkFDVElWRV9CT09MRUFOX0JBREdFOlxyXG4gICAgICAgIGNvbnRlbnQgKz0gYDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlcmVkXCI+PGkgY2xhc3M9XCJmYXMgZmEtY2lyY2xlIHN0YXR1cy10YWJsZS1maWVsZCAke3RoaXMuZ2V0QWN0aXZlU3RhdHVzQ29sb3IoXHJcbiAgICAgICAgICBjZWxsVGV4dFxyXG4gICAgICAgICl9XCI+PC9pPjwvZGl2PmA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgVGFibGVDb2x1bW5UeXBlLkJVVFRPTjpcclxuICAgICAgICBjb250ZW50ICs9IGA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJlZFwiPjxpIGNsYXNzPVwiZmFzICR7XHJcbiAgICAgICAgICBjb2wuaWNvbiB8fCAnZmEtY2lyY2xlJ1xyXG4gICAgICAgIH0gc3RhdHVzLXRhYmxlLWZpZWxkIHRhYmxlLWJ1dHRvblwiPjwvaT48L2Rpdj5gO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFRhYmxlQ29sdW1uVHlwZS5NQVNLOlxyXG4gICAgICAgIGNvbnRlbnQgKz0gTWFza1V0aWwuZG9NYXNrU3RyaW5nKGNlbGxUZXh0LCBjb2wubWFzayk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgVGFibGVDb2x1bW5UeXBlLkNVUlJFTkNZOlxyXG4gICAgICAgIGNvbnRlbnQgKz0gTnVtYmVyKGNlbGxUZXh0KS50b0xvY2FsZVN0cmluZygncHQtQlInLCB7XHJcbiAgICAgICAgICBjdXJyZW5jeTogY29sLmN1cnJlbmN5VHlwZSB8fCAnQlJMJyxcclxuICAgICAgICAgIGN1cnJlbmN5RGlzcGxheTogJ25hcnJvd1N5bWJvbCcsXHJcbiAgICAgICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb250ZW50ICs9IGA8L3NwYW4+YDtcclxuICAgIHJldHVybiBjb250ZW50O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENlbGxUZXh0KGl0ZW06IGFueSwgY29sOiBUYWJsZUNvbHVtbikge1xyXG4gICAgaWYgKGNvbC5nZXRFbnVtVHJhbnNsYXRlZCkge1xyXG4gICAgICByZXR1cm4gY29sLmdldEVudW1UcmFuc2xhdGVkKGl0ZW1bY29sLmZpZWxkXSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29sLnR5cGUgPT09IFRhYmxlQ29sdW1uVHlwZS5EQVRFVElNRSAmJiBpdGVtW2NvbC5maWVsZF0pIHtcclxuICAgICAgY29uc3QgZGF0ZVRpbWUgPVxyXG4gICAgICAgIGl0ZW1bY29sLmZpZWxkXSBpbnN0YW5jZW9mIERhdGUgPyBEYXRlVGltZS5mcm9tSlNEYXRlKGl0ZW1bY29sLmZpZWxkXSkgOiBEYXRlVGltZS5mcm9tSVNPKGl0ZW1bY29sLmZpZWxkXSk7XHJcbiAgICAgIHJldHVybiBkYXRlVGltZS50b1VUQygpLnRvRm9ybWF0KCdkZC9NTS95eXl5IEhIOm1tJyk7XHJcbiAgICB9XHJcbiAgICBpZiAoY29sLnR5cGUgPT09IFRhYmxlQ29sdW1uVHlwZS5EQVRFICYmIGl0ZW1bY29sLmZpZWxkXSkge1xyXG4gICAgICBjb25zdCBkYXRlVGltZSA9XHJcbiAgICAgICAgaXRlbVtjb2wuZmllbGRdIGluc3RhbmNlb2YgRGF0ZSA/IERhdGVUaW1lLmZyb21KU0RhdGUoaXRlbVtjb2wuZmllbGRdKSA6IERhdGVUaW1lLmZyb21JU08oaXRlbVtjb2wuZmllbGRdKTtcclxuICAgICAgcmV0dXJuIGRhdGVUaW1lLnRvVVRDKCkudG9Gb3JtYXQoJ2RkL01NL3l5eXknKTtcclxuICAgIH1cclxuICAgIGlmIChjb2wudHlwZSA9PT0gVGFibGVDb2x1bW5UeXBlLlNUQUNLX0JBREdFKSB7XHJcbiAgICAgIGlmICghaXRlbVtjb2wuZmllbGRdLmxlbmd0aCB8fCBpdGVtW2NvbC5maWVsZF0ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1bY29sLmZpZWxkXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYCske2l0ZW1bY29sLmZpZWxkXS5sZW5ndGh9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGNvbC50eXBlID09PSBUYWJsZUNvbHVtblR5cGUuU1RBVFVTX0JBREdFKSB7XHJcbiAgICAgIHJldHVybiBpdGVtW2NvbC5maWVsZF0gPT0gMCA/IDAgOiBpdGVtW2NvbC5maWVsZF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGl0ZW1bY29sLmZpZWxkIHx8ICcnXSB8fCAnJztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRUb29sdGlwVGV4dChpdGVtOiBhbnksIGNvbDogVGFibGVDb2x1bW4pIHtcclxuICAgIGlmIChcclxuICAgICAgIWNvbC50eXBlIHx8XHJcbiAgICAgICFbVGFibGVDb2x1bW5UeXBlLlNUQUNLX0JBREdFXS5pbmNsdWRlcyhjb2wudHlwZSkgfHxcclxuICAgICAgIUFycmF5LmlzQXJyYXkoaXRlbVtjb2wuZmllbGRdKSB8fFxyXG4gICAgICBpdGVtW2NvbC5maWVsZF0ubGVuZ3RoID09PSAxXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGl0ZW1bY29sLmZpZWxkXSkpIHtcclxuICAgICAgcmV0dXJuIGl0ZW1bY29sLmZpZWxkXTtcclxuICAgIH1cclxuICAgIHJldHVybiBpdGVtW2NvbC5maWVsZF0uam9pbignIC0gJyk7XHJcbiAgfVxyXG5cclxuICBvblRhYkNoYW5nZSgkZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5fdGFiU2VsZWN0ZWQgPSB0aGlzLnRhYnNbJGV2ZW50LmluZGV4XTtcclxuICAgIHRoaXMubGF6eUxvYWRlZCh7IGZpbHRlcjogdHJ1ZSwgZGF0YToge30gfSk7XHJcbiAgICB0aGlzLm9uVGFiU2VsZWN0ZWQuZW1pdCh0aGlzLl90YWJTZWxlY3RlZCk7XHJcbiAgfVxyXG5cclxuICBzdWJzY3JpYmVUb0ZpbHRlckNoYW5nZXMoKSB7XHJcbiAgICB0aGlzLl9maWx0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuX2ZpbHRlclN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAgIE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyc0NvbXBvbmVudD8uZm9ybUdyb3VwLmNvbnRyb2xzIHx8IHt9KS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgdGhpcy5fZmlsdGVyU3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgICB0aGlzLmZpbHRlcnNDb21wb25lbnQ/LmZvcm1Hcm91cFxyXG4gICAgICAgICAgLmdldChrZXkpXHJcbiAgICAgICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgzMDApKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vbkZpbHRlckNoYW5nZWQuZW1pdCh7IGZpZWxkOiBrZXksIHZhbHVlIH0pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5vbkZpbHRlckNoYW5nZWQuZW1pdCh7IGZpZWxkOiBrZXksIHZhbHVlOiB0aGlzLmZpbHRlcnNDb21wb25lbnQ/LmZvcm1Hcm91cC5nZXQoa2V5KT8udmFsdWUgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uUm93Q2xpY2soaXRlbTogYW55KSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMub25FeHBhbmRSb3cuZW1pdChpdGVtKTtcclxuICB9XHJcblxyXG4gIGdldCBsaXN0SGFzQWN0aW9ucygpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGEuc29tZSgoaXRlbSkgPT4gaXRlbS5hY3Rpb25zPy5sZW5ndGgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoYW5nZVNlbGVjdGVkSXRlbXModmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5vblNlbGVjdGVkUm93cy5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNIdG1sQ2VsbChjb2w6IFRhYmxlQ29sdW1uKSB7XHJcbiAgICByZXR1cm4gIWNvbC50eXBlIHx8ICF0aGlzLmlzQmFkZ2VDZWxsKGNvbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNCYWRnZUNlbGwoY29sOiBUYWJsZUNvbHVtbikge1xyXG4gICAgcmV0dXJuIGNvbC50eXBlICYmIFtUYWJsZUNvbHVtblR5cGUuVEVYVF9CQURHRSwgVGFibGVDb2x1bW5UeXBlLlNUQUNLX0JBREdFXS5pbmNsdWRlcyhjb2wudHlwZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNTY29yZUNlbGwoY29sOiBUYWJsZUNvbHVtbikge1xyXG4gICAgcmV0dXJuIGNvbC50eXBlID09PSBUYWJsZUNvbHVtblR5cGUuU0NPUkU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uOiBhbnkpIHtcclxuICAgIGZvciAobGV0IGkgPSBzZWxlY3Rpb24ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgbGV0IGRhdGEgPSBzZWxlY3Rpb25baV07XHJcbiAgICAgIGlmIChkYXRhLmRpc2FibGVkQ2hlY2tCb3gpIHtcclxuICAgICAgICBzZWxlY3Rpb24uc3BsaWNlKGksIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBzZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFN0YXR1c0NvbG9yKHN0YXR1czogU3RhdHVzKSB7XHJcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xyXG4gICAgICBjYXNlIFN0YXR1cy5QRU5ESU5HOlxyXG4gICAgICAgIHJldHVybiAnd2FybmluZyc7XHJcbiAgICAgIGNhc2UgU3RhdHVzLkFQUFJPVkVEOlxyXG4gICAgICAgIHJldHVybiAnc3VjY2Vzcyc7XHJcbiAgICAgIGNhc2UgU3RhdHVzLlJFSkVDVEVEOlxyXG4gICAgICAgIHJldHVybiAnZXJyb3InO1xyXG4gICAgICBjYXNlIFN0YXR1cy5JTkZPOlxyXG4gICAgICAgIHJldHVybiAnaW5mbyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEFjdGl2ZVN0YXR1c0NvbG9yKGFjdGl2ZTogYm9vbGVhbikge1xyXG4gICAgcmV0dXJuIGFjdGl2ZSA/ICdzdWNjZXNzJyA6ICdlcnJvcic7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJncmlkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgPHZlY3Rvci1maWx0ZXJzXHJcbiAgICAgIFtmaWVsZHNdPVwiZmlsdGVyc1wiXHJcbiAgICAgIChvblNlYXJjaCk9XCJsYXp5TG9hZGVkKHsgZmlsdGVyOiB0cnVlLCBkYXRhOiAkZXZlbnQgfSlcIlxyXG4gICAgICAoZm9ybUJ1aWxkZWQpPVwic3Vic2NyaWJlVG9GaWx0ZXJDaGFuZ2VzKClcIlxyXG4gICAgPjwvdmVjdG9yLWZpbHRlcnM+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRlci1hY3Rpb25zIGZpZWxkXCIgKm5nSWY9XCJhZGRJdGVtTGFiZWwgfHwgZXhwb3J0RXhjZWwgfHwgZXhwb3J0UERGIHx8IGN1c3RvbUZ1bmN0aW9uXCI+XHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiZXhwb3J0RXhjZWxcIiAoY2xpY2spPVwib25FeHBvcnRFeGNlbC5lbWl0KClcIiBjbGFzcz1cImV4cG9ydC1idXR0b24gZXhwb3J0LWV4Y2VsXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWZpbGUtZXhjZWxcIj48L2k+PHNwYW4+RXhjZWw8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gKm5nSWY9XCJleHBvcnRQREZcIiAoY2xpY2spPVwib25FeHBvcnRQREYuZW1pdCgpXCIgY2xhc3M9XCJleHBvcnQtYnV0dG9uIGV4cG9ydC1wZGZcIj5cclxuICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZmlsZS1wZGZcIj48L2k+PHNwYW4+UERGPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICpuZ0Zvcj1cImxldCBidXR0b24gb2YgY3VzdG9tRnVuY3Rpb25cIlxyXG4gICAgICAoY2xpY2spPVwiYnV0dG9uLmNsaWNrRnVuY3Rpb24oKVwiXHJcbiAgICAgIGNsYXNzPVwiZXhwb3J0LWJ1dHRvbiBjdXN0b20tZnVuY3Rpb25cIlxyXG4gICAgPlxyXG4gICAgICA8aSAqbmdJZj1cImJ1dHRvbj8uaWNvblwiIGNsYXNzPVwie3sgYnV0dG9uPy5pY29uIH19XCI+PC9pPjxzcGFuPnt7IGJ1dHRvbj8ubGFiZWwgfX08L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8dmVjdG9yLWJ1dHRvblxyXG4gICAgICAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGN1c3RvbUJ1dHRvbnNcIlxyXG4gICAgICBjbGFzcz1cImFkZC1pdGVtLWJ1dHRvblwiXHJcbiAgICAgIFtsYWJlbF09XCJidXR0b24ubGFiZWxcIlxyXG4gICAgICAoY2xpY2spPVwiYnV0dG9uLmNsaWNrRnVuY3Rpb24oKVwiXHJcbiAgICAgIFtyaWdodEljb25dPVwiYWRkSXRlbUJ1dHRvblBsdXNTaWduID8gJ3BpIHBpLXBsdXMnIDogJydcIlxyXG4gICAgPjwvdmVjdG9yLWJ1dHRvbj5cclxuICAgIDx2ZWN0b3ItYnV0dG9uXHJcbiAgICAgICpuZ0lmPVwiYWRkSXRlbUxhYmVsXCJcclxuICAgICAgY2xhc3M9XCJhZGQtaXRlbS1idXR0b25cIlxyXG4gICAgICBbbGFiZWxdPVwiYWRkSXRlbUxhYmVsXCJcclxuICAgICAgKGNsaWNrKT1cIm9uQWRkLmVtaXQoKVwiXHJcbiAgICAgIFtyaWdodEljb25dPVwiYWRkSXRlbUJ1dHRvblBsdXNTaWduID8gJ3BpIHBpLXBsdXMnIDogJydcIlxyXG4gICAgPjwvdmVjdG9yLWJ1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICA8dmVjdG9yLXBhbmVsIGNsYXNzPVwiZGF0YS10YWJsZS1wYW5lbFwiPlxyXG4gICAgICA8cC10YWJWaWV3IChvbkNoYW5nZSk9XCJvblRhYkNoYW5nZSgkZXZlbnQpXCIgKm5nSWY9XCJ0YWJzPy5sZW5ndGhcIj5cclxuICAgICAgICA8cC10YWJQYW5lbCAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnNcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgPGVtICpuZ0lmPVwidGFiLmljb25cIiBbY2xhc3NdPVwidGFiLmljb25cIj4mbmJzcDs8L2VtPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyB0YWIubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9wLXRhYlBhbmVsPlxyXG4gICAgICA8L3AtdGFiVmlldz5cclxuICAgICAgPHAtdGFibGVcclxuICAgICAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwiTW9zdHJhbmRvIHtmaXJzdH0gYXTDqSB7bGFzdH0gZGUge3RvdGFsUmVjb3Jkc30gcmVnaXN0cm9zXCJcclxuICAgICAgICBzb3J0TW9kZT1cInNpbmdsZVwiXHJcbiAgICAgICAgW3Jvd3NdPVwiMTBcIlxyXG4gICAgICAgIFtsYXp5XT1cInBhZ2luYXRpb24gJiYgIXZpcnR1YWxQYWdpbmF0aW9uXCJcclxuICAgICAgICBbdmFsdWVdPVwiZGF0YVwiXHJcbiAgICAgICAgW3BhZ2luYXRvcl09XCJwYWdpbmF0aW9uXCJcclxuICAgICAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXHJcbiAgICAgICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCJcclxuICAgICAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cIlsxMCwgMjUsIDUwLCAxMDBdXCJcclxuICAgICAgICBbcmVzcG9uc2l2ZV09XCJ0cnVlXCJcclxuICAgICAgICBbcmVzaXphYmxlQ29sdW1uc109XCJ0cnVlXCJcclxuICAgICAgICBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICBzY3JvbGxEaXJlY3Rpb249XCJ2ZXJ0aWNhbFwiXHJcbiAgICAgICAgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiXHJcbiAgICAgICAgZGF0YUtleT1cImlkXCJcclxuICAgICAgICBbc2Nyb2xsSGVpZ2h0XT1cImhlaWdodFwiXHJcbiAgICAgICAgW2F0dHIuc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25Nb2RlXCJcclxuICAgICAgICBbKHNlbGVjdGlvbildPVwic2VsZWN0ZWRJdGVtc1wiXHJcbiAgICAgICAgKG9uUm93U2VsZWN0KT1cImNoYW5nZVNlbGVjdGVkSXRlbXMoJGV2ZW50KVwiXHJcbiAgICAgICAgKG9uSGVhZGVyQ2hlY2tib3hUb2dnbGUpPVwiY2hhbmdlU2VsZWN0ZWRJdGVtcygkZXZlbnQpXCJcclxuICAgICAgICAob25Sb3dVbnNlbGVjdCk9XCJjaGFuZ2VTZWxlY3RlZEl0ZW1zKCRldmVudClcIlxyXG4gICAgICAgIChvbkxhenlMb2FkKT1cImxhenlMb2FkZWQoeyBmaWx0ZXI6IGZhbHNlLCBkYXRhOiAkZXZlbnQgfSlcIlxyXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICA8dHIgY2xhc3M9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgPHRoIHN0eWxlPVwibWF4LXdpZHRoOiAzcmVtXCIgKm5nSWY9XCJzZWxlY3Rpb25UeXBlID09PSAnY2hlY2tib3gnXCI+XHJcbiAgICAgICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveCBbZGlzYWJsZWRdPVwiZGlzYWJsZWRIZWFkZXJjaGVja2JveFwiPjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICA8dGggc3R5bGU9XCJtYXgtd2lkdGg6IDE1MHB4XCIgY2xhc3M9XCJjZW50ZXJlZCB0ZXh0LWNlbnRlclwiICpuZ0lmPVwiaGFzRXhwYW5kYWJsZUljb25cIj5cclxuICAgICAgICAgICAgICB7eyBhZGROYW1lQ29sdW1uRXhwYW5kIH19XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgIDx0aCBzdHlsZT1cIm1heC13aWR0aDogMTAwcHhcIiBjbGFzcz1cImNlbnRlcmVkXCIgKm5nSWY9XCJoYXNBY3Rpb25zXCI+e3sgJ2FwcC5sYWJlbC5hY3Rpb25zJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q29sU3R5bGUoY29sKVwiXHJcbiAgICAgICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbl09XCJjb2wubm90U29ydGFibGUgPyAnJyA6IGNvbC5maWVsZFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7eyBjb2wuaGVhZGVyIH19IDxwLXNvcnRJY29uICpuZ0lmPVwiIWNvbC5ub3RTb3J0YWJsZVwiIFtmaWVsZF09XCJjb2wuZmllbGRcIj48L3Atc29ydEljb24+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtcm93RGF0YSBsZXQtaXRlbSBsZXQtZXhwYW5kZWQ9XCJleHBhbmRlZFwiPlxyXG4gICAgICAgICAgPHRyXHJcbiAgICAgICAgICAgIGNsYXNzPVwicm93XCJcclxuICAgICAgICAgICAgW3BTZWxlY3RhYmxlUm93XT1cInJvd0RhdGFcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7IGV4cGFuZGFibGU6IGV4cGFuZGFibGUgfVwiXHJcbiAgICAgICAgICAgIFtwUm93VG9nZ2xlcl09XCJleHBhbmRhYmxlID8gaXRlbSA6IHVuZGVmaW5lZFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKGl0ZW0pXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvblR5cGUgPT09ICdjaGVja2JveCdcIj5cclxuICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJtYXgtd2lkdGg6IDNyZW07IHBhZGRpbmctbGVmdDogMTBweFwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHAtdGFibGVDaGVja2JveCBbdmFsdWVdPVwiaXRlbVwiIFtkaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkQ2hlY2tCb3hcIj48L3AtdGFibGVDaGVja2JveD5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvblR5cGUgPT09ICdyYWRpb2J1dHRvbidcIj5cclxuICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJtYXgtd2lkdGg6IDNyZW07IHBhZGRpbmctbGVmdDogMTBweFwiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHAtdGFibGVSYWRpb0J1dHRvbiBbdmFsdWVdPVwiaXRlbVwiPjwvcC10YWJsZVJhZGlvQnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJoYXNFeHBhbmRhYmxlSWNvblwiIHN0eWxlPVwibWF4LXdpZHRoOiAxNTBweFwiIGNsYXNzPVwiY2VudGVyZWRcIj5cclxuICAgICAgICAgICAgICA8cC1tZW51ICNtZW51IFttb2RlbF09XCJpdGVtLmFjdGlvbnNcIiBbcG9wdXBdPVwidHJ1ZVwiIGFwcGVuZFRvPVwiYm9keVwiPjwvcC1tZW51PlxyXG4gICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgZXhwYW5kZWQgPyAnYWN0aW9ucy1tZW51LWJ1dHRvbiBwaSBwaS1jaGV2cm9uLWRvd24nIDogJ2FjdGlvbnMtbWVudS1idXR0b24gcGkgcGktY2hldnJvbi1yaWdodCdcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiaGFzQWN0aW9uc1wiIHN0eWxlPVwibWF4LXdpZHRoOiAxMDBweFwiIGNsYXNzPVwiY2VudGVyZWRcIj5cclxuICAgICAgICAgICAgICA8cC1tZW51ICNtZW51IFttb2RlbF09XCJpdGVtLmFjdGlvbnNcIiBbcG9wdXBdPVwidHJ1ZVwiIGFwcGVuZFRvPVwiYm9keVwiPjwvcC1tZW51PlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiYWN0aW9ucy1tZW51LWJ1dHRvbiBmYXMgZmEtY29nXCIgKGNsaWNrKT1cIm1lbnUudG9nZ2xlKCRldmVudClcIj48L2k+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImlzSHRtbENlbGwoY29sKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNlbGxcIlxyXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRDZWxsQ29udGVudChpdGVtLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2wgJiYgY29sLmNsaWNrRnVuY3Rpb24gJiYgY29sLmNsaWNrRnVuY3Rpb24oaXRlbSlcIlxyXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q29sU3R5bGUoY29sKVwiXHJcbiAgICAgICAgICAgICAgPjwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIighaXNIdG1sQ2VsbChjb2wpICYmICEhY29sLmdldFN0YXR1cykgfHwgaXNTY29yZUNlbGwoY29sKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNlbGxcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbCAmJiBjb2wuY2xpY2tGdW5jdGlvbiAmJiBjb2wuY2xpY2tGdW5jdGlvbihpdGVtKVwiXHJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRDb2xTdHlsZShjb2wpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8dmVjdG9yLWJhZGdlXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNCYWRnZUNlbGwoY29sKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJnZXRDZWxsVGV4dChpdGVtLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiY29sLmdldFN0YXR1cyAmJiBjb2wuZ2V0U3RhdHVzKGl0ZW1bY29sLmZpZWxkXSlcIlxyXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJnZXRUb29sdGlwVGV4dChpdGVtLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgID48L3ZlY3Rvci1iYWRnZT5cclxuICAgICAgICAgICAgICAgIDx2ZWN0b3Itc2NvcmUgKm5nSWY9XCJpc1Njb3JlQ2VsbChjb2wpXCIgW3Njb3JlXT1cIml0ZW1bY29sLmZpZWxkXVwiPjwvdmVjdG9yLXNjb3JlPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgIDx0ciBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJuby1yZXN1bHRzXCIgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zLmxlbmd0aCArIDFcIj5OZW5odW0gcmVzdWx0YWRvIGVuY29udHJhZG88L3RkPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JyaWdodFwiPiA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbSBwVGVtcGxhdGU9XCJwYWdpbmF0b3Jkcm9wZG93bml0ZW1cIj4ge3sgaXRlbS52YWx1ZSB9fSA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJyb3dleHBhbnNpb25cIiBsZXQtaXRlbT5cclxuICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiY29sdW1ucy5sZW5ndGggKyAoaGFzQWN0aW9ucyA/IDEgOiAwKVwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJleHBhbnNpb25UZW1wbGF0ZTsgY29udGV4dDogeyBpdGVtIH1cIj4gPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvcC10YWJsZT5cclxuICAgIDwvdmVjdG9yLXBhbmVsPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
@@ -3124,12 +3124,13 @@ class DataTableComponent {
3124
3124
  this.onFilterChanged = new EventEmitter();
3125
3125
  this.onTabSelected = new EventEmitter();
3126
3126
  this.onExpandRow = new EventEmitter();
3127
+ this.firstLazyLoad = false;
3127
3128
  this.selectedItems = [];
3128
3129
  this._selectionMode = null;
3129
3130
  this._height = 'small';
3130
3131
  this._tabs = [];
3131
3132
  this._draw = 1;
3132
- this._firstLazyLoadedDone = false;
3133
+ this._firstLazyLoadedDone = this.firstLazyLoad;
3133
3134
  this._filterSubscription = new Subscription();
3134
3135
  }
3135
3136
  set data(_data) {
@@ -3234,7 +3235,7 @@ class DataTableComponent {
3234
3235
  this._lastLazyLoadEvent = Object.assign(Object.assign(Object.assign({}, (this._lastLazyLoadEvent || {})), { Status: this._tabSelected.code }), { tab: this._tabSelected });
3235
3236
  }
3236
3237
  }
3237
- if (this._firstLazyLoadedDone) {
3238
+ if (this._firstLazyLoadedDone || this.firstLazyLoad) {
3238
3239
  this.onLazyLoad.emit(this._lastLazyLoadEvent);
3239
3240
  }
3240
3241
  this._firstLazyLoadedDone = true;
@@ -3377,7 +3378,7 @@ class DataTableComponent {
3377
3378
  }
3378
3379
  }
3379
3380
  DataTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: DataTableComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
3380
- DataTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: DataTableComponent, selector: "vector-data-table", inputs: { columns: "columns", data: "data", exportExcel: "exportExcel", exportPDF: "exportPDF", customFunction: "customFunction", totalRecords: "totalRecords", disabledHeadercheckbox: "disabledHeadercheckbox", filters: "filters", addItemLabel: "addItemLabel", pagination: "pagination", virtualPagination: "virtualPagination", tabs: "tabs", customButtons: "customButtons", addItemButtonPlusSign: "addItemButtonPlusSign", hasActions: "hasActions", hasExpandableIcon: "hasExpandableIcon", addNameColumnExpand: "addNameColumnExpand", expandable: "expandable", expansionTemplate: "expansionTemplate", selectionMode: "selectionMode", selectionType: "selectionType", height: "height" }, outputs: { onLazyLoad: "onLazyLoad", onFilter: "onFilter", onAdd: "onAdd", onExportExcel: "onExportExcel", onExportPDF: "onExportPDF", onSelectedRows: "onSelectedRows", onFilterChanged: "onFilterChanged", onTabSelected: "onTabSelected", onExpandRow: "onExpandRow" }, viewQueries: [{ propertyName: "filtersComponent", first: true, predicate: FiltersComponent, descendants: true, static: true }], ngImport: i0, template: "<div class=\"grid\">\r\n <div class=\"col-12\">\r\n <vector-filters\r\n [fields]=\"filters\"\r\n (onSearch)=\"lazyLoaded({ filter: true, data: $event })\"\r\n (formBuilded)=\"subscribeToFilterChanges()\"\r\n ></vector-filters>\r\n </div>\r\n <div class=\"table-header-actions field\" *ngIf=\"addItemLabel || exportExcel || exportPDF || customFunction\">\r\n <button *ngIf=\"exportExcel\" (click)=\"onExportExcel.emit()\" class=\"export-button export-excel\">\r\n <i class=\"fas fa-file-excel\"></i><span>Excel</span>\r\n </button>\r\n <button *ngIf=\"exportPDF\" (click)=\"onExportPDF.emit()\" class=\"export-button export-pdf\">\r\n <i class=\"fas fa-file-pdf\"></i><span>PDF</span>\r\n </button>\r\n <button\r\n *ngFor=\"let button of customFunction\"\r\n (click)=\"button.clickFunction()\"\r\n class=\"export-button custom-function\"\r\n >\r\n <i *ngIf=\"button?.icon\" class=\"{{ button?.icon }}\"></i><span>{{ button?.label }}</span>\r\n </button>\r\n\r\n <vector-button\r\n *ngFor=\"let button of customButtons\"\r\n class=\"add-item-button\"\r\n [label]=\"button.label\"\r\n (click)=\"button.clickFunction()\"\r\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\r\n ></vector-button>\r\n <vector-button\r\n *ngIf=\"addItemLabel\"\r\n class=\"add-item-button\"\r\n [label]=\"addItemLabel\"\r\n (click)=\"onAdd.emit()\"\r\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\r\n ></vector-button>\r\n </div>\r\n <div class=\"col-12\">\r\n <vector-panel class=\"data-table-panel\">\r\n <p-tabView (onChange)=\"onTabChange($event)\" *ngIf=\"tabs?.length\">\r\n <p-tabPanel *ngFor=\"let tab of tabs\">\r\n <ng-template pTemplate=\"header\">\r\n <em *ngIf=\"tab.icon\" [class]=\"tab.icon\">&nbsp;</em>\r\n <span>{{ tab.name }}</span>\r\n </ng-template>\r\n </p-tabPanel>\r\n </p-tabView>\r\n <p-table\r\n currentPageReportTemplate=\"Mostrando {first} at\u00E9 {last} de {totalRecords} registros\"\r\n sortMode=\"single\"\r\n [rows]=\"10\"\r\n [lazy]=\"pagination && !virtualPagination\"\r\n [value]=\"data\"\r\n [paginator]=\"pagination\"\r\n [totalRecords]=\"totalRecords\"\r\n [showCurrentPageReport]=\"true\"\r\n [rowsPerPageOptions]=\"[10, 25, 50, 100]\"\r\n [responsive]=\"true\"\r\n [resizableColumns]=\"true\"\r\n [scrollable]=\"true\"\r\n scrollDirection=\"vertical\"\r\n responsiveLayout=\"scroll\"\r\n dataKey=\"id\"\r\n [scrollHeight]=\"height\"\r\n [attr.selectionMode]=\"selectionMode\"\r\n [(selection)]=\"selectedItems\"\r\n (onRowSelect)=\"changeSelectedItems($event)\"\r\n (onHeaderCheckboxToggle)=\"changeSelectedItems($event)\"\r\n (onRowUnselect)=\"changeSelectedItems($event)\"\r\n (onLazyLoad)=\"lazyLoaded({ filter: false, data: $event })\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <tr class=\"header\">\r\n <th style=\"max-width: 3rem\" *ngIf=\"selectionType === 'checkbox'\">\r\n <p-tableHeaderCheckbox [disabled]=\"disabledHeadercheckbox\"></p-tableHeaderCheckbox>\r\n </th>\r\n <th style=\"max-width: 150px\" class=\"centered text-center\" *ngIf=\"hasExpandableIcon\">\r\n {{ addNameColumnExpand }}\r\n </th>\r\n <th style=\"max-width: 100px\" class=\"centered\" *ngIf=\"hasActions\">{{ 'app.label.actions' | translate }}</th>\r\n <th\r\n *ngFor=\"let col of columns\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n [pSortableColumn]=\"col.notSortable ? '' : col.field\"\r\n >\r\n {{ col.header }} <p-sortIcon *ngIf=\"!col.notSortable\" [field]=\"col.field\"></p-sortIcon>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-item let-expanded=\"expanded\">\r\n <tr\r\n class=\"row\"\r\n [pSelectableRow]=\"rowData\"\r\n [ngClass]=\"{ expandable: expandable }\"\r\n [pRowToggler]=\"expandable ? item : undefined\"\r\n (click)=\"onRowClick(item)\"\r\n >\r\n <ng-container *ngIf=\"selectionType === 'checkbox'\">\r\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"flex justify-content-center align-items-center\">\r\n <p-tableCheckbox [value]=\"item\" [disabled]=\"item.disabledCheckBox\"></p-tableCheckbox>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectionType === 'radiobutton'\">\r\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"flex justify-content-center align-items-center\">\r\n <p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\r\n </td>\r\n </ng-container>\r\n <td *ngIf=\"hasExpandableIcon\" style=\"max-width: 150px\" class=\"centered\">\r\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\r\n <i\r\n [ngClass]=\"\r\n expanded ? 'actions-menu-button pi pi-chevron-down' : 'actions-menu-button pi pi-chevron-right'\r\n \"\r\n ></i>\r\n </td>\r\n <td *ngIf=\"hasActions\" style=\"max-width: 100px\" class=\"centered\">\r\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\r\n <i class=\"actions-menu-button fas fa-cog\" (click)=\"menu.toggle($event)\"></i>\r\n </td>\r\n <ng-container *ngFor=\"let col of columns\">\r\n <td\r\n *ngIf=\"isHtmlCell(col)\"\r\n class=\"cell\"\r\n [innerHTML]=\"getCellContent(item, col)\"\r\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n ></td>\r\n <td\r\n *ngIf=\"(!isHtmlCell(col) && !!col.getStatus) || isScoreCell(col)\"\r\n class=\"cell\"\r\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n >\r\n <vector-badge\r\n *ngIf=\"isBadgeCell(col)\"\r\n [label]=\"getCellText(item, col)\"\r\n [type]=\"col.getStatus && col.getStatus(item[col.field])\"\r\n [tooltip]=\"getTooltipText(item, col)\"\r\n ></vector-badge>\r\n <vector-score *ngIf=\"isScoreCell(col)\" [score]=\"item[col.field]\"></vector-score>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"row\">\r\n <td class=\"no-results\" [attr.colspan]=\"columns.length + 1\">Nenhum resultado encontrado</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatorright\"> </ng-template>\r\n <ng-template let-item pTemplate=\"paginatordropdownitem\"> {{ item.value }} </ng-template>\r\n <ng-template pTemplate=\"rowexpansion\" let-item>\r\n <tr>\r\n <td [attr.colspan]=\"columns.length + (hasActions ? 1 : 0)\">\r\n <ng-container *ngTemplateOutlet=\"expansionTemplate; context: { item }\"> </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </vector-panel>\r\n </div>\r\n</div>\r\n", styles: [".no-results{padding:15px;background-color:#fff;width:100%}.centered{display:flex;justify-content:center}.table-header-actions{display:flex;justify-content:flex-end;align-items:flex-end;width:100%;padding-right:7px;margin-bottom:15px!important}@media (min-width: 768px){.table-header-actions{margin-top:-3px}}.table-header-actions .export-button{padding:7px 10px;color:#fff;display:flex;align-items:center;border:none;border-radius:5px;margin:5px;font-size:.75rem;cursor:pointer}.table-header-actions .export-button.export-excel{background-color:var(--success-color)}.table-header-actions .export-button.export-excel:hover{background-color:var(--success-color-dark)}.table-header-actions .export-button.export-pdf{background-color:var(--error-color)}.table-header-actions .export-button.export-pdf:hover{background-color:var(--error-color-dark)}.table-header-actions .export-button.custom-function{background-color:var(--theme-primary)}.table-header-actions .export-button.custom-function:hover{background-color:var(--theme-medium)}.table-header-actions .export-button i{color:#fff}.table-header-actions .export-button span{margin-left:5px}.table-header-actions .add-item-button{margin-left:10px}.actions-menu-button{font-size:23px;cursor:pointer;color:var(--theme-medium)}.expandable{cursor:pointer}\n"], components: [{ type: FiltersComponent, selector: "vector-filters", inputs: ["fields"], outputs: ["onSearch", "formBuilded"] }, { type: ButtonComponent, selector: "vector-button", inputs: ["disabled", "label", "type", "leftIcon", "rightIcon", "noShadow", "style"], outputs: ["onClick"] }, { type: PanelComponent, selector: "vector-panel" }, { type: i4$1.TabView, selector: "p-tabView", inputs: ["orientation", "style", "styleClass", "controlClose", "scrollable", "activeIndex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { type: i4$1.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { type: i5.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "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", "virtualScrollDelay", "virtualRowHeight", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "minBufferPx", "maxBufferPx", "responsiveLayout", "breakpoint", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { type: i5.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { type: i5.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { type: i5.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { type: i5.TableRadioButton, selector: "p-tableRadioButton", inputs: ["disabled", "value", "index", "inputId", "name", "ariaLabel"] }, { type: i6$1.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { type: BadgeComponent, selector: "vector-badge", inputs: ["type", "label", "customColor", "customBackgroundColor", "tooltip"] }, { type: ScoreComponent, selector: "vector-score", inputs: ["score"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2$3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { type: i5.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.RowToggler, selector: "[pRowToggler]", inputs: ["pRowToggler", "pRowTogglerDisabled"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "translate": i1$1.TranslatePipe } });
3381
+ DataTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: DataTableComponent, selector: "vector-data-table", inputs: { columns: "columns", data: "data", exportExcel: "exportExcel", exportPDF: "exportPDF", customFunction: "customFunction", totalRecords: "totalRecords", disabledHeadercheckbox: "disabledHeadercheckbox", filters: "filters", addItemLabel: "addItemLabel", pagination: "pagination", virtualPagination: "virtualPagination", tabs: "tabs", customButtons: "customButtons", addItemButtonPlusSign: "addItemButtonPlusSign", hasActions: "hasActions", hasExpandableIcon: "hasExpandableIcon", addNameColumnExpand: "addNameColumnExpand", expandable: "expandable", expansionTemplate: "expansionTemplate", selectionMode: "selectionMode", selectionType: "selectionType", height: "height", firstLazyLoad: "firstLazyLoad" }, outputs: { onLazyLoad: "onLazyLoad", onFilter: "onFilter", onAdd: "onAdd", onExportExcel: "onExportExcel", onExportPDF: "onExportPDF", onSelectedRows: "onSelectedRows", onFilterChanged: "onFilterChanged", onTabSelected: "onTabSelected", onExpandRow: "onExpandRow" }, viewQueries: [{ propertyName: "filtersComponent", first: true, predicate: FiltersComponent, descendants: true, static: true }], ngImport: i0, template: "<div class=\"grid\">\r\n <div class=\"col-12\">\r\n <vector-filters\r\n [fields]=\"filters\"\r\n (onSearch)=\"lazyLoaded({ filter: true, data: $event })\"\r\n (formBuilded)=\"subscribeToFilterChanges()\"\r\n ></vector-filters>\r\n </div>\r\n <div class=\"table-header-actions field\" *ngIf=\"addItemLabel || exportExcel || exportPDF || customFunction\">\r\n <button *ngIf=\"exportExcel\" (click)=\"onExportExcel.emit()\" class=\"export-button export-excel\">\r\n <i class=\"fas fa-file-excel\"></i><span>Excel</span>\r\n </button>\r\n <button *ngIf=\"exportPDF\" (click)=\"onExportPDF.emit()\" class=\"export-button export-pdf\">\r\n <i class=\"fas fa-file-pdf\"></i><span>PDF</span>\r\n </button>\r\n <button\r\n *ngFor=\"let button of customFunction\"\r\n (click)=\"button.clickFunction()\"\r\n class=\"export-button custom-function\"\r\n >\r\n <i *ngIf=\"button?.icon\" class=\"{{ button?.icon }}\"></i><span>{{ button?.label }}</span>\r\n </button>\r\n\r\n <vector-button\r\n *ngFor=\"let button of customButtons\"\r\n class=\"add-item-button\"\r\n [label]=\"button.label\"\r\n (click)=\"button.clickFunction()\"\r\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\r\n ></vector-button>\r\n <vector-button\r\n *ngIf=\"addItemLabel\"\r\n class=\"add-item-button\"\r\n [label]=\"addItemLabel\"\r\n (click)=\"onAdd.emit()\"\r\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\r\n ></vector-button>\r\n </div>\r\n <div class=\"col-12\">\r\n <vector-panel class=\"data-table-panel\">\r\n <p-tabView (onChange)=\"onTabChange($event)\" *ngIf=\"tabs?.length\">\r\n <p-tabPanel *ngFor=\"let tab of tabs\">\r\n <ng-template pTemplate=\"header\">\r\n <em *ngIf=\"tab.icon\" [class]=\"tab.icon\">&nbsp;</em>\r\n <span>{{ tab.name }}</span>\r\n </ng-template>\r\n </p-tabPanel>\r\n </p-tabView>\r\n <p-table\r\n currentPageReportTemplate=\"Mostrando {first} at\u00E9 {last} de {totalRecords} registros\"\r\n sortMode=\"single\"\r\n [rows]=\"10\"\r\n [lazy]=\"pagination && !virtualPagination\"\r\n [value]=\"data\"\r\n [paginator]=\"pagination\"\r\n [totalRecords]=\"totalRecords\"\r\n [showCurrentPageReport]=\"true\"\r\n [rowsPerPageOptions]=\"[10, 25, 50, 100]\"\r\n [responsive]=\"true\"\r\n [resizableColumns]=\"true\"\r\n [scrollable]=\"true\"\r\n scrollDirection=\"vertical\"\r\n responsiveLayout=\"scroll\"\r\n dataKey=\"id\"\r\n [scrollHeight]=\"height\"\r\n [attr.selectionMode]=\"selectionMode\"\r\n [(selection)]=\"selectedItems\"\r\n (onRowSelect)=\"changeSelectedItems($event)\"\r\n (onHeaderCheckboxToggle)=\"changeSelectedItems($event)\"\r\n (onRowUnselect)=\"changeSelectedItems($event)\"\r\n (onLazyLoad)=\"lazyLoaded({ filter: false, data: $event })\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <tr class=\"header\">\r\n <th style=\"max-width: 3rem\" *ngIf=\"selectionType === 'checkbox'\">\r\n <p-tableHeaderCheckbox [disabled]=\"disabledHeadercheckbox\"></p-tableHeaderCheckbox>\r\n </th>\r\n <th style=\"max-width: 150px\" class=\"centered text-center\" *ngIf=\"hasExpandableIcon\">\r\n {{ addNameColumnExpand }}\r\n </th>\r\n <th style=\"max-width: 100px\" class=\"centered\" *ngIf=\"hasActions\">{{ 'app.label.actions' | translate }}</th>\r\n <th\r\n *ngFor=\"let col of columns\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n [pSortableColumn]=\"col.notSortable ? '' : col.field\"\r\n >\r\n {{ col.header }} <p-sortIcon *ngIf=\"!col.notSortable\" [field]=\"col.field\"></p-sortIcon>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-item let-expanded=\"expanded\">\r\n <tr\r\n class=\"row\"\r\n [pSelectableRow]=\"rowData\"\r\n [ngClass]=\"{ expandable: expandable }\"\r\n [pRowToggler]=\"expandable ? item : undefined\"\r\n (click)=\"onRowClick(item)\"\r\n >\r\n <ng-container *ngIf=\"selectionType === 'checkbox'\">\r\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"flex justify-content-center align-items-center\">\r\n <p-tableCheckbox [value]=\"item\" [disabled]=\"item.disabledCheckBox\"></p-tableCheckbox>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectionType === 'radiobutton'\">\r\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"flex justify-content-center align-items-center\">\r\n <p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\r\n </td>\r\n </ng-container>\r\n <td *ngIf=\"hasExpandableIcon\" style=\"max-width: 150px\" class=\"centered\">\r\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\r\n <i\r\n [ngClass]=\"\r\n expanded ? 'actions-menu-button pi pi-chevron-down' : 'actions-menu-button pi pi-chevron-right'\r\n \"\r\n ></i>\r\n </td>\r\n <td *ngIf=\"hasActions\" style=\"max-width: 100px\" class=\"centered\">\r\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\r\n <i class=\"actions-menu-button fas fa-cog\" (click)=\"menu.toggle($event)\"></i>\r\n </td>\r\n <ng-container *ngFor=\"let col of columns\">\r\n <td\r\n *ngIf=\"isHtmlCell(col)\"\r\n class=\"cell\"\r\n [innerHTML]=\"getCellContent(item, col)\"\r\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n ></td>\r\n <td\r\n *ngIf=\"(!isHtmlCell(col) && !!col.getStatus) || isScoreCell(col)\"\r\n class=\"cell\"\r\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n >\r\n <vector-badge\r\n *ngIf=\"isBadgeCell(col)\"\r\n [label]=\"getCellText(item, col)\"\r\n [type]=\"col.getStatus && col.getStatus(item[col.field])\"\r\n [tooltip]=\"getTooltipText(item, col)\"\r\n ></vector-badge>\r\n <vector-score *ngIf=\"isScoreCell(col)\" [score]=\"item[col.field]\"></vector-score>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"row\">\r\n <td class=\"no-results\" [attr.colspan]=\"columns.length + 1\">Nenhum resultado encontrado</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatorright\"> </ng-template>\r\n <ng-template let-item pTemplate=\"paginatordropdownitem\"> {{ item.value }} </ng-template>\r\n <ng-template pTemplate=\"rowexpansion\" let-item>\r\n <tr>\r\n <td [attr.colspan]=\"columns.length + (hasActions ? 1 : 0)\">\r\n <ng-container *ngTemplateOutlet=\"expansionTemplate; context: { item }\"> </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </vector-panel>\r\n </div>\r\n</div>\r\n", styles: [".no-results{padding:15px;background-color:#fff;width:100%}.centered{display:flex;justify-content:center}.table-header-actions{display:flex;justify-content:flex-end;align-items:flex-end;width:100%;padding-right:7px;margin-bottom:15px!important}@media (min-width: 768px){.table-header-actions{margin-top:-3px}}.table-header-actions .export-button{padding:7px 10px;color:#fff;display:flex;align-items:center;border:none;border-radius:5px;margin:5px;font-size:.75rem;cursor:pointer}.table-header-actions .export-button.export-excel{background-color:var(--success-color)}.table-header-actions .export-button.export-excel:hover{background-color:var(--success-color-dark)}.table-header-actions .export-button.export-pdf{background-color:var(--error-color)}.table-header-actions .export-button.export-pdf:hover{background-color:var(--error-color-dark)}.table-header-actions .export-button.custom-function{background-color:var(--theme-primary)}.table-header-actions .export-button.custom-function:hover{background-color:var(--theme-medium)}.table-header-actions .export-button i{color:#fff}.table-header-actions .export-button span{margin-left:5px}.table-header-actions .add-item-button{margin-left:10px}.actions-menu-button{font-size:23px;cursor:pointer;color:var(--theme-medium)}.expandable{cursor:pointer}\n"], components: [{ type: FiltersComponent, selector: "vector-filters", inputs: ["fields"], outputs: ["onSearch", "formBuilded"] }, { type: ButtonComponent, selector: "vector-button", inputs: ["disabled", "label", "type", "leftIcon", "rightIcon", "noShadow", "style"], outputs: ["onClick"] }, { type: PanelComponent, selector: "vector-panel" }, { type: i4$1.TabView, selector: "p-tabView", inputs: ["orientation", "style", "styleClass", "controlClose", "scrollable", "activeIndex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { type: i4$1.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { type: i5.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "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", "virtualScrollDelay", "virtualRowHeight", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "minBufferPx", "maxBufferPx", "responsiveLayout", "breakpoint", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { type: i5.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { type: i5.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { type: i5.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { type: i5.TableRadioButton, selector: "p-tableRadioButton", inputs: ["disabled", "value", "index", "inputId", "name", "ariaLabel"] }, { type: i6$1.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { type: BadgeComponent, selector: "vector-badge", inputs: ["type", "label", "customColor", "customBackgroundColor", "tooltip"] }, { type: ScoreComponent, selector: "vector-score", inputs: ["score"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2$3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { type: i5.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.RowToggler, selector: "[pRowToggler]", inputs: ["pRowToggler", "pRowTogglerDisabled"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "translate": i1$1.TranslatePipe } });
3381
3382
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: DataTableComponent, decorators: [{
3382
3383
  type: Component,
3383
3384
  args: [{ selector: 'vector-data-table', template: "<div class=\"grid\">\r\n <div class=\"col-12\">\r\n <vector-filters\r\n [fields]=\"filters\"\r\n (onSearch)=\"lazyLoaded({ filter: true, data: $event })\"\r\n (formBuilded)=\"subscribeToFilterChanges()\"\r\n ></vector-filters>\r\n </div>\r\n <div class=\"table-header-actions field\" *ngIf=\"addItemLabel || exportExcel || exportPDF || customFunction\">\r\n <button *ngIf=\"exportExcel\" (click)=\"onExportExcel.emit()\" class=\"export-button export-excel\">\r\n <i class=\"fas fa-file-excel\"></i><span>Excel</span>\r\n </button>\r\n <button *ngIf=\"exportPDF\" (click)=\"onExportPDF.emit()\" class=\"export-button export-pdf\">\r\n <i class=\"fas fa-file-pdf\"></i><span>PDF</span>\r\n </button>\r\n <button\r\n *ngFor=\"let button of customFunction\"\r\n (click)=\"button.clickFunction()\"\r\n class=\"export-button custom-function\"\r\n >\r\n <i *ngIf=\"button?.icon\" class=\"{{ button?.icon }}\"></i><span>{{ button?.label }}</span>\r\n </button>\r\n\r\n <vector-button\r\n *ngFor=\"let button of customButtons\"\r\n class=\"add-item-button\"\r\n [label]=\"button.label\"\r\n (click)=\"button.clickFunction()\"\r\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\r\n ></vector-button>\r\n <vector-button\r\n *ngIf=\"addItemLabel\"\r\n class=\"add-item-button\"\r\n [label]=\"addItemLabel\"\r\n (click)=\"onAdd.emit()\"\r\n [rightIcon]=\"addItemButtonPlusSign ? 'pi pi-plus' : ''\"\r\n ></vector-button>\r\n </div>\r\n <div class=\"col-12\">\r\n <vector-panel class=\"data-table-panel\">\r\n <p-tabView (onChange)=\"onTabChange($event)\" *ngIf=\"tabs?.length\">\r\n <p-tabPanel *ngFor=\"let tab of tabs\">\r\n <ng-template pTemplate=\"header\">\r\n <em *ngIf=\"tab.icon\" [class]=\"tab.icon\">&nbsp;</em>\r\n <span>{{ tab.name }}</span>\r\n </ng-template>\r\n </p-tabPanel>\r\n </p-tabView>\r\n <p-table\r\n currentPageReportTemplate=\"Mostrando {first} at\u00E9 {last} de {totalRecords} registros\"\r\n sortMode=\"single\"\r\n [rows]=\"10\"\r\n [lazy]=\"pagination && !virtualPagination\"\r\n [value]=\"data\"\r\n [paginator]=\"pagination\"\r\n [totalRecords]=\"totalRecords\"\r\n [showCurrentPageReport]=\"true\"\r\n [rowsPerPageOptions]=\"[10, 25, 50, 100]\"\r\n [responsive]=\"true\"\r\n [resizableColumns]=\"true\"\r\n [scrollable]=\"true\"\r\n scrollDirection=\"vertical\"\r\n responsiveLayout=\"scroll\"\r\n dataKey=\"id\"\r\n [scrollHeight]=\"height\"\r\n [attr.selectionMode]=\"selectionMode\"\r\n [(selection)]=\"selectedItems\"\r\n (onRowSelect)=\"changeSelectedItems($event)\"\r\n (onHeaderCheckboxToggle)=\"changeSelectedItems($event)\"\r\n (onRowUnselect)=\"changeSelectedItems($event)\"\r\n (onLazyLoad)=\"lazyLoaded({ filter: false, data: $event })\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <tr class=\"header\">\r\n <th style=\"max-width: 3rem\" *ngIf=\"selectionType === 'checkbox'\">\r\n <p-tableHeaderCheckbox [disabled]=\"disabledHeadercheckbox\"></p-tableHeaderCheckbox>\r\n </th>\r\n <th style=\"max-width: 150px\" class=\"centered text-center\" *ngIf=\"hasExpandableIcon\">\r\n {{ addNameColumnExpand }}\r\n </th>\r\n <th style=\"max-width: 100px\" class=\"centered\" *ngIf=\"hasActions\">{{ 'app.label.actions' | translate }}</th>\r\n <th\r\n *ngFor=\"let col of columns\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n [pSortableColumn]=\"col.notSortable ? '' : col.field\"\r\n >\r\n {{ col.header }} <p-sortIcon *ngIf=\"!col.notSortable\" [field]=\"col.field\"></p-sortIcon>\r\n </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-item let-expanded=\"expanded\">\r\n <tr\r\n class=\"row\"\r\n [pSelectableRow]=\"rowData\"\r\n [ngClass]=\"{ expandable: expandable }\"\r\n [pRowToggler]=\"expandable ? item : undefined\"\r\n (click)=\"onRowClick(item)\"\r\n >\r\n <ng-container *ngIf=\"selectionType === 'checkbox'\">\r\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"flex justify-content-center align-items-center\">\r\n <p-tableCheckbox [value]=\"item\" [disabled]=\"item.disabledCheckBox\"></p-tableCheckbox>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectionType === 'radiobutton'\">\r\n <td style=\"max-width: 3rem; padding-left: 10px\" class=\"flex justify-content-center align-items-center\">\r\n <p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\r\n </td>\r\n </ng-container>\r\n <td *ngIf=\"hasExpandableIcon\" style=\"max-width: 150px\" class=\"centered\">\r\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\r\n <i\r\n [ngClass]=\"\r\n expanded ? 'actions-menu-button pi pi-chevron-down' : 'actions-menu-button pi pi-chevron-right'\r\n \"\r\n ></i>\r\n </td>\r\n <td *ngIf=\"hasActions\" style=\"max-width: 100px\" class=\"centered\">\r\n <p-menu #menu [model]=\"item.actions\" [popup]=\"true\" appendTo=\"body\"></p-menu>\r\n <i class=\"actions-menu-button fas fa-cog\" (click)=\"menu.toggle($event)\"></i>\r\n </td>\r\n <ng-container *ngFor=\"let col of columns\">\r\n <td\r\n *ngIf=\"isHtmlCell(col)\"\r\n class=\"cell\"\r\n [innerHTML]=\"getCellContent(item, col)\"\r\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n ></td>\r\n <td\r\n *ngIf=\"(!isHtmlCell(col) && !!col.getStatus) || isScoreCell(col)\"\r\n class=\"cell\"\r\n (click)=\"col && col.clickFunction && col.clickFunction(item)\"\r\n [ngStyle]=\"getColStyle(col)\"\r\n >\r\n <vector-badge\r\n *ngIf=\"isBadgeCell(col)\"\r\n [label]=\"getCellText(item, col)\"\r\n [type]=\"col.getStatus && col.getStatus(item[col.field])\"\r\n [tooltip]=\"getTooltipText(item, col)\"\r\n ></vector-badge>\r\n <vector-score *ngIf=\"isScoreCell(col)\" [score]=\"item[col.field]\"></vector-score>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"row\">\r\n <td class=\"no-results\" [attr.colspan]=\"columns.length + 1\">Nenhum resultado encontrado</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatorright\"> </ng-template>\r\n <ng-template let-item pTemplate=\"paginatordropdownitem\"> {{ item.value }} </ng-template>\r\n <ng-template pTemplate=\"rowexpansion\" let-item>\r\n <tr>\r\n <td [attr.colspan]=\"columns.length + (hasActions ? 1 : 0)\">\r\n <ng-container *ngTemplateOutlet=\"expansionTemplate; context: { item }\"> </ng-container>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </vector-panel>\r\n </div>\r\n</div>\r\n", styles: [".no-results{padding:15px;background-color:#fff;width:100%}.centered{display:flex;justify-content:center}.table-header-actions{display:flex;justify-content:flex-end;align-items:flex-end;width:100%;padding-right:7px;margin-bottom:15px!important}@media (min-width: 768px){.table-header-actions{margin-top:-3px}}.table-header-actions .export-button{padding:7px 10px;color:#fff;display:flex;align-items:center;border:none;border-radius:5px;margin:5px;font-size:.75rem;cursor:pointer}.table-header-actions .export-button.export-excel{background-color:var(--success-color)}.table-header-actions .export-button.export-excel:hover{background-color:var(--success-color-dark)}.table-header-actions .export-button.export-pdf{background-color:var(--error-color)}.table-header-actions .export-button.export-pdf:hover{background-color:var(--error-color-dark)}.table-header-actions .export-button.custom-function{background-color:var(--theme-primary)}.table-header-actions .export-button.custom-function:hover{background-color:var(--theme-medium)}.table-header-actions .export-button i{color:#fff}.table-header-actions .export-button span{margin-left:5px}.table-header-actions .add-item-button{margin-left:10px}.actions-menu-button{font-size:23px;cursor:pointer;color:var(--theme-medium)}.expandable{cursor:pointer}\n"] }]
@@ -3443,6 +3444,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImpor
3443
3444
  type: Output
3444
3445
  }], onExpandRow: [{
3445
3446
  type: Output
3447
+ }], firstLazyLoad: [{
3448
+ type: Input
3446
3449
  }], filtersComponent: [{
3447
3450
  type: ViewChild,
3448
3451
  args: [FiltersComponent, { static: true }]