@smartbit4all/ng-client 4.2.80 → 4.2.82
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.
|
@@ -971,11 +971,11 @@ export class SmartGridComponent {
|
|
|
971
971
|
}
|
|
972
972
|
}
|
|
973
973
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartGridComponent, deps: [{ token: i1.SmartGridService }, { token: i2.ComponentFactoryService }, { token: i3.MatDialog }, { token: i0.Injector }, { token: i4.UiActionDescriptorService }, { token: COMPONENT_LIBRARY }, { token: 'gridMenuIcon' }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
974
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SmartGridComponent, selector: "smart-grid", inputs: { smartGrid: "smartGrid", uuid: "uuid", dev: "dev" }, providers: [SmartGridService], viewQueries: [{ propertyName: "vcRefTable", first: true, predicate: ["table"], descendants: true, read: ViewContainerRef }, { propertyName: "toolbar", first: true, predicate: ["toolbar"], descendants: true }, { propertyName: "_headerToolbar", first: true, predicate: ["headerToolbar"], descendants: true }, { propertyName: "menu", first: true, predicate: ["menu"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if(compLib === componentLibrary.PRIMENG) {\r\n\r\n<div *ngIf=\"smartGrid\" class=\"primeSmartGrid-container\">\r\n <div class=\"smart-grid-toolbar\">\r\n <smart-ui-action-toolbar #toolbar [id]=\"'grid_not_initialized'\"></smart-ui-action-toolbar>\r\n </div>\r\n <p-table\r\n *ngIf=\"!smartGrid.layoutDef || smartGrid.layoutDef === layoutDef().TABLE\"\r\n #pTable\r\n [value]=\"smartGrid.gridModel.page.rows!\"\r\n (onSort)=\"gridSort($event)\"\r\n [customSort]=\"true\"\r\n [sortMode]=\"'multiple'\"\r\n [lazy]=\"true\"\r\n (onLazyLoad)=\"lazyLoad($event)\"\r\n [reorderableColumns]=\"smartGrid.gridModel.view?.descriptor?.showEditColumns\"\r\n [columns]=\"columns\"\r\n (onColReorder)=\"onColOrder($event)\"\r\n (onRowSelect)=\"onRowSelect($event)\"\r\n (onRowUnselect)=\"onRowUnselect($event)\"\r\n [selection]=\"selectedRows\"\r\n (onHeaderCheckboxToggle)=\"onSelectAllRow($event)\"\r\n dataKey=\"id\"\r\n [expandedRowKeys]=\"expandedRows\"\r\n (onRowExpand)=\"omPrimeNgRowExpand($event)\"\r\n [rowExpandMode]=\"'multiple'\"\r\n >\r\n <ng-container>\r\n <ng-template\r\n pTemplate=\"caption\"\r\n *ngIf=\"smartGrid.gridModel.view?.descriptor?.showEditColumns || smartGrid.gridModel.title\"\r\n >\r\n <div class=\"tableCaption\">\r\n <div *ngIf=\"smartGrid.gridModel.title\" class=\"captionTitle\">\r\n {{ smartGrid.gridModel.title }}\r\n </div>\r\n <div *ngIf=\"smartGrid.gridModel.view?.descriptor?.showEditColumns\">\r\n <p-multiSelect\r\n display=\"chip\"\r\n [options]=\"smartGrid.gridModel.view?.descriptor?.columns\"\r\n optionLabel=\"label\"\r\n [(ngModel)]=\"columns\"\r\n selectedItemsLabel=\"{0} columns selected\"\r\n [style]=\"{ 'min-width': '200px' }\"\r\n placeholder=\"Choose Columns\"\r\n (onChange)=\"headerChange($event)\"\r\n />\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n @if (smartGrid.gridModel.view?.descriptor?.showEditColumns) {\r\n <th\r\n *ngIf=\"isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\"\r\n style=\"width: 4rem\"\r\n >\r\n <p-tableHeaderCheckbox />\r\n </th>\r\n <th\r\n *ngIf=\"!isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\"\r\n style=\"width: 4rem\"\r\n ></th>\r\n <th [pSortableColumn]=\"col.propertyName\" *ngFor=\"let col of columns\" pReorderableColumn>\r\n <p-sortIcon [field]=\"col.propertyName\" />\r\n {{ col.label }}\r\n </th>\r\n } @else {\r\n <th\r\n *ngIf=\"isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\"\r\n style=\"width: 4rem\"\r\n >\r\n <p-tableHeaderCheckbox />\r\n </th>\r\n <th\r\n *ngIf=\"!isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\"\r\n style=\"width: 4rem\"\r\n ></th>\r\n <th [pSortableColumn]=\"col.propertyName\" *ngFor=\"let col of columns\">\r\n <p-sortIcon [field]=\"col.propertyName\" />\r\n {{ col.label }}\r\n </th>\r\n }\r\n\r\n <th>\r\n <smart-ui-action-toolbar\r\n class=\"headerToolbar\"\r\n #headerToolbar\r\n [id]=\"'header_not_initialized'\"\r\n ></smart-ui-action-toolbar>\r\n </th>\r\n <th *ngIf=\"smartGrid.expandable\"> </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row let-expanded=\"expanded\">\r\n <tr [ngClass]=\"getStyle(row)\" (dblclick)=\"onDoubleClick(row)\" *ngIf=\"row && row.data\">\r\n <td *ngIf=\"isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\">\r\n <p-tableCheckbox *ngIf=\"row.selectable != false\" [value]=\"row\" />\r\n </td>\r\n <td *ngIf=\"!isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\">\r\n <p-tableRadioButton [value]=\"row\" />\r\n </td>\r\n <td *ngFor=\"let col of smartGrid?.gridModel?.view?.orderedColumnNames\">\r\n <div *ngIf=\"row.icons[col]\">\r\n <div class=\"smart-table-icon-container\">\r\n <div *ngFor=\"let ir of getImageResourceIcons(row, col)\">\r\n <div\r\n pTooltip=\"{{ ir.tooltip?.tooltip }}\"\r\n tooltipPosition=\"right\"\r\n placeholder=\"Right\"\r\n [ngStyle]=\"getImageResourceStyle(ir)\"\r\n ><smart-icon [icon]=\"ir.identifier!\" [color]=\"ir.color!\"> </smart-icon\r\n ></div>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"showCellToolbar(row, col)\">\r\n <smart-ui-action-toolbar\r\n [uiActionModels]=\"getRowColumnAction(row, col)\"\r\n ></smart-ui-action-toolbar>\r\n </ng-container>\r\n\r\n <div *ngIf=\"!row.icons[col]\" [innerHtml]=\"getColValue(col, row)\"> </div>\r\n </td>\r\n <td>\r\n <div class=\"menu-button\">\r\n @if(showCellToolbar(row, defaultActionToolbarId)){\r\n <smart-ui-action-toolbar\r\n [uiActionModels]=\"getRowColumnAction(row, defaultActionToolbarId)\"\r\n ></smart-ui-action-toolbar>\r\n }\r\n <p-button\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n *ngIf=\"shouldShowOptionsButton(row)\"\r\n (onClick)=\"onOptionsClick($event, row)\"\r\n >\r\n <smart-icon icon=\"ellipsis-v\"></smart-icon>\r\n </p-button>\r\n </div>\r\n </td>\r\n <td *ngIf=\"smartGrid.expandable\">\r\n <p-button\r\n type=\"button\"\r\n pRipple\r\n [pRowToggler]=\"row\"\r\n [text]=\"true\"\r\n severity=\"secondary\"\r\n [rounded]=\"true\"\r\n [icon]=\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-up'\"\r\n />\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template *ngIf=\"smartGrid.expandable\" pTemplate=\"rowexpansion\" let-row>\r\n <lib-generic-component\r\n [rowData]=\"row\"\r\n [expandedComponent]=\"this.smartGrid.expandedComponent\"\r\n ></lib-generic-component>\r\n </ng-template>\r\n </p-table>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().CARD && smartGrid.dataLayoutDef\"\r\n class=\"cards-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <app-smart-grid-card\r\n class=\"smartGrid-card-container\"\r\n *ngFor=\"let task of smartGrid.gridModel.page.rows\"\r\n [item]=\"task\"\r\n [smartGrid]=\"smartGrid\"\r\n [onSelect]=\"onSelect.bind(this)\"\r\n ></app-smart-grid-card>\r\n </div>\r\n <p-paginator\r\n *ngIf=\"smartGrid.paginator\"\r\n [first]=\"pageIndex!\"\r\n [totalRecords]=\"length!\"\r\n [rows]=\"pageSize\"\r\n [rowsPerPageOptions]=\"pageSizeOptions\"\r\n (onPageChange)=\"onPrimeChangePage($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n dropdownAppendTo=\"body\"\r\n />\r\n <p-menu #menu [model]=\"menuButtons\" [popup]=\"true\" appendTo=\"body\"> </p-menu>\r\n</div>\r\n}@else {\r\n<div *ngIf=\"smartGrid\" class=\"smartGrid-container\">\r\n <div class=\"smart-grid-toolbar\">\r\n <smart-ui-action-toolbar #toolbar [id]=\"'grid_not_initialized'\"></smart-ui-action-toolbar>\r\n <button\r\n (click)=\"editColumns()\"\r\n mat-mini-fab\r\n color=\"text-primary\"\r\n *ngIf=\"smartGrid.showEditColumns\"\r\n >\r\n <mat-icon aria-hidden=\"false\" aria-label=\"Columns\" class=\"smart-grid-edit-icon\"\r\n >view_columns</mat-icon\r\n >\r\n </button>\r\n </div>\r\n <!-- <div [ngClass]=\"isBlocked ? 'blocked' : ''\"></div> -->\r\n <div class=\"smartGridContent\">\r\n <div>\r\n <div *ngIf=\"smartGrid.showResultCount\">\r\n <div class=\"smartGrid-data-number\">\r\n {{ smartGrid.gridModel.totalRowCount }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"smart-grid-table-container\">\r\n <ng-template #table></ng-template>\r\n </div>\r\n\r\n <div *ngIf=\"smartGrid.layoutDef === layoutDef().EXPANDABLE\">\r\n <smart-expandable-section\r\n #gridExpandableSection\r\n *ngFor=\"let expandableSection of expandableSections\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().CARD && smartGrid.dataLayoutDef\"\r\n class=\"cards-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <app-smart-grid-card\r\n class=\"smartGrid-card-container\"\r\n *ngFor=\"let task of smartGrid.gridModel.page.rows\"\r\n [item]=\"task\"\r\n [smartGrid]=\"smartGrid\"\r\n [onSelect]=\"onSelect.bind(this)\"\r\n ></app-smart-grid-card>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().TREE && treeControl\"\r\n class=\"tree-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <mat-tree [dataSource]=\"treeDataSource!\" [treeControl]=\"treeControl!\">\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodeToggle\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button mat-icon-button disabled class=\"tree-button\"></button>\r\n <mat-checkbox\r\n class=\"checklist-leaf-node\"\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button\r\n mat-icon-button\r\n matTreeNodeToggle\r\n class=\"tree-button\"\r\n [attr.aria-label]=\"'Toggle ' + node.item\"\r\n >\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{ treeControl!.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </mat-icon>\r\n </button>\r\n <mat-checkbox\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n [indeterminate]=\"descendantsPartiallySelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n\r\n <mat-paginator\r\n *ngIf=\"smartGrid.paginator && !treeControl\"\r\n #paginator\r\n [length]=\"length\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSize]=\"pageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onChangePage($event)\"\r\n ></mat-paginator>\r\n</div>\r\n}\r\n", styles: [".smartGrid-container{position:relative;padding:1.5rem;display:flex;flex-direction:column;gap:1rem}.primeSmartGrid-container{display:flex;flex-direction:column;gap:1rem}.smartGrid-data-number{padding-bottom:1rem}.smart-table-icon-container{display:flex;flex-direction:row;justify-content:space-between;white-space:initial}.cards-container{display:grid;gap:1rem;padding:1rem}.smartGrid-card-container{height:auto;border:1px solid black;border-radius:8px}.smartGrid-container ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-underline{bottom:0}.smartGridContent{width:100%;flex:1;overflow:auto}.blocked{position:absolute;width:calc(100% - 3rem);height:calc(100% - 3rem);z-index:110;background-color:#0003}.smart-grid-table-container{display:flex;flex-direction:column;gap:1rem}.smart-grid-toolbar{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.smart-grid-toolbar smart-ui-action-toolbar{width:100%}.smart-grid-edit-icon{color:var(--light-gray)}.tree-button{width:24px!important;height:24px!important}.menu-button{display:flex;flex-direction:row;justify-content:flex-end;text-align:-webkit-right;align-items:center}.headerToolbar ::ng-deep .uiActionButtonsContainer{justify-content:flex-end}.tableCaption{display:flex;flex-direction:row;justify-content:space-between}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th,:host ::ng-deep .p-datatable .p-datatable-header{padding:.5rem}.captionTitle{font-size:1.5rem;align-content:center}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i6.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i8.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }, { kind: "component", type: i9.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: i10.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i10.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i10.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i10.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i10.MatTreeNode, selector: "mat-tree-node", inputs: ["disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "component", type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i12.ExpandableSectionComponent, selector: "smart-expandable-section", inputs: ["data", "index"] }, { kind: "component", type: i13.UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap"] }, { kind: "directive", type: i14.ComparableMultiselectDirective, selector: "p-multiSelect", inputs: ["compareWith"] }, { kind: "component", type: i15.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i16.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i15.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i15.RowToggler, selector: "[pRowToggler]", inputs: ["pRowToggler", "pRowTogglerDisabled"] }, { kind: "directive", type: i15.ReorderableColumn, selector: "[pReorderableColumn]", inputs: ["pReorderableColumnDisabled"] }, { kind: "component", type: i15.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i15.TableRadioButton, selector: "p-tableRadioButton", inputs: ["disabled", "value", "index", "inputId", "name", "ariaLabel"] }, { kind: "component", type: i15.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i15.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "component", type: i17.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i18.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "directive", type: i19.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i20.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "directive", type: i21.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i21.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i22.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "component", type: i23.SmartGridCardComponent, selector: "app-smart-grid-card", inputs: ["item", "smartGrid", "onSelect"] }, { kind: "component", type: i24.GenericComponent, selector: "lib-generic-component", inputs: ["rowData", "expandedComponent"] }] }); }
|
|
974
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SmartGridComponent, selector: "smart-grid", inputs: { smartGrid: "smartGrid", uuid: "uuid", dev: "dev" }, providers: [SmartGridService], viewQueries: [{ propertyName: "vcRefTable", first: true, predicate: ["table"], descendants: true, read: ViewContainerRef }, { propertyName: "toolbar", first: true, predicate: ["toolbar"], descendants: true }, { propertyName: "_headerToolbar", first: true, predicate: ["headerToolbar"], descendants: true }, { propertyName: "menu", first: true, predicate: ["menu"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if(compLib === componentLibrary.PRIMENG) {\r\n\r\n<div *ngIf=\"smartGrid\" class=\"primeSmartGrid-container\">\r\n <div class=\"smart-grid-toolbar\">\r\n <smart-ui-action-toolbar #toolbar [id]=\"'grid_not_initialized'\"></smart-ui-action-toolbar>\r\n </div>\r\n <p-table\r\n *ngIf=\"!smartGrid.layoutDef || smartGrid.layoutDef === layoutDef().TABLE\"\r\n #pTable\r\n [value]=\"smartGrid.gridModel.page.rows!\"\r\n (onSort)=\"gridSort($event)\"\r\n [customSort]=\"true\"\r\n [sortMode]=\"'multiple'\"\r\n [lazy]=\"true\"\r\n (onLazyLoad)=\"lazyLoad($event)\"\r\n [reorderableColumns]=\"smartGrid.gridModel.view?.descriptor?.showEditColumns\"\r\n [columns]=\"columns\"\r\n (onColReorder)=\"onColOrder($event)\"\r\n (onRowSelect)=\"onRowSelect($event)\"\r\n (onRowUnselect)=\"onRowUnselect($event)\"\r\n [selection]=\"selectedRows\"\r\n (onHeaderCheckboxToggle)=\"onSelectAllRow($event)\"\r\n dataKey=\"id\"\r\n [expandedRowKeys]=\"expandedRows\"\r\n (onRowExpand)=\"omPrimeNgRowExpand($event)\"\r\n [rowExpandMode]=\"'multiple'\"\r\n >\r\n <ng-template pTemplate=\"caption\">\r\n <div class=\"tableCaption\">\r\n <div *ngIf=\"smartGrid.gridModel.title\" class=\"captionTitle\">\r\n {{ smartGrid.gridModel.title }}\r\n </div>\r\n <div *ngIf=\"smartGrid.gridModel.view?.descriptor?.showEditColumns\">\r\n <p-multiSelect\r\n display=\"chip\"\r\n [options]=\"smartGrid.gridModel.view?.descriptor?.columns\"\r\n optionLabel=\"label\"\r\n [(ngModel)]=\"columns\"\r\n selectedItemsLabel=\"{0} columns selected\"\r\n [style]=\"{ 'min-width': '200px' }\"\r\n placeholder=\"Choose Columns\"\r\n (onChange)=\"headerChange($event)\"\r\n />\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n @if (smartGrid.gridModel.view?.descriptor?.showEditColumns) {\r\n <th\r\n *ngIf=\"isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\"\r\n style=\"width: 4rem\"\r\n >\r\n <p-tableHeaderCheckbox />\r\n </th>\r\n <th\r\n *ngIf=\"!isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\"\r\n style=\"width: 4rem\"\r\n ></th>\r\n <th [pSortableColumn]=\"col.propertyName\" *ngFor=\"let col of columns\" pReorderableColumn>\r\n <p-sortIcon [field]=\"col.propertyName\" />\r\n {{ col.label }}\r\n </th>\r\n } @else {\r\n <th\r\n *ngIf=\"isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\"\r\n style=\"width: 4rem\"\r\n >\r\n <p-tableHeaderCheckbox />\r\n </th>\r\n <th\r\n *ngIf=\"!isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\"\r\n style=\"width: 4rem\"\r\n ></th>\r\n <th [pSortableColumn]=\"col.propertyName\" *ngFor=\"let col of columns\">\r\n <p-sortIcon [field]=\"col.propertyName\" />\r\n {{ col.label }}\r\n </th>\r\n }\r\n\r\n <th>\r\n <smart-ui-action-toolbar\r\n class=\"headerToolbar\"\r\n #headerToolbar\r\n [id]=\"'header_not_initialized'\"\r\n ></smart-ui-action-toolbar>\r\n </th>\r\n <th *ngIf=\"smartGrid.expandable\"> </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row let-expanded=\"expanded\">\r\n <tr [ngClass]=\"getStyle(row)\" (dblclick)=\"onDoubleClick(row)\" *ngIf=\"row && row.data\">\r\n <td *ngIf=\"isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\">\r\n <p-tableCheckbox *ngIf=\"row.selectable != false\" [value]=\"row\" />\r\n </td>\r\n <td *ngIf=\"!isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\">\r\n <p-tableRadioButton [value]=\"row\" />\r\n </td>\r\n <td *ngFor=\"let col of smartGrid?.gridModel?.view?.orderedColumnNames\">\r\n <div *ngIf=\"row.icons[col]\">\r\n <div class=\"smart-table-icon-container\">\r\n <div *ngFor=\"let ir of getImageResourceIcons(row, col)\">\r\n <div\r\n pTooltip=\"{{ ir.tooltip?.tooltip }}\"\r\n tooltipPosition=\"right\"\r\n placeholder=\"Right\"\r\n [ngStyle]=\"getImageResourceStyle(ir)\"\r\n ><smart-icon [icon]=\"ir.identifier!\" [color]=\"ir.color!\"> </smart-icon\r\n ></div>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"showCellToolbar(row, col)\">\r\n <smart-ui-action-toolbar\r\n [uiActionModels]=\"getRowColumnAction(row, col)\"\r\n ></smart-ui-action-toolbar>\r\n </ng-container>\r\n\r\n <div *ngIf=\"!row.icons[col]\" [innerHtml]=\"getColValue(col, row)\"> </div>\r\n </td>\r\n <td>\r\n <div class=\"menu-button\">\r\n @if(showCellToolbar(row, defaultActionToolbarId)){\r\n <smart-ui-action-toolbar\r\n [uiActionModels]=\"getRowColumnAction(row, defaultActionToolbarId)\"\r\n ></smart-ui-action-toolbar>\r\n }\r\n <p-button\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n *ngIf=\"shouldShowOptionsButton(row)\"\r\n (onClick)=\"onOptionsClick($event, row)\"\r\n >\r\n <smart-icon icon=\"ellipsis-v\"></smart-icon>\r\n </p-button>\r\n </div>\r\n </td>\r\n <td *ngIf=\"smartGrid.expandable\">\r\n <p-button\r\n type=\"button\"\r\n pRipple\r\n [pRowToggler]=\"row\"\r\n [text]=\"true\"\r\n severity=\"secondary\"\r\n [rounded]=\"true\"\r\n [icon]=\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-up'\"\r\n />\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template *ngIf=\"smartGrid.expandable\" pTemplate=\"rowexpansion\" let-row>\r\n <tr>\r\n <td colspan=\"100%\">\r\n <lib-generic-component\r\n [rowData]=\"row\"\r\n [expandedComponent]=\"this.smartGrid.expandedComponent\"\r\n ></lib-generic-component>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().CARD && smartGrid.dataLayoutDef\"\r\n class=\"cards-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <app-smart-grid-card\r\n class=\"smartGrid-card-container\"\r\n *ngFor=\"let task of smartGrid.gridModel.page.rows\"\r\n [item]=\"task\"\r\n [smartGrid]=\"smartGrid\"\r\n [onSelect]=\"onSelect.bind(this)\"\r\n ></app-smart-grid-card>\r\n </div>\r\n <p-paginator\r\n *ngIf=\"smartGrid.paginator\"\r\n [first]=\"pageIndex!\"\r\n [totalRecords]=\"length!\"\r\n [rows]=\"pageSize\"\r\n [rowsPerPageOptions]=\"pageSizeOptions\"\r\n (onPageChange)=\"onPrimeChangePage($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n dropdownAppendTo=\"body\"\r\n />\r\n <p-menu #menu [model]=\"menuButtons\" [popup]=\"true\" appendTo=\"body\"> </p-menu>\r\n</div>\r\n}@else {\r\n<div *ngIf=\"smartGrid\" class=\"smartGrid-container\">\r\n <div class=\"smart-grid-toolbar\">\r\n <smart-ui-action-toolbar #toolbar [id]=\"'grid_not_initialized'\"></smart-ui-action-toolbar>\r\n <button\r\n (click)=\"editColumns()\"\r\n mat-mini-fab\r\n color=\"text-primary\"\r\n *ngIf=\"smartGrid.showEditColumns\"\r\n >\r\n <mat-icon aria-hidden=\"false\" aria-label=\"Columns\" class=\"smart-grid-edit-icon\"\r\n >view_columns</mat-icon\r\n >\r\n </button>\r\n </div>\r\n <!-- <div [ngClass]=\"isBlocked ? 'blocked' : ''\"></div> -->\r\n <div class=\"smartGridContent\">\r\n <div>\r\n <div *ngIf=\"smartGrid.showResultCount\">\r\n <div class=\"smartGrid-data-number\">\r\n {{ smartGrid.gridModel.totalRowCount }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"smart-grid-table-container\">\r\n <ng-template #table></ng-template>\r\n </div>\r\n\r\n <div *ngIf=\"smartGrid.layoutDef === layoutDef().EXPANDABLE\">\r\n <smart-expandable-section\r\n #gridExpandableSection\r\n *ngFor=\"let expandableSection of expandableSections\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().CARD && smartGrid.dataLayoutDef\"\r\n class=\"cards-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <app-smart-grid-card\r\n class=\"smartGrid-card-container\"\r\n *ngFor=\"let task of smartGrid.gridModel.page.rows\"\r\n [item]=\"task\"\r\n [smartGrid]=\"smartGrid\"\r\n [onSelect]=\"onSelect.bind(this)\"\r\n ></app-smart-grid-card>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().TREE && treeControl\"\r\n class=\"tree-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <mat-tree [dataSource]=\"treeDataSource!\" [treeControl]=\"treeControl!\">\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodeToggle\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button mat-icon-button disabled class=\"tree-button\"></button>\r\n <mat-checkbox\r\n class=\"checklist-leaf-node\"\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button\r\n mat-icon-button\r\n matTreeNodeToggle\r\n class=\"tree-button\"\r\n [attr.aria-label]=\"'Toggle ' + node.item\"\r\n >\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{ treeControl!.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </mat-icon>\r\n </button>\r\n <mat-checkbox\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n [indeterminate]=\"descendantsPartiallySelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n\r\n <mat-paginator\r\n *ngIf=\"smartGrid.paginator && !treeControl\"\r\n #paginator\r\n [length]=\"length\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSize]=\"pageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onChangePage($event)\"\r\n ></mat-paginator>\r\n</div>\r\n}\r\n", styles: [".smartGrid-container{position:relative;padding:1.5rem;display:flex;flex-direction:column;gap:1rem}.primeSmartGrid-container{display:flex;flex-direction:column;gap:1rem}.smartGrid-data-number{padding-bottom:1rem}.smart-table-icon-container{display:flex;flex-direction:row;justify-content:space-between;white-space:initial}.cards-container{display:grid;gap:1rem;padding:1rem}.smartGrid-card-container{height:auto;border:1px solid black;border-radius:8px}.smartGrid-container ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-underline{bottom:0}.smartGridContent{width:100%;flex:1;overflow:auto}.blocked{position:absolute;width:calc(100% - 3rem);height:calc(100% - 3rem);z-index:110;background-color:#0003}.smart-grid-table-container{display:flex;flex-direction:column;gap:1rem}.smart-grid-toolbar{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.smart-grid-toolbar smart-ui-action-toolbar{width:100%}.smart-grid-edit-icon{color:var(--light-gray)}.tree-button{width:24px!important;height:24px!important}.menu-button{display:flex;flex-direction:row;justify-content:flex-end;text-align:-webkit-right;align-items:center}.headerToolbar ::ng-deep .uiActionButtonsContainer{justify-content:flex-end}.tableCaption{display:flex;flex-direction:row;justify-content:space-between}.tableCaption:has(*){padding:.5rem;border:1px solid #e9ecef}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th,:host ::ng-deep .p-datatable .p-datatable-header{padding:.5rem}.captionTitle{font-size:1.5rem;align-content:center}:host ::ng-deep .p-datatable-header:has(.tableCaption){padding:0;border:unset}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i6.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i8.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }, { kind: "component", type: i9.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: i10.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i10.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i10.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i10.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i10.MatTreeNode, selector: "mat-tree-node", inputs: ["disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "component", type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i12.ExpandableSectionComponent, selector: "smart-expandable-section", inputs: ["data", "index"] }, { kind: "component", type: i13.UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id", "scrollOnWrap"] }, { kind: "directive", type: i14.ComparableMultiselectDirective, selector: "p-multiSelect", inputs: ["compareWith"] }, { kind: "component", type: i15.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i16.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i15.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i15.RowToggler, selector: "[pRowToggler]", inputs: ["pRowToggler", "pRowTogglerDisabled"] }, { kind: "directive", type: i15.ReorderableColumn, selector: "[pReorderableColumn]", inputs: ["pReorderableColumnDisabled"] }, { kind: "component", type: i15.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i15.TableRadioButton, selector: "p-tableRadioButton", inputs: ["disabled", "value", "index", "inputId", "name", "ariaLabel"] }, { kind: "component", type: i15.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { kind: "component", type: i15.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { kind: "component", type: i17.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i18.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "directive", type: i19.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i20.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "directive", type: i21.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i21.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i22.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "component", type: i23.SmartGridCardComponent, selector: "app-smart-grid-card", inputs: ["item", "smartGrid", "onSelect"] }, { kind: "component", type: i24.GenericComponent, selector: "lib-generic-component", inputs: ["rowData", "expandedComponent"] }] }); }
|
|
975
975
|
}
|
|
976
976
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartGridComponent, decorators: [{
|
|
977
977
|
type: Component,
|
|
978
|
-
args: [{ selector: 'smart-grid', providers: [SmartGridService], template: "@if(compLib === componentLibrary.PRIMENG) {\r\n\r\n<div *ngIf=\"smartGrid\" class=\"primeSmartGrid-container\">\r\n <div class=\"smart-grid-toolbar\">\r\n <smart-ui-action-toolbar #toolbar [id]=\"'grid_not_initialized'\"></smart-ui-action-toolbar>\r\n </div>\r\n <p-table\r\n *ngIf=\"!smartGrid.layoutDef || smartGrid.layoutDef === layoutDef().TABLE\"\r\n #pTable\r\n [value]=\"smartGrid.gridModel.page.rows!\"\r\n (onSort)=\"gridSort($event)\"\r\n [customSort]=\"true\"\r\n [sortMode]=\"'multiple'\"\r\n [lazy]=\"true\"\r\n (onLazyLoad)=\"lazyLoad($event)\"\r\n [reorderableColumns]=\"smartGrid.gridModel.view?.descriptor?.showEditColumns\"\r\n [columns]=\"columns\"\r\n (onColReorder)=\"onColOrder($event)\"\r\n (onRowSelect)=\"onRowSelect($event)\"\r\n (onRowUnselect)=\"onRowUnselect($event)\"\r\n [selection]=\"selectedRows\"\r\n (onHeaderCheckboxToggle)=\"onSelectAllRow($event)\"\r\n dataKey=\"id\"\r\n [expandedRowKeys]=\"expandedRows\"\r\n (onRowExpand)=\"omPrimeNgRowExpand($event)\"\r\n [rowExpandMode]=\"'multiple'\"\r\n >\r\n <ng-container>\r\n <ng-template\r\n pTemplate=\"caption\"\r\n *ngIf=\"smartGrid.gridModel.view?.descriptor?.showEditColumns || smartGrid.gridModel.title\"\r\n >\r\n <div class=\"tableCaption\">\r\n <div *ngIf=\"smartGrid.gridModel.title\" class=\"captionTitle\">\r\n {{ smartGrid.gridModel.title }}\r\n </div>\r\n <div *ngIf=\"smartGrid.gridModel.view?.descriptor?.showEditColumns\">\r\n <p-multiSelect\r\n display=\"chip\"\r\n [options]=\"smartGrid.gridModel.view?.descriptor?.columns\"\r\n optionLabel=\"label\"\r\n [(ngModel)]=\"columns\"\r\n selectedItemsLabel=\"{0} columns selected\"\r\n [style]=\"{ 'min-width': '200px' }\"\r\n placeholder=\"Choose Columns\"\r\n (onChange)=\"headerChange($event)\"\r\n />\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n @if (smartGrid.gridModel.view?.descriptor?.showEditColumns) {\r\n <th\r\n *ngIf=\"isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\"\r\n style=\"width: 4rem\"\r\n >\r\n <p-tableHeaderCheckbox />\r\n </th>\r\n <th\r\n *ngIf=\"!isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\"\r\n style=\"width: 4rem\"\r\n ></th>\r\n <th [pSortableColumn]=\"col.propertyName\" *ngFor=\"let col of columns\" pReorderableColumn>\r\n <p-sortIcon [field]=\"col.propertyName\" />\r\n {{ col.label }}\r\n </th>\r\n } @else {\r\n <th\r\n *ngIf=\"isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\"\r\n style=\"width: 4rem\"\r\n >\r\n <p-tableHeaderCheckbox />\r\n </th>\r\n <th\r\n *ngIf=\"!isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\"\r\n style=\"width: 4rem\"\r\n ></th>\r\n <th [pSortableColumn]=\"col.propertyName\" *ngFor=\"let col of columns\">\r\n <p-sortIcon [field]=\"col.propertyName\" />\r\n {{ col.label }}\r\n </th>\r\n }\r\n\r\n <th>\r\n <smart-ui-action-toolbar\r\n class=\"headerToolbar\"\r\n #headerToolbar\r\n [id]=\"'header_not_initialized'\"\r\n ></smart-ui-action-toolbar>\r\n </th>\r\n <th *ngIf=\"smartGrid.expandable\"> </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row let-expanded=\"expanded\">\r\n <tr [ngClass]=\"getStyle(row)\" (dblclick)=\"onDoubleClick(row)\" *ngIf=\"row && row.data\">\r\n <td *ngIf=\"isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\">\r\n <p-tableCheckbox *ngIf=\"row.selectable != false\" [value]=\"row\" />\r\n </td>\r\n <td *ngIf=\"!isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\">\r\n <p-tableRadioButton [value]=\"row\" />\r\n </td>\r\n <td *ngFor=\"let col of smartGrid?.gridModel?.view?.orderedColumnNames\">\r\n <div *ngIf=\"row.icons[col]\">\r\n <div class=\"smart-table-icon-container\">\r\n <div *ngFor=\"let ir of getImageResourceIcons(row, col)\">\r\n <div\r\n pTooltip=\"{{ ir.tooltip?.tooltip }}\"\r\n tooltipPosition=\"right\"\r\n placeholder=\"Right\"\r\n [ngStyle]=\"getImageResourceStyle(ir)\"\r\n ><smart-icon [icon]=\"ir.identifier!\" [color]=\"ir.color!\"> </smart-icon\r\n ></div>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"showCellToolbar(row, col)\">\r\n <smart-ui-action-toolbar\r\n [uiActionModels]=\"getRowColumnAction(row, col)\"\r\n ></smart-ui-action-toolbar>\r\n </ng-container>\r\n\r\n <div *ngIf=\"!row.icons[col]\" [innerHtml]=\"getColValue(col, row)\"> </div>\r\n </td>\r\n <td>\r\n <div class=\"menu-button\">\r\n @if(showCellToolbar(row, defaultActionToolbarId)){\r\n <smart-ui-action-toolbar\r\n [uiActionModels]=\"getRowColumnAction(row, defaultActionToolbarId)\"\r\n ></smart-ui-action-toolbar>\r\n }\r\n <p-button\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n *ngIf=\"shouldShowOptionsButton(row)\"\r\n (onClick)=\"onOptionsClick($event, row)\"\r\n >\r\n <smart-icon icon=\"ellipsis-v\"></smart-icon>\r\n </p-button>\r\n </div>\r\n </td>\r\n <td *ngIf=\"smartGrid.expandable\">\r\n <p-button\r\n type=\"button\"\r\n pRipple\r\n [pRowToggler]=\"row\"\r\n [text]=\"true\"\r\n severity=\"secondary\"\r\n [rounded]=\"true\"\r\n [icon]=\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-up'\"\r\n />\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template *ngIf=\"smartGrid.expandable\" pTemplate=\"rowexpansion\" let-row>\r\n <lib-generic-component\r\n [rowData]=\"row\"\r\n [expandedComponent]=\"this.smartGrid.expandedComponent\"\r\n ></lib-generic-component>\r\n </ng-template>\r\n </p-table>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().CARD && smartGrid.dataLayoutDef\"\r\n class=\"cards-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <app-smart-grid-card\r\n class=\"smartGrid-card-container\"\r\n *ngFor=\"let task of smartGrid.gridModel.page.rows\"\r\n [item]=\"task\"\r\n [smartGrid]=\"smartGrid\"\r\n [onSelect]=\"onSelect.bind(this)\"\r\n ></app-smart-grid-card>\r\n </div>\r\n <p-paginator\r\n *ngIf=\"smartGrid.paginator\"\r\n [first]=\"pageIndex!\"\r\n [totalRecords]=\"length!\"\r\n [rows]=\"pageSize\"\r\n [rowsPerPageOptions]=\"pageSizeOptions\"\r\n (onPageChange)=\"onPrimeChangePage($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n dropdownAppendTo=\"body\"\r\n />\r\n <p-menu #menu [model]=\"menuButtons\" [popup]=\"true\" appendTo=\"body\"> </p-menu>\r\n</div>\r\n}@else {\r\n<div *ngIf=\"smartGrid\" class=\"smartGrid-container\">\r\n <div class=\"smart-grid-toolbar\">\r\n <smart-ui-action-toolbar #toolbar [id]=\"'grid_not_initialized'\"></smart-ui-action-toolbar>\r\n <button\r\n (click)=\"editColumns()\"\r\n mat-mini-fab\r\n color=\"text-primary\"\r\n *ngIf=\"smartGrid.showEditColumns\"\r\n >\r\n <mat-icon aria-hidden=\"false\" aria-label=\"Columns\" class=\"smart-grid-edit-icon\"\r\n >view_columns</mat-icon\r\n >\r\n </button>\r\n </div>\r\n <!-- <div [ngClass]=\"isBlocked ? 'blocked' : ''\"></div> -->\r\n <div class=\"smartGridContent\">\r\n <div>\r\n <div *ngIf=\"smartGrid.showResultCount\">\r\n <div class=\"smartGrid-data-number\">\r\n {{ smartGrid.gridModel.totalRowCount }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"smart-grid-table-container\">\r\n <ng-template #table></ng-template>\r\n </div>\r\n\r\n <div *ngIf=\"smartGrid.layoutDef === layoutDef().EXPANDABLE\">\r\n <smart-expandable-section\r\n #gridExpandableSection\r\n *ngFor=\"let expandableSection of expandableSections\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().CARD && smartGrid.dataLayoutDef\"\r\n class=\"cards-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <app-smart-grid-card\r\n class=\"smartGrid-card-container\"\r\n *ngFor=\"let task of smartGrid.gridModel.page.rows\"\r\n [item]=\"task\"\r\n [smartGrid]=\"smartGrid\"\r\n [onSelect]=\"onSelect.bind(this)\"\r\n ></app-smart-grid-card>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().TREE && treeControl\"\r\n class=\"tree-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <mat-tree [dataSource]=\"treeDataSource!\" [treeControl]=\"treeControl!\">\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodeToggle\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button mat-icon-button disabled class=\"tree-button\"></button>\r\n <mat-checkbox\r\n class=\"checklist-leaf-node\"\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button\r\n mat-icon-button\r\n matTreeNodeToggle\r\n class=\"tree-button\"\r\n [attr.aria-label]=\"'Toggle ' + node.item\"\r\n >\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{ treeControl!.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </mat-icon>\r\n </button>\r\n <mat-checkbox\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n [indeterminate]=\"descendantsPartiallySelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n\r\n <mat-paginator\r\n *ngIf=\"smartGrid.paginator && !treeControl\"\r\n #paginator\r\n [length]=\"length\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSize]=\"pageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onChangePage($event)\"\r\n ></mat-paginator>\r\n</div>\r\n}\r\n", styles: [".smartGrid-container{position:relative;padding:1.5rem;display:flex;flex-direction:column;gap:1rem}.primeSmartGrid-container{display:flex;flex-direction:column;gap:1rem}.smartGrid-data-number{padding-bottom:1rem}.smart-table-icon-container{display:flex;flex-direction:row;justify-content:space-between;white-space:initial}.cards-container{display:grid;gap:1rem;padding:1rem}.smartGrid-card-container{height:auto;border:1px solid black;border-radius:8px}.smartGrid-container ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-underline{bottom:0}.smartGridContent{width:100%;flex:1;overflow:auto}.blocked{position:absolute;width:calc(100% - 3rem);height:calc(100% - 3rem);z-index:110;background-color:#0003}.smart-grid-table-container{display:flex;flex-direction:column;gap:1rem}.smart-grid-toolbar{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.smart-grid-toolbar smart-ui-action-toolbar{width:100%}.smart-grid-edit-icon{color:var(--light-gray)}.tree-button{width:24px!important;height:24px!important}.menu-button{display:flex;flex-direction:row;justify-content:flex-end;text-align:-webkit-right;align-items:center}.headerToolbar ::ng-deep .uiActionButtonsContainer{justify-content:flex-end}.tableCaption{display:flex;flex-direction:row;justify-content:space-between}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th,:host ::ng-deep .p-datatable .p-datatable-header{padding:.5rem}.captionTitle{font-size:1.5rem;align-content:center}\n"] }]
|
|
978
|
+
args: [{ selector: 'smart-grid', providers: [SmartGridService], template: "@if(compLib === componentLibrary.PRIMENG) {\r\n\r\n<div *ngIf=\"smartGrid\" class=\"primeSmartGrid-container\">\r\n <div class=\"smart-grid-toolbar\">\r\n <smart-ui-action-toolbar #toolbar [id]=\"'grid_not_initialized'\"></smart-ui-action-toolbar>\r\n </div>\r\n <p-table\r\n *ngIf=\"!smartGrid.layoutDef || smartGrid.layoutDef === layoutDef().TABLE\"\r\n #pTable\r\n [value]=\"smartGrid.gridModel.page.rows!\"\r\n (onSort)=\"gridSort($event)\"\r\n [customSort]=\"true\"\r\n [sortMode]=\"'multiple'\"\r\n [lazy]=\"true\"\r\n (onLazyLoad)=\"lazyLoad($event)\"\r\n [reorderableColumns]=\"smartGrid.gridModel.view?.descriptor?.showEditColumns\"\r\n [columns]=\"columns\"\r\n (onColReorder)=\"onColOrder($event)\"\r\n (onRowSelect)=\"onRowSelect($event)\"\r\n (onRowUnselect)=\"onRowUnselect($event)\"\r\n [selection]=\"selectedRows\"\r\n (onHeaderCheckboxToggle)=\"onSelectAllRow($event)\"\r\n dataKey=\"id\"\r\n [expandedRowKeys]=\"expandedRows\"\r\n (onRowExpand)=\"omPrimeNgRowExpand($event)\"\r\n [rowExpandMode]=\"'multiple'\"\r\n >\r\n <ng-template pTemplate=\"caption\">\r\n <div class=\"tableCaption\">\r\n <div *ngIf=\"smartGrid.gridModel.title\" class=\"captionTitle\">\r\n {{ smartGrid.gridModel.title }}\r\n </div>\r\n <div *ngIf=\"smartGrid.gridModel.view?.descriptor?.showEditColumns\">\r\n <p-multiSelect\r\n display=\"chip\"\r\n [options]=\"smartGrid.gridModel.view?.descriptor?.columns\"\r\n optionLabel=\"label\"\r\n [(ngModel)]=\"columns\"\r\n selectedItemsLabel=\"{0} columns selected\"\r\n [style]=\"{ 'min-width': '200px' }\"\r\n placeholder=\"Choose Columns\"\r\n (onChange)=\"headerChange($event)\"\r\n />\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n @if (smartGrid.gridModel.view?.descriptor?.showEditColumns) {\r\n <th\r\n *ngIf=\"isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\"\r\n style=\"width: 4rem\"\r\n >\r\n <p-tableHeaderCheckbox />\r\n </th>\r\n <th\r\n *ngIf=\"!isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\"\r\n style=\"width: 4rem\"\r\n ></th>\r\n <th [pSortableColumn]=\"col.propertyName\" *ngFor=\"let col of columns\" pReorderableColumn>\r\n <p-sortIcon [field]=\"col.propertyName\" />\r\n {{ col.label }}\r\n </th>\r\n } @else {\r\n <th\r\n *ngIf=\"isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\"\r\n style=\"width: 4rem\"\r\n >\r\n <p-tableHeaderCheckbox />\r\n </th>\r\n <th\r\n *ngIf=\"!isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\"\r\n style=\"width: 4rem\"\r\n ></th>\r\n <th [pSortableColumn]=\"col.propertyName\" *ngFor=\"let col of columns\">\r\n <p-sortIcon [field]=\"col.propertyName\" />\r\n {{ col.label }}\r\n </th>\r\n }\r\n\r\n <th>\r\n <smart-ui-action-toolbar\r\n class=\"headerToolbar\"\r\n #headerToolbar\r\n [id]=\"'header_not_initialized'\"\r\n ></smart-ui-action-toolbar>\r\n </th>\r\n <th *ngIf=\"smartGrid.expandable\"> </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row let-expanded=\"expanded\">\r\n <tr [ngClass]=\"getStyle(row)\" (dblclick)=\"onDoubleClick(row)\" *ngIf=\"row && row.data\">\r\n <td *ngIf=\"isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\">\r\n <p-tableCheckbox *ngIf=\"row.selectable != false\" [value]=\"row\" />\r\n </td>\r\n <td *ngIf=\"!isMultiple && (tableType === 'checkbox' || tableType === 'CheckBox')\">\r\n <p-tableRadioButton [value]=\"row\" />\r\n </td>\r\n <td *ngFor=\"let col of smartGrid?.gridModel?.view?.orderedColumnNames\">\r\n <div *ngIf=\"row.icons[col]\">\r\n <div class=\"smart-table-icon-container\">\r\n <div *ngFor=\"let ir of getImageResourceIcons(row, col)\">\r\n <div\r\n pTooltip=\"{{ ir.tooltip?.tooltip }}\"\r\n tooltipPosition=\"right\"\r\n placeholder=\"Right\"\r\n [ngStyle]=\"getImageResourceStyle(ir)\"\r\n ><smart-icon [icon]=\"ir.identifier!\" [color]=\"ir.color!\"> </smart-icon\r\n ></div>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"showCellToolbar(row, col)\">\r\n <smart-ui-action-toolbar\r\n [uiActionModels]=\"getRowColumnAction(row, col)\"\r\n ></smart-ui-action-toolbar>\r\n </ng-container>\r\n\r\n <div *ngIf=\"!row.icons[col]\" [innerHtml]=\"getColValue(col, row)\"> </div>\r\n </td>\r\n <td>\r\n <div class=\"menu-button\">\r\n @if(showCellToolbar(row, defaultActionToolbarId)){\r\n <smart-ui-action-toolbar\r\n [uiActionModels]=\"getRowColumnAction(row, defaultActionToolbarId)\"\r\n ></smart-ui-action-toolbar>\r\n }\r\n <p-button\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n *ngIf=\"shouldShowOptionsButton(row)\"\r\n (onClick)=\"onOptionsClick($event, row)\"\r\n >\r\n <smart-icon icon=\"ellipsis-v\"></smart-icon>\r\n </p-button>\r\n </div>\r\n </td>\r\n <td *ngIf=\"smartGrid.expandable\">\r\n <p-button\r\n type=\"button\"\r\n pRipple\r\n [pRowToggler]=\"row\"\r\n [text]=\"true\"\r\n severity=\"secondary\"\r\n [rounded]=\"true\"\r\n [icon]=\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-up'\"\r\n />\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template *ngIf=\"smartGrid.expandable\" pTemplate=\"rowexpansion\" let-row>\r\n <tr>\r\n <td colspan=\"100%\">\r\n <lib-generic-component\r\n [rowData]=\"row\"\r\n [expandedComponent]=\"this.smartGrid.expandedComponent\"\r\n ></lib-generic-component>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().CARD && smartGrid.dataLayoutDef\"\r\n class=\"cards-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <app-smart-grid-card\r\n class=\"smartGrid-card-container\"\r\n *ngFor=\"let task of smartGrid.gridModel.page.rows\"\r\n [item]=\"task\"\r\n [smartGrid]=\"smartGrid\"\r\n [onSelect]=\"onSelect.bind(this)\"\r\n ></app-smart-grid-card>\r\n </div>\r\n <p-paginator\r\n *ngIf=\"smartGrid.paginator\"\r\n [first]=\"pageIndex!\"\r\n [totalRecords]=\"length!\"\r\n [rows]=\"pageSize\"\r\n [rowsPerPageOptions]=\"pageSizeOptions\"\r\n (onPageChange)=\"onPrimeChangePage($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n dropdownAppendTo=\"body\"\r\n />\r\n <p-menu #menu [model]=\"menuButtons\" [popup]=\"true\" appendTo=\"body\"> </p-menu>\r\n</div>\r\n}@else {\r\n<div *ngIf=\"smartGrid\" class=\"smartGrid-container\">\r\n <div class=\"smart-grid-toolbar\">\r\n <smart-ui-action-toolbar #toolbar [id]=\"'grid_not_initialized'\"></smart-ui-action-toolbar>\r\n <button\r\n (click)=\"editColumns()\"\r\n mat-mini-fab\r\n color=\"text-primary\"\r\n *ngIf=\"smartGrid.showEditColumns\"\r\n >\r\n <mat-icon aria-hidden=\"false\" aria-label=\"Columns\" class=\"smart-grid-edit-icon\"\r\n >view_columns</mat-icon\r\n >\r\n </button>\r\n </div>\r\n <!-- <div [ngClass]=\"isBlocked ? 'blocked' : ''\"></div> -->\r\n <div class=\"smartGridContent\">\r\n <div>\r\n <div *ngIf=\"smartGrid.showResultCount\">\r\n <div class=\"smartGrid-data-number\">\r\n {{ smartGrid.gridModel.totalRowCount }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"smart-grid-table-container\">\r\n <ng-template #table></ng-template>\r\n </div>\r\n\r\n <div *ngIf=\"smartGrid.layoutDef === layoutDef().EXPANDABLE\">\r\n <smart-expandable-section\r\n #gridExpandableSection\r\n *ngFor=\"let expandableSection of expandableSections\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().CARD && smartGrid.dataLayoutDef\"\r\n class=\"cards-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <app-smart-grid-card\r\n class=\"smartGrid-card-container\"\r\n *ngFor=\"let task of smartGrid.gridModel.page.rows\"\r\n [item]=\"task\"\r\n [smartGrid]=\"smartGrid\"\r\n [onSelect]=\"onSelect.bind(this)\"\r\n ></app-smart-grid-card>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().TREE && treeControl\"\r\n class=\"tree-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <mat-tree [dataSource]=\"treeDataSource!\" [treeControl]=\"treeControl!\">\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodeToggle\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button mat-icon-button disabled class=\"tree-button\"></button>\r\n <mat-checkbox\r\n class=\"checklist-leaf-node\"\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button\r\n mat-icon-button\r\n matTreeNodeToggle\r\n class=\"tree-button\"\r\n [attr.aria-label]=\"'Toggle ' + node.item\"\r\n >\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{ treeControl!.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </mat-icon>\r\n </button>\r\n <mat-checkbox\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n [indeterminate]=\"descendantsPartiallySelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n\r\n <mat-paginator\r\n *ngIf=\"smartGrid.paginator && !treeControl\"\r\n #paginator\r\n [length]=\"length\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSize]=\"pageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onChangePage($event)\"\r\n ></mat-paginator>\r\n</div>\r\n}\r\n", styles: [".smartGrid-container{position:relative;padding:1.5rem;display:flex;flex-direction:column;gap:1rem}.primeSmartGrid-container{display:flex;flex-direction:column;gap:1rem}.smartGrid-data-number{padding-bottom:1rem}.smart-table-icon-container{display:flex;flex-direction:row;justify-content:space-between;white-space:initial}.cards-container{display:grid;gap:1rem;padding:1rem}.smartGrid-card-container{height:auto;border:1px solid black;border-radius:8px}.smartGrid-container ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-underline{bottom:0}.smartGridContent{width:100%;flex:1;overflow:auto}.blocked{position:absolute;width:calc(100% - 3rem);height:calc(100% - 3rem);z-index:110;background-color:#0003}.smart-grid-table-container{display:flex;flex-direction:column;gap:1rem}.smart-grid-toolbar{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.smart-grid-toolbar smart-ui-action-toolbar{width:100%}.smart-grid-edit-icon{color:var(--light-gray)}.tree-button{width:24px!important;height:24px!important}.menu-button{display:flex;flex-direction:row;justify-content:flex-end;text-align:-webkit-right;align-items:center}.headerToolbar ::ng-deep .uiActionButtonsContainer{justify-content:flex-end}.tableCaption{display:flex;flex-direction:row;justify-content:space-between}.tableCaption:has(*){padding:.5rem;border:1px solid #e9ecef}:host ::ng-deep .p-datatable .p-datatable-thead>tr>th,:host ::ng-deep .p-datatable .p-datatable-header{padding:.5rem}.captionTitle{font-size:1.5rem;align-content:center}:host ::ng-deep .p-datatable-header:has(.tableCaption){padding:0;border:unset}\n"] }]
|
|
979
979
|
}], ctorParameters: () => [{ type: i1.SmartGridService }, { type: i2.ComponentFactoryService }, { type: i3.MatDialog }, { type: i0.Injector }, { type: i4.UiActionDescriptorService }, { type: i4.ComponentLibrary, decorators: [{
|
|
980
980
|
type: Inject,
|
|
981
981
|
args: [COMPONENT_LIBRARY]
|
|
@@ -1001,4 +1001,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
1001
1001
|
type: ViewChild,
|
|
1002
1002
|
args: ['menu']
|
|
1003
1003
|
}] } });
|
|
1004
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1ncmlkL3NtYXJ0LWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZ3JpZC9zbWFydC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUVMLFNBQVMsRUFFVCxNQUFNLEVBRU4sS0FBSyxFQUlMLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakYsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDbkcsT0FBTyxFQUNMLFVBQVUsRUFDVixvQkFBb0IsRUFFcEIsNEJBQTRCLEVBRTVCLDJCQUEyQixFQUMzQixlQUFlLEVBQ2YsY0FBYyxFQUNkLG1CQUFtQixHQUNwQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFHTCxrQkFBa0IsR0FFbkIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGdCQUFnQixHQUlqQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFHTCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBRWpCLDBCQUEwQixHQUMzQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSwy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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQgeyBGbGF0VHJlZUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgQ29tcG9uZW50UmVmLFxyXG4gIEluamVjdCxcclxuICBJbmplY3RvcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFRyZWVGbGF0RGF0YVNvdXJjZSwgTWF0VHJlZUZsYXR0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi9jb21wb25lbnQtZmFjdG9yeS1zZXJ2aWNlL3Byb2plY3RzJztcclxuaW1wb3J0IHsgU21hcnREaWFsb2dEYXRhIH0gZnJvbSAnLi4vc21hcnQtZGlhbG9nL3Byb2plY3RzJztcclxuaW1wb3J0IHsgRXhwYW5kYWJsZVNlY3Rpb24gfSBmcm9tICcuLi9zbWFydC1leHBhbmRhYmxlLXNlY3Rpb24vcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeSB9IGZyb20gJy4uL3NtYXJ0LWZpbHRlci1lZGl0b3IvYXBpL21vZGVsL2ZpbHRlckV4cHJlc3Npb25PcmRlckJ5JztcclxuaW1wb3J0IHtcclxuICBTbWFydFRhYmxlLFxyXG4gIFNtYXJ0VGFibGVCdXR0b25UeXBlLFxyXG4gIFNtYXJ0VGFibGVIZWFkZXIsXHJcbiAgU21hcnRUYWJsZUhlYWRlclByb3BlcnR5VHlwZSxcclxuICBTbWFydFRhYmxlSW50ZXJmYWNlLFxyXG4gIFNtYXJ0VGFibGVJbnRlcmZhY2VUeXBlRW51bSxcclxuICBTbWFydFRhYmxlT3JkZXIsXHJcbiAgU21hcnRUYWJsZVR5cGUsXHJcbiAgU21hcnR0YWJsZUNvbXBvbmVudCxcclxufSBmcm9tICcuLi9zbWFydC10YWJsZS9wcm9qZWN0cyc7XHJcbmltcG9ydCB7XHJcbiAgSW1hZ2VSZXNvdXJjZSxcclxuICBVaUFjdGlvbixcclxuICBVaUFjdGlvbkJ1dHRvblR5cGUsXHJcbiAgVWlBY3Rpb25EZXNjcmlwdG9yLFxyXG59IGZyb20gJy4uL3ZpZXctY29udGV4dC9hcGknO1xyXG5pbXBvcnQge1xyXG4gIENPTVBPTkVOVF9MSUJSQVJZLFxyXG4gIENvbXBvbmVudExpYnJhcnksXHJcbiAgVWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSxcclxuICBVaUFjdGlvbk1vZGVsLFxyXG4gIFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudCxcclxufSBmcm9tICcuLi92aWV3LWNvbnRleHQvcHJvamVjdHMnO1xyXG5pbXBvcnQge1xyXG4gIEdyaWRDb2x1bW5NZXRhLFxyXG4gIEdyaWRSb3csXHJcbiAgR3JpZFNlbGVjdGlvbk1vZGUsXHJcbiAgR3JpZFNlbGVjdGlvblR5cGUsXHJcbiAgR3JpZFVwZGF0ZURhdGEsXHJcbiAgR3JpZFZpZXdEZXNjcmlwdG9yS2luZEVudW0sXHJcbn0gZnJvbSAnLi9hcGkvZ3JpZC1hcGknO1xyXG5pbXBvcnQgeyBUYWJsZUxheW91dERlZmluZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtbGF5b3V0LWRlZmluZXIvdGFibGUtbGF5b3V0LWRlZmluZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBHcmlkVWlBY3Rpb25UeXBlLFxyXG4gIFNtYXJ0R3JpZCxcclxuICBTbWFydEdyaWREYXRhTGF5b3V0LFxyXG4gIFNtYXJ0R3JpZFR5cGUsXHJcbiAgU21hcnRMYXlvdXREZWYsXHJcbn0gZnJvbSAnLi9tb2RlbHMvbW9kZWwnO1xyXG5pbXBvcnQgeyBTbWFydEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi9zbWFydC1ncmlkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSwgU29ydE1ldGEgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IE1lbnUgfSBmcm9tICdwcmltZW5nL21lbnUnO1xyXG5pbXBvcnQge1xyXG4gIFJvd1RvZ2dsZXIsXHJcbiAgVGFibGVDb2x1bW5SZW9yZGVyRXZlbnQsXHJcbiAgVGFibGVIZWFkZXJDaGVja2JveFRvZ2dsZUV2ZW50LFxyXG4gIFRhYmxlTGF6eUxvYWRFdmVudCxcclxuICBUYWJsZVJvd0V4cGFuZEV2ZW50LFxyXG4gIFRhYmxlUm93U2VsZWN0RXZlbnQsXHJcbiAgVGFibGVSb3dVblNlbGVjdEV2ZW50LFxyXG59IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xyXG5pbXBvcnQgeyBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeU9yZGVyRW51bSB9IGZyb20gJy4uL3NtYXJ0LWZpbHRlci9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IE11bHRpU2VsZWN0Q2hhbmdlRXZlbnQgfSBmcm9tICdwcmltZW5nL211bHRpc2VsZWN0JztcclxuaW1wb3J0IHsgU21hcnRHcmlkVG9vbGJhckFjdGlvbnNVdGlsIH0gZnJvbSAnLi9zbWFydC1ncmlkLXRvb2xiYXItdXRpbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NtYXJ0LWdyaWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1ncmlkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydC1ncmlkLmNvbXBvbmVudC5jc3MnXSxcclxuICBwcm92aWRlcnM6IFtTbWFydEdyaWRTZXJ2aWNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0R3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcclxuICAvLyBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRQYWdlU2l6ZTogbnVtYmVyID0gMTA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0UGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFs1LCAxMCwgMjUsIDUwXTtcclxuICBjb21wb25lbnRMaWJyYXJ5ID0gQ29tcG9uZW50TGlicmFyeTtcclxuICBwcml2YXRlIF9kZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgQElucHV0KCkgc21hcnRHcmlkPzogU21hcnRHcmlkO1xyXG4gIEBJbnB1dCgpIHV1aWQ/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZGV2OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIHRhYmxlXHJcbiAgQFZpZXdDaGlsZCgndGFibGUnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgdmNSZWZUYWJsZT86IFZpZXdDb250YWluZXJSZWY7XHJcbiAgY29tcG9uZW50UmVmVGFibGU/OiBDb21wb25lbnRSZWY8U21hcnR0YWJsZUNvbXBvbmVudD47XHJcbiAgc21hcnRUYWJsZSE6IFNtYXJ0VGFibGU8R3JpZFJvdz47XHJcblxyXG4gIC8vIHRvb2xiYXJcclxuICBAVmlld0NoaWxkKCd0b29sYmFyJykgdG9vbGJhcj86IFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdoZWFkZXJUb29sYmFyJykgX2hlYWRlclRvb2xiYXI/OiBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQ7XHJcbiAgZGVmYXVsdEFjdGlvblRvb2xiYXJJZDogc3RyaW5nID0gU21hcnRHcmlkVG9vbGJhckFjdGlvbnNVdGlsLmRlZmF1bHRBY3Rpb25Ub29sYmFySWQ7XHJcblxyXG4gIC8vIGV4cGFuZGFibGVcclxuICAvLyBncmlkRGF0YVxyXG4gIGV4cGFuZGFibGVTZWN0aW9ucz86IEV4cGFuZGFibGVTZWN0aW9uPGFueT5bXTtcclxuICBleHBhbmRlZFJvd3MgPSB7fTtcclxuICBwYWdlRXZlbnQ/OiBQYWdlRXZlbnQ7XHJcbiAgZGF0YXNvdXJjZT86IG51bGw7XHJcbiAgcGFnZVNpemU/OiBudW1iZXI7XHJcbiAgbGVuZ3RoPzogbnVtYmVyO1xyXG4gIHBhZ2VJbmRleD86IG51bWJlcjtcclxuICB2YWx1ZXM6IGFueTtcclxuICBncmlkVGFibGUhOiBTbWFydFRhYmxlPGFueT47XHJcbiAgaXNNdWx0aXBsZT86IGJvb2xlYW47XHJcbiAgc2VsZWN0ZWRSb3dzOiBHcmlkUm93W10gPSBbXTtcclxuICB0YWJsZVR5cGU/OiBhbnk7XHJcbiAgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IHRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9ucztcclxuXHJcbiAgc2VsZWN0aW9uQ2hhbmdlczogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgdWlBY3Rpb25EZXNjcmlwdG9yczogTWFwPHN0cmluZywgVWlBY3Rpb25EZXNjcmlwdG9yPiA9IG5ldyBNYXAoKTtcclxuICBjZWxsVG9BY3Rpb25NYXA6IFJlY29yZDxzdHJpbmcsIFVpQWN0aW9uTW9kZWxbXT4gPSB7fTtcclxuXHJcbiAgYWZ0ZXJWaWV3SW5pdEV4ZWN1dGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNCbG9ja2VkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLy8gdHJlZVxyXG4gIHRyZWVDb250cm9sPzogRmxhdFRyZWVDb250cm9sPEdyaWRSb3c+O1xyXG4gIHRyZWVGbGF0dGVuZXI/OiBNYXRUcmVlRmxhdHRlbmVyPEdyaWRSb3csIEdyaWRSb3c+O1xyXG4gIHRyZWVEYXRhU291cmNlPzogTWF0VHJlZUZsYXREYXRhU291cmNlPEdyaWRSb3csIEdyaWRSb3c+O1xyXG4gIHRyZWVDaGVja2xpc3RTZWxlY3Rpb24/OiBTZWxlY3Rpb25Nb2RlbDxHcmlkUm93PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNlcnZpY2U6IFNtYXJ0R3JpZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNmU2VydmljZTogQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIHVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U6IFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UsXHJcbiAgICBASW5qZWN0KENPTVBPTkVOVF9MSUJSQVJZKSBwdWJsaWMgY29tcExpYjogQ29tcG9uZW50TGlicmFyeSxcclxuICAgIEBJbmplY3QoJ2dyaWRNZW51SWNvbicpIHByaXZhdGUgZ3JpZE1lbnVJY29uPzogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAvLyBjYWxsZWQgYWZ0ZXIgZXZlcnkgc2VydmljZSBjYWxsIChsb2FkLCBzYXZlLCByZWZyZXNoLCBldGMuKVxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbDtcclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3NtYXJ0R3JpZCddKSB7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkID0gY2hhbmdlc1snc21hcnRHcmlkJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLnNlcnZpY2UucGFnaW5hdG9yID0gdGhpcy5zbWFydEdyaWQ/LnBhZ2luYXRvcjtcclxuICAgICAgdGhpcy5zZXR1cFRvb2xiYXIoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWyd1dWlkJ10pIHtcclxuICAgICAgdGhpcy51dWlkID0gY2hhbmdlc1sndXVpZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFmdGVyVmlld0luaXRFeGVjdXRlZCAmJiB0aGlzLnV1aWQgJiYgdGhpcy5zbWFydEdyaWQpIHtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kZXYpIHtcclxuICAgICAgLy8gZm9yIGRldiBwdXJwb3Nlc1xyXG4gICAgICBpZiAodGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbCkge1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5ncmlkTW9kZWwgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsO1xyXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy51dWlkICYmIHRoaXMuc21hcnRHcmlkICYmICF0aGlzLmRldikge1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICAgIHRoaXMuYWZ0ZXJWaWV3SW5pdEV4ZWN1dGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHJldHVybnMgdGhlIHNlbGVjdGVkIHJvd3Mgb2YgdGhlIHRhYmxlXHJcbiAgICovXHJcbiAgcHVibGljIGdldFNlbGVjdGVkUm93cygpOiBTZWxlY3Rpb25Nb2RlbDxHcmlkUm93PiB7XHJcbiAgICBpZiAoIXRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24pIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgcmV0dXJuIHRoaXMuc21hcnRUYWJsZSEuc2VsZWN0aW9uITtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgR0VUIHJlcXVlc3QgdG8gdGhlIGdlbmVyaWMgR3JpZEFQSSBhbmQgcmVmcmVzaGVzIHRoZSBwcmVzZW50ZWRcclxuICAgKiBncmlkIHdpdGggdGhlIG5ld2VzdCBvbmUuXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnNldHVwVG9vbGJhcigpO1xyXG4gICAgLy8gd2lsbCBjYXVzZSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsQ2hhbmdlZCB0byBmaXJlXHJcbiAgICBpZiAodGhpcy51dWlkKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5sb2FkKHRoaXMudXVpZCwgdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFN0eWxlKHJvdzogYW55KTogc3RyaW5nW10ge1xyXG4gICAgaWYgKHJvdyAmJiByb3cuc3R5bGUpIHtcclxuICAgICAgbGV0IHN0eWxlID0gcm93LnN0eWxlO1xyXG4gICAgICBsZXQgY2xhc3Nlc1RvQWRkOiBBcnJheTxzdHJpbmc+ID0gW107XHJcblxyXG4gICAgICBpZiAoc3R5bGUuY2xhc3Nlc1RvQWRkKSB7XHJcbiAgICAgICAgc3R5bGUuY2xhc3Nlc1RvQWRkLmZvckVhY2goKGNsOiBzdHJpbmcpID0+IGNsYXNzZXNUb0FkZC5wdXNoKGNsKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghc3R5bGUuY2xhc3Nlc1RvUmVtb3ZlKSB7XHJcbiAgICAgICAgcmV0dXJuIGNsYXNzZXNUb0FkZDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY2xhc3Nlc1RvQWRkLmZpbHRlcigoY2xzKSA9PiAhc3R5bGUuY2xhc3Nlc1RvUmVtb3ZlLmluY2x1ZGVzKGNscykpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldHVwVG9vbGJhcigpIHtcclxuICAgIC8vIGNoZWNrIGlmIHRvb2xiYXIgaXMgYXZhaWxhYmxlIF9hbmRfIG5lZWQgc2V0IHVwXHJcbiAgICBpZiAodGhpcy50b29sYmFyICYmIHRoaXMuc21hcnRHcmlkKSB7XHJcbiAgICAgIGxldCB0b29sYmFySWQgPSB0aGlzLnNtYXJ0R3JpZD8uZ3JpZElkZW50aWZpZXIgKyAnX3Rvb2xiYXInO1xyXG4gICAgICBpZiAodG9vbGJhcklkICE9PSB0aGlzLnRvb2xiYXIuaWQpIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXIuaWQgPSB0b29sYmFySWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5faGVhZGVyVG9vbGJhciAmJiB0aGlzLnNtYXJ0R3JpZCkge1xyXG4gICAgICBsZXQgaGVhZGVyVG9vbGJhcklkID0gdGhpcy5zbWFydEdyaWQ/LmdyaWRJZGVudGlmaWVyICsgJ19oZWFkZXJUb29sYmFyJztcclxuICAgICAgaWYgKGhlYWRlclRvb2xiYXJJZCAhPT0gdGhpcy5faGVhZGVyVG9vbGJhci5pZCkge1xyXG4gICAgICAgIHRoaXMuX2hlYWRlclRvb2xiYXIuaWQgPSBoZWFkZXJUb29sYmFySWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBoZWFkZXJUb29sYmFyKCk6IFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudCB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAodGhpcy5jb21wTGliID09PSBDb21wb25lbnRMaWJyYXJ5LlBSSU1FTkcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2hlYWRlclRvb2xiYXI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRSZWZUYWJsZT8uaW5zdGFuY2UuY29tcG9uZW50UmVmVGFibGU/Lmluc3RhbmNlLmhlYWRlclRvb2xiYXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHJlbmRlcigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGdyaWRNb2RlbCA9IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWw7XHJcbiAgICBpZiAoZ3JpZE1vZGVsKSB7XHJcbiAgICAgIHRoaXMubGVuZ3RoID0gZ3JpZE1vZGVsLnRvdGFsUm93Q291bnQ7XHJcbiAgICAgIHRoaXMucGFnZVNpemUgPSBncmlkTW9kZWwucGFnZVNpemU7XHJcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gZ3JpZE1vZGVsLnBhZ2VJbmRleCA/PyAwO1xyXG4gICAgICBpZiAoZ3JpZE1vZGVsLnBhZ2VTaXplT3B0aW9ucyAmJiBncmlkTW9kZWwucGFnZVNpemVPcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IGdyaWRNb2RlbC5wYWdlU2l6ZU9wdGlvbnM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSB0aGlzLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGdyaWRNb2RlbD8udmlldz8uZGVzY3JpcHRvcj8uc2hvd0VkaXRDb2x1bW5zKSB7XHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLnNob3dFZGl0Q29sdW1ucyA9IGdyaWRNb2RlbD8udmlldz8uZGVzY3JpcHRvcj8uc2hvd0VkaXRDb2x1bW5zO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBraW5kID0gZ3JpZE1vZGVsPy52aWV3Py5kZXNjcmlwdG9yPy5raW5kO1xyXG4gICAgICBpZiAoa2luZCkge1xyXG4gICAgICAgIGxldCBsYXlvdXREZWY7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IEdyaWRWaWV3RGVzY3JpcHRvcktpbmRFbnVtLlRBQkxFKSB7XHJcbiAgICAgICAgICBsYXlvdXREZWYgPSBTbWFydExheW91dERlZi5UQUJMRTtcclxuICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09IEdyaWRWaWV3RGVzY3JpcHRvcktpbmRFbnVtLlRSRUUpIHtcclxuICAgICAgICAgIGxheW91dERlZiA9IFNtYXJ0TGF5b3V0RGVmLlRSRUU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChraW5kID09PSBHcmlkVmlld0Rlc2NyaXB0b3JLaW5kRW51bS5DQVJEUykge1xyXG4gICAgICAgICAgbGF5b3V0RGVmID0gU21hcnRMYXlvdXREZWYuQ0FSRDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxheW91dERlZikge1xyXG4gICAgICAgICAgdGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9IGxheW91dERlZjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGdyaWRNb2RlbD8ucGFnaW5hdG9yID09PSB0cnVlIHx8IGdyaWRNb2RlbD8ucGFnaW5hdG9yID09PSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS5wYWdpbmF0b3IgPSBncmlkTW9kZWwucGFnaW5hdG9yO1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5wYWdpbmF0b3IgPSB0aGlzLnNtYXJ0R3JpZCEucGFnaW5hdG9yO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdHcmlkTW9kZWwgaXMgdW5kZWZpbmVkIGluIGNvbXBvbmVudCEnKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zbWFydEdyaWQhLmxheW91dERlZikge1xyXG4gICAgICAvLyBmYWxsYmFjaywgZGVmYXVsdCBUQUJMRVxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID0gU21hcnRMYXlvdXREZWYuVEFCTEU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9PT0gU21hcnRMYXlvdXREZWYuVEFCTEUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJUYWJsZSgpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID09PSBTbWFydExheW91dERlZi5FWFBBTkRBQkxFKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyRXhwYW5kYWJsZVNlY3Rpb25zKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPT09IFNtYXJ0TGF5b3V0RGVmLkNBUkQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJDYXJkcygpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID09PSBTbWFydExheW91dERlZi5UUkVFKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyVHJlZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc0Jsb2NrZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJUYWJsZSgpIHtcclxuICAgIHRoaXMudmNSZWZUYWJsZT8uY2xlYXIoKTtcclxuICAgIHRoaXMuY29tcG9uZW50UmVmVGFibGUgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHJlbmRlclRhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5jbGVhclRyZWUoKTtcclxuICAgIGlmICh0aGlzLmNvbXBMaWIgPT09IHRoaXMuY29tcG9uZW50TGlicmFyeS5QUklNRU5HKSB7XHJcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC5wYWdlU2l6ZSEgKiB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnBhZ2VJbmRleCE7XHJcbiAgICAgIHRoaXMuY29sdW1ucyA9IFtdO1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnZpZXc/Lm9yZGVyZWRDb2x1bW5OYW1lcy5tYXAoKG9yZGVyZWRDb2w6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uY29sdW1ucy5tYXAoKGNvbHVtOiBHcmlkQ29sdW1uTWV0YSkgPT4ge1xyXG4gICAgICAgICAgaWYgKG9yZGVyZWRDb2wgPT09IGNvbHVtLnByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMucHVzaChjb2x1bSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB0YWJsZVJvdyA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwhLnBhZ2Uucm93cyEubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5jcmVhdGVDZWxsVG9BY3Rpb25NYXAoKTtcclxuICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIXRhYmxlUm93Lmxlbmd0aCkge1xyXG4gICAgICBsZXQgcGxhY2VIb2xkZXJSb3c6IGFueSA9IHt9O1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LmNvbHVtbnMubWFwKChtZXRhOiBHcmlkQ29sdW1uTWV0YSkgPT4ge1xyXG4gICAgICAgIHBsYWNlSG9sZGVyUm93W21ldGEucHJvcGVydHlOYW1lXSA9IHVuZGVmaW5lZDtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzID0gW3BsYWNlSG9sZGVyUm93XTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLnRhYmxlQ29uZmlnPy50YWJsZVR5cGUpIHtcclxuICAgICAgdGhpcy50YWJsZVR5cGUgPSB0aGlzLnNtYXJ0R3JpZCEudGFibGVDb25maWcudGFibGVUeXBlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsPy52aWV3Py5kZXNjcmlwdG9yPy5zZWxlY3Rpb25UeXBlKSB7XHJcbiAgICAgIHRoaXMudGFibGVUeXBlID1cclxuICAgICAgICB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnZpZXcuZGVzY3JpcHRvci5zZWxlY3Rpb25UeXBlID09PSBHcmlkU2VsZWN0aW9uVHlwZS5DSEVDS0JPWFxyXG4gICAgICAgICAgPyBTbWFydFRhYmxlVHlwZS5DSEVDS19CT1hcclxuICAgICAgICAgIDogU21hcnRUYWJsZVR5cGUuUk9XX1NFTEVDVDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudGFibGVUeXBlID0gU21hcnRUYWJsZVR5cGUuSU5IRVJJVEVEO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPT09IFNtYXJ0TGF5b3V0RGVmLlRBQkxFKSB7XHJcbiAgICAgIGxldCB0YWJsZUNvbmZpZzogU21hcnRUYWJsZUludGVyZmFjZTxHcmlkUm93PiA9IHtcclxuICAgICAgICAuLi50aGlzLnNtYXJ0R3JpZCEudGFibGVDb25maWcsXHJcbiAgICAgICAgdGl0bGU6IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwudGl0bGUsXHJcbiAgICAgICAgdGFibGVSb3dzOiB0YWJsZVJvdyxcclxuICAgICAgICB0YWJsZVR5cGU6IHRoaXMudGFibGVUeXBlLFxyXG4gICAgICAgIGN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzOiBhd2FpdCB0aGlzLmNvbnN0cnVjdEhlYWRlcigpISxcclxuICAgICAgICBleHBhbmRhYmxlOiB0aGlzLnNtYXJ0R3JpZCEuZXhwYW5kYWJsZSxcclxuICAgICAgICBleHBhbmRlZENvbXBvbmVudDogdGhpcy5zbWFydEdyaWQhLmV4cGFuZGVkQ29tcG9uZW50LFxyXG4gICAgICAgIHR5cGU6IFNtYXJ0VGFibGVJbnRlcmZhY2VUeXBlRW51bS5OT1JNQUwsXHJcbiAgICAgICAgc29ydGFibGU6IHRydWUsXHJcbiAgICAgICAgZGVmYXVsdEFjdGlvbkNvZGVzOiB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLmRlZmF1bHRSb3dBY3Rpb25zISxcclxuICAgICAgICBkZWZhdWx0QWN0aW9uczogdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC5kZWZhdWx0Um93QWN0aW9ucz8ubWFwKChjb2RlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHR5cGU6XHJcbiAgICAgICAgICAgICAgY29kZSA9PT0gJ19hY3Rpb25TZXBhcmF0b3JfJ1xyXG4gICAgICAgICAgICAgICAgPyBTbWFydFRhYmxlQnV0dG9uVHlwZS5TRVBBUkFUT1JcclxuICAgICAgICAgICAgICAgIDogU21hcnRUYWJsZUJ1dHRvblR5cGUuTk9STUFMLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogdGhpcy5leGVjdXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIGNvZGU6IGNvZGUsXHJcbiAgICAgICAgICAgIC8vIGxhYmVsOiB0aGlzLmJ1dHRvblRyYW5zbGF0b3IoeyBjb2RlOiBjb2RlIH0pLFxyXG4gICAgICAgICAgICB0cmFuc2xhdG9yOiB0aGlzLmJ1dHRvblRyYW5zbGF0b3IuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgLy8gYXJnczogW1xyXG4gICAgICAgICAgICAvLyAgIHtcclxuICAgICAgICAgICAgLy8gICAgIGNvZGU6IGNvZGUsXHJcbiAgICAgICAgICAgIC8vICAgfSxcclxuICAgICAgICAgICAgLy8gXSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSksXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5oaWdobGlnaHRQcm9wZXJ0eSAmJlxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uaGlnaGxpZ2h0Q2xhc3NcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGFibGVDb25maWcuaGlnaGxpZ2h0Q2xhc3MgPSB0aGlzLnNtYXJ0R3JpZC5ncmlkTW9kZWwudmlldy5kZXNjcmlwdG9yLmhpZ2hsaWdodENsYXNzO1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLmhpZ2hsaWdodFByb3BlcnR5ID0gdGhpcy5zbWFydEdyaWQuZ3JpZE1vZGVsLnZpZXcuZGVzY3JpcHRvci5oaWdobGlnaHRQcm9wZXJ0eTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS51aUFjdGlvblNlcnZpY2UgJiZcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSAmJlxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS5zZXJ2aWNlVG9Vc2UgJiZcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEudmlld0NvbnRleHRTZXJ2aWNlXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLm9uU2VsZWN0aW9uID0gdGhpcy5vblNlbGVjdC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLm9uQWxsU2VsZWN0aW9uID0gdGhpcy5vblNlbGVjdEFsbC5iaW5kKHRoaXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBQcmVwYXJlZCBmb3Igc2ltcGxlIGNsaWNrc1xyXG4gICAgICAvLyBpZiAoIXRhYmxlQ29uZmlnLm9uUm93Q2xpY2spIHtcclxuICAgICAgLy8gICB0YWJsZUNvbmZpZy5vblJvd0NsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIGlmICghdGFibGVDb25maWcub25Sb3dEb3VibGVDbGljaykge1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLm9uUm93RG91YmxlQ2xpY2sgPSB0aGlzLm9uRG91YmxlQ2xpY2suYmluZCh0aGlzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF0YWJsZUNvbmZpZy5pc1Jvd0Rpc2FibGVkUHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgdGFibGVDb25maWcuc2VsZWN0YWJsZVByb3BlcnR5TmFtZSA9ICdzZWxlY3RhYmxlJztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRhYmxlQ29uZmlnLmFzeW5jT25FeHBhbmQpIHtcclxuICAgICAgICB0YWJsZUNvbmZpZy5yb3dFeHBhbmRlciA9IHRoaXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbk1vZGUgPSB0aGlzLnNlcnZpY2UhLmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5zZWxlY3Rpb25Nb2RlO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgICF0YWJsZUNvbmZpZy5zZWxlY3Rpb24gJiZcclxuICAgICAgICAhdGFibGVDb25maWcuc2VsZWN0aW9uUHJvcGVydHkgJiZcclxuICAgICAgICBzZWxlY3Rpb25Nb2RlICE9PSBHcmlkU2VsZWN0aW9uTW9kZS5OT05FXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuaXNNdWx0aXBsZSA9IHNlbGVjdGlvbk1vZGUgPT09IEdyaWRTZWxlY3Rpb25Nb2RlLk1VTFRJUExFO1xyXG5cclxuICAgICAgICB0YWJsZUNvbmZpZy5zZWxlY3Rpb25Qcm9wZXJ0eSA9ICdpZCc7XHJcbiAgICAgICAgbGV0IHNlbGVjdGVkSWRzO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5wYWdlLnJvd3MhLmZpbHRlcihcclxuICAgICAgICAgIChncmlkUm93OiBHcmlkUm93KSA9PiBncmlkUm93LnNlbGVjdGVkXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgc2VsZWN0ZWRJZHMgPSB0aGlzLnNlbGVjdGVkUm93cy5tYXAoKGdyaWRSb3c6IEdyaWRSb3cpID0+IGdyaWRSb3cuaWQhKTtcclxuICAgICAgICB0YWJsZUNvbmZpZy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8c3RyaW5nPih0aGlzLmlzTXVsdGlwbGUsIHNlbGVjdGVkSWRzKTtcclxuICAgICAgICB0YWJsZUNvbmZpZy5zaG93Q2hlY2tib3hJbkhlYWRlciA9XHJcbiAgICAgICAgICB0eXBlb2YgdGFibGVDb25maWcuc2hvd0NoZWNrYm94SW5IZWFkZXIgIT09ICd1bmRlZmluZWQnXHJcbiAgICAgICAgICAgID8gdGFibGVDb25maWcuc2hvd0NoZWNrYm94SW5IZWFkZXIgLy8ga2VlcCBpZiBzZXRcclxuICAgICAgICAgICAgOiB0aGlzLmlzTXVsdGlwbGU7IC8vaWYgdW5zZXQsIHR1cm4gaXQgb24gZm9yIG11bHRpcGxlIHNlbGVjdGlvblxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUgPSBuZXcgU21hcnRUYWJsZTxhbnk+KFxyXG4gICAgICAgIHRhYmxlQ29uZmlnLFxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkPy5ncmlkSWRlbnRpZmllcixcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZD8uc2VydmljZVRvVXNlXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAodGhpcy5jb21wb25lbnRSZWZUYWJsZSkge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2UudXBkYXRlU21hcnRUYWJsZSh0aGlzLnNtYXJ0VGFibGUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudmNSZWZUYWJsZT8uY2xlYXIoKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnZjUmVmVGFibGUpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWZUYWJsZSA9IHRoaXMuY2ZTZXJ2aWNlLmNyZWF0ZUNvbXBvbmVudChcclxuICAgICAgICAgIHRoaXMudmNSZWZUYWJsZSEsXHJcbiAgICAgICAgICBTbWFydHRhYmxlQ29tcG9uZW50LFxyXG4gICAgICAgICAgbmV3IE1hcDxzdHJpbmcsIGFueT4oW1snc21hcnRUYWJsZScsIHRoaXMuc21hcnRUYWJsZV1dKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSB0aGlzLmNvbXBvbmVudFJlZlRhYmxlLmluc3RhbmNlLnNvcnRFdmVudFxyXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2UuX2Rlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXIucHJvcGVydHlOYW1lID0gaGVhZGVyLnByb3BlcnR5TmFtZS5zdWJzdHJpbmcoNSk7XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKGhlYWRlci5vcmRlcikge1xyXG4gICAgICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxyXG4gICAgICAgICAgICAgICAgaGVhZGVyLm9yZGVyID0gU21hcnRUYWJsZU9yZGVyLkFTQztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgU21hcnRUYWJsZU9yZGVyLkFTQzpcclxuICAgICAgICAgICAgICAgIGhlYWRlci5vcmRlciA9IFNtYXJ0VGFibGVPcmRlci5ERVNDO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSBTbWFydFRhYmxlT3JkZXIuREVTQzpcclxuICAgICAgICAgICAgICAgIGhlYWRlci5vcmRlciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZmlsdGVyID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlckJ5TGlzdC5maW5kKFxyXG4gICAgICAgICAgICAgIChmaWx0ZXJFeHByZXNzaW9uOiBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeSkgPT5cclxuICAgICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb24ucHJvcGVydHlOYW1lID09PSBoZWFkZXIucHJvcGVydHlOYW1lXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgJiYgIWhlYWRlci5vcmRlcikge1xyXG4gICAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldz8ub3JkZXJCeUxpc3QuaW5kZXhPZihmaWx0ZXIpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldz8ub3JkZXJCeUxpc3Quc3BsaWNlKGluZGV4ISwgMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgZmlsdGVyLm9yZGVyID0gaGVhZGVyLm9yZGVyO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldyEub3JkZXJCeUxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBvcmRlcjogaGVhZGVyLm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBoZWFkZXIucHJvcGVydHlOYW1lLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZ3JpZFVwZGF0ZURhdGE6IEdyaWRVcGRhdGVEYXRhID0ge1xyXG4gICAgICAgICAgICAgIG9yZGVyQnlMaXN0OiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLm9yZGVyQnlMaXN0LFxyXG4gICAgICAgICAgICAgIG9yZGVyZWRDb2x1bW5OYW1lczogdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlcmVkQ29sdW1uTmFtZXMsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5zb3J0KHRoaXMuc21hcnRHcmlkISwgZ3JpZFVwZGF0ZURhdGEpO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2Uuc21hcnRUYWJsZS5zZWxlY3Rpb24/LmNoYW5nZWRcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudFJlZlRhYmxlLmluc3RhbmNlLl9kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChyb3c6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZXMubmV4dChyb3cpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBhbmQocm93SWQ6IG51bWJlcik6IGFueSB7fVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZXhwYW5kQXN5bmMocm93SW5kZXg6IG51bWJlcik6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MpIHtcclxuICAgICAgbGV0IHJvdyA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzW3Jvd0luZGV4XTtcclxuICAgICAgaWYgKHJvdyAmJiByb3cuaWQpIHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXJ2aWNlLmV4cGFuZCh0aGlzLnNtYXJ0R3JpZCEsIHJvdy5pZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnNlcnZpY2UuZXhwYW5kKHRoaXMuc21hcnRHcmlkISwgcm93SW5kZXgudG9TdHJpbmcoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgb21QcmltZU5nUm93RXhwYW5kKCRldmVudDogVGFibGVSb3dFeHBhbmRFdmVudCk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXJ2aWNlLmV4cGFuZCh0aGlzLnNtYXJ0R3JpZCEsICRldmVudC5kYXRhLmlkISk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckV4cGFuZGFibGVTZWN0aW9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuZXhwYW5kYWJsZVNlY3Rpb25zID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbCEucGFnZS5yb3dzIS5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRpdGxlOiAnJyxcclxuICAgICAgICBoZWFkZXJDb21wb25lbnQ6IHRoaXMuc21hcnRHcmlkIS5oZWFkZXJDb21wb25lbnQsXHJcbiAgICAgICAgaGVhZGVySW5wdXROYW1lOiB0aGlzLnNtYXJ0R3JpZCEuaGVhZGVyQ29tcG9uZW50SW5wdXROYW1lLFxyXG4gICAgICAgIGhlYWRlckRhdGE6IGl0ZW0sXHJcbiAgICAgICAgY3VzdG9tQ29tcG9uZW50OiB0aGlzLnNtYXJ0R3JpZCEuZXhwYW5kYWJsZUNvbXBvbmVudCxcclxuICAgICAgICBpbnB1dE5hbWU6IHRoaXMuc21hcnRHcmlkIS5leHBhbmRhYmxlQ29tcG9uZW50SW5wdXROYW1lLFxyXG4gICAgICAgIGRhdGE6IGl0ZW0sXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQ2FyZHMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb21wTGliID09PSB0aGlzLmNvbXBvbmVudExpYnJhcnkuUFJJTUVORykge1xyXG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwucGFnZVNpemUhICogdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC5wYWdlSW5kZXghO1xyXG4gICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcclxuICAgICAgdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5vcmRlcmVkQ29sdW1uTmFtZXMubWFwKChvcmRlcmVkQ29sOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LmNvbHVtbnMubWFwKChjb2x1bTogR3JpZENvbHVtbk1ldGEpID0+IHtcclxuICAgICAgICAgIGlmIChvcmRlcmVkQ29sID09PSBjb2x1bS5wcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jb2x1bW5zLnB1c2goY29sdW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zbWFydEdyaWQhLmN1c3RvbUNvbXBvbmVudCkge1xyXG4gICAgICBsZXQgZGF0YWxheW91dERlZiA9IHtcclxuICAgICAgICBkYXRhTGF5b3V0OiBTbWFydEdyaWREYXRhTGF5b3V0LkNPTFVNTixcclxuICAgICAgICBncmlkTGF5b3V0OiBTbWFydEdyaWREYXRhTGF5b3V0LkNPTFVNTixcclxuICAgICAgICB0eXBlOiBTbWFydEdyaWRUeXBlLkNVU1RPTSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5kYXRhTGF5b3V0RGVmID0gZGF0YWxheW91dERlZjtcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmN1c3RvbUNvbXBvbmVudCA9IHRoaXMuaW5qZWN0b3IuZ2V0KHRoaXMuc21hcnRHcmlkIS5ncmlkSWRlbnRpZmllciArICdDYXJkJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzTXVsdGlwbGVTZWxlY3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25Nb2RlID0gdGhpcy5zZXJ2aWNlIS5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uc2VsZWN0aW9uTW9kZTtcclxuICAgIHJldHVybiBzZWxlY3Rpb25Nb2RlID09PSBHcmlkU2VsZWN0aW9uTW9kZS5NVUxUSVBMRTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJUcmVlKCkge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudHJlZURhdGFTb3VyY2UgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRyZWVGbGF0dGVuZXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24gPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlclRyZWUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyVGFibGUoKTtcclxuICAgIGlmICghdGhpcy50cmVlRGF0YVNvdXJjZSkge1xyXG4gICAgICB0aGlzLnRyZWVGbGF0dGVuZXIgPSBuZXcgTWF0VHJlZUZsYXR0ZW5lcihcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybWVyLFxyXG4gICAgICAgIHRoaXMuZ2V0TGV2ZWwsXHJcbiAgICAgICAgdGhpcy5pc0V4cGFuZGFibGUsXHJcbiAgICAgICAgdGhpcy5nZXRDaGlsZHJlblxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxHcmlkUm93Pih0aGlzLmdldExldmVsLCB0aGlzLmlzRXhwYW5kYWJsZSk7XHJcbiAgICAgIHRoaXMudHJlZURhdGFTb3VyY2UgPSBuZXcgTWF0VHJlZUZsYXREYXRhU291cmNlKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMudHJlZUZsYXR0ZW5lcik7XHJcbiAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxHcmlkUm93Pih0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb24oKSk7XHJcbiAgICB9XHJcbiAgICBsZXQgbm9kZXMgPSB0aGlzLnRyZWVDb250cm9sPy5kYXRhTm9kZXM7XHJcbiAgICBsZXQgZXhwYW5kZWROb2RlczogKHN0cmluZyB8IHVuZGVmaW5lZClbXTtcclxuICAgIGlmIChub2Rlcykge1xyXG4gICAgICBleHBhbmRlZE5vZGVzID0gbm9kZXNcclxuICAgICAgICAuZmlsdGVyKChub2RlKSA9PiB0aGlzLnRyZWVDb250cm9sPy5pc0V4cGFuZGFibGUobm9kZSkpXHJcbiAgICAgICAgLmZpbHRlcigobm9kZSkgPT4gdGhpcy50cmVlQ29udHJvbD8uaXNFeHBhbmRlZChub2RlKSlcclxuICAgICAgICAubWFwKChub2RlKSA9PiBub2RlLmlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGV4cGFuZGVkTm9kZXMgPSBbXTtcclxuICAgIH1cclxuICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzIS5mb3JFYWNoKChyb3c6IGFueSkgPT4gKHJvdy5sZXZlbCA9IHVuZGVmaW5lZCkpO1xyXG4gICAgdGhpcy50cmVlRGF0YVNvdXJjZS5kYXRhID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MhLmZpbHRlcigocm93KSA9PiAhcm93LnBhcmVudCk7XHJcbiAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24/LmNsZWFyKCk7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sPy5kYXRhTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICBpZiAobm9kZS5zZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbj8uc2VsZWN0KG5vZGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMudHJlZUNvbnRyb2w/LmNvbGxhcHNlQWxsKCk7XHJcbiAgICBleHBhbmRlZE5vZGVzLmZvckVhY2goKHJvd0lkKSA9PiB7XHJcbiAgICAgIGxldCByb3cgPSB0aGlzLnRyZWVDb250cm9sPy5kYXRhTm9kZXMuZmluZCgocm93KSA9PiByb3dJZCA9PT0gcm93LmlkKTtcclxuICAgICAgaWYgKHJvdykge1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2w/LmV4cGFuZChyb3cpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldExldmVsID0gKG5vZGU6IGFueSkgPT4gbm9kZS5sZXZlbCA/PyAwO1xyXG5cclxuICBpc0V4cGFuZGFibGUgPSAobm9kZTogR3JpZFJvdykgPT4gKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwID8gdHJ1ZSA6IGZhbHNlKTtcclxuXHJcbiAgZ2V0Q2hpbGRyZW4gPSAobm9kZTogR3JpZFJvdyk6IEdyaWRSb3dbXSA9PiB7XHJcbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xyXG4gICAgICBsZXQgcm93cyA9IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwucGFnZS5yb3dzPy5maWx0ZXIoKHJvdykgPT5cclxuICAgICAgICBub2RlLmNoaWxkcmVuPy5zb21lKChjaGlsZCkgPT4gY2hpbGQgPT09IHJvdy5pZCEpXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChyb3dzKSB7XHJcbiAgICAgICAgcmV0dXJuIHJvd3M7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9O1xyXG5cclxuICBoYXNDaGlsZCA9IChfOiBudW1iZXIsIF9ub2RlRGF0YTogR3JpZFJvdykgPT4gdGhpcy5pc0V4cGFuZGFibGUoX25vZGVEYXRhKTtcclxuXHJcbiAgdHJhbnNmb3JtZXIgPSAocm93OiBHcmlkUm93LCBsZXZlbDogbnVtYmVyKSA9PiB7XHJcbiAgICAocm93IGFzIGFueSkubGV2ZWwgPSBsZXZlbDtcclxuICAgIHJldHVybiByb3c7XHJcbiAgfTtcclxuXHJcbiAgZ2V0VHJlZUl0ZW0ocm93OiBHcmlkUm93KTogc3RyaW5nIHtcclxuICAgIGxldCBjb2x1bW5zOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwudmlldz8ub3JkZXJlZENvbHVtbk5hbWVzO1xyXG4gICAgbGV0IGRhdGE6IGFueSA9IHJvdy5kYXRhITtcclxuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbCkgPT4gZGF0YVtjb2xdKS5qb2luKCcgJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93LmlkITtcclxuICB9XHJcblxyXG4gIC8qKiBUb2dnbGUgdGhlIHRyZWVOb2RlIHNlbGVjdGlvbi4gU2VsZWN0L2Rlc2VsZWN0IGFsbCB0aGUgZGVzY2VuZGFudHMgbm9kZSAqL1xyXG4gIHRyZWVOb2RlU2VsZWN0aW9uVG9nZ2xlKG5vZGU6IEdyaWRSb3cpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBzZWxlY3Rpb25CZWZvcmUgPSB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQubWFwKChyb3cpID0+IHJvdy5pZCk7XHJcbiAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24udG9nZ2xlKG5vZGUpO1xyXG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZVNlbGVjdGlvbigpKSB7XHJcbiAgICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy50cmVlQ29udHJvbCEuZ2V0RGVzY2VuZGFudHMobm9kZSk7XHJcbiAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXHJcbiAgICAgICAgPyB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0KC4uLmRlc2NlbmRhbnRzKVxyXG4gICAgICAgIDogdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLmRlc2NlbmRhbnRzKTtcclxuICAgICAgdGhpcy5jaGVja0FsbFBhcmVudHNTZWxlY3Rpb24obm9kZSk7XHJcbiAgICB9XHJcbiAgICBsZXQgc2VsZWN0aW9uQWZ0ZXIgPSB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQubWFwKChyb3cpID0+IHJvdy5pZCk7XHJcblxyXG4gICAgbGV0IHNlbGVjdGVkSWRzID0gc2VsZWN0aW9uQWZ0ZXIuZmlsdGVyKChzKSA9PiAhc2VsZWN0aW9uQmVmb3JlLmluY2x1ZGVzKHMpKTtcclxuICAgIGxldCB1bnNlbGVjdGVkSWRzID0gc2VsZWN0aW9uQmVmb3JlLmZpbHRlcigocykgPT4gIXNlbGVjdGlvbkFmdGVyLmluY2x1ZGVzKHMpKTtcclxuICAgIGlmICh0aGlzLmRldikge1xyXG4gICAgICAvLyB3aGVuIHNlcnZpY2UgY2FsbCBpcyBhY3RpdmUgKCFkZXYpLCBvblNlbGVjdCB3aWxsIHRvZ2dsZSByb3cuc2VsZWN0ZWRcclxuICAgICAgdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5wYWdlLnJvd3NcclxuICAgICAgICA/LmZpbHRlcigocm93KSA9PiBzZWxlY3RlZElkcy5pbmNsdWRlcyhyb3cuaWQpKVxyXG4gICAgICAgIC5mb3JFYWNoKChyb3cpID0+IChyb3cuc2VsZWN0ZWQgPSB0cnVlKSk7XHJcbiAgICAgIHRoaXMuc2VydmljZS5ncmlkTW9kZWwucGFnZS5yb3dzXHJcbiAgICAgICAgPy5maWx0ZXIoKHJvdykgPT4gdW5zZWxlY3RlZElkcy5pbmNsdWRlcyhyb3cuaWQpKVxyXG4gICAgICAgIC5mb3JFYWNoKChyb3cpID0+IChyb3cuc2VsZWN0ZWQgPSBmYWxzZSkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vblNlbGVjdFJvd3Moc2VsZWN0ZWRJZHMsIHVuc2VsZWN0ZWRJZHMpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tBbGxQYXJlbnRzU2VsZWN0aW9uKG5vZGU6IEdyaWRSb3cpOiB2b2lkIHtcclxuICAgIGxldCBwYXJlbnQ6IEdyaWRSb3cgfCBudWxsID0gdGhpcy5nZXRQYXJlbnROb2RlKG5vZGUpO1xyXG4gICAgd2hpbGUgKHBhcmVudCkge1xyXG4gICAgICB0aGlzLmNoZWNrUGFyZW50Tm9kZVNlbGVjdGlvbihwYXJlbnQpO1xyXG4gICAgICBwYXJlbnQgPSB0aGlzLmdldFBhcmVudE5vZGUocGFyZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrUGFyZW50Tm9kZVNlbGVjdGlvbihub2RlOiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBub2RlU2VsZWN0ZWQgPSB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKTtcclxuICAgIGNvbnN0IGRlc2NBbGxTZWxlY3RlZCA9IHRoaXMuZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlKTtcclxuICAgIGlmIChub2RlU2VsZWN0ZWQgJiYgIWRlc2NBbGxTZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uZGVzZWxlY3Qobm9kZSk7XHJcbiAgICB9IGVsc2UgaWYgKCFub2RlU2VsZWN0ZWQgJiYgZGVzY0FsbFNlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3Qobm9kZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiBHZXQgdGhlIHBhcmVudCBub2RlIG9mIGEgbm9kZSAqL1xyXG4gIGdldFBhcmVudE5vZGUobm9kZTogR3JpZFJvdyk6IEdyaWRSb3cgfCBudWxsIHtcclxuICAgIGNvbnN0IGN1cnJlbnRMZXZlbCA9IHRoaXMuZ2V0TGV2ZWwobm9kZSk7XHJcblxyXG4gICAgaWYgKGN1cnJlbnRMZXZlbCA8IDEpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IHRoaXMudHJlZUNvbnRyb2whLmRhdGFOb2Rlcy5pbmRleE9mKG5vZGUpIC0gMTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgY29uc3QgY3VycmVudE5vZGUgPSB0aGlzLnRyZWVDb250cm9sIS5kYXRhTm9kZXNbaV07XHJcblxyXG4gICAgICBpZiAodGhpcy5nZXRMZXZlbChjdXJyZW50Tm9kZSkgPCBjdXJyZW50TGV2ZWwpIHtcclxuICAgICAgICByZXR1cm4gY3VycmVudE5vZGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqIFdoZXRoZXIgYWxsIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgbm9kZSBhcmUgc2VsZWN0ZWQuICovXHJcbiAgZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlOiBHcmlkUm93KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMudHJlZUNvbnRyb2wgfHwgIXRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSk7XHJcbiAgICBjb25zdCBkZXNjQWxsU2VsZWN0ZWQgPVxyXG4gICAgICBkZXNjZW5kYW50cy5sZW5ndGggPiAwICYmXHJcbiAgICAgIGRlc2NlbmRhbnRzLmV2ZXJ5KChjaGlsZCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24hLmlzU2VsZWN0ZWQoY2hpbGQpO1xyXG4gICAgICB9KTtcclxuICAgIHJldHVybiBkZXNjQWxsU2VsZWN0ZWQ7XHJcbiAgfVxyXG5cclxuICAvKiogV2hldGhlciBwYXJ0IG9mIHRoZSBkZXNjZW5kYW50cyBhcmUgc2VsZWN0ZWQgKi9cclxuICBkZXNjZW5kYW50c1BhcnRpYWxseVNlbGVjdGVkKG5vZGU6IEdyaWRSb3cpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy50cmVlQ29udHJvbCB8fCAhdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhub2RlKTtcclxuICAgIGxldCByZXN1bHQgPSBkZXNjZW5kYW50cy5zb21lKChjaGlsZCkgPT4gdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uIS5pc1NlbGVjdGVkKGNoaWxkKSk7XHJcbiAgICBpZiAodGhpcy5pc011bHRpcGxlU2VsZWN0aW9uKCkpIHtcclxuICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICF0aGlzLmRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjb25zdHJ1Y3RIZWFkZXIoKTogUHJvbWlzZTxTbWFydFRhYmxlSGVhZGVyW10+IHtcclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cyAmJiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cy5sZW5ndGgpIHtcclxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MubWFwKGFzeW5jIChncmlkUm93OiBHcmlkUm93KSA9PiB7XHJcbiAgICAgICAgICBsZXQgbmV3VWlBY3Rpb25zID0gZ3JpZFJvdy5hY3Rpb25zPy5maWx0ZXIoXHJcbiAgICAgICAgICAgICh1aUFjdGlvbjogYW55KSA9PiAhdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLmdldCh1aUFjdGlvbi5jb2RlISlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgaWYgKG5ld1VpQWN0aW9ucykge1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICBuZXdVaUFjdGlvbnMubWFwKGFzeW5jICh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBkZXNjcmlwdG9yOiBVaUFjdGlvbkRlc2NyaXB0b3IgPVxyXG4gICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNtYXJ0R3JpZCEudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZT8uZ2V0QWN0aW9uRGVzY3JpcHRvcih1aUFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdWlBY3Rpb24uY29kZSA/PyAnQ09ERScsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuTk9STUFMLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLnNldCh1aUFjdGlvbi5jb2RlISwgZGVzY3JpcHRvcik7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBvcmVkZXJlZERlc2NDb2x1bW5zID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlcmVkQ29sdW1uTmFtZXMubWFwKFxyXG4gICAgICAocHJvcGVydHlOYW1lOiBzdHJpbmcpID0+XHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5kZXNjcmlwdG9yIS5jb2x1bW5zIS5maW5kKFxyXG4gICAgICAgICAgKGNvbERlc2NyaXB0b3I6IEdyaWRDb2x1bW5NZXRhKSA9PiBjb2xEZXNjcmlwdG9yLnByb3BlcnR5TmFtZSA9PT0gcHJvcGVydHlOYW1lXHJcbiAgICAgICAgKVxyXG4gICAgKS5mbGF0TWFwKChmKSA9PiBmID8/IFtdKTtcclxuXHJcbiAgICBsZXQgaGVhZGVyID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIG9yZWRlcmVkRGVzY0NvbHVtbnMubWFwKGFzeW5jIChkZXNjQ29sdW1uOiBHcmlkQ29sdW1uTWV0YSk6IFByb21pc2U8U21hcnRUYWJsZUhlYWRlcj4gPT4ge1xyXG4gICAgICAgIGxldCBjdXN0b21UYWJsZUhlYWRlciA9IHRoaXMuc21hcnRHcmlkIS50YWJsZUNvbmZpZz8uY3VzdG9tU21hcnRUYWJsZUhlYWRlcnM/LmZpbmQoXHJcbiAgICAgICAgICAoaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSA9PiBoZWFkZXIucHJvcGVydHlOYW1lID09PSBkZXNjQ29sdW1uLnByb3BlcnR5TmFtZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IGZpbHRlckV4cHJlc3Npb25PcmRlckJ5SXRlbSA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldz8ub3JkZXJCeUxpc3Q/LmZpbmQoXHJcbiAgICAgICAgICAoZmlsdGVyRXhwcmVzc2lvbjogRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnkpID0+XHJcbiAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb24ucHJvcGVydHlOYW1lID09PSBkZXNjQ29sdW1uIS5wcm9wZXJ0eU5hbWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGxldCBvcmRlcjtcclxuICAgICAgICBsZXQgb3JkZXJOdW1iZXI7XHJcbiAgICAgICAgaWYgKGZpbHRlckV4cHJlc3Npb25PcmRlckJ5SXRlbSkge1xyXG4gICAgICAgICAgb3JkZXIgPVxyXG4gICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uT3JkZXJCeUl0ZW0ub3JkZXIgPT09IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5Lk9yZGVyRW51bS5Bc2NcclxuICAgICAgICAgICAgICA/IFNtYXJ0VGFibGVPcmRlci5BU0NcclxuICAgICAgICAgICAgICA6IFNtYXJ0VGFibGVPcmRlci5ERVNDO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VydmljZS5ncmlkTW9kZWwudmlldyEub3JkZXJCeUxpc3QubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBvcmRlck51bWJlciA9IHRoaXMuc2VydmljZS5ncmlkTW9kZWwudmlldyEub3JkZXJCeUxpc3QuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgIChmaWx0ZXI6IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5KSA9PiBmaWx0ZXIucHJvcGVydHlOYW1lID09PSBkZXNjQ29sdW1uIS5wcm9wZXJ0eU5hbWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgb3JkZXJOdW1iZXIrKztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3JpZ25hbExhYmVsID0gY3VzdG9tVGFibGVIZWFkZXI/LmxhYmVsID8/IGRlc2NDb2x1bW4ubGFiZWw7XHJcbiAgICAgICAgbGV0IGxhYmVsID0gJyc7XHJcbiAgICAgICAgaWYgKCFkZXNjQ29sdW1uLmhpZGVMYWJlbCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc21hcnRHcmlkIS50cmFuc2xhdGVTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIGxhYmVsID0gYXdhaXQgdGhpcy5zbWFydEdyaWQhLnRyYW5zbGF0ZVNlcnZpY2U/LmdldChvcmlnbmFsTGFiZWwpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGFiZWwgPSBvcmlnbmFsTGFiZWw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcHJvcGVydGllcyA9IGN1c3RvbVRhYmxlSGVhZGVyPy5wcm9wZXJ0aWVzO1xyXG4gICAgICAgIGlmICghcHJvcGVydGllcykge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBkZXNjQ29sdW1uLnR5cGVDbGFzcyA9PT0gJ2phdmEudGltZS5PZmZzZXREYXRlVGltZScgfHxcclxuICAgICAgICAgICAgZGVzY0NvbHVtbi50eXBlQ2xhc3MgPT09ICdqYXZhLnRpbWUuTG9jYWxEYXRlVGltZSdcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBsZXQgZGF0ZUZvcm1hdCA9IGRlc2NDb2x1bW4udHlwZUZvcm1hdCA/PyAneXl5eS5NTS5kZCBIOm1tJztcclxuICAgICAgICAgICAgcHJvcGVydGllcyA9IHtcclxuICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlLkRBVEVUSU1FLFxyXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGRlc2NDb2x1bW4udHlwZUNsYXNzID09PSAnamF2YS50aW1lLkxvY2FsRGF0ZScpIHtcclxuICAgICAgICAgICAgbGV0IGRhdGVGb3JtYXQgPSBkZXNjQ29sdW1uLnR5cGVGb3JtYXQgPz8gJ3l5eXkuTU0uZGQnO1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VGFibGVIZWFkZXJQcm9wZXJ0eVR5cGUuREFURSxcclxuICAgICAgICAgICAgICBkYXRlRm9ybWF0LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChkZXNjQ29sdW1uLnR5cGVDbGFzcyA9PT0gJ2phdmEudGltZS5Mb2NhbFRpbWUnKSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRlRm9ybWF0ID0gZGVzY0NvbHVtbi50eXBlRm9ybWF0ID8/ICdIOm1tJztcclxuICAgICAgICAgICAgcHJvcGVydGllcyA9IHtcclxuICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlLlRJTUUsXHJcbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZGVzY0NvbHVtbi50eXBlQ2xhc3MgPT09ICdqYXZhLmxhbmcuQm9vbGVhbicpIHtcclxuICAgICAgICAgICAgcHJvcGVydGllcyA9IHtcclxuICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlLkNIRUNLQk9YLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLmN1c3RvbVRhYmxlSGVhZGVyLFxyXG4gICAgICAgICAgbGFiZWw6IGxhYmVsLFxyXG4gICAgICAgICAgcHJvcGVydHlOYW1lOiAnZGF0YS4nICsgZGVzY0NvbHVtbi5wcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgICBvcmRlcixcclxuICAgICAgICAgIG9yZGVyTnVtYmVyLFxyXG4gICAgICAgICAgcHJvcGVydGllcyxcclxuICAgICAgICAgIHN0eWxlOiBkZXNjQ29sdW1uLnN0eWxlLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBjb21wbGVtZW50ID0gdGhpcy5zbWFydEdyaWQhLnRhYmxlQ29uZmlnPy5jdXN0b21TbWFydFRhYmxlSGVhZGVycz8uZmlsdGVyKFxyXG4gICAgICAodGFibGVIZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+XHJcbiAgICAgICAgIWhlYWRlci5zb21lKCh0SDogU21hcnRUYWJsZUhlYWRlcikgPT4gdEgucHJvcGVydHlOYW1lLmluY2x1ZGVzKHRhYmxlSGVhZGVyLnByb3BlcnR5TmFtZSkpXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChjb21wbGVtZW50KSB7XHJcbiAgICAgIGhlYWRlci5wdXNoKC4uLmNvbXBsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucz8uc2ltcGxlQnV0dG9ucykge1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucy5zaW1wbGVCdXR0b25zLmZvckVhY2goKHVpQWN0aW9uQ29kZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaGVhZGVyLnB1c2goe1xyXG4gICAgICAgICAgbGFiZWw6ICcnLFxyXG4gICAgICAgICAgcHJvcGVydHlOYW1lOiAnc2ltcGxlX2J1dHRvbnMnLFxyXG4gICAgICAgICAgYnV0dG9uczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogU21hcnRUYWJsZUJ1dHRvblR5cGUuUkFJU0VELFxyXG4gICAgICAgICAgICAgIGNhbGxiYWNrOiB0aGlzLmV4ZWN1dGUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAvLyBsYWJlbDogdGhpcy5idXR0b25UcmFuc2xhdG9yKHsgY29kZTogdWlBY3Rpb25Db2RlIH0pLFxyXG4gICAgICAgICAgICAgIGFyZ3M6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgY29kZTogdWlBY3Rpb25Db2RlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgICAgICAgICAgICAgc2hvd0J1dHRvbklmOiAocm93OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICByb3cuYWN0aW9ucy5zb21lKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uY29kZSA9PT0gdWlBY3Rpb25Db2RlO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWhlYWRlci5zb21lKChoZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+IGhlYWRlci5wcm9wZXJ0eU5hbWUgPT09ICdteV9tZW51JykpIHtcclxuICAgICAgaWYgKHRoaXMuc21hcnRHcmlkIS5vcHRpb25zPy5yb3dVaUFjdGlvblR5cGUgPT09IEdyaWRVaUFjdGlvblR5cGUuUE9QVVBfTUVOVSkge1xyXG4gICAgICAgIGxldCBpY29uID0gdGhpcy5ncmlkTWVudUljb24gPz8gJ21vcmVfdmVydCc7XHJcbiAgICAgICAgaGVhZGVyLnB1c2goe1xyXG4gICAgICAgICAgbGFiZWw6ICcnLFxyXG4gICAgICAgICAgcHJvcGVydHlOYW1lOiAnbXlfbWVudScsXHJcbiAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlQnV0dG9uVHlwZS5NRU5VLFxyXG4gICAgICAgICAgICAgIGNhbGxiYWNrOiB0aGlzLmV4ZWN1dGUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICBpY29uOiBpY29uLFxyXG4gICAgICAgICAgICAgIG1lbnVJdGVtQnV0dG9uc1Byb3BlcnR5TmFtZTogJ2FjdGlvbnMnLFxyXG4gICAgICAgICAgICAgIHRyYW5zbGF0b3I6IHRoaXMuYnV0dG9uVHJhbnNsYXRvci5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgIGFyZ3M6IFtdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICAgIGlzU29ydGFibGU6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlYWRlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBvbkNoYW5nZVBhZ2UoZXZlbnQ6IFBhZ2VFdmVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IG9mZnNldCA9IGV2ZW50LnBhZ2VTaXplICogZXZlbnQucGFnZUluZGV4O1xyXG4gICAgbGV0IGxpbWl0ID0gZXZlbnQucGFnZVNpemU7XHJcbiAgICB0aGlzLnBhZ2VJbmRleCA9IGV2ZW50LnBhZ2VJbmRleDtcclxuICAgIGF3YWl0IHRoaXMuc2VydmljZS5zZXRQYWdlKFxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXdVdWlkISxcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyLFxyXG4gICAgICBvZmZzZXQudG9TdHJpbmcoKSxcclxuICAgICAgbGltaXQudG9TdHJpbmcoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBvblByaW1lQ2hhbmdlUGFnZShldmVudDogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgb2Zmc2V0ID0gZXZlbnQuZmlyc3Q7XHJcbiAgICBsZXQgbGltaXQgPSBldmVudC5yb3dzO1xyXG4gICAgdGhpcy5wYWdlSW5kZXggPSBldmVudC5maXJzdDtcclxuICAgIGF3YWl0IHRoaXMuc2VydmljZS5zZXRQYWdlKFxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXdVdWlkISxcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyLFxyXG4gICAgICBvZmZzZXQudG9TdHJpbmcoKSxcclxuICAgICAgbGltaXQudG9TdHJpbmcoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZShhcmdzOiBhbnlbXSwgcm93OiBhbnksIHVpQWN0aW9uOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBfdWlBY3Rpb246IFVpQWN0aW9uO1xyXG5cclxuICAgIGlmICghdWlBY3Rpb24pIHtcclxuICAgICAgdWlBY3Rpb24gPSByb3cuYWN0aW9ucy5maWx0ZXIoKGFjdGlvbjogVWlBY3Rpb24pID0+IGFjdGlvbi5jb2RlID09PSBhcmdzWzBdLmNvZGUpWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIF91aUFjdGlvbiA9IHsgLi4udWlBY3Rpb24gfTtcclxuICAgIGlmIChfdWlBY3Rpb24uZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgX3VpQWN0aW9uLnBhcmFtcyA9IHtcclxuICAgICAgLi4udWlBY3Rpb24ucGFyYW1zLFxyXG4gICAgICBtb2RlbDogcm93LFxyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgdWlBY3Rpb25Nb2RlbDogYW55ID0ge1xyXG4gICAgICBzZXJ2aWNlVG9Vc2U6IHRoaXMuc21hcnRHcmlkIS5zZXJ2aWNlVG9Vc2UsXHJcbiAgICAgIHVpQWN0aW9uOiBfdWlBY3Rpb24sXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucz8udWlBY3Rpb25Nb2RlbENhbGxiYWNrKSB7XHJcbiAgICAgIHVpQWN0aW9uTW9kZWwgPSB0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucyEudWlBY3Rpb25Nb2RlbENhbGxiYWNrKHVpQWN0aW9uTW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc21hcnRHcmlkIS51aUFjdGlvblNlcnZpY2UudWlBY3Rpb25Nb2RlbCA9IHVpQWN0aW9uTW9kZWw7XHJcbiAgICB0aGlzLnNtYXJ0R3JpZCEudWlBY3Rpb25TZXJ2aWNlLmV4ZWN1dGUoX3VpQWN0aW9uLCB7XHJcbiAgICAgIHdpZGdldElkOiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZElkZW50aWZpZXIsXHJcbiAgICAgIG5vZGVJZDogcm93LmlkLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1dHRvblRyYW5zbGF0b3IodWlBY3Rpb246IFVpQWN0aW9uKTogVWlBY3Rpb25EZXNjcmlwdG9yIHtcclxuICAgIGxldCBkZXNjID0gdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLmdldCh1aUFjdGlvbi5jb2RlISk7XHJcbiAgICBpZiAoIWRlc2MpIHtcclxuICAgICAgZGVzYyA9IHtcclxuICAgICAgICB0aXRsZTogdWlBY3Rpb24uY29kZSEsXHJcbiAgICAgICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLkZMQVQsXHJcbiAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICh1aUFjdGlvbi5kZXNjcmlwdG9yKSB7XHJcbiAgICAgIHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZS5tZXJnZUFjdGlvbkRlc2NyaXB0b3JJbnRvQ2xpZW50KHVpQWN0aW9uLmRlc2NyaXB0b3IhLCBkZXNjKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkZXNjO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxheW91dERlZigpOiB0eXBlb2YgU21hcnRMYXlvdXREZWYge1xyXG4gICAgcmV0dXJuIFNtYXJ0TGF5b3V0RGVmO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2xpY2soZ3JpZFJvdzogR3JpZFJvdyk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVPbkNsaWNrKGdyaWRSb3cpO1xyXG4gIH1cclxuICBwdWJsaWMgb25Eb3VibGVDbGljayhncmlkUm93OiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZU9uQ2xpY2soZ3JpZFJvdyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU9uQ2xpY2soZ3JpZFJvdzogR3JpZFJvdyk6IHZvaWQge1xyXG4gICAgbGV0IGRlZmF1bHRSb3dBY3Rpb246IFVpQWN0aW9uIHwgdW5kZWZpbmVkO1xyXG4gICAgaWYgKHRoaXMuc2VydmljZS5ncmlkTW9kZWw/LmRlZmF1bHRSb3dBY3Rpb25zKSB7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLmRlZmF1bHRSb3dBY3Rpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRSb3dBY3Rpb25Db2RlID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5kZWZhdWx0Um93QWN0aW9uc1tpbmRleF07XHJcblxyXG4gICAgICAgIGRlZmF1bHRSb3dBY3Rpb24gPSBncmlkUm93LmFjdGlvbnMuZmluZChcclxuICAgICAgICAgICh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHVpQWN0aW9uLmNvZGUgPT09IGRlZmF1bHRSb3dBY3Rpb25Db2RlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoZGVmYXVsdFJvd0FjdGlvbikge1xyXG4gICAgICAgICAgdGhpcy5leGVjdXRlKFtdLCBncmlkUm93LCBkZWZhdWx0Um93QWN0aW9uKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBvblNlbGVjdChyb3dJZDogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmlzQmxvY2tlZCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5kZXYpIHtcclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHJvdyA9IHRoaXMuc2VydmljZS5ncmlkTW9kZWwucGFnZS5yb3dzPy5maW5kKFxyXG4gICAgICAgIChncmlkUm93OiBHcmlkUm93KSA9PiBncmlkUm93LmlkID09PSByb3dJZFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCB2aWV3Q29udGV4dENoYW5nZSA9IGF3YWl0IHRoaXMuc2VydmljZS5zZWxlY3QodGhpcy5zbWFydEdyaWQhLCByb3chKTtcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLnZpZXdDb250ZXh0U2VydmljZS5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2Uodmlld0NvbnRleHRDaGFuZ2UpO1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgb25TZWxlY3RBbGwoc2VsZWN0ZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuaXNCbG9ja2VkID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCB2aWV3Q29udGV4dENoYW5nZSA9IGF3YWl0IHRoaXMuc2VydmljZS5zZWxlY3RBbGwodGhpcy5zbWFydEdyaWQhLCBzZWxlY3RlZCk7XHJcbiAgICB0aGlzLnNtYXJ0R3JpZCEudmlld0NvbnRleHRTZXJ2aWNlLmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZSh2aWV3Q29udGV4dENoYW5nZSk7XHJcblxyXG4gICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIG9uU2VsZWN0Um93cyhcclxuICAgIHNlbGVjdGVkSWRzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdLFxyXG4gICAgdW5zZWxlY3RlZElkczogKHN0cmluZyB8IHVuZGVmaW5lZClbXVxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5pc0Jsb2NrZWQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuZGV2KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgc2VsZWN0ZWQ6IHN0cmluZ1tdID0gc2VsZWN0ZWRJZHMuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBzdHJpbmcgPT4gaXRlbSAhPT0gdW5kZWZpbmVkKTtcclxuICAgICAgbGV0IHVuc2VsZWN0ZWQ6IHN0cmluZ1tdID0gdW5zZWxlY3RlZElkcy5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIHN0cmluZyA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xyXG4gICAgICBjb25zdCB2aWV3Q29udGV4dENoYW5nZSA9IGF3YWl0IHRoaXMuc2VydmljZS5zZWxlY3RSb3dzKFxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkISxcclxuICAgICAgICBzZWxlY3RlZCxcclxuICAgICAgICB1bnNlbGVjdGVkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS52aWV3Q29udGV4dFNlcnZpY2UuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKHZpZXdDb250ZXh0Q2hhbmdlKTtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBvblJvd1NlbGVjdChldmVudDogVGFibGVSb3dTZWxlY3RFdmVudCkge1xyXG4gICAgYXdhaXQgdGhpcy5vblNlbGVjdChldmVudC5kYXRhLmlkKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uUm93VW5zZWxlY3QoZXZlbnQ6IFRhYmxlUm93VW5TZWxlY3RFdmVudCkge1xyXG4gICAgYXdhaXQgdGhpcy5vblNlbGVjdChldmVudC5kYXRhLmlkKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uU2VsZWN0QWxsUm93KGV2ZW50OiBUYWJsZUhlYWRlckNoZWNrYm94VG9nZ2xlRXZlbnQpIHtcclxuICAgIGF3YWl0IHRoaXMub25TZWxlY3RBbGwoZXZlbnQuY2hlY2tlZCk7XHJcbiAgfVxyXG5cclxuICBlZGl0Q29sdW1ucygpOiB2b2lkIHtcclxuICAgIGxldCBkaWFsb2dEYXRhOiBTbWFydERpYWxvZ0RhdGEgPSB7XHJcbiAgICAgIGNvbnRlbnQ6IHtcclxuICAgICAgICB0aXRsZTogJ09zemxvcG9rIHRlc3RyZXN6YWLDoXNhJyxcclxuICAgICAgfSxcclxuICAgICAgc2l6ZToge30sXHJcbiAgICAgIGN1c3RvbUNvbXBvbmVudDogVGFibGVMYXlvdXREZWZpbmVyQ29tcG9uZW50LFxyXG4gICAgICBjdXN0b21Db21wb25lbnRJbnB1dHM6IHtcclxuICAgICAgICBjb25maWc6IHtcclxuICAgICAgICAgIHV1aWQ6IHRoaXMudXVpZCxcclxuICAgICAgICAgIGlkZW50aWZpZXI6IHRoaXMuc21hcnRHcmlkIS5ncmlkSWRlbnRpZmllcixcclxuICAgICAgICAgIHZpZXc6IHRoaXMuc2VydmljZS5ncmlkTW9kZWwudmlldyxcclxuICAgICAgICAgIHNlcnZpY2U6IHRoaXMuc2VydmljZSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuZGlhbG9nLm9wZW4oVGFibGVMYXlvdXREZWZpbmVyQ29tcG9uZW50LCB7IGRhdGE6IGRpYWxvZ0RhdGEgfSk7XHJcbiAgfVxyXG5cclxuICAvL1BSSU1FTkdcclxuICBjb2x1bW5zOiBHcmlkQ29sdW1uTWV0YVtdID0gW107XHJcbiAgbWVudUJ1dHRvbnMhOiBNZW51SXRlbVtdO1xyXG4gIEBWaWV3Q2hpbGQoJ21lbnUnKSBtZW51ITogTWVudTtcclxuICBvbk9wdGlvbnNDbGljayhldmVudDogRXZlbnQsIHJvdzogR3JpZFJvdykge1xyXG4gICAgdGhpcy5tZW51QnV0dG9ucyA9IFtdO1xyXG5cclxuICAgIGxldCBtZW51QWN0aW9ucyA9IHRoaXMuY2FsY3VsYXRlTWVudUFjdGlvbnMocm93KTtcclxuXHJcbiAgICBtZW51QWN0aW9ucz8ubWFwKGFzeW5jICh1aUFjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgIGxldCBkZXNjID0gYXdhaXQgdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLmdldEFjdGlvbkRlc2NyaXB0b3IodWlBY3Rpb24pO1xyXG5cclxuICAgICAgdGhpcy5tZW51QnV0dG9ucy5wdXNoKHtcclxuICAgICAgICBsYWJlbDogZGVzYz8udGl0bGUgPz8gdWlBY3Rpb24uY29kZSxcclxuICAgICAgICBpY29uOiBkZXNjPy5pY29uLFxyXG4gICAgICAgIGNvbW1hbmQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZXhlY3V0ZShbXSwgcm93LCB1aUFjdGlvbik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMubWVudS50b2dnbGUoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJldmlvdXNtdWx0aVNvcnRNZXRhPzogU29ydE1ldGFbXTtcclxuICBhc3luYyBncmlkU29ydChldmVudDogYW55KSB7XHJcbiAgICBsZXQgb3JkZXJCeUxpc3Q6IEFycmF5PEZpbHRlckV4cHJlc3Npb25PcmRlckJ5PiA9IFtdO1xyXG5cclxuICAgIGV2ZW50Lm11bHRpc29ydG1ldGE/Lm1hcCgobWV0YTogU29ydE1ldGEsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgaWYgKHRoaXMucHJldmlvdXNtdWx0aVNvcnRNZXRhICYmIHRoaXMucHJldmlvdXNtdWx0aVNvcnRNZXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnByZXZpb3VzbXVsdGlTb3J0TWV0YS5tYXAoKG9yZGVyKSA9PiB7XHJcbiAgICAgICAgICBpZiAobWV0YS5maWVsZCA9PT0gb3JkZXIuZmllbGQgJiYgb3JkZXIub3JkZXIgIT0gbWV0YS5vcmRlcikge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9yZGVyLm9yZGVyKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAtMTpcclxuICAgICAgICAgICAgICAgIGV2ZW50Lm11bHRpc29ydG1ldGEhLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNtdWx0aVNvcnRNZXRhID0gZXZlbnQubXVsdGlzb3J0bWV0YTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBldmVudC5tdWx0aXNvcnRtZXRhPy5tYXAoKG1ldGE6IGFueSkgPT4ge1xyXG4gICAgICBvcmRlckJ5TGlzdC5wdXNoKHtcclxuICAgICAgICBwcm9wZXJ0eU5hbWU6IG1ldGEuZmllbGQsXHJcbiAgICAgICAgb3JkZXI6XHJcbiAgICAgICAgICBtZXRhLm9yZGVyID09PSAxXHJcbiAgICAgICAgICAgID8gRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnlPcmRlckVudW0uQVNDXHJcbiAgICAgICAgICAgIDogbWV0YS5vcmRlciA9PT0gLTFcclxuICAgICAgICAgICAgPyBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeU9yZGVyRW51bS5ERVNDXHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuc2VydmljZS5zb3J0KHRoaXMuc21hcnRHcmlkISwge1xyXG4gICAgICBvcmRlckJ5TGlzdDogb3JkZXJCeUxpc3QsXHJcbiAgICAgIG9yZGVyZWRDb2x1bW5OYW1lczogdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5vcmRlcmVkQ29sdW1uTmFtZXMhLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGxhenlMb2FkKGV2ZW50PzogVGFibGVMYXp5TG9hZEV2ZW50KSB7XHJcbiAgICB0aGlzLnByZXZpb3VzbXVsdGlTb3J0TWV0YSA9IFtdO1xyXG4gICAgdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5vcmRlckJ5TGlzdC5tYXAoKG9yZGVyKSA9PiB7XHJcbiAgICAgIHRoaXMucHJldmlvdXNtdWx0aVNvcnRNZXRhPy5wdXNoKHtcclxuICAgICAgICBmaWVsZDogb3JkZXIucHJvcGVydHlOYW1lISxcclxuICAgICAgICBvcmRlcjogb3JkZXIub3JkZXIgPT09IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5T3JkZXJFbnVtLkFTQyA/IDEgOiAtMSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIGV2ZW50IS5tdWx0aVNvcnRNZXRhID0gdGhpcy5wcmV2aW91c211bHRpU29ydE1ldGE7XHJcbiAgfVxyXG5cclxuICBhc3luYyBoZWFkZXJDaGFuZ2UoZXZlbnQ6IE11bHRpU2VsZWN0Q2hhbmdlRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBncmlkVXBkYXRlRGF0YTogR3JpZFVwZGF0ZURhdGEgPSB7XHJcbiAgICAgIG9yZGVyQnlMaXN0OiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLm9yZGVyQnlMaXN0LFxyXG4gICAgICBvcmRlcmVkQ29sdW1uTmFtZXM6IHRoaXMuZ2V0T3JkZXJDb2x1bU5hbWVzKGV2ZW50LnZhbHVlISksXHJcbiAgICB9O1xyXG5cclxuICAgIGF3YWl0IHRoaXMuc2VydmljZS51cGRhdGUodGhpcy51dWlkISwgdGhpcy5zbWFydEdyaWQ/LmdyaWRJZGVudGlmaWVyISwgZ3JpZFVwZGF0ZURhdGEpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25Db2xPcmRlcihldmVudDogVGFibGVDb2x1bW5SZW9yZGVyRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBncmlkVXBkYXRlRGF0YTogR3JpZFVwZGF0ZURhdGEgPSB7XHJcbiAgICAgIG9yZGVyQnlMaXN0OiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLm9yZGVyQnlMaXN0LFxyXG4gICAgICBvcmRlcmVkQ29sdW1uTmFtZXM6IHRoaXMuZ2V0T3JkZXJDb2x1bU5hbWVzKGV2ZW50LmNvbHVtbnMhKSxcclxuICAgIH07XHJcbiAgICBhd2FpdCB0aGlzLnNlcnZpY2UudXBkYXRlKHRoaXMudXVpZCEsIHRoaXMuc21hcnRHcmlkIS5ncmlkSWRlbnRpZmllciEsIGdyaWRVcGRhdGVEYXRhKTtcclxuICB9XHJcblxyXG4gIGdldE9yZGVyQ29sdW1OYW1lcyhjb2x1bW5zOiBHcmlkQ29sdW1uTWV0YVtdKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2x1bTogR3JpZENvbHVtbk1ldGEpID0+IHtcclxuICAgICAgcmV0dXJuIGNvbHVtLnByb3BlcnR5TmFtZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sVmFsdWUoY29sOiBzdHJpbmcsIHJvdzogYW55KSB7XHJcbiAgICBpZiAocm93Lmljb25zW2NvbF0pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2wuaW5jbHVkZXMoJy4nKSkge1xyXG4gICAgICBsZXQgcGF0aEFycmF5ID0gY29sLnNwbGl0KCcuJyk7XHJcbiAgICAgIGxldCBjb2xWYWx1ZSA9IHJvdy5kYXRhO1xyXG4gICAgICBwYXRoQXJyYXkubWFwKChwYXRoKSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbFZhbHVlID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgY29sVmFsdWUgPSByb3cuZGF0YVtjb2xdO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb2xWYWx1ZSA9IGNvbFZhbHVlW3BhdGhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBjb2xWYWx1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiByb3cuZGF0YVtjb2xdO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW1hZ2VSZXNvdXJjZUljb25zKHJvdzogYW55LCBoZWFkZXI6IHN0cmluZyk6IEltYWdlUmVzb3VyY2VbXSB7XHJcbiAgICBpZiAocm93Py5pY29ucykge1xyXG4gICAgICBsZXQgaWNvbkNvZGVzID0gcm93Py5pY29uc1toZWFkZXJdO1xyXG4gICAgICByZXR1cm4gaWNvbkNvZGVzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuICBnZXRJbWFnZVJlc291cmNlU3R5bGUocmVzb3VyY2U6IEltYWdlUmVzb3VyY2UpOiBhbnkge1xyXG4gICAgcmV0dXJuIHJlc291cmNlLnN0eWxlID8gcmVzb3VyY2Uuc3R5bGUgOiB7fTtcclxuICB9XHJcblxyXG4gIGdldFJvd0NvbHVtbkFjdGlvbihyb3c6IGFueSwgY29sdW1uTmFtZTogc3RyaW5nKTogVWlBY3Rpb25Nb2RlbFtdIHtcclxuICAgIHJldHVybiBTbWFydEdyaWRUb29sYmFyQWN0aW9uc1V0aWwuZ2V0QWN0aW9uTW9kZWxzRnJvbU1hcChcclxuICAgICAgdGhpcy5jZWxsVG9BY3Rpb25NYXAsXHJcbiAgICAgIHJvdyxcclxuICAgICAgY29sdW1uTmFtZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNob3dDZWxsVG9vbGJhcihyb3c6IGFueSwgY29sdW1uTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gU21hcnRHcmlkVG9vbGJhckFjdGlvbnNVdGlsLnNob3dUb29sYmFyKHJvdywgY29sdW1uTmFtZSk7XHJcbiAgfVxyXG5cclxuICBzaG91bGRTaG93T3B0aW9uc0J1dHRvbihyb3c6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIFNtYXJ0R3JpZFRvb2xiYXJBY3Rpb25zVXRpbC5zaG93TWVudShcclxuICAgICAgcm93LFxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnZpZXc/Lm9yZGVyZWRDb2x1bW5OYW1lcyFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVNZW51QWN0aW9ucyhyb3c6IEdyaWRSb3cpOiBVaUFjdGlvbltdIHtcclxuICAgIHJldHVybiBTbWFydEdyaWRUb29sYmFyQWN0aW9uc1V0aWwuY2FsY3VsYXRlTWVudUFjdGlvbnMoXHJcbiAgICAgIHJvdyxcclxuICAgICAgdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5vcmRlcmVkQ29sdW1uTmFtZXMhXHJcbiAgICApO1xyXG4gIH1cclxuICBjcmVhdGVDZWxsVG9BY3Rpb25NYXAoKSB7XHJcbiAgICBpZiAodGhpcy5jb21wTGliID09PSB0aGlzLmNvbXBvbmVudExpYnJhcnkuUFJJTUVORyAmJiB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnBhZ2Uucm93cykge1xyXG4gICAgICB0aGlzLmNlbGxUb0FjdGlvbk1hcCA9IFNtYXJ0R3JpZFRvb2xiYXJBY3Rpb25zVXRpbC5jYWxjdWxhdGVDZWxsVG9BY3Rpb25NYXAoXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC5wYWdlLnJvd3MhLFxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkLnNlcnZpY2VUb1VzZSxcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZC5ncmlkSWRlbnRpZmllclxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCJAaWYoY29tcExpYiA9PT0gY29tcG9uZW50TGlicmFyeS5QUklNRU5HKSB7XHJcblxyXG48ZGl2ICpuZ0lmPVwic21hcnRHcmlkXCIgY2xhc3M9XCJwcmltZVNtYXJ0R3JpZC1jb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwic21hcnQtZ3JpZC10b29sYmFyXCI+XHJcbiAgICA8c21hcnQtdWktYWN0aW9uLXRvb2xiYXIgI3Rvb2xiYXIgW2lkXT1cIidncmlkX25vdF9pbml0aWFsaXplZCdcIj48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG4gIDwvZGl2PlxyXG4gIDxwLXRhYmxlXHJcbiAgICAqbmdJZj1cIiFzbWFydEdyaWQubGF5b3V0RGVmIHx8IHNtYXJ0R3JpZC5sYXlvdXREZWYgPT09IGxheW91dERlZigpLlRBQkxFXCJcclxuICAgICNwVGFibGVcclxuICAgIFt2YWx1ZV09XCJzbWFydEdyaWQuZ3JpZE1vZGVsLnBhZ2Uucm93cyFcIlxyXG4gICAgKG9uU29ydCk9XCJncmlkU29ydCgkZXZlbnQpXCJcclxuICAgIFtjdXN0b21Tb3J0XT1cInRydWVcIlxyXG4gICAgW3NvcnRNb2RlXT1cIidtdWx0aXBsZSdcIlxyXG4gICAgW2xhenldPVwidHJ1ZVwiXHJcbiAgICAob25MYXp5TG9hZCk9XCJsYXp5TG9hZCgkZXZlbnQpXCJcclxuICAgIFtyZW9yZGVyYWJsZUNvbHVtbnNdPVwic21hcnRHcmlkLmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5zaG93RWRpdENvbHVtbnNcIlxyXG4gICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXHJcbiAgICAob25Db2xSZW9yZGVyKT1cIm9uQ29sT3JkZXIoJGV2ZW50KVwiXHJcbiAgICAob25Sb3dTZWxlY3QpPVwib25Sb3dTZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAob25Sb3dVbnNlbGVjdCk9XCJvblJvd1Vuc2VsZWN0KCRldmVudClcIlxyXG4gICAgW3NlbGVjdGlvbl09XCJzZWxlY3RlZFJvd3NcIlxyXG4gICAgKG9uSGVhZGVyQ2hlY2tib3hUb2dnbGUpPVwib25TZWxlY3RBbGxSb3coJGV2ZW50KVwiXHJcbiAgICBkYXRhS2V5PVwiaWRcIlxyXG4gICAgW2V4cGFuZGVkUm93S2V5c109XCJleHBhbmRlZFJvd3NcIlxyXG4gICAgKG9uUm93RXhwYW5kKT1cIm9tUHJpbWVOZ1Jvd0V4cGFuZCgkZXZlbnQpXCJcclxuICAgIFtyb3dFeHBhbmRNb2RlXT1cIidtdWx0aXBsZSdcIlxyXG4gID5cclxuICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgIHBUZW1wbGF0ZT1cImNhcHRpb25cIlxyXG4gICAgICAgICpuZ0lmPVwic21hcnRHcmlkLmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5zaG93RWRpdENvbHVtbnMgfHwgc21hcnRHcmlkLmdyaWRNb2RlbC50aXRsZVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGVDYXB0aW9uXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic21hcnRHcmlkLmdyaWRNb2RlbC50aXRsZVwiIGNsYXNzPVwiY2FwdGlvblRpdGxlXCI+XHJcbiAgICAgICAgICAgIHt7IHNtYXJ0R3JpZC5ncmlkTW9kZWwudGl0bGUgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNtYXJ0R3JpZC5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uc2hvd0VkaXRDb2x1bW5zXCI+XHJcbiAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0XHJcbiAgICAgICAgICAgICAgZGlzcGxheT1cImNoaXBcIlxyXG4gICAgICAgICAgICAgIFtvcHRpb25zXT1cInNtYXJ0R3JpZC5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uY29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb2x1bW5zXCJcclxuICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zTGFiZWw9XCJ7MH0gY29sdW1ucyBzZWxlY3RlZFwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlXT1cInsgJ21pbi13aWR0aCc6ICcyMDBweCcgfVwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJDaG9vc2UgQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cImhlYWRlckNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICBAaWYgKHNtYXJ0R3JpZC5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uc2hvd0VkaXRDb2x1bW5zKSB7XHJcbiAgICAgICAgPHRoXHJcbiAgICAgICAgICAqbmdJZj1cImlzTXVsdGlwbGUgJiYgKHRhYmxlVHlwZSA9PT0gJ2NoZWNrYm94JyB8fCB0YWJsZVR5cGUgPT09ICdDaGVja0JveCcpXCJcclxuICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDRyZW1cIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxwLXRhYmxlSGVhZGVyQ2hlY2tib3ggLz5cclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgIDx0aFxyXG4gICAgICAgICAgKm5nSWY9XCIhaXNNdWx0aXBsZSAmJiAodGFibGVUeXBlID09PSAnY2hlY2tib3gnIHx8IHRhYmxlVHlwZSA9PT0gJ0NoZWNrQm94JylcIlxyXG4gICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNHJlbVwiXHJcbiAgICAgICAgPjwvdGg+XHJcbiAgICAgICAgPHRoIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLnByb3BlcnR5TmFtZVwiICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiIHBSZW9yZGVyYWJsZUNvbHVtbj5cclxuICAgICAgICAgIDxwLXNvcnRJY29uIFtmaWVsZF09XCJjb2wucHJvcGVydHlOYW1lXCIgLz5cclxuICAgICAgICAgIHt7IGNvbC5sYWJlbCB9fVxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgPHRoXHJcbiAgICAgICAgICAqbmdJZj1cImlzTXVsdGlwbGUgJiYgKHRhYmxlVHlwZSA9PT0gJ2NoZWNrYm94JyB8fCB0YWJsZVR5cGUgPT09ICdDaGVja0JveCcpXCJcclxuICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDRyZW1cIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxwLXRhYmxlSGVhZGVyQ2hlY2tib3ggLz5cclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgIDx0aFxyXG4gICAgICAgICAgKm5nSWY9XCIhaXNNdWx0aXBsZSAmJiAodGFibGVUeXBlID09PSAnY2hlY2tib3gnIHx8IHRhYmxlVHlwZSA9PT0gJ0NoZWNrQm94JylcIlxyXG4gICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNHJlbVwiXHJcbiAgICAgICAgPjwvdGg+XHJcbiAgICAgICAgPHRoIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLnByb3BlcnR5TmFtZVwiICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxyXG4gICAgICAgICAgPHAtc29ydEljb24gW2ZpZWxkXT1cImNvbC5wcm9wZXJ0eU5hbWVcIiAvPlxyXG4gICAgICAgICAge3sgY29sLmxhYmVsIH19XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDx0aD5cclxuICAgICAgICAgIDxzbWFydC11aS1hY3Rpb24tdG9vbGJhclxyXG4gICAgICAgICAgICBjbGFzcz1cImhlYWRlclRvb2xiYXJcIlxyXG4gICAgICAgICAgICAjaGVhZGVyVG9vbGJhclxyXG4gICAgICAgICAgICBbaWRdPVwiJ2hlYWRlcl9ub3RfaW5pdGlhbGl6ZWQnXCJcclxuICAgICAgICAgID48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPHRoICpuZ0lmPVwic21hcnRHcmlkLmV4cGFuZGFibGVcIj4gPC90aD5cclxuICAgICAgPC90cj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1yb3cgbGV0LWV4cGFuZGVkPVwiZXhwYW5kZWRcIj5cclxuICAgICAgPHRyIFtuZ0NsYXNzXT1cImdldFN0eWxlKHJvdylcIiAoZGJsY2xpY2spPVwib25Eb3VibGVDbGljayhyb3cpXCIgKm5nSWY9XCJyb3cgJiYgcm93LmRhdGFcIj5cclxuICAgICAgICA8dGQgKm5nSWY9XCJpc011bHRpcGxlICYmICh0YWJsZVR5cGUgPT09ICdjaGVja2JveCcgfHwgdGFibGVUeXBlID09PSAnQ2hlY2tCb3gnKVwiPlxyXG4gICAgICAgICAgPHAtdGFibGVDaGVja2JveCAqbmdJZj1cInJvdy5zZWxlY3RhYmxlICE9IGZhbHNlXCIgW3ZhbHVlXT1cInJvd1wiIC8+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICA8dGQgKm5nSWY9XCIhaXNNdWx0aXBsZSAmJiAodGFibGVUeXBlID09PSAnY2hlY2tib3gnIHx8IHRhYmxlVHlwZSA9PT0gJ0NoZWNrQm94JylcIj5cclxuICAgICAgICAgIDxwLXRhYmxlUmFkaW9CdXR0b24gW3ZhbHVlXT1cInJvd1wiIC8+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbCBvZiBzbWFydEdyaWQ/LmdyaWRNb2RlbD8udmlldz8ub3JkZXJlZENvbHVtbk5hbWVzXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicm93Lmljb25zW2NvbF1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYXJ0LXRhYmxlLWljb24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXIgb2YgZ2V0SW1hZ2VSZXNvdXJjZUljb25zKHJvdywgY29sKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBwVG9vbHRpcD1cInt7IGlyLnRvb2x0aXA/LnRvb2x0aXAgfX1cIlxyXG4gICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJyaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRJbWFnZVJlc291cmNlU3R5bGUoaXIpXCJcclxuICAgICAgICAgICAgICAgICAgPjxzbWFydC1pY29uIFtpY29uXT1cImlyLmlkZW50aWZpZXIhXCIgW2NvbG9yXT1cImlyLmNvbG9yIVwiPiA8L3NtYXJ0LWljb25cclxuICAgICAgICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93Q2VsbFRvb2xiYXIocm93LCBjb2wpXCI+XHJcbiAgICAgICAgICAgIDxzbWFydC11aS1hY3Rpb24tdG9vbGJhclxyXG4gICAgICAgICAgICAgIFt1aUFjdGlvbk1vZGVsc109XCJnZXRSb3dDb2x1bW5BY3Rpb24ocm93LCBjb2wpXCJcclxuICAgICAgICAgICAgPjwvc21hcnQtdWktYWN0aW9uLXRvb2xiYXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXJvdy5pY29uc1tjb2xdXCIgW2lubmVySHRtbF09XCJnZXRDb2xWYWx1ZShjb2wsIHJvdylcIj4gPC9kaXY+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgICA8dGQ+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1idXR0b25cIj5cclxuICAgICAgICAgICAgQGlmKHNob3dDZWxsVG9vbGJhcihyb3csIGRlZmF1bHRBY3Rpb25Ub29sYmFySWQpKXtcclxuICAgICAgICAgICAgPHNtYXJ0LXVpLWFjdGlvbi10b29sYmFyXHJcbiAgICAgICAgICAgICAgW3VpQWN0aW9uTW9kZWxzXT1cImdldFJvd0NvbHVtbkFjdGlvbihyb3csIGRlZmF1bHRBY3Rpb25Ub29sYmFySWQpXCJcclxuICAgICAgICAgICAgPjwvc21hcnQtdWktYWN0aW9uLXRvb2xiYXI+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPHAtYnV0dG9uXHJcbiAgICAgICAgICAgICAgW3JvdW5kZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW3RleHRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJzaG91bGRTaG93T3B0aW9uc0J1dHRvbihyb3cpXCJcclxuICAgICAgICAgICAgICAob25DbGljayk9XCJvbk9wdGlvbnNDbGljaygkZXZlbnQsIHJvdylcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNtYXJ0LWljb24gaWNvbj1cImVsbGlwc2lzLXZcIj48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgICAgIDwvcC1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZCAqbmdJZj1cInNtYXJ0R3JpZC5leHBhbmRhYmxlXCI+XHJcbiAgICAgICAgICA8cC1idXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIHBSaXBwbGVcclxuICAgICAgICAgICAgW3BSb3dUb2dnbGVyXT1cInJvd1wiXHJcbiAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxyXG4gICAgICAgICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgIFtyb3VuZGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICBbaWNvbl09XCJleHBhbmRlZCA/ICdwaSBwaS1jaGV2cm9uLWRvd24nIDogJ3BpIHBpLWNoZXZyb24tdXAnXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC90ZD5cclxuICAgICAgPC90cj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJzbWFydEdyaWQuZXhwYW5kYWJsZVwiIHBUZW1wbGF0ZT1cInJvd2V4cGFuc2lvblwiIGxldC1yb3c+XHJcbiAgICAgIDxsaWItZ2VuZXJpYy1jb21wb25lbnRcclxuICAgICAgICBbcm93RGF0YV09XCJyb3dcIlxyXG4gICAgICAgIFtleHBhbmRlZENvbXBvbmVudF09XCJ0aGlzLnNtYXJ0R3JpZC5leHBhbmRlZENvbXBvbmVudFwiXHJcbiAgICAgID48L2xpYi1nZW5lcmljLWNvbXBvbmVudD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9wLXRhYmxlPlxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwic21hcnRHcmlkLmxheW91dERlZiA9PT0gbGF5b3V0RGVmKCkuQ0FSRCAmJiBzbWFydEdyaWQuZGF0YUxheW91dERlZlwiXHJcbiAgICBjbGFzcz1cImNhcmRzLWNvbnRhaW5lclwiXHJcbiAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICdncmlkLXRlbXBsYXRlLWNvbHVtbnMnOlxyXG4gICAgICAgIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICA/ICdyZXBlYXQoJyArIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiArICcsIDFmciknXHJcbiAgICAgICAgICA6ICcnXHJcbiAgICB9XCJcclxuICA+XHJcbiAgICA8YXBwLXNtYXJ0LWdyaWQtY2FyZFxyXG4gICAgICBjbGFzcz1cInNtYXJ0R3JpZC1jYXJkLWNvbnRhaW5lclwiXHJcbiAgICAgICpuZ0Zvcj1cImxldCB0YXNrIG9mIHNtYXJ0R3JpZC5ncmlkTW9kZWwucGFnZS5yb3dzXCJcclxuICAgICAgW2l0ZW1dPVwidGFza1wiXHJcbiAgICAgIFtzbWFydEdyaWRdPVwic21hcnRHcmlkXCJcclxuICAgICAgW29uU2VsZWN0XT1cIm9uU2VsZWN0LmJpbmQodGhpcylcIlxyXG4gICAgPjwvYXBwLXNtYXJ0LWdyaWQtY2FyZD5cclxuICA8L2Rpdj5cclxuICA8cC1wYWdpbmF0b3JcclxuICAgICpuZ0lmPVwic21hcnRHcmlkLnBhZ2luYXRvclwiXHJcbiAgICBbZmlyc3RdPVwicGFnZUluZGV4IVwiXHJcbiAgICBbdG90YWxSZWNvcmRzXT1cImxlbmd0aCFcIlxyXG4gICAgW3Jvd3NdPVwicGFnZVNpemVcIlxyXG4gICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIlxyXG4gICAgKG9uUGFnZUNoYW5nZSk9XCJvblByaW1lQ2hhbmdlUGFnZSgkZXZlbnQpXCJcclxuICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXHJcbiAgICBkcm9wZG93bkFwcGVuZFRvPVwiYm9keVwiXHJcbiAgLz5cclxuICA8cC1tZW51ICNtZW51IFttb2RlbF09XCJtZW51QnV0dG9uc1wiIFtwb3B1cF09XCJ0cnVlXCIgYXBwZW5kVG89XCJib2R5XCI+IDwvcC1tZW51PlxyXG48L2Rpdj5cclxufUBlbHNlIHtcclxuPGRpdiAqbmdJZj1cInNtYXJ0R3JpZFwiIGNsYXNzPVwic21hcnRHcmlkLWNvbnRhaW5lclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJzbWFydC1ncmlkLXRvb2xiYXJcIj5cclxuICAgIDxzbWFydC11aS1hY3Rpb24tdG9vbGJhciAjdG9vbGJhciBbaWRdPVwiJ2dyaWRfbm90X2luaXRpYWxpemVkJ1wiPjwvc21hcnQtdWktYWN0aW9uLXRvb2xiYXI+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIChjbGljayk9XCJlZGl0Q29sdW1ucygpXCJcclxuICAgICAgbWF0LW1pbmktZmFiXHJcbiAgICAgIGNvbG9yPVwidGV4dC1wcmltYXJ5XCJcclxuICAgICAgKm5nSWY9XCJzbWFydEdyaWQuc2hvd0VkaXRDb2x1bW5zXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBhcmlhLWxhYmVsPVwiQ29sdW1uc1wiIGNsYXNzPVwic21hcnQtZ3JpZC1lZGl0LWljb25cIlxyXG4gICAgICAgID52aWV3X2NvbHVtbnM8L21hdC1pY29uXHJcbiAgICAgID5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDwhLS0gPGRpdiBbbmdDbGFzc109XCJpc0Jsb2NrZWQgPyAnYmxvY2tlZCcgOiAnJ1wiPjwvZGl2PiAtLT5cclxuICA8ZGl2IGNsYXNzPVwic21hcnRHcmlkQ29udGVudFwiPlxyXG4gICAgPGRpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cInNtYXJ0R3JpZC5zaG93UmVzdWx0Q291bnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic21hcnRHcmlkLWRhdGEtbnVtYmVyXCI+XHJcbiAgICAgICAgICB7eyBzbWFydEdyaWQuZ3JpZE1vZGVsLnRvdGFsUm93Q291bnQgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwic21hcnQtZ3JpZC10YWJsZS1jb250YWluZXJcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlICN0YWJsZT48L25nLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInNtYXJ0R3JpZC5sYXlvdXREZWYgPT09IGxheW91dERlZigpLkVYUEFOREFCTEVcIj5cclxuICAgICAgPHNtYXJ0LWV4cGFuZGFibGUtc2VjdGlvblxyXG4gICAgICAgICNncmlkRXhwYW5kYWJsZVNlY3Rpb25cclxuICAgICAgICAqbmdGb3I9XCJsZXQgZXhwYW5kYWJsZVNlY3Rpb24gb2YgZXhwYW5kYWJsZVNlY3Rpb25zXCJcclxuICAgICAgICBbZGF0YV09XCJleHBhbmRhYmxlU2VjdGlvblwiXHJcbiAgICAgID48L3NtYXJ0LWV4cGFuZGFibGUtc2VjdGlvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdlxyXG4gICAgICAqbmdJZj1cInNtYXJ0R3JpZC5sYXlvdXREZWYgPT09IGxheW91dERlZigpLkNBUkQgJiYgc21hcnRHcmlkLmRhdGFMYXlvdXREZWZcIlxyXG4gICAgICBjbGFzcz1cImNhcmRzLWNvbnRhaW5lclwiXHJcbiAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJzpcclxuICAgICAgICAgIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gJ3JlcGVhdCgnICsgc21hcnRHcmlkLm51bWJlck9mQ29sdW1uICsgJywgMWZyKSdcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgICB9XCJcclxuICAgID5cclxuICAgICAgPGFwcC1zbWFydC1ncmlkLWNhcmRcclxuICAgICAgICBjbGFzcz1cInNtYXJ0R3JpZC1jYXJkLWNvbnRhaW5lclwiXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IHRhc2sgb2Ygc21hcnRHcmlkLmdyaWRNb2RlbC5wYWdlLnJvd3NcIlxyXG4gICAgICAgIFtpdGVtXT1cInRhc2tcIlxyXG4gICAgICAgIFtzbWFydEdyaWRdPVwic21hcnRHcmlkXCJcclxuICAgICAgICBbb25TZWxlY3RdPVwib25TZWxlY3QuYmluZCh0aGlzKVwiXHJcbiAgICAgID48L2FwcC1zbWFydC1ncmlkLWNhcmQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJzbWFydEdyaWQubGF5b3V0RGVmID09PSBsYXlvdXREZWYoKS5UUkVFICYmIHRyZWVDb250cm9sXCJcclxuICAgICAgY2xhc3M9XCJ0cmVlLWNvbnRhaW5lclwiXHJcbiAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJzpcclxuICAgICAgICAgIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgID8gJ3JlcGVhdCgnICsgc21hcnRHcmlkLm51bWJlck9mQ29sdW1uICsgJywgMWZyKSdcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgICB9XCJcclxuICAgID5cclxuICAgICAgPG1hdC10cmVlIFtkYXRhU291cmNlXT1cInRyZWVEYXRhU291cmNlIVwiIFt0cmVlQ29udHJvbF09XCJ0cmVlQ29udHJvbCFcIj5cclxuICAgICAgICA8bWF0LXRyZWUtbm9kZVxyXG4gICAgICAgICAgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIlxyXG4gICAgICAgICAgbWF0VHJlZU5vZGVUb2dnbGVcclxuICAgICAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ1xyXG4gICAgICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nSW5kZW50PVwiMjRcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGRpc2FibGVkIGNsYXNzPVwidHJlZS1idXR0b25cIj48L2J1dHRvbj5cclxuICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja2xpc3QtbGVhZi1ub2RlXCJcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwidHJlZUNoZWNrbGlzdFNlbGVjdGlvbj8uaXNTZWxlY3RlZChub2RlKVwiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwidHJlZU5vZGVTZWxlY3Rpb25Ub2dnbGUobm9kZSlcIlxyXG4gICAgICAgICAgICA+e3sgZ2V0VHJlZUl0ZW0obm9kZSkgfX08L21hdC1jaGVja2JveFxyXG4gICAgICAgICAgPlxyXG4gICAgICAgIDwvbWF0LXRyZWUtbm9kZT5cclxuXHJcbiAgICAgICAgPG1hdC10cmVlLW5vZGVcclxuICAgICAgICAgICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlOyB3aGVuOiBoYXNDaGlsZFwiXHJcbiAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ0luZGVudD1cIjI0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICBtYXRUcmVlTm9kZVRvZ2dsZVxyXG4gICAgICAgICAgICBjbGFzcz1cInRyZWUtYnV0dG9uXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInVG9nZ2xlICcgKyBub2RlLml0ZW1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+XHJcbiAgICAgICAgICAgICAge3sgdHJlZUNvbnRyb2whLmlzRXhwYW5kZWQobm9kZSkgPyAnZXhwYW5kX21vcmUnIDogJ2NoZXZyb25fcmlnaHQnIH19XHJcbiAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwidHJlZUNoZWNrbGlzdFNlbGVjdGlvbj8uaXNTZWxlY3RlZChub2RlKVwiXHJcbiAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImRlc2NlbmRhbnRzUGFydGlhbGx5U2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cInRyZWVOb2RlU2VsZWN0aW9uVG9nZ2xlKG5vZGUpXCJcclxuICAgICAgICAgICAgPnt7IGdldFRyZWVJdGVtKG5vZGUpIH19PC9tYXQtY2hlY2tib3hcclxuICAgICAgICAgID5cclxuICAgICAgICA8L21hdC10cmVlLW5vZGU+XHJcbiAgICAgIDwvbWF0LXRyZWU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG1hdC1wYWdpbmF0b3JcclxuICAgICpuZ0lmPVwic21hcnRHcmlkLnBhZ2luYXRvciAmJiAhdHJlZUNvbnRyb2xcIlxyXG4gICAgI3BhZ2luYXRvclxyXG4gICAgW2xlbmd0aF09XCJsZW5ndGhcIlxyXG4gICAgW3BhZ2VJbmRleF09XCJwYWdlSW5kZXhcIlxyXG4gICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcclxuICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcclxuICAgIChwYWdlKT1cIm9uQ2hhbmdlUGFnZSgkZXZlbnQpXCJcclxuICA+PC9tYXQtcGFnaW5hdG9yPlxyXG48L2Rpdj5cclxufVxyXG4iXX0=
|
|
1004
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1ncmlkL3NtYXJ0LWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZ3JpZC9zbWFydC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUVMLFNBQVMsRUFFVCxNQUFNLEVBRU4sS0FBSyxFQUlMLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakYsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDbkcsT0FBTyxFQUNMLFVBQVUsRUFDVixvQkFBb0IsRUFFcEIsNEJBQTRCLEVBRTVCLDJCQUEyQixFQUMzQixlQUFlLEVBQ2YsY0FBYyxFQUNkLG1CQUFtQixHQUNwQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFHTCxrQkFBa0IsR0FFbkIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGdCQUFnQixHQUlqQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFHTCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBRWpCLDBCQUEwQixHQUMzQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSwy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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQgeyBGbGF0VHJlZUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgQ29tcG9uZW50UmVmLFxyXG4gIEluamVjdCxcclxuICBJbmplY3RvcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFRyZWVGbGF0RGF0YVNvdXJjZSwgTWF0VHJlZUZsYXR0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi9jb21wb25lbnQtZmFjdG9yeS1zZXJ2aWNlL3Byb2plY3RzJztcclxuaW1wb3J0IHsgU21hcnREaWFsb2dEYXRhIH0gZnJvbSAnLi4vc21hcnQtZGlhbG9nL3Byb2plY3RzJztcclxuaW1wb3J0IHsgRXhwYW5kYWJsZVNlY3Rpb24gfSBmcm9tICcuLi9zbWFydC1leHBhbmRhYmxlLXNlY3Rpb24vcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeSB9IGZyb20gJy4uL3NtYXJ0LWZpbHRlci1lZGl0b3IvYXBpL21vZGVsL2ZpbHRlckV4cHJlc3Npb25PcmRlckJ5JztcclxuaW1wb3J0IHtcclxuICBTbWFydFRhYmxlLFxyXG4gIFNtYXJ0VGFibGVCdXR0b25UeXBlLFxyXG4gIFNtYXJ0VGFibGVIZWFkZXIsXHJcbiAgU21hcnRUYWJsZUhlYWRlclByb3BlcnR5VHlwZSxcclxuICBTbWFydFRhYmxlSW50ZXJmYWNlLFxyXG4gIFNtYXJ0VGFibGVJbnRlcmZhY2VUeXBlRW51bSxcclxuICBTbWFydFRhYmxlT3JkZXIsXHJcbiAgU21hcnRUYWJsZVR5cGUsXHJcbiAgU21hcnR0YWJsZUNvbXBvbmVudCxcclxufSBmcm9tICcuLi9zbWFydC10YWJsZS9wcm9qZWN0cyc7XHJcbmltcG9ydCB7XHJcbiAgSW1hZ2VSZXNvdXJjZSxcclxuICBVaUFjdGlvbixcclxuICBVaUFjdGlvbkJ1dHRvblR5cGUsXHJcbiAgVWlBY3Rpb25EZXNjcmlwdG9yLFxyXG59IGZyb20gJy4uL3ZpZXctY29udGV4dC9hcGknO1xyXG5pbXBvcnQge1xyXG4gIENPTVBPTkVOVF9MSUJSQVJZLFxyXG4gIENvbXBvbmVudExpYnJhcnksXHJcbiAgVWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSxcclxuICBVaUFjdGlvbk1vZGVsLFxyXG4gIFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudCxcclxufSBmcm9tICcuLi92aWV3LWNvbnRleHQvcHJvamVjdHMnO1xyXG5pbXBvcnQge1xyXG4gIEdyaWRDb2x1bW5NZXRhLFxyXG4gIEdyaWRSb3csXHJcbiAgR3JpZFNlbGVjdGlvbk1vZGUsXHJcbiAgR3JpZFNlbGVjdGlvblR5cGUsXHJcbiAgR3JpZFVwZGF0ZURhdGEsXHJcbiAgR3JpZFZpZXdEZXNjcmlwdG9yS2luZEVudW0sXHJcbn0gZnJvbSAnLi9hcGkvZ3JpZC1hcGknO1xyXG5pbXBvcnQgeyBUYWJsZUxheW91dERlZmluZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtbGF5b3V0LWRlZmluZXIvdGFibGUtbGF5b3V0LWRlZmluZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBHcmlkVWlBY3Rpb25UeXBlLFxyXG4gIFNtYXJ0R3JpZCxcclxuICBTbWFydEdyaWREYXRhTGF5b3V0LFxyXG4gIFNtYXJ0R3JpZFR5cGUsXHJcbiAgU21hcnRMYXlvdXREZWYsXHJcbn0gZnJvbSAnLi9tb2RlbHMvbW9kZWwnO1xyXG5pbXBvcnQgeyBTbWFydEdyaWRTZXJ2aWNlIH0gZnJvbSAnLi9zbWFydC1ncmlkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSwgU29ydE1ldGEgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IE1lbnUgfSBmcm9tICdwcmltZW5nL21lbnUnO1xyXG5pbXBvcnQge1xyXG4gIFJvd1RvZ2dsZXIsXHJcbiAgVGFibGVDb2x1bW5SZW9yZGVyRXZlbnQsXHJcbiAgVGFibGVIZWFkZXJDaGVja2JveFRvZ2dsZUV2ZW50LFxyXG4gIFRhYmxlTGF6eUxvYWRFdmVudCxcclxuICBUYWJsZVJvd0V4cGFuZEV2ZW50LFxyXG4gIFRhYmxlUm93U2VsZWN0RXZlbnQsXHJcbiAgVGFibGVSb3dVblNlbGVjdEV2ZW50LFxyXG59IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xyXG5pbXBvcnQgeyBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeU9yZGVyRW51bSB9IGZyb20gJy4uL3NtYXJ0LWZpbHRlci9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IE11bHRpU2VsZWN0Q2hhbmdlRXZlbnQgfSBmcm9tICdwcmltZW5nL211bHRpc2VsZWN0JztcclxuaW1wb3J0IHsgU21hcnRHcmlkVG9vbGJhckFjdGlvbnNVdGlsIH0gZnJvbSAnLi9zbWFydC1ncmlkLXRvb2xiYXItdXRpbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NtYXJ0LWdyaWQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1ncmlkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zbWFydC1ncmlkLmNvbXBvbmVudC5jc3MnXSxcclxuICBwcm92aWRlcnM6IFtTbWFydEdyaWRTZXJ2aWNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNtYXJ0R3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcclxuICAvLyBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRQYWdlU2l6ZTogbnVtYmVyID0gMTA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0UGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFs1LCAxMCwgMjUsIDUwXTtcclxuICBjb21wb25lbnRMaWJyYXJ5ID0gQ29tcG9uZW50TGlicmFyeTtcclxuICBwcml2YXRlIF9kZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgQElucHV0KCkgc21hcnRHcmlkPzogU21hcnRHcmlkO1xyXG4gIEBJbnB1dCgpIHV1aWQ/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZGV2OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIHRhYmxlXHJcbiAgQFZpZXdDaGlsZCgndGFibGUnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgdmNSZWZUYWJsZT86IFZpZXdDb250YWluZXJSZWY7XHJcbiAgY29tcG9uZW50UmVmVGFibGU/OiBDb21wb25lbnRSZWY8U21hcnR0YWJsZUNvbXBvbmVudD47XHJcbiAgc21hcnRUYWJsZSE6IFNtYXJ0VGFibGU8R3JpZFJvdz47XHJcblxyXG4gIC8vIHRvb2xiYXJcclxuICBAVmlld0NoaWxkKCd0b29sYmFyJykgdG9vbGJhcj86IFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCdoZWFkZXJUb29sYmFyJykgX2hlYWRlclRvb2xiYXI/OiBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQ7XHJcbiAgZGVmYXVsdEFjdGlvblRvb2xiYXJJZDogc3RyaW5nID0gU21hcnRHcmlkVG9vbGJhckFjdGlvbnNVdGlsLmRlZmF1bHRBY3Rpb25Ub29sYmFySWQ7XHJcblxyXG4gIC8vIGV4cGFuZGFibGVcclxuICAvLyBncmlkRGF0YVxyXG4gIGV4cGFuZGFibGVTZWN0aW9ucz86IEV4cGFuZGFibGVTZWN0aW9uPGFueT5bXTtcclxuICBleHBhbmRlZFJvd3MgPSB7fTtcclxuICBwYWdlRXZlbnQ/OiBQYWdlRXZlbnQ7XHJcbiAgZGF0YXNvdXJjZT86IG51bGw7XHJcbiAgcGFnZVNpemU/OiBudW1iZXI7XHJcbiAgbGVuZ3RoPzogbnVtYmVyO1xyXG4gIHBhZ2VJbmRleD86IG51bWJlcjtcclxuICB2YWx1ZXM6IGFueTtcclxuICBncmlkVGFibGUhOiBTbWFydFRhYmxlPGFueT47XHJcbiAgaXNNdWx0aXBsZT86IGJvb2xlYW47XHJcbiAgc2VsZWN0ZWRSb3dzOiBHcmlkUm93W10gPSBbXTtcclxuICB0YWJsZVR5cGU/OiBhbnk7XHJcbiAgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IHRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9ucztcclxuXHJcbiAgc2VsZWN0aW9uQ2hhbmdlczogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgdWlBY3Rpb25EZXNjcmlwdG9yczogTWFwPHN0cmluZywgVWlBY3Rpb25EZXNjcmlwdG9yPiA9IG5ldyBNYXAoKTtcclxuICBjZWxsVG9BY3Rpb25NYXA6IFJlY29yZDxzdHJpbmcsIFVpQWN0aW9uTW9kZWxbXT4gPSB7fTtcclxuXHJcbiAgYWZ0ZXJWaWV3SW5pdEV4ZWN1dGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNCbG9ja2VkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLy8gdHJlZVxyXG4gIHRyZWVDb250cm9sPzogRmxhdFRyZWVDb250cm9sPEdyaWRSb3c+O1xyXG4gIHRyZWVGbGF0dGVuZXI/OiBNYXRUcmVlRmxhdHRlbmVyPEdyaWRSb3csIEdyaWRSb3c+O1xyXG4gIHRyZWVEYXRhU291cmNlPzogTWF0VHJlZUZsYXREYXRhU291cmNlPEdyaWRSb3csIEdyaWRSb3c+O1xyXG4gIHRyZWVDaGVja2xpc3RTZWxlY3Rpb24/OiBTZWxlY3Rpb25Nb2RlbDxHcmlkUm93PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNlcnZpY2U6IFNtYXJ0R3JpZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNmU2VydmljZTogQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIHVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U6IFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UsXHJcbiAgICBASW5qZWN0KENPTVBPTkVOVF9MSUJSQVJZKSBwdWJsaWMgY29tcExpYjogQ29tcG9uZW50TGlicmFyeSxcclxuICAgIEBJbmplY3QoJ2dyaWRNZW51SWNvbicpIHByaXZhdGUgZ3JpZE1lbnVJY29uPzogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAvLyBjYWxsZWQgYWZ0ZXIgZXZlcnkgc2VydmljZSBjYWxsIChsb2FkLCBzYXZlLCByZWZyZXNoLCBldGMuKVxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbDtcclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3NtYXJ0R3JpZCddKSB7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkID0gY2hhbmdlc1snc21hcnRHcmlkJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLnNlcnZpY2UucGFnaW5hdG9yID0gdGhpcy5zbWFydEdyaWQ/LnBhZ2luYXRvcjtcclxuICAgICAgdGhpcy5zZXR1cFRvb2xiYXIoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWyd1dWlkJ10pIHtcclxuICAgICAgdGhpcy51dWlkID0gY2hhbmdlc1sndXVpZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFmdGVyVmlld0luaXRFeGVjdXRlZCAmJiB0aGlzLnV1aWQgJiYgdGhpcy5zbWFydEdyaWQpIHtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kZXYpIHtcclxuICAgICAgLy8gZm9yIGRldiBwdXJwb3Nlc1xyXG4gICAgICBpZiAodGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbCkge1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5ncmlkTW9kZWwgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsO1xyXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy51dWlkICYmIHRoaXMuc21hcnRHcmlkICYmICF0aGlzLmRldikge1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICAgIHRoaXMuYWZ0ZXJWaWV3SW5pdEV4ZWN1dGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHJldHVybnMgdGhlIHNlbGVjdGVkIHJvd3Mgb2YgdGhlIHRhYmxlXHJcbiAgICovXHJcbiAgcHVibGljIGdldFNlbGVjdGVkUm93cygpOiBTZWxlY3Rpb25Nb2RlbDxHcmlkUm93PiB7XHJcbiAgICBpZiAoIXRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24pIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgcmV0dXJuIHRoaXMuc21hcnRUYWJsZSEuc2VsZWN0aW9uITtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgR0VUIHJlcXVlc3QgdG8gdGhlIGdlbmVyaWMgR3JpZEFQSSBhbmQgcmVmcmVzaGVzIHRoZSBwcmVzZW50ZWRcclxuICAgKiBncmlkIHdpdGggdGhlIG5ld2VzdCBvbmUuXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnNldHVwVG9vbGJhcigpO1xyXG4gICAgLy8gd2lsbCBjYXVzZSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsQ2hhbmdlZCB0byBmaXJlXHJcbiAgICBpZiAodGhpcy51dWlkKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5sb2FkKHRoaXMudXVpZCwgdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFN0eWxlKHJvdzogYW55KTogc3RyaW5nW10ge1xyXG4gICAgaWYgKHJvdyAmJiByb3cuc3R5bGUpIHtcclxuICAgICAgbGV0IHN0eWxlID0gcm93LnN0eWxlO1xyXG4gICAgICBsZXQgY2xhc3Nlc1RvQWRkOiBBcnJheTxzdHJpbmc+ID0gW107XHJcblxyXG4gICAgICBpZiAoc3R5bGUuY2xhc3Nlc1RvQWRkKSB7XHJcbiAgICAgICAgc3R5bGUuY2xhc3Nlc1RvQWRkLmZvckVhY2goKGNsOiBzdHJpbmcpID0+IGNsYXNzZXNUb0FkZC5wdXNoKGNsKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghc3R5bGUuY2xhc3Nlc1RvUmVtb3ZlKSB7XHJcbiAgICAgICAgcmV0dXJuIGNsYXNzZXNUb0FkZDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY2xhc3Nlc1RvQWRkLmZpbHRlcigoY2xzKSA9PiAhc3R5bGUuY2xhc3Nlc1RvUmVtb3ZlLmluY2x1ZGVzKGNscykpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldHVwVG9vbGJhcigpIHtcclxuICAgIC8vIGNoZWNrIGlmIHRvb2xiYXIgaXMgYXZhaWxhYmxlIF9hbmRfIG5lZWQgc2V0IHVwXHJcbiAgICBpZiAodGhpcy50b29sYmFyICYmIHRoaXMuc21hcnRHcmlkKSB7XHJcbiAgICAgIGxldCB0b29sYmFySWQgPSB0aGlzLnNtYXJ0R3JpZD8uZ3JpZElkZW50aWZpZXIgKyAnX3Rvb2xiYXInO1xyXG4gICAgICBpZiAodG9vbGJhcklkICE9PSB0aGlzLnRvb2xiYXIuaWQpIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXIuaWQgPSB0b29sYmFySWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5faGVhZGVyVG9vbGJhciAmJiB0aGlzLnNtYXJ0R3JpZCkge1xyXG4gICAgICBsZXQgaGVhZGVyVG9vbGJhcklkID0gdGhpcy5zbWFydEdyaWQ/LmdyaWRJZGVudGlmaWVyICsgJ19oZWFkZXJUb29sYmFyJztcclxuICAgICAgaWYgKGhlYWRlclRvb2xiYXJJZCAhPT0gdGhpcy5faGVhZGVyVG9vbGJhci5pZCkge1xyXG4gICAgICAgIHRoaXMuX2hlYWRlclRvb2xiYXIuaWQgPSBoZWFkZXJUb29sYmFySWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBoZWFkZXJUb29sYmFyKCk6IFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudCB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAodGhpcy5jb21wTGliID09PSBDb21wb25lbnRMaWJyYXJ5LlBSSU1FTkcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2hlYWRlclRvb2xiYXI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRSZWZUYWJsZT8uaW5zdGFuY2UuY29tcG9uZW50UmVmVGFibGU/Lmluc3RhbmNlLmhlYWRlclRvb2xiYXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHJlbmRlcigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGdyaWRNb2RlbCA9IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWw7XHJcbiAgICBpZiAoZ3JpZE1vZGVsKSB7XHJcbiAgICAgIHRoaXMubGVuZ3RoID0gZ3JpZE1vZGVsLnRvdGFsUm93Q291bnQ7XHJcbiAgICAgIHRoaXMucGFnZVNpemUgPSBncmlkTW9kZWwucGFnZVNpemU7XHJcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gZ3JpZE1vZGVsLnBhZ2VJbmRleCA/PyAwO1xyXG4gICAgICBpZiAoZ3JpZE1vZGVsLnBhZ2VTaXplT3B0aW9ucyAmJiBncmlkTW9kZWwucGFnZVNpemVPcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IGdyaWRNb2RlbC5wYWdlU2l6ZU9wdGlvbnM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSB0aGlzLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGdyaWRNb2RlbD8udmlldz8uZGVzY3JpcHRvcj8uc2hvd0VkaXRDb2x1bW5zKSB7XHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLnNob3dFZGl0Q29sdW1ucyA9IGdyaWRNb2RlbD8udmlldz8uZGVzY3JpcHRvcj8uc2hvd0VkaXRDb2x1bW5zO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBraW5kID0gZ3JpZE1vZGVsPy52aWV3Py5kZXNjcmlwdG9yPy5raW5kO1xyXG4gICAgICBpZiAoa2luZCkge1xyXG4gICAgICAgIGxldCBsYXlvdXREZWY7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IEdyaWRWaWV3RGVzY3JpcHRvcktpbmRFbnVtLlRBQkxFKSB7XHJcbiAgICAgICAgICBsYXlvdXREZWYgPSBTbWFydExheW91dERlZi5UQUJMRTtcclxuICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09IEdyaWRWaWV3RGVzY3JpcHRvcktpbmRFbnVtLlRSRUUpIHtcclxuICAgICAgICAgIGxheW91dERlZiA9IFNtYXJ0TGF5b3V0RGVmLlRSRUU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChraW5kID09PSBHcmlkVmlld0Rlc2NyaXB0b3JLaW5kRW51bS5DQVJEUykge1xyXG4gICAgICAgICAgbGF5b3V0RGVmID0gU21hcnRMYXlvdXREZWYuQ0FSRDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxheW91dERlZikge1xyXG4gICAgICAgICAgdGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9IGxheW91dERlZjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGdyaWRNb2RlbD8ucGFnaW5hdG9yID09PSB0cnVlIHx8IGdyaWRNb2RlbD8ucGFnaW5hdG9yID09PSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS5wYWdpbmF0b3IgPSBncmlkTW9kZWwucGFnaW5hdG9yO1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5wYWdpbmF0b3IgPSB0aGlzLnNtYXJ0R3JpZCEucGFnaW5hdG9yO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdHcmlkTW9kZWwgaXMgdW5kZWZpbmVkIGluIGNvbXBvbmVudCEnKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zbWFydEdyaWQhLmxheW91dERlZikge1xyXG4gICAgICAvLyBmYWxsYmFjaywgZGVmYXVsdCBUQUJMRVxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID0gU21hcnRMYXlvdXREZWYuVEFCTEU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9PT0gU21hcnRMYXlvdXREZWYuVEFCTEUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJUYWJsZSgpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID09PSBTbWFydExheW91dERlZi5FWFBBTkRBQkxFKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyRXhwYW5kYWJsZVNlY3Rpb25zKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPT09IFNtYXJ0TGF5b3V0RGVmLkNBUkQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJDYXJkcygpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID09PSBTbWFydExheW91dERlZi5UUkVFKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyVHJlZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc0Jsb2NrZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJUYWJsZSgpIHtcclxuICAgIHRoaXMudmNSZWZUYWJsZT8uY2xlYXIoKTtcclxuICAgIHRoaXMuY29tcG9uZW50UmVmVGFibGUgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHJlbmRlclRhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5jbGVhclRyZWUoKTtcclxuICAgIGlmICh0aGlzLmNvbXBMaWIgPT09IHRoaXMuY29tcG9uZW50TGlicmFyeS5QUklNRU5HKSB7XHJcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC5wYWdlU2l6ZSEgKiB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnBhZ2VJbmRleCE7XHJcbiAgICAgIHRoaXMuY29sdW1ucyA9IFtdO1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnZpZXc/Lm9yZGVyZWRDb2x1bW5OYW1lcy5tYXAoKG9yZGVyZWRDb2w6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uY29sdW1ucy5tYXAoKGNvbHVtOiBHcmlkQ29sdW1uTWV0YSkgPT4ge1xyXG4gICAgICAgICAgaWYgKG9yZGVyZWRDb2wgPT09IGNvbHVtLnByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMucHVzaChjb2x1bSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB0YWJsZVJvdyA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwhLnBhZ2Uucm93cyEubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5jcmVhdGVDZWxsVG9BY3Rpb25NYXAoKTtcclxuICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIXRhYmxlUm93Lmxlbmd0aCkge1xyXG4gICAgICBsZXQgcGxhY2VIb2xkZXJSb3c6IGFueSA9IHt9O1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LmNvbHVtbnMubWFwKChtZXRhOiBHcmlkQ29sdW1uTWV0YSkgPT4ge1xyXG4gICAgICAgIHBsYWNlSG9sZGVyUm93W21ldGEucHJvcGVydHlOYW1lXSA9IHVuZGVmaW5lZDtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzID0gW3BsYWNlSG9sZGVyUm93XTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLnRhYmxlQ29uZmlnPy50YWJsZVR5cGUpIHtcclxuICAgICAgdGhpcy50YWJsZVR5cGUgPSB0aGlzLnNtYXJ0R3JpZCEudGFibGVDb25maWcudGFibGVUeXBlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsPy52aWV3Py5kZXNjcmlwdG9yPy5zZWxlY3Rpb25UeXBlKSB7XHJcbiAgICAgIHRoaXMudGFibGVUeXBlID1cclxuICAgICAgICB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnZpZXcuZGVzY3JpcHRvci5zZWxlY3Rpb25UeXBlID09PSBHcmlkU2VsZWN0aW9uVHlwZS5DSEVDS0JPWFxyXG4gICAgICAgICAgPyBTbWFydFRhYmxlVHlwZS5DSEVDS19CT1hcclxuICAgICAgICAgIDogU21hcnRUYWJsZVR5cGUuUk9XX1NFTEVDVDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudGFibGVUeXBlID0gU21hcnRUYWJsZVR5cGUuSU5IRVJJVEVEO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPT09IFNtYXJ0TGF5b3V0RGVmLlRBQkxFKSB7XHJcbiAgICAgIGxldCB0YWJsZUNvbmZpZzogU21hcnRUYWJsZUludGVyZmFjZTxHcmlkUm93PiA9IHtcclxuICAgICAgICAuLi50aGlzLnNtYXJ0R3JpZCEudGFibGVDb25maWcsXHJcbiAgICAgICAgdGl0bGU6IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwudGl0bGUsXHJcbiAgICAgICAgdGFibGVSb3dzOiB0YWJsZVJvdyxcclxuICAgICAgICB0YWJsZVR5cGU6IHRoaXMudGFibGVUeXBlLFxyXG4gICAgICAgIGN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzOiBhd2FpdCB0aGlzLmNvbnN0cnVjdEhlYWRlcigpISxcclxuICAgICAgICBleHBhbmRhYmxlOiB0aGlzLnNtYXJ0R3JpZCEuZXhwYW5kYWJsZSxcclxuICAgICAgICBleHBhbmRlZENvbXBvbmVudDogdGhpcy5zbWFydEdyaWQhLmV4cGFuZGVkQ29tcG9uZW50LFxyXG4gICAgICAgIHR5cGU6IFNtYXJ0VGFibGVJbnRlcmZhY2VUeXBlRW51bS5OT1JNQUwsXHJcbiAgICAgICAgc29ydGFibGU6IHRydWUsXHJcbiAgICAgICAgZGVmYXVsdEFjdGlvbkNvZGVzOiB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLmRlZmF1bHRSb3dBY3Rpb25zISxcclxuICAgICAgICBkZWZhdWx0QWN0aW9uczogdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC5kZWZhdWx0Um93QWN0aW9ucz8ubWFwKChjb2RlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHR5cGU6XHJcbiAgICAgICAgICAgICAgY29kZSA9PT0gJ19hY3Rpb25TZXBhcmF0b3JfJ1xyXG4gICAgICAgICAgICAgICAgPyBTbWFydFRhYmxlQnV0dG9uVHlwZS5TRVBBUkFUT1JcclxuICAgICAgICAgICAgICAgIDogU21hcnRUYWJsZUJ1dHRvblR5cGUuTk9STUFMLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogdGhpcy5leGVjdXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIGNvZGU6IGNvZGUsXHJcbiAgICAgICAgICAgIC8vIGxhYmVsOiB0aGlzLmJ1dHRvblRyYW5zbGF0b3IoeyBjb2RlOiBjb2RlIH0pLFxyXG4gICAgICAgICAgICB0cmFuc2xhdG9yOiB0aGlzLmJ1dHRvblRyYW5zbGF0b3IuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgLy8gYXJnczogW1xyXG4gICAgICAgICAgICAvLyAgIHtcclxuICAgICAgICAgICAgLy8gICAgIGNvZGU6IGNvZGUsXHJcbiAgICAgICAgICAgIC8vICAgfSxcclxuICAgICAgICAgICAgLy8gXSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSksXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5oaWdobGlnaHRQcm9wZXJ0eSAmJlxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uaGlnaGxpZ2h0Q2xhc3NcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGFibGVDb25maWcuaGlnaGxpZ2h0Q2xhc3MgPSB0aGlzLnNtYXJ0R3JpZC5ncmlkTW9kZWwudmlldy5kZXNjcmlwdG9yLmhpZ2hsaWdodENsYXNzO1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLmhpZ2hsaWdodFByb3BlcnR5ID0gdGhpcy5zbWFydEdyaWQuZ3JpZE1vZGVsLnZpZXcuZGVzY3JpcHRvci5oaWdobGlnaHRQcm9wZXJ0eTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS51aUFjdGlvblNlcnZpY2UgJiZcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSAmJlxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS5zZXJ2aWNlVG9Vc2UgJiZcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEudmlld0NvbnRleHRTZXJ2aWNlXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLm9uU2VsZWN0aW9uID0gdGhpcy5vblNlbGVjdC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLm9uQWxsU2VsZWN0aW9uID0gdGhpcy5vblNlbGVjdEFsbC5iaW5kKHRoaXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBQcmVwYXJlZCBmb3Igc2ltcGxlIGNsaWNrc1xyXG4gICAgICAvLyBpZiAoIXRhYmxlQ29uZmlnLm9uUm93Q2xpY2spIHtcclxuICAgICAgLy8gICB0YWJsZUNvbmZpZy5vblJvd0NsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIGlmICghdGFibGVDb25maWcub25Sb3dEb3VibGVDbGljaykge1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLm9uUm93RG91YmxlQ2xpY2sgPSB0aGlzLm9uRG91YmxlQ2xpY2suYmluZCh0aGlzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF0YWJsZUNvbmZpZy5pc1Jvd0Rpc2FibGVkUHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgdGFibGVDb25maWcuc2VsZWN0YWJsZVByb3BlcnR5TmFtZSA9ICdzZWxlY3RhYmxlJztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRhYmxlQ29uZmlnLmFzeW5jT25FeHBhbmQpIHtcclxuICAgICAgICB0YWJsZUNvbmZpZy5yb3dFeHBhbmRlciA9IHRoaXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbk1vZGUgPSB0aGlzLnNlcnZpY2UhLmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5zZWxlY3Rpb25Nb2RlO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgICF0YWJsZUNvbmZpZy5zZWxlY3Rpb24gJiZcclxuICAgICAgICAhdGFibGVDb25maWcuc2VsZWN0aW9uUHJvcGVydHkgJiZcclxuICAgICAgICBzZWxlY3Rpb25Nb2RlICE9PSBHcmlkU2VsZWN0aW9uTW9kZS5OT05FXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuaXNNdWx0aXBsZSA9IHNlbGVjdGlvbk1vZGUgPT09IEdyaWRTZWxlY3Rpb25Nb2RlLk1VTFRJUExFO1xyXG5cclxuICAgICAgICB0YWJsZUNvbmZpZy5zZWxlY3Rpb25Qcm9wZXJ0eSA9ICdpZCc7XHJcbiAgICAgICAgbGV0IHNlbGVjdGVkSWRzO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5wYWdlLnJvd3MhLmZpbHRlcihcclxuICAgICAgICAgIChncmlkUm93OiBHcmlkUm93KSA9PiBncmlkUm93LnNlbGVjdGVkXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgc2VsZWN0ZWRJZHMgPSB0aGlzLnNlbGVjdGVkUm93cy5tYXAoKGdyaWRSb3c6IEdyaWRSb3cpID0+IGdyaWRSb3cuaWQhKTtcclxuICAgICAgICB0YWJsZUNvbmZpZy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8c3RyaW5nPih0aGlzLmlzTXVsdGlwbGUsIHNlbGVjdGVkSWRzKTtcclxuICAgICAgICB0YWJsZUNvbmZpZy5zaG93Q2hlY2tib3hJbkhlYWRlciA9XHJcbiAgICAgICAgICB0eXBlb2YgdGFibGVDb25maWcuc2hvd0NoZWNrYm94SW5IZWFkZXIgIT09ICd1bmRlZmluZWQnXHJcbiAgICAgICAgICAgID8gdGFibGVDb25maWcuc2hvd0NoZWNrYm94SW5IZWFkZXIgLy8ga2VlcCBpZiBzZXRcclxuICAgICAgICAgICAgOiB0aGlzLmlzTXVsdGlwbGU7IC8vaWYgdW5zZXQsIHR1cm4gaXQgb24gZm9yIG11bHRpcGxlIHNlbGVjdGlvblxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUgPSBuZXcgU21hcnRUYWJsZTxhbnk+KFxyXG4gICAgICAgIHRhYmxlQ29uZmlnLFxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkPy5ncmlkSWRlbnRpZmllcixcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZD8uc2VydmljZVRvVXNlXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAodGhpcy5jb21wb25lbnRSZWZUYWJsZSkge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2UudXBkYXRlU21hcnRUYWJsZSh0aGlzLnNtYXJ0VGFibGUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudmNSZWZUYWJsZT8uY2xlYXIoKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnZjUmVmVGFibGUpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWZUYWJsZSA9IHRoaXMuY2ZTZXJ2aWNlLmNyZWF0ZUNvbXBvbmVudChcclxuICAgICAgICAgIHRoaXMudmNSZWZUYWJsZSEsXHJcbiAgICAgICAgICBTbWFydHRhYmxlQ29tcG9uZW50LFxyXG4gICAgICAgICAgbmV3IE1hcDxzdHJpbmcsIGFueT4oW1snc21hcnRUYWJsZScsIHRoaXMuc21hcnRUYWJsZV1dKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSB0aGlzLmNvbXBvbmVudFJlZlRhYmxlLmluc3RhbmNlLnNvcnRFdmVudFxyXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2UuX2Rlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXIucHJvcGVydHlOYW1lID0gaGVhZGVyLnByb3BlcnR5TmFtZS5zdWJzdHJpbmcoNSk7XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKGhlYWRlci5vcmRlcikge1xyXG4gICAgICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxyXG4gICAgICAgICAgICAgICAgaGVhZGVyLm9yZGVyID0gU21hcnRUYWJsZU9yZGVyLkFTQztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgU21hcnRUYWJsZU9yZGVyLkFTQzpcclxuICAgICAgICAgICAgICAgIGhlYWRlci5vcmRlciA9IFNtYXJ0VGFibGVPcmRlci5ERVNDO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSBTbWFydFRhYmxlT3JkZXIuREVTQzpcclxuICAgICAgICAgICAgICAgIGhlYWRlci5vcmRlciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZmlsdGVyID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlckJ5TGlzdC5maW5kKFxyXG4gICAgICAgICAgICAgIChmaWx0ZXJFeHByZXNzaW9uOiBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeSkgPT5cclxuICAgICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb24ucHJvcGVydHlOYW1lID09PSBoZWFkZXIucHJvcGVydHlOYW1lXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgJiYgIWhlYWRlci5vcmRlcikge1xyXG4gICAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldz8ub3JkZXJCeUxpc3QuaW5kZXhPZihmaWx0ZXIpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldz8ub3JkZXJCeUxpc3Quc3BsaWNlKGluZGV4ISwgMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgZmlsdGVyLm9yZGVyID0gaGVhZGVyLm9yZGVyO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldyEub3JkZXJCeUxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBvcmRlcjogaGVhZGVyLm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBoZWFkZXIucHJvcGVydHlOYW1lLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZ3JpZFVwZGF0ZURhdGE6IEdyaWRVcGRhdGVEYXRhID0ge1xyXG4gICAgICAgICAgICAgIG9yZGVyQnlMaXN0OiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLm9yZGVyQnlMaXN0LFxyXG4gICAgICAgICAgICAgIG9yZGVyZWRDb2x1bW5OYW1lczogdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlcmVkQ29sdW1uTmFtZXMsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5zb3J0KHRoaXMuc21hcnRHcmlkISwgZ3JpZFVwZGF0ZURhdGEpO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2Uuc21hcnRUYWJsZS5zZWxlY3Rpb24/LmNoYW5nZWRcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudFJlZlRhYmxlLmluc3RhbmNlLl9kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChyb3c6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZXMubmV4dChyb3cpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBhbmQocm93SWQ6IG51bWJlcik6IGFueSB7fVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZXhwYW5kQXN5bmMocm93SW5kZXg6IG51bWJlcik6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MpIHtcclxuICAgICAgbGV0IHJvdyA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzW3Jvd0luZGV4XTtcclxuICAgICAgaWYgKHJvdyAmJiByb3cuaWQpIHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXJ2aWNlLmV4cGFuZCh0aGlzLnNtYXJ0R3JpZCEsIHJvdy5pZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnNlcnZpY2UuZXhwYW5kKHRoaXMuc21hcnRHcmlkISwgcm93SW5kZXgudG9TdHJpbmcoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgb21QcmltZU5nUm93RXhwYW5kKCRldmVudDogVGFibGVSb3dFeHBhbmRFdmVudCk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXJ2aWNlLmV4cGFuZCh0aGlzLnNtYXJ0R3JpZCEsICRldmVudC5kYXRhLmlkISk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckV4cGFuZGFibGVTZWN0aW9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuZXhwYW5kYWJsZVNlY3Rpb25zID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbCEucGFnZS5yb3dzIS5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRpdGxlOiAnJyxcclxuICAgICAgICBoZWFkZXJDb21wb25lbnQ6IHRoaXMuc21hcnRHcmlkIS5oZWFkZXJDb21wb25lbnQsXHJcbiAgICAgICAgaGVhZGVySW5wdXROYW1lOiB0aGlzLnNtYXJ0R3JpZCEuaGVhZGVyQ29tcG9uZW50SW5wdXROYW1lLFxyXG4gICAgICAgIGhlYWRlckRhdGE6IGl0ZW0sXHJcbiAgICAgICAgY3VzdG9tQ29tcG9uZW50OiB0aGlzLnNtYXJ0R3JpZCEuZXhwYW5kYWJsZUNvbXBvbmVudCxcclxuICAgICAgICBpbnB1dE5hbWU6IHRoaXMuc21hcnRHcmlkIS5leHBhbmRhYmxlQ29tcG9uZW50SW5wdXROYW1lLFxyXG4gICAgICAgIGRhdGE6IGl0ZW0sXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQ2FyZHMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb21wTGliID09PSB0aGlzLmNvbXBvbmVudExpYnJhcnkuUFJJTUVORykge1xyXG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwucGFnZVNpemUhICogdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC5wYWdlSW5kZXghO1xyXG4gICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcclxuICAgICAgdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5vcmRlcmVkQ29sdW1uTmFtZXMubWFwKChvcmRlcmVkQ29sOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LmNvbHVtbnMubWFwKChjb2x1bTogR3JpZENvbHVtbk1ldGEpID0+IHtcclxuICAgICAgICAgIGlmIChvcmRlcmVkQ29sID09PSBjb2x1bS5wcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jb2x1bW5zLnB1c2goY29sdW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zbWFydEdyaWQhLmN1c3RvbUNvbXBvbmVudCkge1xyXG4gICAgICBsZXQgZGF0YWxheW91dERlZiA9IHtcclxuICAgICAgICBkYXRhTGF5b3V0OiBTbWFydEdyaWREYXRhTGF5b3V0LkNPTFVNTixcclxuICAgICAgICBncmlkTGF5b3V0OiBTbWFydEdyaWREYXRhTGF5b3V0LkNPTFVNTixcclxuICAgICAgICB0eXBlOiBTbWFydEdyaWRUeXBlLkNVU1RPTSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5kYXRhTGF5b3V0RGVmID0gZGF0YWxheW91dERlZjtcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmN1c3RvbUNvbXBvbmVudCA9IHRoaXMuaW5qZWN0b3IuZ2V0KHRoaXMuc21hcnRHcmlkIS5ncmlkSWRlbnRpZmllciArICdDYXJkJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzTXVsdGlwbGVTZWxlY3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25Nb2RlID0gdGhpcy5zZXJ2aWNlIS5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uc2VsZWN0aW9uTW9kZTtcclxuICAgIHJldHVybiBzZWxlY3Rpb25Nb2RlID09PSBHcmlkU2VsZWN0aW9uTW9kZS5NVUxUSVBMRTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJUcmVlKCkge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudHJlZURhdGFTb3VyY2UgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRyZWVGbGF0dGVuZXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24gPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlclRyZWUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyVGFibGUoKTtcclxuICAgIGlmICghdGhpcy50cmVlRGF0YVNvdXJjZSkge1xyXG4gICAgICB0aGlzLnRyZWVGbGF0dGVuZXIgPSBuZXcgTWF0VHJlZUZsYXR0ZW5lcihcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybWVyLFxyXG4gICAgICAgIHRoaXMuZ2V0TGV2ZWwsXHJcbiAgICAgICAgdGhpcy5pc0V4cGFuZGFibGUsXHJcbiAgICAgICAgdGhpcy5nZXRDaGlsZHJlblxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxHcmlkUm93Pih0aGlzLmdldExldmVsLCB0aGlzLmlzRXhwYW5kYWJsZSk7XHJcbiAgICAgIHRoaXMudHJlZURhdGFTb3VyY2UgPSBuZXcgTWF0VHJlZUZsYXREYXRhU291cmNlKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMudHJlZUZsYXR0ZW5lcik7XHJcbiAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxHcmlkUm93Pih0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb24oKSk7XHJcbiAgICB9XHJcbiAgICBsZXQgbm9kZXMgPSB0aGlzLnRyZWVDb250cm9sPy5kYXRhTm9kZXM7XHJcbiAgICBsZXQgZXhwYW5kZWROb2RlczogKHN0cmluZyB8IHVuZGVmaW5lZClbXTtcclxuICAgIGlmIChub2Rlcykge1xyXG4gICAgICBleHBhbmRlZE5vZGVzID0gbm9kZXNcclxuICAgICAgICAuZmlsdGVyKChub2RlKSA9PiB0aGlzLnRyZWVDb250cm9sPy5pc0V4cGFuZGFibGUobm9kZSkpXHJcbiAgICAgICAgLmZpbHRlcigobm9kZSkgPT4gdGhpcy50cmVlQ29udHJvbD8uaXNFeHBhbmRlZChub2RlKSlcclxuICAgICAgICAubWFwKChub2RlKSA9PiBub2RlLmlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGV4cGFuZGVkTm9kZXMgPSBbXTtcclxuICAgIH1cclxuICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzIS5mb3JFYWNoKChyb3c6IGFueSkgPT4gKHJvdy5sZXZlbCA9IHVuZGVmaW5lZCkpO1xyXG4gICAgdGhpcy50cmVlRGF0YVNvdXJjZS5kYXRhID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MhLmZpbHRlcigocm93KSA9PiAhcm93LnBhcmVudCk7XHJcbiAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24/LmNsZWFyKCk7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sPy5kYXRhTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICBpZiAobm9kZS5zZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbj8uc2VsZWN0KG5vZGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMudHJlZUNvbnRyb2w/LmNvbGxhcHNlQWxsKCk7XHJcbiAgICBleHBhbmRlZE5vZGVzLmZvckVhY2goKHJvd0lkKSA9PiB7XHJcbiAgICAgIGxldCByb3cgPSB0aGlzLnRyZWVDb250cm9sPy5kYXRhTm9kZXMuZmluZCgocm93KSA9PiByb3dJZCA9PT0gcm93LmlkKTtcclxuICAgICAgaWYgKHJvdykge1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2w/LmV4cGFuZChyb3cpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldExldmVsID0gKG5vZGU6IGFueSkgPT4gbm9kZS5sZXZlbCA/PyAwO1xyXG5cclxuICBpc0V4cGFuZGFibGUgPSAobm9kZTogR3JpZFJvdykgPT4gKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwID8gdHJ1ZSA6IGZhbHNlKTtcclxuXHJcbiAgZ2V0Q2hpbGRyZW4gPSAobm9kZTogR3JpZFJvdyk6IEdyaWRSb3dbXSA9PiB7XHJcbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xyXG4gICAgICBsZXQgcm93cyA9IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwucGFnZS5yb3dzPy5maWx0ZXIoKHJvdykgPT5cclxuICAgICAgICBub2RlLmNoaWxkcmVuPy5zb21lKChjaGlsZCkgPT4gY2hpbGQgPT09IHJvdy5pZCEpXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChyb3dzKSB7XHJcbiAgICAgICAgcmV0dXJuIHJvd3M7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9O1xyXG5cclxuICBoYXNDaGlsZCA9IChfOiBudW1iZXIsIF9ub2RlRGF0YTogR3JpZFJvdykgPT4gdGhpcy5pc0V4cGFuZGFibGUoX25vZGVEYXRhKTtcclxuXHJcbiAgdHJhbnNmb3JtZXIgPSAocm93OiBHcmlkUm93LCBsZXZlbDogbnVtYmVyKSA9PiB7XHJcbiAgICAocm93IGFzIGFueSkubGV2ZWwgPSBsZXZlbDtcclxuICAgIHJldHVybiByb3c7XHJcbiAgfTtcclxuXHJcbiAgZ2V0VHJlZUl0ZW0ocm93OiBHcmlkUm93KTogc3RyaW5nIHtcclxuICAgIGxldCBjb2x1bW5zOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwudmlldz8ub3JkZXJlZENvbHVtbk5hbWVzO1xyXG4gICAgbGV0IGRhdGE6IGFueSA9IHJvdy5kYXRhITtcclxuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbCkgPT4gZGF0YVtjb2xdKS5qb2luKCcgJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93LmlkITtcclxuICB9XHJcblxyXG4gIC8qKiBUb2dnbGUgdGhlIHRyZWVOb2RlIHNlbGVjdGlvbi4gU2VsZWN0L2Rlc2VsZWN0IGFsbCB0aGUgZGVzY2VuZGFudHMgbm9kZSAqL1xyXG4gIHRyZWVOb2RlU2VsZWN0aW9uVG9nZ2xlKG5vZGU6IEdyaWRSb3cpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBzZWxlY3Rpb25CZWZvcmUgPSB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQubWFwKChyb3cpID0+IHJvdy5pZCk7XHJcbiAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24udG9nZ2xlKG5vZGUpO1xyXG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZVNlbGVjdGlvbigpKSB7XHJcbiAgICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy50cmVlQ29udHJvbCEuZ2V0RGVzY2VuZGFudHMobm9kZSk7XHJcbiAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXHJcbiAgICAgICAgPyB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0KC4uLmRlc2NlbmRhbnRzKVxyXG4gICAgICAgIDogdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLmRlc2NlbmRhbnRzKTtcclxuICAgICAgdGhpcy5jaGVja0FsbFBhcmVudHNTZWxlY3Rpb24obm9kZSk7XHJcbiAgICB9XHJcbiAgICBsZXQgc2VsZWN0aW9uQWZ0ZXIgPSB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQubWFwKChyb3cpID0+IHJvdy5pZCk7XHJcblxyXG4gICAgbGV0IHNlbGVjdGVkSWRzID0gc2VsZWN0aW9uQWZ0ZXIuZmlsdGVyKChzKSA9PiAhc2VsZWN0aW9uQmVmb3JlLmluY2x1ZGVzKHMpKTtcclxuICAgIGxldCB1bnNlbGVjdGVkSWRzID0gc2VsZWN0aW9uQmVmb3JlLmZpbHRlcigocykgPT4gIXNlbGVjdGlvbkFmdGVyLmluY2x1ZGVzKHMpKTtcclxuICAgIGlmICh0aGlzLmRldikge1xyXG4gICAgICAvLyB3aGVuIHNlcnZpY2UgY2FsbCBpcyBhY3RpdmUgKCFkZXYpLCBvblNlbGVjdCB3aWxsIHRvZ2dsZSByb3cuc2VsZWN0ZWRcclxuICAgICAgdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5wYWdlLnJvd3NcclxuICAgICAgICA/LmZpbHRlcigocm93KSA9PiBzZWxlY3RlZElkcy5pbmNsdWRlcyhyb3cuaWQpKVxyXG4gICAgICAgIC5mb3JFYWNoKChyb3cpID0+IChyb3cuc2VsZWN0ZWQgPSB0cnVlKSk7XHJcbiAgICAgIHRoaXMuc2VydmljZS5ncmlkTW9kZWwucGFnZS5yb3dzXHJcbiAgICAgICAgPy5maWx0ZXIoKHJvdykgPT4gdW5zZWxlY3RlZElkcy5pbmNsdWRlcyhyb3cuaWQpKVxyXG4gICAgICAgIC5mb3JFYWNoKChyb3cpID0+IChyb3cuc2VsZWN0ZWQgPSBmYWxzZSkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vblNlbGVjdFJvd3Moc2VsZWN0ZWRJZHMsIHVuc2VsZWN0ZWRJZHMpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tBbGxQYXJlbnRzU2VsZWN0aW9uKG5vZGU6IEdyaWRSb3cpOiB2b2lkIHtcclxuICAgIGxldCBwYXJlbnQ6IEdyaWRSb3cgfCBudWxsID0gdGhpcy5nZXRQYXJlbnROb2RlKG5vZGUpO1xyXG4gICAgd2hpbGUgKHBhcmVudCkge1xyXG4gICAgICB0aGlzLmNoZWNrUGFyZW50Tm9kZVNlbGVjdGlvbihwYXJlbnQpO1xyXG4gICAgICBwYXJlbnQgPSB0aGlzLmdldFBhcmVudE5vZGUocGFyZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrUGFyZW50Tm9kZVNlbGVjdGlvbihub2RlOiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBub2RlU2VsZWN0ZWQgPSB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKTtcclxuICAgIGNvbnN0IGRlc2NBbGxTZWxlY3RlZCA9IHRoaXMuZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlKTtcclxuICAgIGlmIChub2RlU2VsZWN0ZWQgJiYgIWRlc2NBbGxTZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uZGVzZWxlY3Qobm9kZSk7XHJcbiAgICB9IGVsc2UgaWYgKCFub2RlU2VsZWN0ZWQgJiYgZGVzY0FsbFNlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3Qobm9kZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiBHZXQgdGhlIHBhcmVudCBub2RlIG9mIGEgbm9kZSAqL1xyXG4gIGdldFBhcmVudE5vZGUobm9kZTogR3JpZFJvdyk6IEdyaWRSb3cgfCBudWxsIHtcclxuICAgIGNvbnN0IGN1cnJlbnRMZXZlbCA9IHRoaXMuZ2V0TGV2ZWwobm9kZSk7XHJcblxyXG4gICAgaWYgKGN1cnJlbnRMZXZlbCA8IDEpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IHRoaXMudHJlZUNvbnRyb2whLmRhdGFOb2Rlcy5pbmRleE9mKG5vZGUpIC0gMTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgY29uc3QgY3VycmVudE5vZGUgPSB0aGlzLnRyZWVDb250cm9sIS5kYXRhTm9kZXNbaV07XHJcblxyXG4gICAgICBpZiAodGhpcy5nZXRMZXZlbChjdXJyZW50Tm9kZSkgPCBjdXJyZW50TGV2ZWwpIHtcclxuICAgICAgICByZXR1cm4gY3VycmVudE5vZGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqIFdoZXRoZXIgYWxsIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgbm9kZSBhcmUgc2VsZWN0ZWQuICovXHJcbiAgZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlOiBHcmlkUm93KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMudHJlZUNvbnRyb2wgfHwgIXRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSk7XHJcbiAgICBjb25zdCBkZXNjQWxsU2VsZWN0ZWQgPVxyXG4gICAgICBkZXNjZW5kYW50cy5sZW5ndGggPiAwICYmXHJcbiAgICAgIGRlc2NlbmRhbnRzLmV2ZXJ5KChjaGlsZCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24hLmlzU2VsZWN0ZWQoY2hpbGQpO1xyXG4gICAgICB9KTtcclxuICAgIHJldHVybiBkZXNjQWxsU2VsZWN0ZWQ7XHJcbiAgfVxyXG5cclxuICAvKiogV2hldGhlciBwYXJ0IG9mIHRoZSBkZXNjZW5kYW50cyBhcmUgc2VsZWN0ZWQgKi9cclxuICBkZXNjZW5kYW50c1BhcnRpYWxseVNlbGVjdGVkKG5vZGU6IEdyaWRSb3cpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy50cmVlQ29udHJvbCB8fCAhdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhub2RlKTtcclxuICAgIGxldCByZXN1bHQgPSBkZXNjZW5kYW50cy5zb21lKChjaGlsZCkgPT4gdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uIS5pc1NlbGVjdGVkKGNoaWxkKSk7XHJcbiAgICBpZiAodGhpcy5pc011bHRpcGxlU2VsZWN0aW9uKCkpIHtcclxuICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICF0aGlzLmRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjb25zdHJ1Y3RIZWFkZXIoKTogUHJvbWlzZTxTbWFydFRhYmxlSGVhZGVyW10+IHtcclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cyAmJiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cy5sZW5ndGgpIHtcclxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MubWFwKGFzeW5jIChncmlkUm93OiBHcmlkUm93KSA9PiB7XHJcbiAgICAgICAgICBsZXQgbmV3VWlBY3Rpb25zID0gZ3JpZFJvdy5hY3Rpb25zPy5maWx0ZXIoXHJcbiAgICAgICAgICAgICh1aUFjdGlvbjogYW55KSA9PiAhdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLmdldCh1aUFjdGlvbi5jb2RlISlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgaWYgKG5ld1VpQWN0aW9ucykge1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICBuZXdVaUFjdGlvbnMubWFwKGFzeW5jICh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBkZXNjcmlwdG9yOiBVaUFjdGlvbkRlc2NyaXB0b3IgPVxyXG4gICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNtYXJ0R3JpZCEudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZT8uZ2V0QWN0aW9uRGVzY3JpcHRvcih1aUFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdWlBY3Rpb24uY29kZSA/PyAnQ09ERScsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuTk9STUFMLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLnNldCh1aUFjdGlvbi5jb2RlISwgZGVzY3JpcHRvcik7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBvcmVkZXJlZERlc2NDb2x1bW5zID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlcmVkQ29sdW1uTmFtZXMubWFwKFxyXG4gICAgICAocHJvcGVydHlOYW1lOiBzdHJpbmcpID0+XHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5kZXNjcmlwdG9yIS5jb2x1bW5zIS5maW5kKFxyXG4gICAgICAgICAgKGNvbERlc2NyaXB0b3I6IEdyaWRDb2x1bW5NZXRhKSA9PiBjb2xEZXNjcmlwdG9yLnByb3BlcnR5TmFtZSA9PT0gcHJvcGVydHlOYW1lXHJcbiAgICAgICAgKVxyXG4gICAgKS5mbGF0TWFwKChmKSA9PiBmID8/IFtdKTtcclxuXHJcbiAgICBsZXQgaGVhZGVyID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIG9yZWRlcmVkRGVzY0NvbHVtbnMubWFwKGFzeW5jIChkZXNjQ29sdW1uOiBHcmlkQ29sdW1uTWV0YSk6IFByb21pc2U8U21hcnRUYWJsZUhlYWRlcj4gPT4ge1xyXG4gICAgICAgIGxldCBjdXN0b21UYWJsZUhlYWRlciA9IHRoaXMuc21hcnRHcmlkIS50YWJsZUNvbmZpZz8uY3VzdG9tU21hcnRUYWJsZUhlYWRlcnM/LmZpbmQoXHJcbiAgICAgICAgICAoaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSA9PiBoZWFkZXIucHJvcGVydHlOYW1lID09PSBkZXNjQ29sdW1uLnByb3BlcnR5TmFtZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IGZpbHRlckV4cHJlc3Npb25PcmRlckJ5SXRlbSA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldz8ub3JkZXJCeUxpc3Q/LmZpbmQoXHJcbiAgICAgICAgICAoZmlsdGVyRXhwcmVzc2lvbjogRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnkpID0+XHJcbiAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb24ucHJvcGVydHlOYW1lID09PSBkZXNjQ29sdW1uIS5wcm9wZXJ0eU5hbWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGxldCBvcmRlcjtcclxuICAgICAgICBsZXQgb3JkZXJOdW1iZXI7XHJcbiAgICAgICAgaWYgKGZpbHRlckV4cHJlc3Npb25PcmRlckJ5SXRlbSkge1xyXG4gICAgICAgICAgb3JkZXIgPVxyXG4gICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uT3JkZXJCeUl0ZW0ub3JkZXIgPT09IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5Lk9yZGVyRW51bS5Bc2NcclxuICAgICAgICAgICAgICA/IFNtYXJ0VGFibGVPcmRlci5BU0NcclxuICAgICAgICAgICAgICA6IFNtYXJ0VGFibGVPcmRlci5ERVNDO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VydmljZS5ncmlkTW9kZWwudmlldyEub3JkZXJCeUxpc3QubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBvcmRlck51bWJlciA9IHRoaXMuc2VydmljZS5ncmlkTW9kZWwudmlldyEub3JkZXJCeUxpc3QuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgIChmaWx0ZXI6IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5KSA9PiBmaWx0ZXIucHJvcGVydHlOYW1lID09PSBkZXNjQ29sdW1uIS5wcm9wZXJ0eU5hbWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgb3JkZXJOdW1iZXIrKztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3JpZ25hbExhYmVsID0gY3VzdG9tVGFibGVIZWFkZXI/LmxhYmVsID8/IGRlc2NDb2x1bW4ubGFiZWw7XHJcbiAgICAgICAgbGV0IGxhYmVsID0gJyc7XHJcbiAgICAgICAgaWYgKCFkZXNjQ29sdW1uLmhpZGVMYWJlbCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc21hcnRHcmlkIS50cmFuc2xhdGVTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIGxhYmVsID0gYXdhaXQgdGhpcy5zbWFydEdyaWQhLnRyYW5zbGF0ZVNlcnZpY2U/LmdldChvcmlnbmFsTGFiZWwpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGFiZWwgPSBvcmlnbmFsTGFiZWw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcHJvcGVydGllcyA9IGN1c3RvbVRhYmxlSGVhZGVyPy5wcm9wZXJ0aWVzO1xyXG4gICAgICAgIGlmICghcHJvcGVydGllcykge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBkZXNjQ29sdW1uLnR5cGVDbGFzcyA9PT0gJ2phdmEudGltZS5PZmZzZXREYXRlVGltZScgfHxcclxuICAgICAgICAgICAgZGVzY0NvbHVtbi50eXBlQ2xhc3MgPT09ICdqYXZhLnRpbWUuTG9jYWxEYXRlVGltZSdcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBsZXQgZGF0ZUZvcm1hdCA9IGRlc2NDb2x1bW4udHlwZUZvcm1hdCA/PyAneXl5eS5NTS5kZCBIOm1tJztcclxuICAgICAgICAgICAgcHJvcGVydGllcyA9IHtcclxuICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlLkRBVEVUSU1FLFxyXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGRlc2NDb2x1bW4udHlwZUNsYXNzID09PSAnamF2YS50aW1lLkxvY2FsRGF0ZScpIHtcclxuICAgICAgICAgICAgbGV0IGRhdGVGb3JtYXQgPSBkZXNjQ29sdW1uLnR5cGVGb3JtYXQgPz8gJ3l5eXkuTU0uZGQnO1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VGFibGVIZWFkZXJQcm9wZXJ0eVR5cGUuREFURSxcclxuICAgICAgICAgICAgICBkYXRlRm9ybWF0LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChkZXNjQ29sdW1uLnR5cGVDbGFzcyA9PT0gJ2phdmEudGltZS5Mb2NhbFRpbWUnKSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRlRm9ybWF0ID0gZGVzY0NvbHVtbi50eXBlRm9ybWF0ID8/ICdIOm1tJztcclxuICAgICAgICAgICAgcHJvcGVydGllcyA9IHtcclxuICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlLlRJTUUsXHJcbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZGVzY0NvbHVtbi50eXBlQ2xhc3MgPT09ICdqYXZhLmxhbmcuQm9vbGVhbicpIHtcclxuICAgICAgICAgICAgcHJvcGVydGllcyA9IHtcclxuICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlLkNIRUNLQk9YLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLmN1c3RvbVRhYmxlSGVhZGVyLFxyXG4gICAgICAgICAgbGFiZWw6IGxhYmVsLFxyXG4gICAgICAgICAgcHJvcGVydHlOYW1lOiAnZGF0YS4nICsgZGVzY0NvbHVtbi5wcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgICBvcmRlcixcclxuICAgICAgICAgIG9yZGVyTnVtYmVyLFxyXG4gICAgICAgICAgcHJvcGVydGllcyxcclxuICAgICAgICAgIHN0eWxlOiBkZXNjQ29sdW1uLnN0eWxlLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBjb21wbGVtZW50ID0gdGhpcy5zbWFydEdyaWQhLnRhYmxlQ29uZmlnPy5jdXN0b21TbWFydFRhYmxlSGVhZGVycz8uZmlsdGVyKFxyXG4gICAgICAodGFibGVIZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+XHJcbiAgICAgICAgIWhlYWRlci5zb21lKCh0SDogU21hcnRUYWJsZUhlYWRlcikgPT4gdEgucHJvcGVydHlOYW1lLmluY2x1ZGVzKHRhYmxlSGVhZGVyLnByb3BlcnR5TmFtZSkpXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChjb21wbGVtZW50KSB7XHJcbiAgICAgIGhlYWRlci5wdXNoKC4uLmNvbXBsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucz8uc2ltcGxlQnV0dG9ucykge1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucy5zaW1wbGVCdXR0b25zLmZvckVhY2goKHVpQWN0aW9uQ29kZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaGVhZGVyLnB1c2goe1xyXG4gICAgICAgICAgbGFiZWw6ICcnLFxyXG4gICAgICAgICAgcHJvcGVydHlOYW1lOiAnc2ltcGxlX2J1dHRvbnMnLFxyXG4gICAgICAgICAgYnV0dG9uczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogU21hcnRUYWJsZUJ1dHRvblR5cGUuUkFJU0VELFxyXG4gICAgICAgICAgICAgIGNhbGxiYWNrOiB0aGlzLmV4ZWN1dGUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAvLyBsYWJlbDogdGhpcy5idXR0b25UcmFuc2xhdG9yKHsgY29kZTogdWlBY3Rpb25Db2RlIH0pLFxyXG4gICAgICAgICAgICAgIGFyZ3M6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgY29kZTogdWlBY3Rpb25Db2RlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgICAgICAgICAgICAgc2hvd0J1dHRvbklmOiAocm93OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICByb3cuYWN0aW9ucy5zb21lKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uY29kZSA9PT0gdWlBY3Rpb25Db2RlO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWhlYWRlci5zb21lKChoZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+IGhlYWRlci5wcm9wZXJ0eU5hbWUgPT09ICdteV9tZW51JykpIHtcclxuICAgICAgaWYgKHRoaXMuc21hcnRHcmlkIS5vcHRpb25zPy5yb3dVaUFjdGlvblR5cGUgPT09IEdyaWRVaUFjdGlvblR5cGUuUE9QVVBfTUVOVSkge1xyXG4gICAgICAgIGxldCBpY29uID0gdGhpcy5ncmlkTWVudUljb24gPz8gJ21vcmVfdmVydCc7XHJcbiAgICAgICAgaGVhZGVyLnB1c2goe1xyXG4gICAgICAgICAgbGFiZWw6ICcnLFxyXG4gICAgICAgICAgcHJvcGVydHlOYW1lOiAnbXlfbWVudScsXHJcbiAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlQnV0dG9uVHlwZS5NRU5VLFxyXG4gICAgICAgICAgICAgIGNhbGxiYWNrOiB0aGlzLmV4ZWN1dGUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICBpY29uOiBpY29uLFxyXG4gICAgICAgICAgICAgIG1lbnVJdGVtQnV0dG9uc1Byb3BlcnR5TmFtZTogJ2FjdGlvbnMnLFxyXG4gICAgICAgICAgICAgIHRyYW5zbGF0b3I6IHRoaXMuYnV0dG9uVHJhbnNsYXRvci5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgIGFyZ3M6IFtdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICAgIGlzU29ydGFibGU6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlYWRlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBvbkNoYW5nZVBhZ2UoZXZlbnQ6IFBhZ2VFdmVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IG9mZnNldCA9IGV2ZW50LnBhZ2VTaXplICogZXZlbnQucGFnZUluZGV4O1xyXG4gICAgbGV0IGxpbWl0ID0gZXZlbnQucGFnZVNpemU7XHJcbiAgICB0aGlzLnBhZ2VJbmRleCA9IGV2ZW50LnBhZ2VJbmRleDtcclxuICAgIGF3YWl0IHRoaXMuc2VydmljZS5zZXRQYWdlKFxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXdVdWlkISxcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyLFxyXG4gICAgICBvZmZzZXQudG9TdHJpbmcoKSxcclxuICAgICAgbGltaXQudG9TdHJpbmcoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBvblByaW1lQ2hhbmdlUGFnZShldmVudDogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgb2Zmc2V0ID0gZXZlbnQuZmlyc3Q7XHJcbiAgICBsZXQgbGltaXQgPSBldmVudC5yb3dzO1xyXG4gICAgdGhpcy5wYWdlSW5kZXggPSBldmVudC5maXJzdDtcclxuICAgIGF3YWl0IHRoaXMuc2VydmljZS5zZXRQYWdlKFxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXdVdWlkISxcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyLFxyXG4gICAgICBvZmZzZXQudG9TdHJpbmcoKSxcclxuICAgICAgbGltaXQudG9TdHJpbmcoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZShhcmdzOiBhbnlbXSwgcm93OiBhbnksIHVpQWN0aW9uOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBfdWlBY3Rpb246IFVpQWN0aW9uO1xyXG5cclxuICAgIGlmICghdWlBY3Rpb24pIHtcclxuICAgICAgdWlBY3Rpb24gPSByb3cuYWN0aW9ucy5maWx0ZXIoKGFjdGlvbjogVWlBY3Rpb24pID0+IGFjdGlvbi5jb2RlID09PSBhcmdzWzBdLmNvZGUpWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIF91aUFjdGlvbiA9IHsgLi4udWlBY3Rpb24gfTtcclxuICAgIGlmIChfdWlBY3Rpb24uZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgX3VpQWN0aW9uLnBhcmFtcyA9IHtcclxuICAgICAgLi4udWlBY3Rpb24ucGFyYW1zLFxyXG4gICAgICBtb2RlbDogcm93LFxyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgdWlBY3Rpb25Nb2RlbDogYW55ID0ge1xyXG4gICAgICBzZXJ2aWNlVG9Vc2U6IHRoaXMuc21hcnRHcmlkIS5zZXJ2aWNlVG9Vc2UsXHJcbiAgICAgIHVpQWN0aW9uOiBfdWlBY3Rpb24sXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucz8udWlBY3Rpb25Nb2RlbENhbGxiYWNrKSB7XHJcbiAgICAgIHVpQWN0aW9uTW9kZWwgPSB0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucyEudWlBY3Rpb25Nb2RlbENhbGxiYWNrKHVpQWN0aW9uTW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc21hcnRHcmlkIS51aUFjdGlvblNlcnZpY2UudWlBY3Rpb25Nb2RlbCA9IHVpQWN0aW9uTW9kZWw7XHJcbiAgICB0aGlzLnNtYXJ0R3JpZCEudWlBY3Rpb25TZXJ2aWNlLmV4ZWN1dGUoX3VpQWN0aW9uLCB7XHJcbiAgICAgIHdpZGdldElkOiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZElkZW50aWZpZXIsXHJcbiAgICAgIG5vZGVJZDogcm93LmlkLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1dHRvblRyYW5zbGF0b3IodWlBY3Rpb246IFVpQWN0aW9uKTogVWlBY3Rpb25EZXNjcmlwdG9yIHtcclxuICAgIGxldCBkZXNjID0gdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLmdldCh1aUFjdGlvbi5jb2RlISk7XHJcbiAgICBpZiAoIWRlc2MpIHtcclxuICAgICAgZGVzYyA9IHtcclxuICAgICAgICB0aXRsZTogdWlBY3Rpb24uY29kZSEsXHJcbiAgICAgICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLkZMQVQsXHJcbiAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICh1aUFjdGlvbi5kZXNjcmlwdG9yKSB7XHJcbiAgICAgIHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZS5tZXJnZUFjdGlvbkRlc2NyaXB0b3JJbnRvQ2xpZW50KHVpQWN0aW9uLmRlc2NyaXB0b3IhLCBkZXNjKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkZXNjO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxheW91dERlZigpOiB0eXBlb2YgU21hcnRMYXlvdXREZWYge1xyXG4gICAgcmV0dXJuIFNtYXJ0TGF5b3V0RGVmO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2xpY2soZ3JpZFJvdzogR3JpZFJvdyk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVPbkNsaWNrKGdyaWRSb3cpO1xyXG4gIH1cclxuICBwdWJsaWMgb25Eb3VibGVDbGljayhncmlkUm93OiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZU9uQ2xpY2soZ3JpZFJvdyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU9uQ2xpY2soZ3JpZFJvdzogR3JpZFJvdyk6IHZvaWQge1xyXG4gICAgbGV0IGRlZmF1bHRSb3dBY3Rpb246IFVpQWN0aW9uIHwgdW5kZWZpbmVkO1xyXG4gICAgaWYgKHRoaXMuc2VydmljZS5ncmlkTW9kZWw/LmRlZmF1bHRSb3dBY3Rpb25zKSB7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLmRlZmF1bHRSb3dBY3Rpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRSb3dBY3Rpb25Db2RlID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5kZWZhdWx0Um93QWN0aW9uc1tpbmRleF07XHJcblxyXG4gICAgICAgIGRlZmF1bHRSb3dBY3Rpb24gPSBncmlkUm93LmFjdGlvbnMuZmluZChcclxuICAgICAgICAgICh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHVpQWN0aW9uLmNvZGUgPT09IGRlZmF1bHRSb3dBY3Rpb25Db2RlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoZGVmYXVsdFJvd0FjdGlvbikge1xyXG4gICAgICAgICAgdGhpcy5leGVjdXRlKFtdLCBncmlkUm93LCBkZWZhdWx0Um93QWN0aW9uKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBvblNlbGVjdChyb3dJZDogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmlzQmxvY2tlZCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5kZXYpIHtcclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHJvdyA9IHRoaXMuc2VydmljZS5ncmlkTW9kZWwucGFnZS5yb3dzPy5maW5kKFxyXG4gICAgICAgIChncmlkUm93OiBHcmlkUm93KSA9PiBncmlkUm93LmlkID09PSByb3dJZFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCB2aWV3Q29udGV4dENoYW5nZSA9IGF3YWl0IHRoaXMuc2VydmljZS5zZWxlY3QodGhpcy5zbWFydEdyaWQhLCByb3chKTtcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLnZpZXdDb250ZXh0U2VydmljZS5oYW5kbGVQZXJmb3JtQWN0aW9uUmVzcG9uc2Uodmlld0NvbnRleHRDaGFuZ2UpO1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgb25TZWxlY3RBbGwoc2VsZWN0ZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuaXNCbG9ja2VkID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCB2aWV3Q29udGV4dENoYW5nZSA9IGF3YWl0IHRoaXMuc2VydmljZS5zZWxlY3RBbGwodGhpcy5zbWFydEdyaWQhLCBzZWxlY3RlZCk7XHJcbiAgICB0aGlzLnNtYXJ0R3JpZCEudmlld0NvbnRleHRTZXJ2aWNlLmhhbmRsZVBlcmZvcm1BY3Rpb25SZXNwb25zZSh2aWV3Q29udGV4dENoYW5nZSk7XHJcblxyXG4gICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIG9uU2VsZWN0Um93cyhcclxuICAgIHNlbGVjdGVkSWRzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdLFxyXG4gICAgdW5zZWxlY3RlZElkczogKHN0cmluZyB8IHVuZGVmaW5lZClbXVxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5pc0Jsb2NrZWQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuZGV2KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgc2VsZWN0ZWQ6IHN0cmluZ1tdID0gc2VsZWN0ZWRJZHMuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBzdHJpbmcgPT4gaXRlbSAhPT0gdW5kZWZpbmVkKTtcclxuICAgICAgbGV0IHVuc2VsZWN0ZWQ6IHN0cmluZ1tdID0gdW5zZWxlY3RlZElkcy5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIHN0cmluZyA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xyXG4gICAgICBjb25zdCB2aWV3Q29udGV4dENoYW5nZSA9IGF3YWl0IHRoaXMuc2VydmljZS5zZWxlY3RSb3dzKFxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkISxcclxuICAgICAgICBzZWxlY3RlZCxcclxuICAgICAgICB1bnNlbGVjdGVkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS52aWV3Q29udGV4dFNlcnZpY2UuaGFuZGxlUGVyZm9ybUFjdGlvblJlc3BvbnNlKHZpZXdDb250ZXh0Q2hhbmdlKTtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBvblJvd1NlbGVjdChldmVudDogVGFibGVSb3dTZWxlY3RFdmVudCkge1xyXG4gICAgYXdhaXQgdGhpcy5vblNlbGVjdChldmVudC5kYXRhLmlkKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uUm93VW5zZWxlY3QoZXZlbnQ6IFRhYmxlUm93VW5TZWxlY3RFdmVudCkge1xyXG4gICAgYXdhaXQgdGhpcy5vblNlbGVjdChldmVudC5kYXRhLmlkKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uU2VsZWN0QWxsUm93KGV2ZW50OiBUYWJsZUhlYWRlckNoZWNrYm94VG9nZ2xlRXZlbnQpIHtcclxuICAgIGF3YWl0IHRoaXMub25TZWxlY3RBbGwoZXZlbnQuY2hlY2tlZCk7XHJcbiAgfVxyXG5cclxuICBlZGl0Q29sdW1ucygpOiB2b2lkIHtcclxuICAgIGxldCBkaWFsb2dEYXRhOiBTbWFydERpYWxvZ0RhdGEgPSB7XHJcbiAgICAgIGNvbnRlbnQ6IHtcclxuICAgICAgICB0aXRsZTogJ09zemxvcG9rIHRlc3RyZXN6YWLDoXNhJyxcclxuICAgICAgfSxcclxuICAgICAgc2l6ZToge30sXHJcbiAgICAgIGN1c3RvbUNvbXBvbmVudDogVGFibGVMYXlvdXREZWZpbmVyQ29tcG9uZW50LFxyXG4gICAgICBjdXN0b21Db21wb25lbnRJbnB1dHM6IHtcclxuICAgICAgICBjb25maWc6IHtcclxuICAgICAgICAgIHV1aWQ6IHRoaXMudXVpZCxcclxuICAgICAgICAgIGlkZW50aWZpZXI6IHRoaXMuc21hcnRHcmlkIS5ncmlkSWRlbnRpZmllcixcclxuICAgICAgICAgIHZpZXc6IHRoaXMuc2VydmljZS5ncmlkTW9kZWwudmlldyxcclxuICAgICAgICAgIHNlcnZpY2U6IHRoaXMuc2VydmljZSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuZGlhbG9nLm9wZW4oVGFibGVMYXlvdXREZWZpbmVyQ29tcG9uZW50LCB7IGRhdGE6IGRpYWxvZ0RhdGEgfSk7XHJcbiAgfVxyXG5cclxuICAvL1BSSU1FTkdcclxuICBjb2x1bW5zOiBHcmlkQ29sdW1uTWV0YVtdID0gW107XHJcbiAgbWVudUJ1dHRvbnMhOiBNZW51SXRlbVtdO1xyXG4gIEBWaWV3Q2hpbGQoJ21lbnUnKSBtZW51ITogTWVudTtcclxuICBvbk9wdGlvbnNDbGljayhldmVudDogRXZlbnQsIHJvdzogR3JpZFJvdykge1xyXG4gICAgdGhpcy5tZW51QnV0dG9ucyA9IFtdO1xyXG5cclxuICAgIGxldCBtZW51QWN0aW9ucyA9IHRoaXMuY2FsY3VsYXRlTWVudUFjdGlvbnMocm93KTtcclxuXHJcbiAgICBtZW51QWN0aW9ucz8ubWFwKGFzeW5jICh1aUFjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgIGxldCBkZXNjID0gYXdhaXQgdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLmdldEFjdGlvbkRlc2NyaXB0b3IodWlBY3Rpb24pO1xyXG5cclxuICAgICAgdGhpcy5tZW51QnV0dG9ucy5wdXNoKHtcclxuICAgICAgICBsYWJlbDogZGVzYz8udGl0bGUgPz8gdWlBY3Rpb24uY29kZSxcclxuICAgICAgICBpY29uOiBkZXNjPy5pY29uLFxyXG4gICAgICAgIGNvbW1hbmQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZXhlY3V0ZShbXSwgcm93LCB1aUFjdGlvbik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMubWVudS50b2dnbGUoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJldmlvdXNtdWx0aVNvcnRNZXRhPzogU29ydE1ldGFbXTtcclxuICBhc3luYyBncmlkU29ydChldmVudDogYW55KSB7XHJcbiAgICBsZXQgb3JkZXJCeUxpc3Q6IEFycmF5PEZpbHRlckV4cHJlc3Npb25PcmRlckJ5PiA9IFtdO1xyXG5cclxuICAgIGV2ZW50Lm11bHRpc29ydG1ldGE/Lm1hcCgobWV0YTogU29ydE1ldGEsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgaWYgKHRoaXMucHJldmlvdXNtdWx0aVNvcnRNZXRhICYmIHRoaXMucHJldmlvdXNtdWx0aVNvcnRNZXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnByZXZpb3VzbXVsdGlTb3J0TWV0YS5tYXAoKG9yZGVyKSA9PiB7XHJcbiAgICAgICAgICBpZiAobWV0YS5maWVsZCA9PT0gb3JkZXIuZmllbGQgJiYgb3JkZXIub3JkZXIgIT0gbWV0YS5vcmRlcikge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9yZGVyLm9yZGVyKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAtMTpcclxuICAgICAgICAgICAgICAgIGV2ZW50Lm11bHRpc29ydG1ldGEhLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNtdWx0aVNvcnRNZXRhID0gZXZlbnQubXVsdGlzb3J0bWV0YTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBldmVudC5tdWx0aXNvcnRtZXRhPy5tYXAoKG1ldGE6IGFueSkgPT4ge1xyXG4gICAgICBvcmRlckJ5TGlzdC5wdXNoKHtcclxuICAgICAgICBwcm9wZXJ0eU5hbWU6IG1ldGEuZmllbGQsXHJcbiAgICAgICAgb3JkZXI6XHJcbiAgICAgICAgICBtZXRhLm9yZGVyID09PSAxXHJcbiAgICAgICAgICAgID8gRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnlPcmRlckVudW0uQVNDXHJcbiAgICAgICAgICAgIDogbWV0YS5vcmRlciA9PT0gLTFcclxuICAgICAgICAgICAgPyBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeU9yZGVyRW51bS5ERVNDXHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuc2VydmljZS5zb3J0KHRoaXMuc21hcnRHcmlkISwge1xyXG4gICAgICBvcmRlckJ5TGlzdDogb3JkZXJCeUxpc3QsXHJcbiAgICAgIG9yZGVyZWRDb2x1bW5OYW1lczogdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5vcmRlcmVkQ29sdW1uTmFtZXMhLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGxhenlMb2FkKGV2ZW50PzogVGFibGVMYXp5TG9hZEV2ZW50KSB7XHJcbiAgICB0aGlzLnByZXZpb3VzbXVsdGlTb3J0TWV0YSA9IFtdO1xyXG4gICAgdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5vcmRlckJ5TGlzdC5tYXAoKG9yZGVyKSA9PiB7XHJcbiAgICAgIHRoaXMucHJldmlvdXNtdWx0aVNvcnRNZXRhPy5wdXNoKHtcclxuICAgICAgICBmaWVsZDogb3JkZXIucHJvcGVydHlOYW1lISxcclxuICAgICAgICBvcmRlcjogb3JkZXIub3JkZXIgPT09IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5T3JkZXJFbnVtLkFTQyA/IDEgOiAtMSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIGV2ZW50IS5tdWx0aVNvcnRNZXRhID0gdGhpcy5wcmV2aW91c211bHRpU29ydE1ldGE7XHJcbiAgfVxyXG5cclxuICBhc3luYyBoZWFkZXJDaGFuZ2UoZXZlbnQ6IE11bHRpU2VsZWN0Q2hhbmdlRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBncmlkVXBkYXRlRGF0YTogR3JpZFVwZGF0ZURhdGEgPSB7XHJcbiAgICAgIG9yZGVyQnlMaXN0OiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLm9yZGVyQnlMaXN0LFxyXG4gICAgICBvcmRlcmVkQ29sdW1uTmFtZXM6IHRoaXMuZ2V0T3JkZXJDb2x1bU5hbWVzKGV2ZW50LnZhbHVlISksXHJcbiAgICB9O1xyXG5cclxuICAgIGF3YWl0IHRoaXMuc2VydmljZS51cGRhdGUodGhpcy51dWlkISwgdGhpcy5zbWFydEdyaWQ/LmdyaWRJZGVudGlmaWVyISwgZ3JpZFVwZGF0ZURhdGEpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25Db2xPcmRlcihldmVudDogVGFibGVDb2x1bW5SZW9yZGVyRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBncmlkVXBkYXRlRGF0YTogR3JpZFVwZGF0ZURhdGEgPSB7XHJcbiAgICAgIG9yZGVyQnlMaXN0OiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLm9yZGVyQnlMaXN0LFxyXG4gICAgICBvcmRlcmVkQ29sdW1uTmFtZXM6IHRoaXMuZ2V0T3JkZXJDb2x1bU5hbWVzKGV2ZW50LmNvbHVtbnMhKSxcclxuICAgIH07XHJcbiAgICBhd2FpdCB0aGlzLnNlcnZpY2UudXBkYXRlKHRoaXMudXVpZCEsIHRoaXMuc21hcnRHcmlkIS5ncmlkSWRlbnRpZmllciEsIGdyaWRVcGRhdGVEYXRhKTtcclxuICB9XHJcblxyXG4gIGdldE9yZGVyQ29sdW1OYW1lcyhjb2x1bW5zOiBHcmlkQ29sdW1uTWV0YVtdKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2x1bTogR3JpZENvbHVtbk1ldGEpID0+IHtcclxuICAgICAgcmV0dXJuIGNvbHVtLnByb3BlcnR5TmFtZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sVmFsdWUoY29sOiBzdHJpbmcsIHJvdzogYW55KSB7XHJcbiAgICBpZiAocm93Lmljb25zW2NvbF0pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2wuaW5jbHVkZXMoJy4nKSkge1xyXG4gICAgICBsZXQgcGF0aEFycmF5ID0gY29sLnNwbGl0KCcuJyk7XHJcbiAgICAgIGxldCBjb2xWYWx1ZSA9IHJvdy5kYXRhO1xyXG4gICAgICBwYXRoQXJyYXkubWFwKChwYXRoKSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbFZhbHVlID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgY29sVmFsdWUgPSByb3cuZGF0YVtjb2xdO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb2xWYWx1ZSA9IGNvbFZhbHVlW3BhdGhdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBjb2xWYWx1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiByb3cuZGF0YVtjb2xdO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW1hZ2VSZXNvdXJjZUljb25zKHJvdzogYW55LCBoZWFkZXI6IHN0cmluZyk6IEltYWdlUmVzb3VyY2VbXSB7XHJcbiAgICBpZiAocm93Py5pY29ucykge1xyXG4gICAgICBsZXQgaWNvbkNvZGVzID0gcm93Py5pY29uc1toZWFkZXJdO1xyXG4gICAgICByZXR1cm4gaWNvbkNvZGVzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuICBnZXRJbWFnZVJlc291cmNlU3R5bGUocmVzb3VyY2U6IEltYWdlUmVzb3VyY2UpOiBhbnkge1xyXG4gICAgcmV0dXJuIHJlc291cmNlLnN0eWxlID8gcmVzb3VyY2Uuc3R5bGUgOiB7fTtcclxuICB9XHJcblxyXG4gIGdldFJvd0NvbHVtbkFjdGlvbihyb3c6IGFueSwgY29sdW1uTmFtZTogc3RyaW5nKTogVWlBY3Rpb25Nb2RlbFtdIHtcclxuICAgIHJldHVybiBTbWFydEdyaWRUb29sYmFyQWN0aW9uc1V0aWwuZ2V0QWN0aW9uTW9kZWxzRnJvbU1hcChcclxuICAgICAgdGhpcy5jZWxsVG9BY3Rpb25NYXAsXHJcbiAgICAgIHJvdyxcclxuICAgICAgY29sdW1uTmFtZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNob3dDZWxsVG9vbGJhcihyb3c6IGFueSwgY29sdW1uTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gU21hcnRHcmlkVG9vbGJhckFjdGlvbnNVdGlsLnNob3dUb29sYmFyKHJvdywgY29sdW1uTmFtZSk7XHJcbiAgfVxyXG5cclxuICBzaG91bGRTaG93T3B0aW9uc0J1dHRvbihyb3c6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIFNtYXJ0R3JpZFRvb2xiYXJBY3Rpb25zVXRpbC5zaG93TWVudShcclxuICAgICAgcm93LFxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnZpZXc/Lm9yZGVyZWRDb2x1bW5OYW1lcyFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVNZW51QWN0aW9ucyhyb3c6IEdyaWRSb3cpOiBVaUFjdGlvbltdIHtcclxuICAgIHJldHVybiBTbWFydEdyaWRUb29sYmFyQWN0aW9uc1V0aWwuY2FsY3VsYXRlTWVudUFjdGlvbnMoXHJcbiAgICAgIHJvdyxcclxuICAgICAgdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5vcmRlcmVkQ29sdW1uTmFtZXMhXHJcbiAgICApO1xyXG4gIH1cclxuICBjcmVhdGVDZWxsVG9BY3Rpb25NYXAoKSB7XHJcbiAgICBpZiAodGhpcy5jb21wTGliID09PSB0aGlzLmNvbXBvbmVudExpYnJhcnkuUFJJTUVORyAmJiB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnBhZ2Uucm93cykge1xyXG4gICAgICB0aGlzLmNlbGxUb0FjdGlvbk1hcCA9IFNtYXJ0R3JpZFRvb2xiYXJBY3Rpb25zVXRpbC5jYWxjdWxhdGVDZWxsVG9BY3Rpb25NYXAoXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC5wYWdlLnJvd3MhLFxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkLnNlcnZpY2VUb1VzZSxcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZC5ncmlkSWRlbnRpZmllclxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCJAaWYoY29tcExpYiA9PT0gY29tcG9uZW50TGlicmFyeS5QUklNRU5HKSB7XHJcblxyXG48ZGl2ICpuZ0lmPVwic21hcnRHcmlkXCIgY2xhc3M9XCJwcmltZVNtYXJ0R3JpZC1jb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwic21hcnQtZ3JpZC10b29sYmFyXCI+XHJcbiAgICA8c21hcnQtdWktYWN0aW9uLXRvb2xiYXIgI3Rvb2xiYXIgW2lkXT1cIidncmlkX25vdF9pbml0aWFsaXplZCdcIj48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG4gIDwvZGl2PlxyXG4gIDxwLXRhYmxlXHJcbiAgICAqbmdJZj1cIiFzbWFydEdyaWQubGF5b3V0RGVmIHx8IHNtYXJ0R3JpZC5sYXlvdXREZWYgPT09IGxheW91dERlZigpLlRBQkxFXCJcclxuICAgICNwVGFibGVcclxuICAgIFt2YWx1ZV09XCJzbWFydEdyaWQuZ3JpZE1vZGVsLnBhZ2Uucm93cyFcIlxyXG4gICAgKG9uU29ydCk9XCJncmlkU29ydCgkZXZlbnQpXCJcclxuICAgIFtjdXN0b21Tb3J0XT1cInRydWVcIlxyXG4gICAgW3NvcnRNb2RlXT1cIidtdWx0aXBsZSdcIlxyXG4gICAgW2xhenldPVwidHJ1ZVwiXHJcbiAgICAob25MYXp5TG9hZCk9XCJsYXp5TG9hZCgkZXZlbnQpXCJcclxuICAgIFtyZW9yZGVyYWJsZUNvbHVtbnNdPVwic21hcnRHcmlkLmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5zaG93RWRpdENvbHVtbnNcIlxyXG4gICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXHJcbiAgICAob25Db2xSZW9yZGVyKT1cIm9uQ29sT3JkZXIoJGV2ZW50KVwiXHJcbiAgICAob25Sb3dTZWxlY3QpPVwib25Sb3dTZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAob25Sb3dVbnNlbGVjdCk9XCJvblJvd1Vuc2VsZWN0KCRldmVudClcIlxyXG4gICAgW3NlbGVjdGlvbl09XCJzZWxlY3RlZFJvd3NcIlxyXG4gICAgKG9uSGVhZGVyQ2hlY2tib3hUb2dnbGUpPVwib25TZWxlY3RBbGxSb3coJGV2ZW50KVwiXHJcbiAgICBkYXRhS2V5PVwiaWRcIlxyXG4gICAgW2V4cGFuZGVkUm93S2V5c109XCJleHBhbmRlZFJvd3NcIlxyXG4gICAgKG9uUm93RXhwYW5kKT1cIm9tUHJpbWVOZ1Jvd0V4cGFuZCgkZXZlbnQpXCJcclxuICAgIFtyb3dFeHBhbmRNb2RlXT1cIidtdWx0aXBsZSdcIlxyXG4gID5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZUNhcHRpb25cIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic21hcnRHcmlkLmdyaWRNb2RlbC50aXRsZVwiIGNsYXNzPVwiY2FwdGlvblRpdGxlXCI+XHJcbiAgICAgICAgICB7eyBzbWFydEdyaWQuZ3JpZE1vZGVsLnRpdGxlIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNtYXJ0R3JpZC5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uc2hvd0VkaXRDb2x1bW5zXCI+XHJcbiAgICAgICAgICA8cC1tdWx0aVNlbGVjdFxyXG4gICAgICAgICAgICBkaXNwbGF5PVwiY2hpcFwiXHJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cInNtYXJ0R3JpZC5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uY29sdW1uc1wiXHJcbiAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbHVtbnNcIlxyXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zTGFiZWw9XCJ7MH0gY29sdW1ucyBzZWxlY3RlZFwiXHJcbiAgICAgICAgICAgIFtzdHlsZV09XCJ7ICdtaW4td2lkdGgnOiAnMjAwcHgnIH1cIlxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNob29zZSBDb2x1bW5zXCJcclxuICAgICAgICAgICAgKG9uQ2hhbmdlKT1cImhlYWRlckNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgPHRyPlxyXG4gICAgICAgIEBpZiAoc21hcnRHcmlkLmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5zaG93RWRpdENvbHVtbnMpIHtcclxuICAgICAgICA8dGhcclxuICAgICAgICAgICpuZ0lmPVwiaXNNdWx0aXBsZSAmJiAodGFibGVUeXBlID09PSAnY2hlY2tib3gnIHx8IHRhYmxlVHlwZSA9PT0gJ0NoZWNrQm94JylcIlxyXG4gICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNHJlbVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveCAvPlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPHRoXHJcbiAgICAgICAgICAqbmdJZj1cIiFpc011bHRpcGxlICYmICh0YWJsZVR5cGUgPT09ICdjaGVja2JveCcgfHwgdGFibGVUeXBlID09PSAnQ2hlY2tCb3gnKVwiXHJcbiAgICAgICAgICBzdHlsZT1cIndpZHRoOiA0cmVtXCJcclxuICAgICAgICA+PC90aD5cclxuICAgICAgICA8dGggW3BTb3J0YWJsZUNvbHVtbl09XCJjb2wucHJvcGVydHlOYW1lXCIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCIgcFJlb3JkZXJhYmxlQ29sdW1uPlxyXG4gICAgICAgICAgPHAtc29ydEljb24gW2ZpZWxkXT1cImNvbC5wcm9wZXJ0eU5hbWVcIiAvPlxyXG4gICAgICAgICAge3sgY29sLmxhYmVsIH19XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICA8dGhcclxuICAgICAgICAgICpuZ0lmPVwiaXNNdWx0aXBsZSAmJiAodGFibGVUeXBlID09PSAnY2hlY2tib3gnIHx8IHRhYmxlVHlwZSA9PT0gJ0NoZWNrQm94JylcIlxyXG4gICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNHJlbVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveCAvPlxyXG4gICAgICAgIDwvdGg+XHJcbiAgICAgICAgPHRoXHJcbiAgICAgICAgICAqbmdJZj1cIiFpc011bHRpcGxlICYmICh0YWJsZVR5cGUgPT09ICdjaGVja2JveCcgfHwgdGFibGVUeXBlID09PSAnQ2hlY2tCb3gnKVwiXHJcbiAgICAgICAgICBzdHlsZT1cIndpZHRoOiA0cmVtXCJcclxuICAgICAgICA+PC90aD5cclxuICAgICAgICA8dGggW3BTb3J0YWJsZUNvbHVtbl09XCJjb2wucHJvcGVydHlOYW1lXCIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICA8cC1zb3J0SWNvbiBbZmllbGRdPVwiY29sLnByb3BlcnR5TmFtZVwiIC8+XHJcbiAgICAgICAgICB7eyBjb2wubGFiZWwgfX1cclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgPHRoPlxyXG4gICAgICAgICAgPHNtYXJ0LXVpLWFjdGlvbi10b29sYmFyXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyVG9vbGJhclwiXHJcbiAgICAgICAgICAgICNoZWFkZXJUb29sYmFyXHJcbiAgICAgICAgICAgIFtpZF09XCInaGVhZGVyX25vdF9pbml0aWFsaXplZCdcIlxyXG4gICAgICAgICAgPjwvc21hcnQtdWktYWN0aW9uLXRvb2xiYXI+XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgICA8dGggKm5nSWY9XCJzbWFydEdyaWQuZXhwYW5kYWJsZVwiPiA8L3RoPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvdyBsZXQtZXhwYW5kZWQ9XCJleHBhbmRlZFwiPlxyXG4gICAgICA8dHIgW25nQ2xhc3NdPVwiZ2V0U3R5bGUocm93KVwiIChkYmxjbGljayk9XCJvbkRvdWJsZUNsaWNrKHJvdylcIiAqbmdJZj1cInJvdyAmJiByb3cuZGF0YVwiPlxyXG4gICAgICAgIDx0ZCAqbmdJZj1cImlzTXVsdGlwbGUgJiYgKHRhYmxlVHlwZSA9PT0gJ2NoZWNrYm94JyB8fCB0YWJsZVR5cGUgPT09ICdDaGVja0JveCcpXCI+XHJcbiAgICAgICAgICA8cC10YWJsZUNoZWNrYm94ICpuZ0lmPVwicm93LnNlbGVjdGFibGUgIT0gZmFsc2VcIiBbdmFsdWVdPVwicm93XCIgLz5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZCAqbmdJZj1cIiFpc011bHRpcGxlICYmICh0YWJsZVR5cGUgPT09ICdjaGVja2JveCcgfHwgdGFibGVUeXBlID09PSAnQ2hlY2tCb3gnKVwiPlxyXG4gICAgICAgICAgPHAtdGFibGVSYWRpb0J1dHRvbiBbdmFsdWVdPVwicm93XCIgLz5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sIG9mIHNtYXJ0R3JpZD8uZ3JpZE1vZGVsPy52aWV3Py5vcmRlcmVkQ29sdW1uTmFtZXNcIj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJyb3cuaWNvbnNbY29sXVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic21hcnQtdGFibGUtaWNvbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpciBvZiBnZXRJbWFnZVJlc291cmNlSWNvbnMocm93LCBjb2wpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIHBUb29sdGlwPVwie3sgaXIudG9vbHRpcD8udG9vbHRpcCB9fVwiXHJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJSaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldEltYWdlUmVzb3VyY2VTdHlsZShpcilcIlxyXG4gICAgICAgICAgICAgICAgICA+PHNtYXJ0LWljb24gW2ljb25dPVwiaXIuaWRlbnRpZmllciFcIiBbY29sb3JdPVwiaXIuY29sb3IhXCI+IDwvc21hcnQtaWNvblxyXG4gICAgICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dDZWxsVG9vbGJhcihyb3csIGNvbClcIj5cclxuICAgICAgICAgICAgPHNtYXJ0LXVpLWFjdGlvbi10b29sYmFyXHJcbiAgICAgICAgICAgICAgW3VpQWN0aW9uTW9kZWxzXT1cImdldFJvd0NvbHVtbkFjdGlvbihyb3csIGNvbClcIlxyXG4gICAgICAgICAgICA+PC9zbWFydC11aS1hY3Rpb24tdG9vbGJhcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcm93Lmljb25zW2NvbF1cIiBbaW5uZXJIdG1sXT1cImdldENvbFZhbHVlKGNvbCwgcm93KVwiPiA8L2Rpdj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWJ1dHRvblwiPlxyXG4gICAgICAgICAgICBAaWYoc2hvd0NlbGxUb29sYmFyKHJvdywgZGVmYXVsdEFjdGlvblRvb2xiYXJJZCkpe1xyXG4gICAgICAgICAgICA8c21hcnQtdWktYWN0aW9uLXRvb2xiYXJcclxuICAgICAgICAgICAgICBbdWlBY3Rpb25Nb2RlbHNdPVwiZ2V0Um93Q29sdW1uQWN0aW9uKHJvdywgZGVmYXVsdEFjdGlvblRvb2xiYXJJZClcIlxyXG4gICAgICAgICAgICA+PC9zbWFydC11aS1hY3Rpb24tdG9vbGJhcj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8cC1idXR0b25cclxuICAgICAgICAgICAgICBbcm91bmRlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cInNob3VsZFNob3dPcHRpb25zQnV0dG9uKHJvdylcIlxyXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uT3B0aW9uc0NsaWNrKCRldmVudCwgcm93KVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c21hcnQtaWNvbiBpY29uPVwiZWxsaXBzaXMtdlwiPjwvc21hcnQtaWNvbj5cclxuICAgICAgICAgICAgPC9wLWJ1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkICpuZ0lmPVwic21hcnRHcmlkLmV4cGFuZGFibGVcIj5cclxuICAgICAgICAgIDxwLWJ1dHRvblxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgcFJpcHBsZVxyXG4gICAgICAgICAgICBbcFJvd1RvZ2dsZXJdPVwicm93XCJcclxuICAgICAgICAgICAgW3RleHRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgW3JvdW5kZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFtpY29uXT1cImV4cGFuZGVkID8gJ3BpIHBpLWNoZXZyb24tZG93bicgOiAncGkgcGktY2hldnJvbi11cCdcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cInNtYXJ0R3JpZC5leHBhbmRhYmxlXCIgcFRlbXBsYXRlPVwicm93ZXhwYW5zaW9uXCIgbGV0LXJvdz5cclxuICAgICAgPHRyPlxyXG4gICAgICAgIDx0ZCBjb2xzcGFuPVwiMTAwJVwiPlxyXG4gICAgICAgICAgPGxpYi1nZW5lcmljLWNvbXBvbmVudFxyXG4gICAgICAgICAgICBbcm93RGF0YV09XCJyb3dcIlxyXG4gICAgICAgICAgICBbZXhwYW5kZWRDb21wb25lbnRdPVwidGhpcy5zbWFydEdyaWQuZXhwYW5kZWRDb21wb25lbnRcIlxyXG4gICAgICAgICAgPjwvbGliLWdlbmVyaWMtY29tcG9uZW50PlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvdHI+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvcC10YWJsZT5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cInNtYXJ0R3JpZC5sYXlvdXREZWYgPT09IGxheW91dERlZigpLkNBUkQgJiYgc21hcnRHcmlkLmRhdGFMYXlvdXREZWZcIlxyXG4gICAgY2xhc3M9XCJjYXJkcy1jb250YWluZXJcIlxyXG4gICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAnZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zJzpcclxuICAgICAgICBzbWFydEdyaWQubnVtYmVyT2ZDb2x1bW4gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgPyAncmVwZWF0KCcgKyBzbWFydEdyaWQubnVtYmVyT2ZDb2x1bW4gKyAnLCAxZnIpJ1xyXG4gICAgICAgICAgOiAnJ1xyXG4gICAgfVwiXHJcbiAgPlxyXG4gICAgPGFwcC1zbWFydC1ncmlkLWNhcmRcclxuICAgICAgY2xhc3M9XCJzbWFydEdyaWQtY2FyZC1jb250YWluZXJcIlxyXG4gICAgICAqbmdGb3I9XCJsZXQgdGFzayBvZiBzbWFydEdyaWQuZ3JpZE1vZGVsLnBhZ2Uucm93c1wiXHJcbiAgICAgIFtpdGVtXT1cInRhc2tcIlxyXG4gICAgICBbc21hcnRHcmlkXT1cInNtYXJ0R3JpZFwiXHJcbiAgICAgIFtvblNlbGVjdF09XCJvblNlbGVjdC5iaW5kKHRoaXMpXCJcclxuICAgID48L2FwcC1zbWFydC1ncmlkLWNhcmQ+XHJcbiAgPC9kaXY+XHJcbiAgPHAtcGFnaW5hdG9yXHJcbiAgICAqbmdJZj1cInNtYXJ0R3JpZC5wYWdpbmF0b3JcIlxyXG4gICAgW2ZpcnN0XT1cInBhZ2VJbmRleCFcIlxyXG4gICAgW3RvdGFsUmVjb3Jkc109XCJsZW5ndGghXCJcclxuICAgIFtyb3dzXT1cInBhZ2VTaXplXCJcclxuICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcclxuICAgIChvblBhZ2VDaGFuZ2UpPVwib25QcmltZUNoYW5nZVBhZ2UoJGV2ZW50KVwiXHJcbiAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxyXG4gICAgZHJvcGRvd25BcHBlbmRUbz1cImJvZHlcIlxyXG4gIC8+XHJcbiAgPHAtbWVudSAjbWVudSBbbW9kZWxdPVwibWVudUJ1dHRvbnNcIiBbcG9wdXBdPVwidHJ1ZVwiIGFwcGVuZFRvPVwiYm9keVwiPiA8L3AtbWVudT5cclxuPC9kaXY+XHJcbn1AZWxzZSB7XHJcbjxkaXYgKm5nSWY9XCJzbWFydEdyaWRcIiBjbGFzcz1cInNtYXJ0R3JpZC1jb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwic21hcnQtZ3JpZC10b29sYmFyXCI+XHJcbiAgICA8c21hcnQtdWktYWN0aW9uLXRvb2xiYXIgI3Rvb2xiYXIgW2lkXT1cIidncmlkX25vdF9pbml0aWFsaXplZCdcIj48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAoY2xpY2spPVwiZWRpdENvbHVtbnMoKVwiXHJcbiAgICAgIG1hdC1taW5pLWZhYlxyXG4gICAgICBjb2xvcj1cInRleHQtcHJpbWFyeVwiXHJcbiAgICAgICpuZ0lmPVwic21hcnRHcmlkLnNob3dFZGl0Q29sdW1uc1wiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvbiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgYXJpYS1sYWJlbD1cIkNvbHVtbnNcIiBjbGFzcz1cInNtYXJ0LWdyaWQtZWRpdC1pY29uXCJcclxuICAgICAgICA+dmlld19jb2x1bW5zPC9tYXQtaWNvblxyXG4gICAgICA+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8IS0tIDxkaXYgW25nQ2xhc3NdPVwiaXNCbG9ja2VkID8gJ2Jsb2NrZWQnIDogJydcIj48L2Rpdj4gLS0+XHJcbiAgPGRpdiBjbGFzcz1cInNtYXJ0R3JpZENvbnRlbnRcIj5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzbWFydEdyaWQuc2hvd1Jlc3VsdENvdW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNtYXJ0R3JpZC1kYXRhLW51bWJlclwiPlxyXG4gICAgICAgICAge3sgc21hcnRHcmlkLmdyaWRNb2RlbC50b3RhbFJvd0NvdW50IH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInNtYXJ0LWdyaWQtdGFibGUtY29udGFpbmVyXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjdGFibGU+PC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJzbWFydEdyaWQubGF5b3V0RGVmID09PSBsYXlvdXREZWYoKS5FWFBBTkRBQkxFXCI+XHJcbiAgICAgIDxzbWFydC1leHBhbmRhYmxlLXNlY3Rpb25cclxuICAgICAgICAjZ3JpZEV4cGFuZGFibGVTZWN0aW9uXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGV4cGFuZGFibGVTZWN0aW9uIG9mIGV4cGFuZGFibGVTZWN0aW9uc1wiXHJcbiAgICAgICAgW2RhdGFdPVwiZXhwYW5kYWJsZVNlY3Rpb25cIlxyXG4gICAgICA+PC9zbWFydC1leHBhbmRhYmxlLXNlY3Rpb24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJzbWFydEdyaWQubGF5b3V0RGVmID09PSBsYXlvdXREZWYoKS5DQVJEICYmIHNtYXJ0R3JpZC5kYXRhTGF5b3V0RGVmXCJcclxuICAgICAgY2xhc3M9XCJjYXJkcy1jb250YWluZXJcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6XHJcbiAgICAgICAgICBzbWFydEdyaWQubnVtYmVyT2ZDb2x1bW4gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/ICdyZXBlYXQoJyArIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiArICcsIDFmciknXHJcbiAgICAgICAgICAgIDogJydcclxuICAgICAgfVwiXHJcbiAgICA+XHJcbiAgICAgIDxhcHAtc21hcnQtZ3JpZC1jYXJkXHJcbiAgICAgICAgY2xhc3M9XCJzbWFydEdyaWQtY2FyZC1jb250YWluZXJcIlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCB0YXNrIG9mIHNtYXJ0R3JpZC5ncmlkTW9kZWwucGFnZS5yb3dzXCJcclxuICAgICAgICBbaXRlbV09XCJ0YXNrXCJcclxuICAgICAgICBbc21hcnRHcmlkXT1cInNtYXJ0R3JpZFwiXHJcbiAgICAgICAgW29uU2VsZWN0XT1cIm9uU2VsZWN0LmJpbmQodGhpcylcIlxyXG4gICAgICA+PC9hcHAtc21hcnQtZ3JpZC1jYXJkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwic21hcnRHcmlkLmxheW91dERlZiA9PT0gbGF5b3V0RGVmKCkuVFJFRSAmJiB0cmVlQ29udHJvbFwiXHJcbiAgICAgIGNsYXNzPVwidHJlZS1jb250YWluZXJcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6XHJcbiAgICAgICAgICBzbWFydEdyaWQubnVtYmVyT2ZDb2x1bW4gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/ICdyZXBlYXQoJyArIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiArICcsIDFmciknXHJcbiAgICAgICAgICAgIDogJydcclxuICAgICAgfVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtdHJlZSBbZGF0YVNvdXJjZV09XCJ0cmVlRGF0YVNvdXJjZSFcIiBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2whXCI+XHJcbiAgICAgICAgPG1hdC10cmVlLW5vZGVcclxuICAgICAgICAgICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlXCJcclxuICAgICAgICAgIG1hdFRyZWVOb2RlVG9nZ2xlXHJcbiAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ0luZGVudD1cIjI0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlZCBjbGFzcz1cInRyZWUtYnV0dG9uXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tsaXN0LWxlYWYtbm9kZVwiXHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cInRyZWVDaGVja2xpc3RTZWxlY3Rpb24/LmlzU2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cInRyZWVOb2RlU2VsZWN0aW9uVG9nZ2xlKG5vZGUpXCJcclxuICAgICAgICAgICAgPnt7IGdldFRyZWVJdGVtKG5vZGUpIH19PC9tYXQtY2hlY2tib3hcclxuICAgICAgICAgID5cclxuICAgICAgICA8L21hdC10cmVlLW5vZGU+XHJcblxyXG4gICAgICAgIDxtYXQtdHJlZS1ub2RlXHJcbiAgICAgICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogaGFzQ2hpbGRcIlxyXG4gICAgICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nXHJcbiAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmdJbmRlbnQ9XCIyNFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgbWF0VHJlZU5vZGVUb2dnbGVcclxuICAgICAgICAgICAgY2xhc3M9XCJ0cmVlLWJ1dHRvblwiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1RvZ2dsZSAnICsgbm9kZS5pdGVtXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPlxyXG4gICAgICAgICAgICAgIHt7IHRyZWVDb250cm9sIS5pc0V4cGFuZGVkKG5vZGUpID8gJ2V4cGFuZF9tb3JlJyA6ICdjaGV2cm9uX3JpZ2h0JyB9fVxyXG4gICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cInRyZWVDaGVja2xpc3RTZWxlY3Rpb24/LmlzU2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJkZXNjZW5kYW50c1BhcnRpYWxseVNlbGVjdGVkKG5vZGUpXCJcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0cmVlTm9kZVNlbGVjdGlvblRvZ2dsZShub2RlKVwiXHJcbiAgICAgICAgICAgID57eyBnZXRUcmVlSXRlbShub2RlKSB9fTwvbWF0LWNoZWNrYm94XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxyXG4gICAgICA8L21hdC10cmVlPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxtYXQtcGFnaW5hdG9yXHJcbiAgICAqbmdJZj1cInNtYXJ0R3JpZC5wYWdpbmF0b3IgJiYgIXRyZWVDb250cm9sXCJcclxuICAgICNwYWdpbmF0b3JcclxuICAgIFtsZW5ndGhdPVwibGVuZ3RoXCJcclxuICAgIFtwYWdlSW5kZXhdPVwicGFnZUluZGV4XCJcclxuICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXHJcbiAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXHJcbiAgICAocGFnZSk9XCJvbkNoYW5nZVBhZ2UoJGV2ZW50KVwiXHJcbiAgPjwvbWF0LXBhZ2luYXRvcj5cclxuPC9kaXY+XHJcbn1cclxuIl19
|