@rangertechnologies/ngnxt 2.1.149 → 2.1.151
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/environments/version.mjs +2 -2
- package/esm2022/lib/components/datatable/datatable.component.mjs +9 -9
- package/esm2022/lib/components/file-upload/file-upload.component.mjs +1 -2
- package/esm2022/lib/pages/booklet/booklet.component.mjs +18 -7
- package/esm2022/lib/pages/builder/element/element.component.mjs +4 -4
- package/esm2022/lib/pages/questionbook/questionbook.component.mjs +23 -5
- package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +3 -3
- package/fesm2022/rangertechnologies-ngnxt.mjs +52 -24
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/lib/pages/booklet/booklet.component.d.ts +4 -1
- package/lib/pages/questionbook/questionbook.component.d.ts +4 -2
- package/package.json +1 -1
- package/rangertechnologies-ngnxt-2.1.151.tgz +0 -0
- package/rangertechnologies-ngnxt-2.1.149.tgz +0 -0
|
@@ -242,9 +242,9 @@ export class NxtDatatable {
|
|
|
242
242
|
this.isPagination === undefined || this.isPagination === true ? this.isPagination = true : this.isPagination = false;
|
|
243
243
|
this.isNosIndicator === undefined || this.isNosIndicator === true ? this.isNosIndicator = true : this.isNosIndicator = false;
|
|
244
244
|
this.isEditable === undefined || this.isEditable === false ? this.isEditable = false : this.isEditable = true;
|
|
245
|
-
this.headerLabels = this.from !== 'formBuilder' ? this.columns
|
|
245
|
+
this.headerLabels = this.from !== 'formBuilder' ? this.columns?.map(column => column.label) : this.headerLabels;
|
|
246
246
|
this.currentHeaderLabels = this.headerLabels;
|
|
247
|
-
this.displayedColumns = this.from !== 'formBuilder' ? this.columns
|
|
247
|
+
this.displayedColumns = this.from !== 'formBuilder' ? this.columns?.map(column => column.fieldName) : this.displayedColumns;
|
|
248
248
|
this.currentDisplayedColumns = this.displayedColumns;
|
|
249
249
|
// SKS20MAR25 Check if the displycolumn's have a summary column
|
|
250
250
|
if (this.summaryColumns && this.summaryColumns.length > 0) {
|
|
@@ -349,7 +349,7 @@ export class NxtDatatable {
|
|
|
349
349
|
this.multipleFilterArray = this.multipleFilter;
|
|
350
350
|
}
|
|
351
351
|
// Create a temporary filtered array that excludes any column with '['
|
|
352
|
-
const tempFilterColumns = this.
|
|
352
|
+
const tempFilterColumns = this.displayedColumns.filter((key) => !key.includes('['));
|
|
353
353
|
if (tempFilterColumns?.length > 0) {
|
|
354
354
|
const filtObjs = {};
|
|
355
355
|
// Initialize empty Set for each filtered column
|
|
@@ -524,9 +524,9 @@ export class NxtDatatable {
|
|
|
524
524
|
this.isPagination === undefined || this.isPagination === true ? this.isPagination = true : this.isPagination = false;
|
|
525
525
|
this.isNosIndicator === undefined || this.isNosIndicator === true ? this.isNosIndicator = true : this.isNosIndicator = false;
|
|
526
526
|
this.isEditable === undefined || this.isEditable === false ? this.isEditable = false : this.isEditable = true;
|
|
527
|
-
this.headerLabels = this.from !== 'formBuilder' ? this.columns
|
|
527
|
+
this.headerLabels = this.from !== 'formBuilder' ? this.columns?.map(column => column.label) : this.headerLabels;
|
|
528
528
|
this.currentHeaderLabels = this.headerLabels;
|
|
529
|
-
this.displayedColumns = this.from !== 'formBuilder' ? this.columns
|
|
529
|
+
this.displayedColumns = this.from !== 'formBuilder' ? this.columns?.map(column => column.fieldName) : this.displayedColumns;
|
|
530
530
|
this.currentDisplayedColumns = this.displayedColumns;
|
|
531
531
|
if (this.summaryColumns && this.summaryColumns.length > 0) {
|
|
532
532
|
this.displayedColumns = [...this.displayedColumns, ...this.summaryColumns.map(column => column.fieldName)];
|
|
@@ -603,7 +603,7 @@ export class NxtDatatable {
|
|
|
603
603
|
this.multipleFilterArray = this.multipleFilter;
|
|
604
604
|
}
|
|
605
605
|
// Create a temporary filtered array that excludes any column with '['
|
|
606
|
-
const tempFilterColumns = this.
|
|
606
|
+
const tempFilterColumns = this.displayedColumns.filter((key) => !key.includes('['));
|
|
607
607
|
if (tempFilterColumns?.length > 0) {
|
|
608
608
|
const filtObjs = {};
|
|
609
609
|
// Initialize empty Set for each filtered column
|
|
@@ -1416,7 +1416,7 @@ export class NxtDatatable {
|
|
|
1416
1416
|
}
|
|
1417
1417
|
}
|
|
1418
1418
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtDatatable, deps: [{ token: i0.Renderer2 }, { token: i1.DataService }, { token: i2.ChangeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1419
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NxtDatatable, isStandalone: true, selector: "nxt-datatable", inputs: { data: "data", tableFilterData: "tableFilterData", columns: "columns", withCheckBox: "withCheckBox", searchBar: "searchBar", tableSaveButton: "tableSaveButton", stickyColumn: "stickyColumn", tableWidth: "tableWidth", actionColumHeader: "actionColumHeader", actionButton: "actionButton", title: "title", isButtons: "isButtons", buttonArray: "buttonArray", tableId: "tableId", isEditRow: "isEditRow", isDeleteRow: "isDeleteRow", addInlineRecord: "addInlineRecord", searchConfigs: "searchConfigs", direction: "direction", pagination: "pagination", actionButtonArray: "actionButtonArray", multipleFilter: "multipleFilter", isPagination: "isPagination", isNosIndicator: "isNosIndicator", isEditable: "isEditable", from: "from", question: "question", rowTextSize: "rowTextSize", rowTextColor: "rowTextColor", apiMeta: "apiMeta", summaryRows: "summaryRows", summaryColumns: "summaryColumns", isLoading: "isLoading", tableConfig: "tableConfig", tableParams: "tableParams", listViews: "listViews" }, outputs: { tableRowClick: "tableRowClick", onEditData: "onEditData", saveButtonData: "saveButtonData", onDeleteData: "onDeleteData", buttonEmit: "buttonEmit", hyperLinkEmit: "hyperLinkEmit", sideNavEmit: "sideNavEmit", actionButtonEmit: "actionButtonEmit", columnSelected: "columnSelected", removeColumn: "removeColumn", valueChange: "valueChange", selectedValues: "selectedValues", fileEmit: "fileEmit", NxtTableParamsEmit: "NxtTableParamsEmit", NxtTableFilterEmit: "NxtTableFilterEmit", NxtTableEmit: "NxtTableEmit" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "tableContainer", first: true, predicate: ["tableContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"table-layout\" [id]=\"tableId\" [ngStyle]=\"{'padding-top': '1px', 'width': tableWidth}\" [dir]=\"direction\">\n <div> <!-- class=\"m-4\" -->\n <div *ngIf=\"title\" class=\"d-flex justify-content-center table-title align-text-center pt-3\">\n {{title}}\n </div>\n <div *ngIf=\"isNosIndicator || searchBar || isButtons\" class=\"flex justify-content-between\" style=\"padding-bottom: 20px;\">\n <div class=\"flex\">\n <!-- SKS26APR25 List View Filter -->\n <app-list-view-filter *ngIf=\"listViews && listViews.length > 0\"\n [listViews]=\"listViews\"\n [selectedView]=\"selectedView\"\n [displayedColumns] = 'displayedColumns'\n [tableFilterArray]=\"tableFilterArray\"\n (listViewEmit)=\"listViewEmit($event)\">\n </app-list-view-filter>\n <div *ngIf=\"(!listViews || listViews.length === 0) && isNosIndicator\" class=\"noOfRec\" style=\"display: flex; align-items: flex-end;\">\n <p style=\"font-weight: 500; margin-right: 5px; margin-bottom: 0px;\">\n Nos </p>\n <div style=\"color: rgb(43, 87, 249);\">{{totalRecords || totalCount}}</div>\n </div>\n </div>\n\n <div class=\"flex\" style=\"align-items: center;\">\n <div *ngIf=\"searchBar\" class=\"search\">\n <div class=\"flex search-bar\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\"\n stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M21.6295 20.1667L19.7271 18.3333\" stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <input type=\"text\" placeholder=\"Search\"\n (keyup)=\"searchConfigs ? emptySearch($event.target.value) : applyFilter($event.target.value)\"\n [value]=\"searchBoxValue || ''\" #input>\n <svg *ngIf=\"searchConfigs && searchBar\" class=\"configSearch\" (click)=\"onSearch(input.value)\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 5H20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M14 8H17\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M21 11.5C21 16.75 16.75 21 11.5 21C6.25 21 2 16.75 2 11.5C2 6.25 6.25 2 11.5 2\"\n stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M22 22L20 20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <div class=\"flex\" *ngIf=\"isButtons\" style=\"padding-left: 7px; gap: 7px;\">\n <div class=\"flex\" *ngFor=\"let button of buttonArray\">\n <nxt-button class=\"data-table-fsbtn\"\n (buttonClickEmit)=\"(button.type === 'group' || button.type === 'dropdown') ? commonButtonClick($event) : commonButtonClick(button)\"\n [buttonType]=\"button.class\" [buttonValue]=\"button.name\" [buttonConfig]=\"button.buttonConfig\"\n [type]=\"button.type\" class=\"ms-2 me-2\" [fcBtnIconLeftSrc]=\"button.fcBtnIconLeftSrc\"\n [isImageSvg]=\"button.isImageSvg\">\n </nxt-button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"table-margin\">\n <div class=\"table-container\" [ngStyle]=\"{ height: isPagination ? '450px' : 'auto' }\" #tableContainer\n (scroll)=\"onScroll(tableContainer)\">\n <ng-container>\n <div class=\"custom-table\">\n <!--SKS15FEB25 Table Header -->\n <div class=\"table-header\" [ngClass]=\"{ 'shadow': isScrolled }\">\n <div class=\"table-row\">\n <!--SKS15FEB25 Checkbox Column -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column head-color\">\n <input type=\"checkbox\" (click)=\"$event.stopPropagation()\" (change)=\"masterToggle()\"\n [checked]=\"selection?.hasValue()\"\n [indeterminate]=\"selection?.hasValue() && !isAllSelected()\"\n class=\"custom-checkbox\">\n </div>\n\n <!--SKS15FEB25 Data Columns -->\n <div *ngFor=\"let column of currentDisplayedColumns; let i = index\"\n class=\"table-cell tableHeader head-color\"\n [class.sticky-column]=\"i === (stickyCondition - 1)\"\n [class.active-column]=\"activeColumn === column\"\n [class.selected-column]=\"isEditable && selectedColumn === column\"\n (click)=\"$event.stopPropagation(); onColumnClick(column); currentSortColumns.includes(column) ? sortData(column) : ''\"\n (mouseenter)=\"hoveredColumn = column\" (mouseleave)=\"hoveredColumn = null\">\n <div class=\"columnDiv\">\n <div class=\"column-header\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"isEditable && selectedColumn === column\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(column)\">\n \u2715\n </div>\n <div class=\"ellipsis\"\n [title]=\"currentHeaderLabels[currentDisplayedColumns.indexOf(column)]\">\n {{ currentHeaderLabels[currentDisplayedColumns.indexOf(column)] }}\n </div>\n <div class=\"position-relative\">\n <svg *ngIf=\"currentFilterColumns.includes(column)\" (click)=\"$event.stopPropagation(); filter(column)\"\n style=\"padding-right: 2px;\" width=\"12\" height=\"11\"\n viewBox=\"0 0 12 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10.75 1.25H0.75L4.75 5.71722V8.80556L6.75 9.75V5.71722L10.75 1.25Z\"\n stroke=\"#242533\" stroke-width=\"1.2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <!--SKS15FEB25 Red dot for active filter -->\n <circle\n *ngIf=\"filterDataArray && filterDataArray[column]?.length > 0\"\n cx=\"9\" cy=\"2\" r=\"2.5\" fill=\"red\"></circle>\n </svg>\n <div *ngIf=\"currentSortColumns.includes(column)\" class=\"sort-indicators\">\n <span *ngIf=\"currentSortColumn === column\" class=\"sort-direction\">\n {{ currentSortDirection === 'asc' ? '\u2191' : currentSortDirection\n === 'desc' ? '\u2193' : '' }}\n </span>\n <span\n *ngIf=\"hoveredColumn === column && currentSortColumn !== column\"\n class=\"sort-direction\">\n \u2191\n </span>\n </div>\n <div *ngIf=\"searchFilter && column === selectedFilter\"\n class=\"search-component position-absolute\" (click)=\"$event.stopPropagation();\">\n <div class=\"card\">\n <div class=\"content\">\n <div class=\"flex\">\n <div class=\"fsearch\" [class.resized]=\"isResized\">\n <div class=\"fsearch-bar\">\n <svg class=\"searchSvg\" width=\"18\" height=\"20\"\n viewBox=\"0 0 24 22\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\"\n stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M21.6295 20.1667L19.7271 18.3333\"\n stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <input class=\"width-100\" type=\"text\"\n placeholder=\"Search\"\n [(ngModel)]=\"searchText\"\n class=\"searchinput\">\n </div>\n </div>\n <svg *ngIf=\"isResized\" (click)=\"closefilter()\"\n class=\"close-icon\" width=\"24\" height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9.16998 14.83L14.83 9.17001\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M14.83 14.83L9.16998 9.17001\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M9 22H15C20 22 22 20 22 15V9C22 4 20 2 15 2H9C4 2 2 4 2 9V15C2 20 4 22 9 22Z\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n <div class=\"filter-content\" [style]=\"'overflow-y: auto'\">\n <div\n *ngFor=\"let data of filterArray | searchFilter : searchText\">\n <div class=\"mt-3 mb-3 checkboxdiv\"\n style=\"gap: 5px;\">\n <input type=\"checkbox\"\n [checked]=\"isSelected(data)\" [value]=\"data\"\n [id]=\"data\" (change)=\"checkedData(data)\">\n <div class=\"ms-2 label-data\">{{data}}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"resize-handle\"></div> <!--SKS15FEB25 appRowResizer -->\n </div>\n </div>\n\n <!--SKS15FEB25 Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"table-cell head-color actionCol sticky-column\"\n style=\"padding: 12px !important;\">\n {{actionColumHeader}}\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Table Body -->\n <div class=\"table-body\" *ngIf=\"!isLoading\">\n <div *ngFor=\"let element of dataSource.data; let i = index\" class=\"table-row\"\n (click)=\"tableClick(element)\">\n <!--SKS15FEB25 Checkbox Cell -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column body-color\">\n <input type=\"checkbox\" class=\"custom-checkbox\" (click)=\"$event.stopPropagation()\"\n (change)=\"separateRowSelect(selection.toggle(element), element)\"\n [checked]=\"selection.isSelected(element)\"\n [disabled]=\"(element.isPayProcessed === true)\">\n </div>\n\n <!--SKS15FEB25 Data Cells -->\n <div *ngFor=\"let column of currentDisplayedColumns; let last = last; ellipsis\"\n class=\"table-cell body-color\"\n [class.selected-cell]=\"isEditable && selectedColumn === column\">\n <div>\n <div *ngIf=\"hyperLinkColumns?.includes(column)\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ ('-' | getValue: element : column) | date }}\n </div>\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ ('-' | getValue: element : column) | time }}\n </div>\n </ng-container>\n </ng-template>\n <ng-template #default>\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ '-' | getValue: element : column }}\n </div>\n </ng-template>\n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\">\n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\"\n width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\"\n fill=\"#434555\" fill-opacity=\"0.5\" />\n </svg>\n </ng-container>\n </div>\n\n <div *ngIf=\"!editColumn?.includes(column)\">\n <div *ngIf=\"!checkHyperlinkCheck(column) && !fileColumns?.includes(column)\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n <!-- {{ getValue(element,column) | date }} -->\n {{ ('-' | getValue: element : column) | date }}\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n <!-- {{ getValue(element,column) | time }} -->\n {{ ('-' | getValue: element : column) | time }}\n </ng-container>\n </ng-template>\n <ng-template #default>\n <!-- {{ getValue(element,column)}} -->\n {{ '-' | getValue: element : column }}\n </ng-template>\n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\">\n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\"\n width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\"\n fill=\"#434555\" fill-opacity=\"0.5\" />\n </svg>\n </ng-container>\n </div>\n <!-- SKS18MAR25 file column -->\n <div *ngIf=\"fileColumns?.includes(column)\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n class=\"popover-container\">\n <!-- Trigger -->\n <div class=\"hover-base\">\n <svg width=\"14\" height=\"16\" viewBox=\"0 0 14 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M13 7.78525L7.04859 13.7602C6.81767 13.9945 6.54217 14.1805 6.23819 14.3076C5.9342 14.4346 5.60784 14.5 5.27817 14.5C4.94849 14.5 4.62213 14.4346 4.31814 14.3076C4.01416 14.1805 3.73866 13.9945 3.50774 13.7602L1.72732 11.9578C1.26124 11.4864 1 10.8516 1 10.1902C1 9.52876 1.26124 8.89388 1.72732 8.42257L8.06883 2.08913C8.2548 1.90245 8.47605 1.75429 8.71983 1.65317C8.96361 1.55206 9.22508 1.5 9.48917 1.5C9.75325 1.5 10.0147 1.55206 10.2585 1.65317C10.5023 1.75429 10.7235 1.90245 10.9095 2.08913L11.6197 2.79616C11.8072 2.98131 11.956 3.20159 12.0576 3.44429C12.1591 3.68699 12.2114 3.94731 12.2114 4.21023C12.2114 4.47316 12.1591 4.73348 12.0576 4.97618C11.956 5.21888 11.8072 5.43916 11.6197 5.62431L5.99834 11.2408C5.90535 11.3341 5.79472 11.4082 5.67284 11.4587C5.55095 11.5093 5.42021 11.5353 5.28817 11.5353C5.15612 11.5353 5.02539 11.5093 4.9035 11.4587C4.78161 11.4082 4.67098 11.3341 4.578 11.2408L4.22791 10.8823C4.13416 10.7897 4.05975 10.6795 4.00897 10.5582C3.95819 10.4368 3.93205 10.3067 3.93205 10.1752C3.93205 10.0438 3.95819 9.91361 4.00897 9.79226C4.05975 9.67091 4.13416 9.56077 4.22791 9.46819L7.99881 5.74381\"\n stroke=\"#434555\" stroke-width=\"1.3\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n\n <!-- Popover Content -->\n <div class=\"hover-content\">\n <div class=\"expenseCon\">\n <div *ngFor=\"let data of element[column]\">\n <div class=\"cursor-pointer expense-file\"\n (click)=\"expenseAttachment(data?.file)\">\n {{ data?.fileName }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 added input box for inline edit input-->\n <div *ngIf=\"editColumn && editColumn.length > 0\">\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('string') \"\n class=\"on-edit d-flex\">\n <input #editColElement class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event, element,column)\"\n [readOnly]=\"element.editRow ? false : true\">\n </div>\n <!--SKS15FEB25 In table, like text input, added drop down and time inputs as well -->\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('object') \"\n class=\"on-edit d-flex\">\n <input\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('text') \"\n #editColElement class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [readOnly]=\"element.editRow ? false : true\">\n <input\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('time') \"\n type=\"time\" class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [ngModel]=\"getValue(element,column)\"\n [class]=\"element.editRow ? 'input-box' : '' \" placeholder=\"HH:mm:ss\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [disabled]=\"element.editRow ? false : true\" />\n <div\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('dropdown') \">\n <select type=\"dropdown\" *ngIf=\"element.editRow\"\n class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\">\n <option [disabled]=\"element.editRow ? false : true\"\n *ngFor=\"let data of [] | editColumnDropdown: column : editColumn \"\n [ngModel]=\"data.value || data.name\">{{data.name}}</option>\n </select>\n <input *ngIf=\"!element.editRow\" #editColElement\n class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [readOnly]=\"true\">\n </div>\n\n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Action Buttons -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"table-cell actionCol\">\n <div class=\"actionButton\" style=\"display: flex; align-items: center;\">\n\n <!--SKS15FEB25 Edit Button -->\n <div *ngIf=\"isEditRow\" class=\"eicon-container\" matTooltip=\"Edit Record\"\n style=\"padding: 2px; border: 1px solid #dcdcdc; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\" edit-icon\"\n style=\"padding: 2px 4px; border-radius: 5px; background-color: #f5f5f5;\">\n <svg (click)=\"onEdit(element)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\"\n fill=\"#6C757D\" />\n </svg>\n </div>\n </div>\n\n\n <!--SKS15FEB25 Delete Button -->\n <div *ngIf=\"isDeleteRow\" class=\"dicon-container\" matTooltip=\"Delete Record\"\n style=\"padding: 2px; border: 1px solid #ffb5b5; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\"delete-icon\"\n style=\"padding: 2px 4px; border-radius: 5px; background-color: #feeeed;\">\n <svg (click)=\"deleteRecord(element,i)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\"\n stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\"\n stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <!--SKS15FEB25 Render inline buttons up to Size -->\n <div *ngFor=\"let button of actionButtonArray?.buttonArray; let i = index\">\n <div *ngIf=\"i < actionButtonArray?.size\"\n style=\" margin-left: 3px; margin-right: 3px;\">\n <div *ngIf=\"isConditionMet(element, button.conditions)\"\n [matTooltip]=button.tooltip\n (click)=\"actionButtonClicked(button,element)\"\n (mouseenter)=\"$event.target.style.border = '1px solid ' + button.hoverBorderColor\"\n (mouseleave)=\"$event.target.style.border = '1px solid ' + button.borderColor\"\n style=\"padding: 2px; border-radius: {{button.borderRadius}}px; border: 1px solid {{button.borderColor}};\">\n <div (mouseenter)=\"$event.target.style.backgroundColor = button.hoverBackgroundColor\"\n (mouseleave)=\"$event.target.style.backgroundColor = button.backgroundColor\"\n style=\"padding: {{button.padding}}px {{button.padding + 2}}px; border-radius: {{button.borderRadius}}px; background-color: {{button.backgroundColor}};\">\n <img *ngIf=\"button.iconSrc\" #imgElement [src]=\"button.iconSrc\"\n (mouseenter)=\"imgElement.src = button.hoverIconSrc || button.iconSrc\"\n (mouseleave)=\"imgElement.src = button.iconSrc\">\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"dropdownActionButton && dropdownActionButton.length > 0\"\n class=\"dropdown\">\n <div class=\"clickable-img\" (click)=\"toggleDropdown(i)\"\n style=\" margin-left: 3px; margin-right: 3px;\">\n <div\n style=\"background-color: #f5f5f5; padding: 2px 4px; border-radius: 5px;\">\n <svg style=\"background-color: #f5f5f5; border-radius: 5px; border: 1px solid #6c757d;\"\n width=\"16\" height=\"16\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\"\n fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\"\n stroke-miterlimit=\"10\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\"\n stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <div class=\"dropdown-menu\"\n [style.right]=\"((actionButtonArray?.size ?? 0) - (actionButtonArray?.buttonArray?.size ?? 0) + (isEditRow ? 1 : 0) + (isDeleteRow ? 1 : 0) + (dropdownActionButton?.length > 0 ? 1 : 0)) * 100 + '%'\"\n *ngIf=\"currentOpenIndex === i\">\n <div *ngFor=\"let btn of dropdownActionButton\">\n <button *ngIf=\"isConditionMet(element, btn.conditions)\"\n [attr.data-id]=\"element.id\" style=\"display: flex;\" type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n [matTooltip]=btn.tooltip [disabled]=\"btn.buttonDisable\"\n (click)=\"actionButtonClicked(btn,element)\">\n <img *ngIf=\"btn.iconSrc\" [src]=\"btn.iconSrc\">\n <div class=\"fc-btn-text\" style=\"padding-left: 10px;\">\n {{btn.name}}</div>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- SKS20MAR25 Summary Rows -->\n <ng-container\n *ngIf=\"summaryRows && summaryRows.length > 0 && isSummaryColumn && dataSource.data && dataSource?.data?.length > 0 && !isLoading\">\n <div *ngFor=\"let row of summaryRows\" class=\"table-row summary-row\">\n <!-- Label in the first column -->\n <div *ngIf=\"withCheckBox\" class=\"non-summary-table-cell\"></div>\n <!-- Empty cells to align with data columns -->\n <div *ngFor=\"let col of isSummaryStartColumn; let last = last\"\n class=\"non-summary-table-cell\" [class.last-cell]=\"last\">\n </div> <!-- Value or input in the last column -->\n <div class=\"summary-table-cell\"\n [class.selected-cell]=\"isEditable && selectedColumn === row.fieldName\"\n (click)=\"$event.stopPropagation(); onColumnClick(row.fieldName)\">{{ row.label }}\n </div>\n <div class=\"summary-table-cell\"\n [class.selected-cell]=\"isEditable && selectedColumn === row.fieldName\">\n <ng-container *ngIf=\"row.type === 'calculation'\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"isEditable && selectedColumn === row.fieldName\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(row.fieldName)\">\n \u2715\n </div>\n {{ summaryValues[row.fieldName] | number }}\n </ng-container>\n <ng-container *ngIf=\"row.type === 'input'\">\n <input type=\"number\" [(ngModel)]=\"summaryValues[row.fieldName]\"\n (ngModelChange)=\"onSummaryInputChange()\" class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n </ng-container>\n </div>\n <!-- SKS20MAR25 Empty cells to align with data columns -->\n <div *ngFor=\"let col of isSummaryEndColumn; let last = last\"\n class=\"non-summary-table-cell\">\n </div>\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"non-summary-table-cell actionCol sticky-column\">\n </div>\n </div>\n </ng-container>\n\n <!--SKS28MAR25 In the Loading section -->\n <div class=\"table-body\" *ngIf=\"isLoading\">\n <!-- Repeat for 5 skeleton rows -->\n <div *ngFor=\"let _ of [1,2,3,4,5]\" class=\"table-row\">\n <!-- Checkbox Column -->\n <div *ngIf=\"withCheckBox\" class=\"skeleton-cell sticky-column\"></div>\n\n <!-- Data Columns -->\n <div *ngFor=\"let col of currentDisplayedColumns\" class=\"skeleton-cell \"></div>\n\n <!-- Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"skeleton-cell actionCol\"></div>\n </div>\n </div>\n <!--SKS15FEB25 No Data Row -->\n <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from !== 'formBuilder'\" class=\"\">\n No records/data found.\n </div>\n <!-- <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from === 'formBuilder'\" class=\"form-builder-table-box\">\n Add / drags fields from elements sections\n </div> -->\n </div>\n </ng-container>\n </div>\n <!--SKS15FEB25 Pagination -->\n <div [class.shadow-hidden]=\"isShadowHidden\">\n <!-- table input save button changes -->\n <div class=\"d-flex inlineAdd justify-content-end\">\n <div class=\"flex addIconBor cursor-pointer\" *ngIf=\"addInlineRecord \"\n (click)=\"addTableRecord(inlineElement)\" matTooltip=\"Add Record\">\n <div class=\"addIcon\">\n <svg class=\"nav-icon\" xmlns=\"http://www.w3.org/2000/svg\" height=\"24\"\n viewBox=\"0 -960 960 960\" width=\"24\">\n <path\n d=\"M440-280h80v-160h160v-80H520v-160h-80v160H280v80h160v160Zm40 200q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z\" />\n </svg>\n </div>\n </div>\n <!--SKS15FEB25 removed button disable logic, added another condition for button showing-->\n <!--SKS15FEB25 SR06JAN2025 button disable logic for not select any employee-->\n <nxt-button *ngIf=\"(editColumn?.length > 0 || tableSaveButton) && from != 'formBuilder'\"\n buttonType=\"btn btn-primary\" [buttonDisable]=\"selection?.selected?.length === 0\"\n (buttonClickEmit)=\"saveButton()\" buttonValue=\"Save\"></nxt-button>\n </div>\n <nxt-pagination *ngIf=\"isPagination\" [pageSizeOptions]=\"pageSizeOptions\" [collectionSize]=\"configPagination ? totalRecords || totalCount : filterTableNos\"\n [pageSize]=\"pageSize\" [currentPage]=\"pageIndex\" [firstLastButtons]=\"true\"\n (event)=\"pageParams($event)\">\n </nxt-pagination>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS15FEB25 alert on deleting record -->\n<div *ngIf=\"deleteModal\" class=\"modal modal-backdrop show d-block\" id=\"deleteRecord\" tabindex=\"-1\"\n aria-labelledby=\"deleteRecordLabel\" [attr.aria-hidden]=\"!deleteModal\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <b class=\"modal-title fs-5\" id=\"deleteRecordLabel\">Delete Record</b>\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\n (click)=\"deleteModal = false\"></button>\n </div>\n <div class=\"modal-body\">\n Are you sure want to delete the record ?\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\"\n (click)=\"deleteModal = false\">No</button>\n <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\n (click)=\"deleteRecordData()\">Yes</button>\n </div>\n </div>\n </div>\n</div>", styles: [".custom-table{display:table;width:100%;border-collapse:collapse;direction:var(--direction);background:var(--body-bg)}.table-header{display:table-header-group;position:sticky;top:0;z-index:100;box-shadow:none;transition:box-shadow .3s ease-in-out;background:var(--header-bg)}.shadow{box-shadow:0 4px 5px #0001!important}.table-body{display:table-row-group}.table-row{display:table-row;position:relative;border-bottom:1px solid var(--border-color)}.table-cell{display:table-cell;padding:12px;border-bottom:solid 1px var(--border-color);text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color)}.sticky-column{position:sticky;left:0;z-index:11;background:var(--header-bg)}.actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;right:0;background:var(--header-bg)}.table-container{width:100%;overflow-y:auto;border-top:1px solid #e0e0e0;scrollbar-width:none}.table-container::-webkit-scrollbar{display:none}.column-header{display:flex;align-items:center;gap:7px}.column-header img{cursor:pointer}.shadow-hidden{position:relative}.shadow-hidden:before{content:\"\";position:absolute;z-index:11;top:-10px;left:0;width:100%;height:10px;background:linear-gradient(to top,var(--scroll-shadow),transparent)}.resize-handle{position:relative;left:14px;width:1.5px;background-color:#dddd}.resize-handle:hover{background-color:#2196f3}.columnDiv{display:flex;justify-content:space-between}.search{display:flex;justify-content:space-between;border:1px solid rgba(67,69,85,.3);border-radius:7px;align-self:center;padding:3px}.search-bar{width:100%;margin:5px}.configSearch{height:22px;padding:3px;margin:10p;background-color:#247dff;border-radius:4px}input::placeholder{color:#abafb1}.sort-indicators{display:inline-block;width:10px;padding-left:5px}.sort-direction{font-size:12px;color:var(--text-color);opacity:.7}.tableHeader{cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .3s}.tableHeader:hover{background-color:var(--hover-bg)}.search-component{top:163%;left:0;z-index:-10;background-color:#fff;box-shadow:0 2px 10px #0000001a}input{border:none}.card{background:#fff;box-shadow:0 2px #0a0a0a1f;border-radius:8px;border-color:#e9e9e9}.fsearch{width:100%;justify-content:space-between;font-weight:400;font-size:13px;display:flex;background:#f0f5ff;border-radius:6px;align-self:center}.content{margin:6px;width:150px}.fsearch-bar{display:flex;flex-direction:row;width:100%;margin:5px;transition:width .3s ease}.search.resized{width:calc(100% - 40px)}.filter-content{width:100%;max-height:150px;padding-left:5px}.label-data{font-weight:200;font-size:12px;color:#434555d9}input[type=checkbox]{height:16px;width:16px;border-radius:5px;margin-left:2px}input[type=checkbox]:after{width:4px;height:7px;left:5px;top:3px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:checked{--r: 43deg}.checkbox-cont{display:flex;align-items:center}.searchinput{border:none;background-color:#f0f5ff;width:85%;font-size:12px;color:#275efe;font-weight:600}.searchSvg{margin-right:3px}.close-icon{margin-left:4px;width:36px;height:32px;cursor:pointer;padding-top:9px;padding-bottom:9px;background-color:#ffefee;color:red;border-radius:4px;transition:background-color .3s ease,color .3s ease}.close-icon:hover{background-color:red;color:#fff}.checkboxdiv{display:flex;align-items:center}.checkboxdiv input{flex-shrink:0}input:focus,input:active,select:focus,select:active,textarea:focus,textarea:active,button:focus,button:active{outline:none!important}@supports (-webkit-appearance: none) or (-moz-appearance: none){input[type=checkbox]{--active: #275EFE;--active-inner: #fff;--focus: 2px rgba(39, 94, 254, .3);--border: #BBC1E1;--border-hover: #275EFE;--background: #fff;--disabled: #F6F8FF;--disabled-inner: #E1E6F9;-webkit-appearance:none;-moz-appearance:none;height:21px;outline:none;display:inline-block;vertical-align:top;position:relative;margin:0;cursor:pointer;border:1px solid var(--bc, var(--border));background:var(--b, var(--background))!important;transition:background .3s,border-color .3s,box-shadow .2s}input[type=checkbox]:after{content:\"\";display:block;left:0;top:0;position:absolute;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}input[type=checkbox]:checked{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:disabled{--b: var(--disabled);cursor:not-allowed;opacity:.9}input[type=checkbox]:disabled:checked{--b: var(--disabled-inner);--bc: var(--border)}input[type=checkbox]:disabled+label{cursor:not-allowed}input[type=checkbox]:hover:not(:checked):not(:disabled){--bc: var(--border-hover)}input[type=checkbox]:focus{box-shadow:0 0 0 var(--focus)}input[type=checkbox]:not(.switch){width:21px}input[type=checkbox]:not(.switch):after{opacity:var(--o, 0)}input[type=checkbox]:not(.switch):checked{--o: 1}input[type=checkbox]+label{font-size:14px;line-height:21px;display:inline-block;vertical-align:top;cursor:pointer;margin-left:4px}input[type=checkbox]:not(.switch){border-radius:7px}input[type=checkbox]:not(.switch):after{width:5px;height:9px;border:2px solid var(--active-inner);border-top:0;border-left:0;left:7px;top:4px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:not(.switch):checked{--r: 43deg}input[type=checkbox].switch{width:38px;border-radius:11px}input[type=checkbox].switch:after{left:2px;top:2px;border-radius:50%;width:15px;height:15px;background:var(--ab, var(--border));transform:translate(var(--x, 0))}input[type=checkbox].switch:checked{--ab: var(--active-inner);--x: 17px}input[type=checkbox].switch:disabled:not(:checked):after{opacity:.6}input[type=checkbox]:indeterminate{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:indeterminate:after{content:\"\";display:block;left:8px;top:5px;rotate:69deg;position:absolute;width:2px;height:9px;background:var(--active-inner);opacity:6;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}}:host{--primary-color: #275EFE;--secondary-color: #6C757D;--text-color: #434555;--border-color: #e0e0e0;--hover-bg: #f9f9f9;--header-bg: #ffffff;--body-bg: #ffffff;--danger-color: #FF2C10;--scroll-shadow: rgba(0, 0, 0, .08);--box-shadow: 0 2px 10px rgba(0, 0, 0, .1)}:host(.dark-theme){--primary-color: #6c8dfa;--text-color: #ffffff;--header-bg: #2c2c2c;--body-bg: #1e1e1e;--border-color: #404040;--hover-bg: #373737}.hyper-link:hover{color:#00f!important;text-decoration:underline;cursor:pointer}.on-edit:hover .edit-icon{visibility:visible}.nxt-lop-input{border-radius:5px;color:#2c3137;font-weight:400;font-size:13px;transition:all .2s}.input-box{border:solid}.inlineAdd{align-items:center;gap:10px;padding-top:10px}.addIconBor{padding:4px;border-radius:5px;border:1px solid #6c757d;transition:background-color .3s,border-color .3s}.addIcon{padding:1px;border-radius:5px;background-color:#ddd;transition:background-color .3s}.addIconBor:hover .addIcon{background-color:#bbd3ff}::ng-deep .modal-backdrop{background-color:#000000b3!important}::ng-deep .modal-backdrop.show{opacity:1!important}.eicon-container:hover .edit-icon svg path{fill:#2163ff!important}.eicon-container:hover .edit-icon{background-color:#c9d2ff!important;cursor:pointer}.eicon-container:hover{border:1px solid #2163ff!important}.dicon-container:hover .delete-icon svg path{stroke:#fff!important;fill:transparent!important}.dicon-container:hover .delete-icon{background-color:#ff7575!important;cursor:pointer}.dicon-container:hover{border:1px solid #ff2121!important}.clickable-img{position:relative;cursor:pointer;padding:2px;border:1px solid #dddddd;border-radius:5px}.clickable-img:hover{border:1px solid rgb(31,105,255);border-radius:5px}.clickable-img:hover div svg{background-color:#ecf3ff!important}.clickable-img:hover div{background-color:#ecf3ff!important}.dropdown-menu{left:unset!important;right:300%;top:12.5px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 4px 8px #0000001a}.dropdown .dropdown-menu{display:block}.dropdown-menu .btn{display:block;padding:10px;width:100%;text-align:left;background:transparent;border:none;cursor:pointer}[dir=rtl] .search{margin-left:7px}[dir=rtl] .noOfRec{gap:4px}[dir=rtl] .sticky-column{position:sticky;right:0;z-index:11;background:var(--header-bg)}[dir=rtl] .actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;left:0;background:var(--header-bg)}[dir=rtl] .resize-handle{position:relative;right:14px;width:1.5px;background-color:#dddd}[dir=rtl] .sort-indicators{padding-right:5px}::ng-deep [dir=rtl] nxt-pagination .dropdown-arrow{left:5px;right:unset!important}::ng-deep [dir=rtl] nxt-button .dropdown-menu{right:unset!important;left:0!important}[dir=rtl] .dropdown-menu{left:300%!important;right:unset!important}[dir=rtl] .fc-btn-text{padding-right:10px}.selected-cell{border-left:2px solid #2196F3!important;border-right:2px solid #2196F3!important;position:relative;z-index:1}.selected-column{position:relative;border:2px solid #2196F3!important;border-bottom:none!important;border-radius:4px}.close-column-btn{position:absolute;top:1px;right:1px;width:15px;height:15px;background:#f32121;color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:9px;cursor:pointer;z-index:2}.close-column-btn:hover{background:#1976d2!important}.table-row:last-child .selected-cell{border-bottom:2px solid #2196F3!important}.hover-content{position:absolute;z-index:1;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #00000026;padding:10px;min-width:200px;border-radius:5px;top:70%;left:0;cursor:pointer}.expense-file{text-decoration:none;transition:text-decoration .2s ease-in-out;cursor:pointer}.expense-file:hover{text-decoration:underline;color:#0056b3;cursor:pointer}.popover-container .hover-content{display:none;position:absolute;cursor:pointer}.popover-container:hover .hover-content{display:block;cursor:pointer}.summary-row{font-weight:700}.non-summary-table-cell{display:table-cell;padding:12px;text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color);border:solid 1px white!important}.summary-table-cell{display:table-cell;padding:12px;text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color);border:solid 1px var(--border-color)!important;border-top:solid 1.5px var(--border-color)!important}.last-cell{border-right:1px solid var(--border-color)!important}.table-last-cell{border-bottom:1px solid var(--border-color)!important}.skeleton-loader{display:table;width:100%;border-collapse:collapse}.skeleton-row{display:table-row;border-bottom:1px solid var(--border-color)}.skeleton-cell{display:table-cell;padding:12px;height:35px;background:#fff;position:relative}.skeleton-cell:before{content:\"\";position:absolute;inset:3px;background:linear-gradient(90deg,#f5f5f5 25%,#eaeaea,#f5f5f5 75%);background-size:200% 100%;animation:pulse 1.5s infinite linear;border-radius:4px}.skeleton-cell.sticky-column{position:sticky;left:0;z-index:11;background:#f5f5f5}.skeleton-cell.actionCol.sticky-column{position:sticky;right:0;left:auto;background:#f5f5f5}@keyframes pulse{0%{background-position:200% 0}to{background-position:-200% 0}}.form-builder-table-box{height:108px;display:flex;justify-content:center;align-items:center;border:1px dashed #a8a1a1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i3.DecimalPipe, name: "number" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: NxtButtonComponent, selector: "nxt-button", inputs: ["buttonValue", "buttonType", "type", "buttonDisable", "fcBtnBgColor", "fcBtnBorder", "fcBtnTextColor", "fcBtnHeight", "fcBtnWidth", "fcBtnIconLeftSrc", "fcBtnIconRightSrc", "fcBtnHoverBgColor", "fcBtnHoverTextColor", "fcBtnId", "dataDismiss", "fcButtonBorder", "modalToTrigger", "isImageSvg", "tabIndex", "buttonConfig"], outputs: ["buttonClickEmit"] }, { kind: "component", type: NxtPagination, selector: "nxt-pagination", inputs: ["pageSizeOptions", "collectionSize", "pageSize", "currentPage", "maxSize", "firstLastButtons", "nextPreviousButtons", "small"], outputs: ["event"] }, { kind: "pipe", type: SearchFilterPipe, name: "searchFilter" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TimePipe, name: "time" }, { kind: "pipe", type: EditColumnCheckPipe, name: "editColumnCheck" }, { kind: "pipe", type: EditColumnDropdownPipe, name: "editColumnDropdown" }, { kind: "pipe", type: EditColumnTypePipe, name: "editColumnType" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i6.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "pipe", type: GetValuePipe, name: "getValue" }, { kind: "component", type: ListViewFilterComponent, selector: "app-list-view-filter", inputs: ["listViews", "tableFilterArray", "selectedView", "displayedColumns", "availableOperators"], outputs: ["listViewEmit"] }] });
|
|
1419
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NxtDatatable, isStandalone: true, selector: "nxt-datatable", inputs: { data: "data", tableFilterData: "tableFilterData", columns: "columns", withCheckBox: "withCheckBox", searchBar: "searchBar", tableSaveButton: "tableSaveButton", stickyColumn: "stickyColumn", tableWidth: "tableWidth", actionColumHeader: "actionColumHeader", actionButton: "actionButton", title: "title", isButtons: "isButtons", buttonArray: "buttonArray", tableId: "tableId", isEditRow: "isEditRow", isDeleteRow: "isDeleteRow", addInlineRecord: "addInlineRecord", searchConfigs: "searchConfigs", direction: "direction", pagination: "pagination", actionButtonArray: "actionButtonArray", multipleFilter: "multipleFilter", isPagination: "isPagination", isNosIndicator: "isNosIndicator", isEditable: "isEditable", from: "from", question: "question", rowTextSize: "rowTextSize", rowTextColor: "rowTextColor", apiMeta: "apiMeta", summaryRows: "summaryRows", summaryColumns: "summaryColumns", isLoading: "isLoading", tableConfig: "tableConfig", tableParams: "tableParams", listViews: "listViews" }, outputs: { tableRowClick: "tableRowClick", onEditData: "onEditData", saveButtonData: "saveButtonData", onDeleteData: "onDeleteData", buttonEmit: "buttonEmit", hyperLinkEmit: "hyperLinkEmit", sideNavEmit: "sideNavEmit", actionButtonEmit: "actionButtonEmit", columnSelected: "columnSelected", removeColumn: "removeColumn", valueChange: "valueChange", selectedValues: "selectedValues", fileEmit: "fileEmit", NxtTableParamsEmit: "NxtTableParamsEmit", NxtTableFilterEmit: "NxtTableFilterEmit", NxtTableEmit: "NxtTableEmit" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "tableContainer", first: true, predicate: ["tableContainer"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"table-layout\" [id]=\"tableId\" [ngStyle]=\"{'padding-top': '1px', 'width': tableWidth}\" [dir]=\"direction\">\n <div>\n <div *ngIf=\"title\" class=\"d-flex justify-content-center table-title align-text-center\">\n {{title}}\n </div>\n <div *ngIf=\"isNosIndicator || searchBar || isButtons\" class=\"flex justify-content-between\" style=\"padding-bottom: 20px;\">\n <div class=\"flex\">\n <!-- SKS26APR25 List View Filter -->\n <app-list-view-filter *ngIf=\"listViews && listViews.length > 0\"\n [listViews]=\"listViews\"\n [selectedView]=\"selectedView\"\n [displayedColumns] = 'displayedColumns'\n [tableFilterArray]=\"tableFilterArray\"\n (listViewEmit)=\"listViewEmit($event)\">\n </app-list-view-filter>\n <div *ngIf=\"(!listViews || listViews.length === 0) && isNosIndicator\" class=\"noOfRec\" style=\"display: flex; align-items: flex-end;\">\n <p style=\"font-weight: 500; margin-right: 5px; margin-bottom: 0px;\">\n Nos </p>\n <div style=\"color: rgb(43, 87, 249);\">{{totalRecords || totalCount}}</div>\n </div>\n </div>\n\n <div class=\"flex\" style=\"align-items: center;\">\n <div *ngIf=\"searchBar\" class=\"search\">\n <div class=\"flex search-bar\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\"\n stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M21.6295 20.1667L19.7271 18.3333\" stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <input type=\"text\" placeholder=\"Search\"\n (keyup)=\"searchConfigs ? emptySearch($event.target.value) : applyFilter($event.target.value)\"\n [value]=\"searchBoxValue || ''\" #input>\n <svg *ngIf=\"searchConfigs && searchBar\" class=\"configSearch\" (click)=\"onSearch(input.value)\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 5H20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M14 8H17\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M21 11.5C21 16.75 16.75 21 11.5 21C6.25 21 2 16.75 2 11.5C2 6.25 6.25 2 11.5 2\"\n stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M22 22L20 20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <div class=\"flex\" *ngIf=\"isButtons\" style=\"padding-left: 7px; gap: 7px;\">\n <div class=\"flex\" *ngFor=\"let button of buttonArray\">\n <nxt-button class=\"data-table-fsbtn\"\n (buttonClickEmit)=\"(button.type === 'group' || button.type === 'dropdown') ? commonButtonClick($event) : commonButtonClick(button)\"\n [buttonType]=\"button.class\" [buttonValue]=\"button.name\" [buttonConfig]=\"button.buttonConfig\"\n [type]=\"button.type\" class=\"ms-2 me-2\" [fcBtnIconLeftSrc]=\"button.fcBtnIconLeftSrc\"\n [isImageSvg]=\"button.isImageSvg\">\n </nxt-button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"table-margin\">\n <div class=\"table-container\" [ngStyle]=\"{ height: isPagination ? '450px' : 'auto' }\" #tableContainer\n (scroll)=\"onScroll(tableContainer)\">\n <ng-container>\n <div class=\"custom-table\">\n <!--SKS15FEB25 Table Header -->\n <div class=\"table-header\" [ngClass]=\"{ 'shadow': isScrolled }\">\n <div class=\"table-row\">\n <!--SKS15FEB25 Checkbox Column -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column head-color\">\n <input type=\"checkbox\" (click)=\"$event.stopPropagation()\" (change)=\"masterToggle()\"\n [checked]=\"selection?.hasValue()\"\n [indeterminate]=\"selection?.hasValue() && !isAllSelected()\"\n class=\"custom-checkbox\">\n </div>\n\n <!--SKS15FEB25 Data Columns -->\n <div *ngFor=\"let column of currentDisplayedColumns; let i = index\"\n class=\"table-cell tableHeader head-color\"\n [class.sticky-column]=\"i === (stickyCondition - 1)\"\n [class.active-column]=\"activeColumn === column\"\n [class.selected-column]=\"isEditable && selectedColumn === column\"\n (click)=\"$event.stopPropagation(); onColumnClick(column); currentSortColumns.includes(column) ? sortData(column) : ''\"\n (mouseenter)=\"hoveredColumn = column\" (mouseleave)=\"hoveredColumn = null\">\n <div class=\"columnDiv\">\n <div class=\"column-header\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"isEditable && selectedColumn === column\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(column)\">\n \u2715\n </div>\n <div class=\"ellipsis\"\n [title]=\"currentHeaderLabels[currentDisplayedColumns.indexOf(column)]\">\n {{ currentHeaderLabels[currentDisplayedColumns.indexOf(column)] }}\n </div>\n <div class=\"position-relative\">\n <svg *ngIf=\"currentFilterColumns.includes(column)\" (click)=\"$event.stopPropagation(); filter(column)\"\n style=\"padding-right: 2px;\" width=\"12\" height=\"11\"\n viewBox=\"0 0 12 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10.75 1.25H0.75L4.75 5.71722V8.80556L6.75 9.75V5.71722L10.75 1.25Z\"\n stroke=\"#242533\" stroke-width=\"1.2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <!--SKS15FEB25 Red dot for active filter -->\n <circle\n *ngIf=\"filterDataArray && filterDataArray[column]?.length > 0\"\n cx=\"9\" cy=\"2\" r=\"2.5\" fill=\"red\"></circle>\n </svg>\n <div *ngIf=\"currentSortColumns.includes(column)\" class=\"sort-indicators\">\n <span *ngIf=\"currentSortColumn === column\" class=\"sort-direction\">\n {{ currentSortDirection === 'asc' ? '\u2191' : currentSortDirection\n === 'desc' ? '\u2193' : '' }}\n </span>\n <span\n *ngIf=\"hoveredColumn === column && currentSortColumn !== column\"\n class=\"sort-direction\">\n \u2191\n </span>\n </div>\n <div *ngIf=\"searchFilter && column === selectedFilter\"\n class=\"search-component position-absolute\" (click)=\"$event.stopPropagation();\">\n <div class=\"card\">\n <div class=\"content\">\n <div class=\"flex\">\n <div class=\"fsearch\" [class.resized]=\"isResized\">\n <div class=\"fsearch-bar\">\n <svg class=\"searchSvg\" width=\"18\" height=\"20\"\n viewBox=\"0 0 24 22\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\"\n stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M21.6295 20.1667L19.7271 18.3333\"\n stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <input class=\"width-100\" type=\"text\"\n placeholder=\"Search\"\n [(ngModel)]=\"searchText\"\n class=\"searchinput\">\n </div>\n </div>\n <svg *ngIf=\"isResized\" (click)=\"closefilter()\"\n class=\"close-icon\" width=\"24\" height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9.16998 14.83L14.83 9.17001\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M14.83 14.83L9.16998 9.17001\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M9 22H15C20 22 22 20 22 15V9C22 4 20 2 15 2H9C4 2 2 4 2 9V15C2 20 4 22 9 22Z\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n <div class=\"filter-content\" [style]=\"'overflow-y: auto'\">\n <div\n *ngFor=\"let data of filterArray | searchFilter : searchText\">\n <div class=\"mt-3 mb-3 checkboxdiv\"\n style=\"gap: 5px;\">\n <input type=\"checkbox\"\n [checked]=\"isSelected(data)\" [value]=\"data\"\n [id]=\"data\" (change)=\"checkedData(data)\">\n <div class=\"ms-2 label-data\">{{data}}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"resize-handle\"></div> <!--SKS15FEB25 appRowResizer -->\n </div>\n </div>\n\n <!--SKS15FEB25 Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"table-cell head-color actionCol sticky-column\"\n style=\"padding: 12px !important;\">\n {{actionColumHeader}}\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Table Body -->\n <div class=\"table-body\" *ngIf=\"!isLoading\">\n <div *ngFor=\"let element of dataSource.data; let i = index\" class=\"table-row\"\n (click)=\"tableClick(element)\">\n <!--SKS15FEB25 Checkbox Cell -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column body-color\">\n <input type=\"checkbox\" class=\"custom-checkbox\" (click)=\"$event.stopPropagation()\"\n (change)=\"separateRowSelect(selection.toggle(element), element)\"\n [checked]=\"selection.isSelected(element)\"\n [disabled]=\"(element.isPayProcessed === true)\">\n </div>\n\n <!--SKS15FEB25 Data Cells -->\n <div *ngFor=\"let column of currentDisplayedColumns; let last = last; ellipsis\"\n class=\"table-cell body-color\"\n [class.selected-cell]=\"isEditable && selectedColumn === column\">\n <div>\n <div *ngIf=\"hyperLinkColumns?.includes(column)\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ ('-' | getValue: element : column) | date }}\n </div>\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ ('-' | getValue: element : column) | time }}\n </div>\n </ng-container>\n </ng-template>\n <ng-template #default>\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ '-' | getValue: element : column }}\n </div>\n </ng-template>\n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\">\n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\"\n width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\"\n fill=\"#434555\" fill-opacity=\"0.5\" />\n </svg>\n </ng-container>\n </div>\n\n <div *ngIf=\"!editColumn?.includes(column)\">\n <div *ngIf=\"!checkHyperlinkCheck(column) && !fileColumns?.includes(column)\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n <!-- {{ getValue(element,column) | date }} -->\n {{ ('-' | getValue: element : column) | date }}\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n <!-- {{ getValue(element,column) | time }} -->\n {{ ('-' | getValue: element : column) | time }}\n </ng-container>\n </ng-template>\n <ng-template #default>\n <!-- {{ getValue(element,column)}} -->\n {{ '-' | getValue: element : column }}\n </ng-template>\n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\">\n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\"\n width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\"\n fill=\"#434555\" fill-opacity=\"0.5\" />\n </svg>\n </ng-container>\n </div>\n <!-- SKS18MAR25 file column -->\n <div *ngIf=\"fileColumns?.includes(column)\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n class=\"popover-container\">\n <!-- Trigger -->\n <div class=\"hover-base\">\n <svg width=\"14\" height=\"16\" viewBox=\"0 0 14 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M13 7.78525L7.04859 13.7602C6.81767 13.9945 6.54217 14.1805 6.23819 14.3076C5.9342 14.4346 5.60784 14.5 5.27817 14.5C4.94849 14.5 4.62213 14.4346 4.31814 14.3076C4.01416 14.1805 3.73866 13.9945 3.50774 13.7602L1.72732 11.9578C1.26124 11.4864 1 10.8516 1 10.1902C1 9.52876 1.26124 8.89388 1.72732 8.42257L8.06883 2.08913C8.2548 1.90245 8.47605 1.75429 8.71983 1.65317C8.96361 1.55206 9.22508 1.5 9.48917 1.5C9.75325 1.5 10.0147 1.55206 10.2585 1.65317C10.5023 1.75429 10.7235 1.90245 10.9095 2.08913L11.6197 2.79616C11.8072 2.98131 11.956 3.20159 12.0576 3.44429C12.1591 3.68699 12.2114 3.94731 12.2114 4.21023C12.2114 4.47316 12.1591 4.73348 12.0576 4.97618C11.956 5.21888 11.8072 5.43916 11.6197 5.62431L5.99834 11.2408C5.90535 11.3341 5.79472 11.4082 5.67284 11.4587C5.55095 11.5093 5.42021 11.5353 5.28817 11.5353C5.15612 11.5353 5.02539 11.5093 4.9035 11.4587C4.78161 11.4082 4.67098 11.3341 4.578 11.2408L4.22791 10.8823C4.13416 10.7897 4.05975 10.6795 4.00897 10.5582C3.95819 10.4368 3.93205 10.3067 3.93205 10.1752C3.93205 10.0438 3.95819 9.91361 4.00897 9.79226C4.05975 9.67091 4.13416 9.56077 4.22791 9.46819L7.99881 5.74381\"\n stroke=\"#434555\" stroke-width=\"1.3\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n\n <!-- Popover Content -->\n <div class=\"hover-content\">\n <div class=\"expenseCon\">\n <div *ngFor=\"let data of element[column]\">\n <div class=\"cursor-pointer expense-file\"\n (click)=\"expenseAttachment(data?.file)\">\n {{ data?.fileName }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 added input box for inline edit input-->\n <div *ngIf=\"editColumn && editColumn.length > 0\">\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('string') \"\n class=\"on-edit d-flex\">\n <input #editColElement class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event, element,column)\"\n [readOnly]=\"element.editRow ? false : true\">\n </div>\n <!--SKS15FEB25 In table, like text input, added drop down and time inputs as well -->\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('object') \"\n class=\"on-edit d-flex\">\n <input\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('text') \"\n #editColElement class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [readOnly]=\"element.editRow ? false : true\">\n <input\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('time') \"\n type=\"time\" class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [ngModel]=\"getValue(element,column)\"\n [class]=\"element.editRow ? 'input-box' : '' \" placeholder=\"HH:mm:ss\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [disabled]=\"element.editRow ? false : true\" />\n <div\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('dropdown') \">\n <select type=\"dropdown\" *ngIf=\"element.editRow\"\n class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\">\n <option [disabled]=\"element.editRow ? false : true\"\n *ngFor=\"let data of [] | editColumnDropdown: column : editColumn \"\n [ngModel]=\"data.value || data.name\">{{data.name}}</option>\n </select>\n <input *ngIf=\"!element.editRow\" #editColElement\n class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [readOnly]=\"true\">\n </div>\n\n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Action Buttons -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"table-cell actionCol\">\n <div class=\"actionButton\" style=\"display: flex; align-items: center;\">\n\n <!--SKS15FEB25 Edit Button -->\n <div *ngIf=\"isEditRow\" class=\"eicon-container\" matTooltip=\"Edit Record\"\n style=\"padding: 2px; border: 1px solid #dcdcdc; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\" edit-icon\"\n style=\"padding: 2px 4px; border-radius: 5px; background-color: #f5f5f5;\">\n <svg (click)=\"onEdit(element)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\"\n fill=\"#6C757D\" />\n </svg>\n </div>\n </div>\n\n\n <!--SKS15FEB25 Delete Button -->\n <div *ngIf=\"isDeleteRow\" class=\"dicon-container\" matTooltip=\"Delete Record\"\n style=\"padding: 2px; border: 1px solid #ffb5b5; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\"delete-icon\"\n style=\"padding: 2px 4px; border-radius: 5px; background-color: #feeeed;\">\n <svg (click)=\"deleteRecord(element,i)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\"\n stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\"\n stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <!--SKS15FEB25 Render inline buttons up to Size -->\n <div *ngFor=\"let button of actionButtonArray?.buttonArray; let i = index\">\n <div *ngIf=\"i < actionButtonArray?.size\"\n style=\" margin-left: 3px; margin-right: 3px;\">\n <div *ngIf=\"isConditionMet(element, button.conditions)\"\n [matTooltip]=button.tooltip\n (click)=\"actionButtonClicked(button,element)\"\n (mouseenter)=\"$event.target.style.border = '1px solid ' + button.hoverBorderColor\"\n (mouseleave)=\"$event.target.style.border = '1px solid ' + button.borderColor\"\n style=\"padding: 2px; border-radius: {{button.borderRadius}}px; border: 1px solid {{button.borderColor}};\">\n <div (mouseenter)=\"$event.target.style.backgroundColor = button.hoverBackgroundColor\"\n (mouseleave)=\"$event.target.style.backgroundColor = button.backgroundColor\"\n style=\"padding: {{button.padding}}px {{button.padding + 2}}px; border-radius: {{button.borderRadius}}px; background-color: {{button.backgroundColor}};\">\n <img *ngIf=\"button.iconSrc\" #imgElement [src]=\"button.iconSrc\"\n (mouseenter)=\"imgElement.src = button.hoverIconSrc || button.iconSrc\"\n (mouseleave)=\"imgElement.src = button.iconSrc\">\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"dropdownActionButton && dropdownActionButton.length > 0\"\n class=\"dropdown\">\n <div class=\"clickable-img\" (click)=\"toggleDropdown(i)\"\n style=\" margin-left: 3px; margin-right: 3px;\">\n <div\n style=\"background-color: #f5f5f5; padding: 2px 4px; border-radius: 5px;\">\n <svg style=\"background-color: #f5f5f5; border-radius: 5px; border: 1px solid #6c757d;\"\n width=\"16\" height=\"16\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\"\n fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\"\n stroke-miterlimit=\"10\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\"\n stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <div class=\"dropdown-menu\"\n [style.right]=\"((actionButtonArray?.size ?? 0) - (actionButtonArray?.buttonArray?.size ?? 0) + (isEditRow ? 1 : 0) + (isDeleteRow ? 1 : 0) + (dropdownActionButton?.length > 0 ? 1 : 0)) * 100 + '%'\"\n *ngIf=\"currentOpenIndex === i\">\n <div *ngFor=\"let btn of dropdownActionButton\">\n <button *ngIf=\"isConditionMet(element, btn.conditions)\"\n [attr.data-id]=\"element.id\" style=\"display: flex;\" type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n [matTooltip]=btn.tooltip [disabled]=\"btn.buttonDisable\"\n (click)=\"actionButtonClicked(btn,element)\">\n <img *ngIf=\"btn.iconSrc\" [src]=\"btn.iconSrc\">\n <div class=\"fc-btn-text\" style=\"padding-left: 10px;\">\n {{btn.name}}</div>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- SKS20MAR25 Summary Rows -->\n <ng-container\n *ngIf=\"summaryRows && summaryRows.length > 0 && isSummaryColumn && dataSource.data && dataSource?.data?.length > 0 && !isLoading\">\n <div *ngFor=\"let row of summaryRows\" class=\"table-row summary-row\">\n <!-- Label in the first column -->\n <div *ngIf=\"withCheckBox\" class=\"non-summary-table-cell\"></div>\n <!-- Empty cells to align with data columns -->\n <div *ngFor=\"let col of isSummaryStartColumn; let last = last\"\n class=\"non-summary-table-cell\" [class.last-cell]=\"last\">\n </div> <!-- Value or input in the last column -->\n <div class=\"summary-table-cell\"\n [class.selected-cell]=\"isEditable && selectedColumn === row.fieldName\"\n (click)=\"$event.stopPropagation(); onColumnClick(row.fieldName)\">{{ row.label }}\n </div>\n <div class=\"summary-table-cell\"\n [class.selected-cell]=\"isEditable && selectedColumn === row.fieldName\">\n <ng-container *ngIf=\"row.type === 'calculation'\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"isEditable && selectedColumn === row.fieldName\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(row.fieldName)\">\n \u2715\n </div>\n {{ summaryValues[row.fieldName] | number }}\n </ng-container>\n <ng-container *ngIf=\"row.type === 'input'\">\n <input type=\"number\" [(ngModel)]=\"summaryValues[row.fieldName]\"\n (ngModelChange)=\"onSummaryInputChange()\" class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n </ng-container>\n </div>\n <!-- SKS20MAR25 Empty cells to align with data columns -->\n <div *ngFor=\"let col of isSummaryEndColumn; let last = last\"\n class=\"non-summary-table-cell\">\n </div>\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"non-summary-table-cell actionCol sticky-column\">\n </div>\n </div>\n </ng-container>\n\n <!--SKS28MAR25 In the Loading section -->\n <div class=\"table-body\" *ngIf=\"isLoading\">\n <!-- Repeat for 5 skeleton rows -->\n <div *ngFor=\"let _ of [1,2,3,4,5]\" class=\"table-row\">\n <!-- Checkbox Column -->\n <div *ngIf=\"withCheckBox\" class=\"skeleton-cell sticky-column\"></div>\n\n <!-- Data Columns -->\n <div *ngFor=\"let col of currentDisplayedColumns\" class=\"skeleton-cell \"></div>\n\n <!-- Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"skeleton-cell actionCol\"></div>\n </div>\n </div>\n <!--SKS15FEB25 No Data Row -->\n <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from !== 'formBuilder'\" class=\"\">\n No records/data found.\n </div>\n <!-- <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from === 'formBuilder'\" class=\"form-builder-table-box\">\n Add / drags fields from elements sections\n </div> -->\n </div>\n </ng-container>\n </div>\n <!--SKS15FEB25 Pagination -->\n <div [class.shadow-hidden]=\"isShadowHidden\">\n <!-- table input save button changes -->\n <div class=\"d-flex inlineAdd justify-content-end\">\n <div class=\"flex addIconBor cursor-pointer\" *ngIf=\"addInlineRecord \"\n (click)=\"addTableRecord(inlineElement)\" matTooltip=\"Add Record\">\n <div class=\"addIcon\">\n <svg class=\"nav-icon\" xmlns=\"http://www.w3.org/2000/svg\" height=\"24\"\n viewBox=\"0 -960 960 960\" width=\"24\">\n <path\n d=\"M440-280h80v-160h160v-80H520v-160h-80v160H280v80h160v160Zm40 200q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z\" />\n </svg>\n </div>\n </div>\n <!--SKS15FEB25 removed button disable logic, added another condition for button showing-->\n <!--SKS15FEB25 SR06JAN2025 button disable logic for not select any employee-->\n <nxt-button *ngIf=\"(editColumn?.length > 0 || tableSaveButton) && from != 'formBuilder'\"\n buttonType=\"btn btn-primary\" [buttonDisable]=\"selection?.selected?.length === 0\"\n (buttonClickEmit)=\"saveButton()\" buttonValue=\"Save\"></nxt-button>\n </div>\n <nxt-pagination *ngIf=\"isPagination\" [pageSizeOptions]=\"pageSizeOptions\" [collectionSize]=\"configPagination ? totalRecords || totalCount : filterTableNos\"\n [pageSize]=\"pageSize\" [currentPage]=\"pageIndex\" [firstLastButtons]=\"true\"\n (event)=\"pageParams($event)\">\n </nxt-pagination>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS15FEB25 alert on deleting record -->\n<div *ngIf=\"deleteModal\" class=\"modal modal-backdrop show d-block\" id=\"deleteRecord\" tabindex=\"-1\"\n aria-labelledby=\"deleteRecordLabel\" [attr.aria-hidden]=\"!deleteModal\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <b class=\"modal-title fs-5\" id=\"deleteRecordLabel\">Delete Record</b>\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\n (click)=\"deleteModal = false\"></button>\n </div>\n <div class=\"modal-body\">\n Are you sure want to delete the record ?\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\"\n (click)=\"deleteModal = false\">No</button>\n <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\n (click)=\"deleteRecordData()\">Yes</button>\n </div>\n </div>\n </div>\n</div>", styles: [".custom-table{display:table;width:100%;border-collapse:collapse;direction:var(--direction);background:var(--body-bg)}.table-header{display:table-header-group;position:sticky;top:0;z-index:100;box-shadow:none;transition:box-shadow .3s ease-in-out;background:var(--header-bg)}.shadow{box-shadow:0 4px 5px #0001!important}.table-body{display:table-row-group}.table-row{display:table-row;position:relative;border-bottom:1px solid var(--border-color)}.table-cell{display:table-cell;padding:12px;border-bottom:solid 1px var(--border-color);text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color)}.sticky-column{position:sticky;left:0;z-index:11;background:var(--header-bg)}.actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;right:0;background:var(--header-bg)}.table-container{width:100%;overflow-y:auto;border-top:1px solid #e0e0e0;scrollbar-width:none}.table-container::-webkit-scrollbar{display:none}.column-header{display:flex;align-items:center;gap:7px}.column-header img{cursor:pointer}.shadow-hidden{position:relative}.shadow-hidden:before{content:\"\";position:absolute;z-index:11;top:-10px;left:0;width:100%;height:10px;background:linear-gradient(to top,var(--scroll-shadow),transparent)}.resize-handle{position:relative;left:14px;width:1.5px;background-color:#dddd}.resize-handle:hover{background-color:#2196f3}.columnDiv{display:flex;justify-content:space-between}.search{display:flex;justify-content:space-between;border:1px solid rgba(67,69,85,.3);border-radius:7px;align-self:center;padding:3px}.search-bar{width:100%;margin:5px}.configSearch{height:22px;padding:3px;margin:10p;background-color:#247dff;border-radius:4px}input::placeholder{color:#abafb1}.sort-indicators{display:inline-block;width:10px;padding-left:5px}.sort-direction{font-size:12px;color:var(--text-color);opacity:.7}.tableHeader{cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .3s}.tableHeader:hover{background-color:var(--hover-bg)}.search-component{top:163%;left:0;z-index:-10;background-color:#fff;box-shadow:0 2px 10px #0000001a}input{border:none}.card{background:#fff;box-shadow:0 2px #0a0a0a1f;border-radius:8px;border-color:#e9e9e9}.fsearch{width:100%;justify-content:space-between;font-weight:400;font-size:13px;display:flex;background:#f0f5ff;border-radius:6px;align-self:center}.content{margin:6px;width:150px}.fsearch-bar{display:flex;flex-direction:row;width:100%;margin:5px;transition:width .3s ease}.search.resized{width:calc(100% - 40px)}.filter-content{width:100%;max-height:150px;padding-left:5px}.label-data{font-weight:200;font-size:12px;color:#434555d9}input[type=checkbox]{height:16px;width:16px;border-radius:5px;margin-left:2px}input[type=checkbox]:after{width:4px;height:7px;left:5px;top:3px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:checked{--r: 43deg}.checkbox-cont{display:flex;align-items:center}.searchinput{border:none;background-color:#f0f5ff;width:85%;font-size:12px;color:#275efe;font-weight:600}.searchSvg{margin-right:3px}.close-icon{margin-left:4px;width:36px;height:32px;cursor:pointer;padding-top:9px;padding-bottom:9px;background-color:#ffefee;color:red;border-radius:4px;transition:background-color .3s ease,color .3s ease}.close-icon:hover{background-color:red;color:#fff}.checkboxdiv{display:flex;align-items:center}.checkboxdiv input{flex-shrink:0}input:focus,input:active,select:focus,select:active,textarea:focus,textarea:active,button:focus,button:active{outline:none!important}@supports (-webkit-appearance: none) or (-moz-appearance: none){input[type=checkbox]{--active: #275EFE;--active-inner: #fff;--focus: 2px rgba(39, 94, 254, .3);--border: #BBC1E1;--border-hover: #275EFE;--background: #fff;--disabled: #F6F8FF;--disabled-inner: #E1E6F9;-webkit-appearance:none;-moz-appearance:none;height:21px;outline:none;display:inline-block;vertical-align:top;position:relative;margin:0;cursor:pointer;border:1px solid var(--bc, var(--border));background:var(--b, var(--background))!important;transition:background .3s,border-color .3s,box-shadow .2s}input[type=checkbox]:after{content:\"\";display:block;left:0;top:0;position:absolute;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}input[type=checkbox]:checked{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:disabled{--b: var(--disabled);cursor:not-allowed;opacity:.9}input[type=checkbox]:disabled:checked{--b: var(--disabled-inner);--bc: var(--border)}input[type=checkbox]:disabled+label{cursor:not-allowed}input[type=checkbox]:hover:not(:checked):not(:disabled){--bc: var(--border-hover)}input[type=checkbox]:focus{box-shadow:0 0 0 var(--focus)}input[type=checkbox]:not(.switch){width:21px}input[type=checkbox]:not(.switch):after{opacity:var(--o, 0)}input[type=checkbox]:not(.switch):checked{--o: 1}input[type=checkbox]+label{font-size:14px;line-height:21px;display:inline-block;vertical-align:top;cursor:pointer;margin-left:4px}input[type=checkbox]:not(.switch){border-radius:7px}input[type=checkbox]:not(.switch):after{width:5px;height:9px;border:2px solid var(--active-inner);border-top:0;border-left:0;left:7px;top:4px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:not(.switch):checked{--r: 43deg}input[type=checkbox].switch{width:38px;border-radius:11px}input[type=checkbox].switch:after{left:2px;top:2px;border-radius:50%;width:15px;height:15px;background:var(--ab, var(--border));transform:translate(var(--x, 0))}input[type=checkbox].switch:checked{--ab: var(--active-inner);--x: 17px}input[type=checkbox].switch:disabled:not(:checked):after{opacity:.6}input[type=checkbox]:indeterminate{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:indeterminate:after{content:\"\";display:block;left:8px;top:5px;rotate:69deg;position:absolute;width:2px;height:9px;background:var(--active-inner);opacity:6;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}}:host{--primary-color: #275EFE;--secondary-color: #6C757D;--text-color: #434555;--border-color: #e0e0e0;--hover-bg: #f9f9f9;--header-bg: #ffffff;--body-bg: #ffffff;--danger-color: #FF2C10;--scroll-shadow: rgba(0, 0, 0, .08);--box-shadow: 0 2px 10px rgba(0, 0, 0, .1)}:host(.dark-theme){--primary-color: #6c8dfa;--text-color: #ffffff;--header-bg: #2c2c2c;--body-bg: #1e1e1e;--border-color: #404040;--hover-bg: #373737}.hyper-link:hover{color:#00f!important;text-decoration:underline;cursor:pointer}.on-edit:hover .edit-icon{visibility:visible}.nxt-lop-input{border-radius:5px;color:#2c3137;font-weight:400;font-size:13px;transition:all .2s}.input-box{border:solid}.inlineAdd{align-items:center;gap:10px;padding-top:10px}.addIconBor{padding:4px;border-radius:5px;border:1px solid #6c757d;transition:background-color .3s,border-color .3s}.addIcon{padding:1px;border-radius:5px;background-color:#ddd;transition:background-color .3s}.addIconBor:hover .addIcon{background-color:#bbd3ff}::ng-deep .modal-backdrop{background-color:#000000b3!important}::ng-deep .modal-backdrop.show{opacity:1!important}.eicon-container:hover .edit-icon svg path{fill:#2163ff!important}.eicon-container:hover .edit-icon{background-color:#c9d2ff!important;cursor:pointer}.eicon-container:hover{border:1px solid #2163ff!important}.dicon-container:hover .delete-icon svg path{stroke:#fff!important;fill:transparent!important}.dicon-container:hover .delete-icon{background-color:#ff7575!important;cursor:pointer}.dicon-container:hover{border:1px solid #ff2121!important}.clickable-img{position:relative;cursor:pointer;padding:2px;border:1px solid #dddddd;border-radius:5px}.clickable-img:hover{border:1px solid rgb(31,105,255);border-radius:5px}.clickable-img:hover div svg{background-color:#ecf3ff!important}.clickable-img:hover div{background-color:#ecf3ff!important}.dropdown-menu{left:unset!important;right:300%;top:12.5px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 4px 8px #0000001a}.dropdown .dropdown-menu{display:block}.dropdown-menu .btn{display:block;padding:10px;width:100%;text-align:left;background:transparent;border:none;cursor:pointer}[dir=rtl] .search{margin-left:7px}[dir=rtl] .noOfRec{gap:4px}[dir=rtl] .sticky-column{position:sticky;right:0;z-index:11;background:var(--header-bg)}[dir=rtl] .actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;left:0;background:var(--header-bg)}[dir=rtl] .resize-handle{position:relative;right:14px;width:1.5px;background-color:#dddd}[dir=rtl] .sort-indicators{padding-right:5px}::ng-deep [dir=rtl] nxt-pagination .dropdown-arrow{left:5px;right:unset!important}::ng-deep [dir=rtl] nxt-button .dropdown-menu{right:unset!important;left:0!important}[dir=rtl] .dropdown-menu{left:300%!important;right:unset!important}[dir=rtl] .fc-btn-text{padding-right:10px}.selected-cell{border-left:2px solid #2196F3!important;border-right:2px solid #2196F3!important;position:relative;z-index:1}.selected-column{position:relative;border:2px solid #2196F3!important;border-bottom:none!important;border-radius:4px}.close-column-btn{position:absolute;top:1px;right:1px;width:15px;height:15px;background:#f32121;color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:9px;cursor:pointer;z-index:2}.close-column-btn:hover{background:#1976d2!important}.table-row:last-child .selected-cell{border-bottom:2px solid #2196F3!important}.hover-content{position:absolute;z-index:1;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #00000026;padding:10px;min-width:200px;border-radius:5px;top:70%;left:0;cursor:pointer}.expense-file{text-decoration:none;transition:text-decoration .2s ease-in-out;cursor:pointer}.expense-file:hover{text-decoration:underline;color:#0056b3;cursor:pointer}.popover-container .hover-content{display:none;position:absolute;cursor:pointer}.popover-container:hover .hover-content{display:block;cursor:pointer}.summary-row{font-weight:700}.non-summary-table-cell{display:table-cell;padding:12px;text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color);border:solid 1px white!important}.summary-table-cell{display:table-cell;padding:12px;text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color);border:solid 1px var(--border-color)!important;border-top:solid 1.5px var(--border-color)!important}.last-cell{border-right:1px solid var(--border-color)!important}.table-last-cell{border-bottom:1px solid var(--border-color)!important}.skeleton-loader{display:table;width:100%;border-collapse:collapse}.skeleton-row{display:table-row;border-bottom:1px solid var(--border-color)}.skeleton-cell{display:table-cell;padding:12px;height:35px;background:#fff;position:relative}.skeleton-cell:before{content:\"\";position:absolute;inset:3px;background:linear-gradient(90deg,#f5f5f5 25%,#eaeaea,#f5f5f5 75%);background-size:200% 100%;animation:pulse 1.5s infinite linear;border-radius:4px}.skeleton-cell.sticky-column{position:sticky;left:0;z-index:11;background:#f5f5f5}.skeleton-cell.actionCol.sticky-column{position:sticky;right:0;left:auto;background:#f5f5f5}@keyframes pulse{0%{background-position:200% 0}to{background-position:-200% 0}}.form-builder-table-box{height:108px;display:flex;justify-content:center;align-items:center;border:1px dashed #a8a1a1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i3.DecimalPipe, name: "number" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: NxtButtonComponent, selector: "nxt-button", inputs: ["buttonValue", "buttonType", "type", "buttonDisable", "fcBtnBgColor", "fcBtnBorder", "fcBtnTextColor", "fcBtnHeight", "fcBtnWidth", "fcBtnIconLeftSrc", "fcBtnIconRightSrc", "fcBtnHoverBgColor", "fcBtnHoverTextColor", "fcBtnId", "dataDismiss", "fcButtonBorder", "modalToTrigger", "isImageSvg", "tabIndex", "buttonConfig"], outputs: ["buttonClickEmit"] }, { kind: "component", type: NxtPagination, selector: "nxt-pagination", inputs: ["pageSizeOptions", "collectionSize", "pageSize", "currentPage", "maxSize", "firstLastButtons", "nextPreviousButtons", "small"], outputs: ["event"] }, { kind: "pipe", type: SearchFilterPipe, name: "searchFilter" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TimePipe, name: "time" }, { kind: "pipe", type: EditColumnCheckPipe, name: "editColumnCheck" }, { kind: "pipe", type: EditColumnDropdownPipe, name: "editColumnDropdown" }, { kind: "pipe", type: EditColumnTypePipe, name: "editColumnType" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i6.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "pipe", type: GetValuePipe, name: "getValue" }, { kind: "component", type: ListViewFilterComponent, selector: "app-list-view-filter", inputs: ["listViews", "tableFilterArray", "selectedView", "displayedColumns", "availableOperators"], outputs: ["listViewEmit"] }] });
|
|
1420
1420
|
}
|
|
1421
1421
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtDatatable, decorators: [{
|
|
1422
1422
|
type: Component,
|
|
@@ -1436,7 +1436,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1436
1436
|
GetValuePipe,
|
|
1437
1437
|
ListViewFilterComponent
|
|
1438
1438
|
// RowResizerDirective
|
|
1439
|
-
], template: "<div class=\"table-layout\" [id]=\"tableId\" [ngStyle]=\"{'padding-top': '1px', 'width': tableWidth}\" [dir]=\"direction\">\n <div> <!-- class=\"m-4\" -->\n <div *ngIf=\"title\" class=\"d-flex justify-content-center table-title align-text-center pt-3\">\n {{title}}\n </div>\n <div *ngIf=\"isNosIndicator || searchBar || isButtons\" class=\"flex justify-content-between\" style=\"padding-bottom: 20px;\">\n <div class=\"flex\">\n <!-- SKS26APR25 List View Filter -->\n <app-list-view-filter *ngIf=\"listViews && listViews.length > 0\"\n [listViews]=\"listViews\"\n [selectedView]=\"selectedView\"\n [displayedColumns] = 'displayedColumns'\n [tableFilterArray]=\"tableFilterArray\"\n (listViewEmit)=\"listViewEmit($event)\">\n </app-list-view-filter>\n <div *ngIf=\"(!listViews || listViews.length === 0) && isNosIndicator\" class=\"noOfRec\" style=\"display: flex; align-items: flex-end;\">\n <p style=\"font-weight: 500; margin-right: 5px; margin-bottom: 0px;\">\n Nos </p>\n <div style=\"color: rgb(43, 87, 249);\">{{totalRecords || totalCount}}</div>\n </div>\n </div>\n\n <div class=\"flex\" style=\"align-items: center;\">\n <div *ngIf=\"searchBar\" class=\"search\">\n <div class=\"flex search-bar\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\"\n stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M21.6295 20.1667L19.7271 18.3333\" stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <input type=\"text\" placeholder=\"Search\"\n (keyup)=\"searchConfigs ? emptySearch($event.target.value) : applyFilter($event.target.value)\"\n [value]=\"searchBoxValue || ''\" #input>\n <svg *ngIf=\"searchConfigs && searchBar\" class=\"configSearch\" (click)=\"onSearch(input.value)\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 5H20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M14 8H17\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M21 11.5C21 16.75 16.75 21 11.5 21C6.25 21 2 16.75 2 11.5C2 6.25 6.25 2 11.5 2\"\n stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M22 22L20 20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <div class=\"flex\" *ngIf=\"isButtons\" style=\"padding-left: 7px; gap: 7px;\">\n <div class=\"flex\" *ngFor=\"let button of buttonArray\">\n <nxt-button class=\"data-table-fsbtn\"\n (buttonClickEmit)=\"(button.type === 'group' || button.type === 'dropdown') ? commonButtonClick($event) : commonButtonClick(button)\"\n [buttonType]=\"button.class\" [buttonValue]=\"button.name\" [buttonConfig]=\"button.buttonConfig\"\n [type]=\"button.type\" class=\"ms-2 me-2\" [fcBtnIconLeftSrc]=\"button.fcBtnIconLeftSrc\"\n [isImageSvg]=\"button.isImageSvg\">\n </nxt-button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"table-margin\">\n <div class=\"table-container\" [ngStyle]=\"{ height: isPagination ? '450px' : 'auto' }\" #tableContainer\n (scroll)=\"onScroll(tableContainer)\">\n <ng-container>\n <div class=\"custom-table\">\n <!--SKS15FEB25 Table Header -->\n <div class=\"table-header\" [ngClass]=\"{ 'shadow': isScrolled }\">\n <div class=\"table-row\">\n <!--SKS15FEB25 Checkbox Column -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column head-color\">\n <input type=\"checkbox\" (click)=\"$event.stopPropagation()\" (change)=\"masterToggle()\"\n [checked]=\"selection?.hasValue()\"\n [indeterminate]=\"selection?.hasValue() && !isAllSelected()\"\n class=\"custom-checkbox\">\n </div>\n\n <!--SKS15FEB25 Data Columns -->\n <div *ngFor=\"let column of currentDisplayedColumns; let i = index\"\n class=\"table-cell tableHeader head-color\"\n [class.sticky-column]=\"i === (stickyCondition - 1)\"\n [class.active-column]=\"activeColumn === column\"\n [class.selected-column]=\"isEditable && selectedColumn === column\"\n (click)=\"$event.stopPropagation(); onColumnClick(column); currentSortColumns.includes(column) ? sortData(column) : ''\"\n (mouseenter)=\"hoveredColumn = column\" (mouseleave)=\"hoveredColumn = null\">\n <div class=\"columnDiv\">\n <div class=\"column-header\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"isEditable && selectedColumn === column\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(column)\">\n \u2715\n </div>\n <div class=\"ellipsis\"\n [title]=\"currentHeaderLabels[currentDisplayedColumns.indexOf(column)]\">\n {{ currentHeaderLabels[currentDisplayedColumns.indexOf(column)] }}\n </div>\n <div class=\"position-relative\">\n <svg *ngIf=\"currentFilterColumns.includes(column)\" (click)=\"$event.stopPropagation(); filter(column)\"\n style=\"padding-right: 2px;\" width=\"12\" height=\"11\"\n viewBox=\"0 0 12 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10.75 1.25H0.75L4.75 5.71722V8.80556L6.75 9.75V5.71722L10.75 1.25Z\"\n stroke=\"#242533\" stroke-width=\"1.2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <!--SKS15FEB25 Red dot for active filter -->\n <circle\n *ngIf=\"filterDataArray && filterDataArray[column]?.length > 0\"\n cx=\"9\" cy=\"2\" r=\"2.5\" fill=\"red\"></circle>\n </svg>\n <div *ngIf=\"currentSortColumns.includes(column)\" class=\"sort-indicators\">\n <span *ngIf=\"currentSortColumn === column\" class=\"sort-direction\">\n {{ currentSortDirection === 'asc' ? '\u2191' : currentSortDirection\n === 'desc' ? '\u2193' : '' }}\n </span>\n <span\n *ngIf=\"hoveredColumn === column && currentSortColumn !== column\"\n class=\"sort-direction\">\n \u2191\n </span>\n </div>\n <div *ngIf=\"searchFilter && column === selectedFilter\"\n class=\"search-component position-absolute\" (click)=\"$event.stopPropagation();\">\n <div class=\"card\">\n <div class=\"content\">\n <div class=\"flex\">\n <div class=\"fsearch\" [class.resized]=\"isResized\">\n <div class=\"fsearch-bar\">\n <svg class=\"searchSvg\" width=\"18\" height=\"20\"\n viewBox=\"0 0 24 22\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\"\n stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M21.6295 20.1667L19.7271 18.3333\"\n stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <input class=\"width-100\" type=\"text\"\n placeholder=\"Search\"\n [(ngModel)]=\"searchText\"\n class=\"searchinput\">\n </div>\n </div>\n <svg *ngIf=\"isResized\" (click)=\"closefilter()\"\n class=\"close-icon\" width=\"24\" height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9.16998 14.83L14.83 9.17001\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M14.83 14.83L9.16998 9.17001\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M9 22H15C20 22 22 20 22 15V9C22 4 20 2 15 2H9C4 2 2 4 2 9V15C2 20 4 22 9 22Z\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n <div class=\"filter-content\" [style]=\"'overflow-y: auto'\">\n <div\n *ngFor=\"let data of filterArray | searchFilter : searchText\">\n <div class=\"mt-3 mb-3 checkboxdiv\"\n style=\"gap: 5px;\">\n <input type=\"checkbox\"\n [checked]=\"isSelected(data)\" [value]=\"data\"\n [id]=\"data\" (change)=\"checkedData(data)\">\n <div class=\"ms-2 label-data\">{{data}}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"resize-handle\"></div> <!--SKS15FEB25 appRowResizer -->\n </div>\n </div>\n\n <!--SKS15FEB25 Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"table-cell head-color actionCol sticky-column\"\n style=\"padding: 12px !important;\">\n {{actionColumHeader}}\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Table Body -->\n <div class=\"table-body\" *ngIf=\"!isLoading\">\n <div *ngFor=\"let element of dataSource.data; let i = index\" class=\"table-row\"\n (click)=\"tableClick(element)\">\n <!--SKS15FEB25 Checkbox Cell -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column body-color\">\n <input type=\"checkbox\" class=\"custom-checkbox\" (click)=\"$event.stopPropagation()\"\n (change)=\"separateRowSelect(selection.toggle(element), element)\"\n [checked]=\"selection.isSelected(element)\"\n [disabled]=\"(element.isPayProcessed === true)\">\n </div>\n\n <!--SKS15FEB25 Data Cells -->\n <div *ngFor=\"let column of currentDisplayedColumns; let last = last; ellipsis\"\n class=\"table-cell body-color\"\n [class.selected-cell]=\"isEditable && selectedColumn === column\">\n <div>\n <div *ngIf=\"hyperLinkColumns?.includes(column)\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ ('-' | getValue: element : column) | date }}\n </div>\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ ('-' | getValue: element : column) | time }}\n </div>\n </ng-container>\n </ng-template>\n <ng-template #default>\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ '-' | getValue: element : column }}\n </div>\n </ng-template>\n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\">\n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\"\n width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\"\n fill=\"#434555\" fill-opacity=\"0.5\" />\n </svg>\n </ng-container>\n </div>\n\n <div *ngIf=\"!editColumn?.includes(column)\">\n <div *ngIf=\"!checkHyperlinkCheck(column) && !fileColumns?.includes(column)\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n <!-- {{ getValue(element,column) | date }} -->\n {{ ('-' | getValue: element : column) | date }}\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n <!-- {{ getValue(element,column) | time }} -->\n {{ ('-' | getValue: element : column) | time }}\n </ng-container>\n </ng-template>\n <ng-template #default>\n <!-- {{ getValue(element,column)}} -->\n {{ '-' | getValue: element : column }}\n </ng-template>\n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\">\n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\"\n width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\"\n fill=\"#434555\" fill-opacity=\"0.5\" />\n </svg>\n </ng-container>\n </div>\n <!-- SKS18MAR25 file column -->\n <div *ngIf=\"fileColumns?.includes(column)\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n class=\"popover-container\">\n <!-- Trigger -->\n <div class=\"hover-base\">\n <svg width=\"14\" height=\"16\" viewBox=\"0 0 14 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M13 7.78525L7.04859 13.7602C6.81767 13.9945 6.54217 14.1805 6.23819 14.3076C5.9342 14.4346 5.60784 14.5 5.27817 14.5C4.94849 14.5 4.62213 14.4346 4.31814 14.3076C4.01416 14.1805 3.73866 13.9945 3.50774 13.7602L1.72732 11.9578C1.26124 11.4864 1 10.8516 1 10.1902C1 9.52876 1.26124 8.89388 1.72732 8.42257L8.06883 2.08913C8.2548 1.90245 8.47605 1.75429 8.71983 1.65317C8.96361 1.55206 9.22508 1.5 9.48917 1.5C9.75325 1.5 10.0147 1.55206 10.2585 1.65317C10.5023 1.75429 10.7235 1.90245 10.9095 2.08913L11.6197 2.79616C11.8072 2.98131 11.956 3.20159 12.0576 3.44429C12.1591 3.68699 12.2114 3.94731 12.2114 4.21023C12.2114 4.47316 12.1591 4.73348 12.0576 4.97618C11.956 5.21888 11.8072 5.43916 11.6197 5.62431L5.99834 11.2408C5.90535 11.3341 5.79472 11.4082 5.67284 11.4587C5.55095 11.5093 5.42021 11.5353 5.28817 11.5353C5.15612 11.5353 5.02539 11.5093 4.9035 11.4587C4.78161 11.4082 4.67098 11.3341 4.578 11.2408L4.22791 10.8823C4.13416 10.7897 4.05975 10.6795 4.00897 10.5582C3.95819 10.4368 3.93205 10.3067 3.93205 10.1752C3.93205 10.0438 3.95819 9.91361 4.00897 9.79226C4.05975 9.67091 4.13416 9.56077 4.22791 9.46819L7.99881 5.74381\"\n stroke=\"#434555\" stroke-width=\"1.3\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n\n <!-- Popover Content -->\n <div class=\"hover-content\">\n <div class=\"expenseCon\">\n <div *ngFor=\"let data of element[column]\">\n <div class=\"cursor-pointer expense-file\"\n (click)=\"expenseAttachment(data?.file)\">\n {{ data?.fileName }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 added input box for inline edit input-->\n <div *ngIf=\"editColumn && editColumn.length > 0\">\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('string') \"\n class=\"on-edit d-flex\">\n <input #editColElement class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event, element,column)\"\n [readOnly]=\"element.editRow ? false : true\">\n </div>\n <!--SKS15FEB25 In table, like text input, added drop down and time inputs as well -->\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('object') \"\n class=\"on-edit d-flex\">\n <input\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('text') \"\n #editColElement class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [readOnly]=\"element.editRow ? false : true\">\n <input\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('time') \"\n type=\"time\" class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [ngModel]=\"getValue(element,column)\"\n [class]=\"element.editRow ? 'input-box' : '' \" placeholder=\"HH:mm:ss\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [disabled]=\"element.editRow ? false : true\" />\n <div\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('dropdown') \">\n <select type=\"dropdown\" *ngIf=\"element.editRow\"\n class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\">\n <option [disabled]=\"element.editRow ? false : true\"\n *ngFor=\"let data of [] | editColumnDropdown: column : editColumn \"\n [ngModel]=\"data.value || data.name\">{{data.name}}</option>\n </select>\n <input *ngIf=\"!element.editRow\" #editColElement\n class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [readOnly]=\"true\">\n </div>\n\n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Action Buttons -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"table-cell actionCol\">\n <div class=\"actionButton\" style=\"display: flex; align-items: center;\">\n\n <!--SKS15FEB25 Edit Button -->\n <div *ngIf=\"isEditRow\" class=\"eicon-container\" matTooltip=\"Edit Record\"\n style=\"padding: 2px; border: 1px solid #dcdcdc; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\" edit-icon\"\n style=\"padding: 2px 4px; border-radius: 5px; background-color: #f5f5f5;\">\n <svg (click)=\"onEdit(element)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\"\n fill=\"#6C757D\" />\n </svg>\n </div>\n </div>\n\n\n <!--SKS15FEB25 Delete Button -->\n <div *ngIf=\"isDeleteRow\" class=\"dicon-container\" matTooltip=\"Delete Record\"\n style=\"padding: 2px; border: 1px solid #ffb5b5; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\"delete-icon\"\n style=\"padding: 2px 4px; border-radius: 5px; background-color: #feeeed;\">\n <svg (click)=\"deleteRecord(element,i)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\"\n stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\"\n stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <!--SKS15FEB25 Render inline buttons up to Size -->\n <div *ngFor=\"let button of actionButtonArray?.buttonArray; let i = index\">\n <div *ngIf=\"i < actionButtonArray?.size\"\n style=\" margin-left: 3px; margin-right: 3px;\">\n <div *ngIf=\"isConditionMet(element, button.conditions)\"\n [matTooltip]=button.tooltip\n (click)=\"actionButtonClicked(button,element)\"\n (mouseenter)=\"$event.target.style.border = '1px solid ' + button.hoverBorderColor\"\n (mouseleave)=\"$event.target.style.border = '1px solid ' + button.borderColor\"\n style=\"padding: 2px; border-radius: {{button.borderRadius}}px; border: 1px solid {{button.borderColor}};\">\n <div (mouseenter)=\"$event.target.style.backgroundColor = button.hoverBackgroundColor\"\n (mouseleave)=\"$event.target.style.backgroundColor = button.backgroundColor\"\n style=\"padding: {{button.padding}}px {{button.padding + 2}}px; border-radius: {{button.borderRadius}}px; background-color: {{button.backgroundColor}};\">\n <img *ngIf=\"button.iconSrc\" #imgElement [src]=\"button.iconSrc\"\n (mouseenter)=\"imgElement.src = button.hoverIconSrc || button.iconSrc\"\n (mouseleave)=\"imgElement.src = button.iconSrc\">\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"dropdownActionButton && dropdownActionButton.length > 0\"\n class=\"dropdown\">\n <div class=\"clickable-img\" (click)=\"toggleDropdown(i)\"\n style=\" margin-left: 3px; margin-right: 3px;\">\n <div\n style=\"background-color: #f5f5f5; padding: 2px 4px; border-radius: 5px;\">\n <svg style=\"background-color: #f5f5f5; border-radius: 5px; border: 1px solid #6c757d;\"\n width=\"16\" height=\"16\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\"\n fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\"\n stroke-miterlimit=\"10\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\"\n stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <div class=\"dropdown-menu\"\n [style.right]=\"((actionButtonArray?.size ?? 0) - (actionButtonArray?.buttonArray?.size ?? 0) + (isEditRow ? 1 : 0) + (isDeleteRow ? 1 : 0) + (dropdownActionButton?.length > 0 ? 1 : 0)) * 100 + '%'\"\n *ngIf=\"currentOpenIndex === i\">\n <div *ngFor=\"let btn of dropdownActionButton\">\n <button *ngIf=\"isConditionMet(element, btn.conditions)\"\n [attr.data-id]=\"element.id\" style=\"display: flex;\" type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n [matTooltip]=btn.tooltip [disabled]=\"btn.buttonDisable\"\n (click)=\"actionButtonClicked(btn,element)\">\n <img *ngIf=\"btn.iconSrc\" [src]=\"btn.iconSrc\">\n <div class=\"fc-btn-text\" style=\"padding-left: 10px;\">\n {{btn.name}}</div>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- SKS20MAR25 Summary Rows -->\n <ng-container\n *ngIf=\"summaryRows && summaryRows.length > 0 && isSummaryColumn && dataSource.data && dataSource?.data?.length > 0 && !isLoading\">\n <div *ngFor=\"let row of summaryRows\" class=\"table-row summary-row\">\n <!-- Label in the first column -->\n <div *ngIf=\"withCheckBox\" class=\"non-summary-table-cell\"></div>\n <!-- Empty cells to align with data columns -->\n <div *ngFor=\"let col of isSummaryStartColumn; let last = last\"\n class=\"non-summary-table-cell\" [class.last-cell]=\"last\">\n </div> <!-- Value or input in the last column -->\n <div class=\"summary-table-cell\"\n [class.selected-cell]=\"isEditable && selectedColumn === row.fieldName\"\n (click)=\"$event.stopPropagation(); onColumnClick(row.fieldName)\">{{ row.label }}\n </div>\n <div class=\"summary-table-cell\"\n [class.selected-cell]=\"isEditable && selectedColumn === row.fieldName\">\n <ng-container *ngIf=\"row.type === 'calculation'\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"isEditable && selectedColumn === row.fieldName\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(row.fieldName)\">\n \u2715\n </div>\n {{ summaryValues[row.fieldName] | number }}\n </ng-container>\n <ng-container *ngIf=\"row.type === 'input'\">\n <input type=\"number\" [(ngModel)]=\"summaryValues[row.fieldName]\"\n (ngModelChange)=\"onSummaryInputChange()\" class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n </ng-container>\n </div>\n <!-- SKS20MAR25 Empty cells to align with data columns -->\n <div *ngFor=\"let col of isSummaryEndColumn; let last = last\"\n class=\"non-summary-table-cell\">\n </div>\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"non-summary-table-cell actionCol sticky-column\">\n </div>\n </div>\n </ng-container>\n\n <!--SKS28MAR25 In the Loading section -->\n <div class=\"table-body\" *ngIf=\"isLoading\">\n <!-- Repeat for 5 skeleton rows -->\n <div *ngFor=\"let _ of [1,2,3,4,5]\" class=\"table-row\">\n <!-- Checkbox Column -->\n <div *ngIf=\"withCheckBox\" class=\"skeleton-cell sticky-column\"></div>\n\n <!-- Data Columns -->\n <div *ngFor=\"let col of currentDisplayedColumns\" class=\"skeleton-cell \"></div>\n\n <!-- Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"skeleton-cell actionCol\"></div>\n </div>\n </div>\n <!--SKS15FEB25 No Data Row -->\n <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from !== 'formBuilder'\" class=\"\">\n No records/data found.\n </div>\n <!-- <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from === 'formBuilder'\" class=\"form-builder-table-box\">\n Add / drags fields from elements sections\n </div> -->\n </div>\n </ng-container>\n </div>\n <!--SKS15FEB25 Pagination -->\n <div [class.shadow-hidden]=\"isShadowHidden\">\n <!-- table input save button changes -->\n <div class=\"d-flex inlineAdd justify-content-end\">\n <div class=\"flex addIconBor cursor-pointer\" *ngIf=\"addInlineRecord \"\n (click)=\"addTableRecord(inlineElement)\" matTooltip=\"Add Record\">\n <div class=\"addIcon\">\n <svg class=\"nav-icon\" xmlns=\"http://www.w3.org/2000/svg\" height=\"24\"\n viewBox=\"0 -960 960 960\" width=\"24\">\n <path\n d=\"M440-280h80v-160h160v-80H520v-160h-80v160H280v80h160v160Zm40 200q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z\" />\n </svg>\n </div>\n </div>\n <!--SKS15FEB25 removed button disable logic, added another condition for button showing-->\n <!--SKS15FEB25 SR06JAN2025 button disable logic for not select any employee-->\n <nxt-button *ngIf=\"(editColumn?.length > 0 || tableSaveButton) && from != 'formBuilder'\"\n buttonType=\"btn btn-primary\" [buttonDisable]=\"selection?.selected?.length === 0\"\n (buttonClickEmit)=\"saveButton()\" buttonValue=\"Save\"></nxt-button>\n </div>\n <nxt-pagination *ngIf=\"isPagination\" [pageSizeOptions]=\"pageSizeOptions\" [collectionSize]=\"configPagination ? totalRecords || totalCount : filterTableNos\"\n [pageSize]=\"pageSize\" [currentPage]=\"pageIndex\" [firstLastButtons]=\"true\"\n (event)=\"pageParams($event)\">\n </nxt-pagination>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS15FEB25 alert on deleting record -->\n<div *ngIf=\"deleteModal\" class=\"modal modal-backdrop show d-block\" id=\"deleteRecord\" tabindex=\"-1\"\n aria-labelledby=\"deleteRecordLabel\" [attr.aria-hidden]=\"!deleteModal\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <b class=\"modal-title fs-5\" id=\"deleteRecordLabel\">Delete Record</b>\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\n (click)=\"deleteModal = false\"></button>\n </div>\n <div class=\"modal-body\">\n Are you sure want to delete the record ?\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\"\n (click)=\"deleteModal = false\">No</button>\n <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\n (click)=\"deleteRecordData()\">Yes</button>\n </div>\n </div>\n </div>\n</div>", styles: [".custom-table{display:table;width:100%;border-collapse:collapse;direction:var(--direction);background:var(--body-bg)}.table-header{display:table-header-group;position:sticky;top:0;z-index:100;box-shadow:none;transition:box-shadow .3s ease-in-out;background:var(--header-bg)}.shadow{box-shadow:0 4px 5px #0001!important}.table-body{display:table-row-group}.table-row{display:table-row;position:relative;border-bottom:1px solid var(--border-color)}.table-cell{display:table-cell;padding:12px;border-bottom:solid 1px var(--border-color);text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color)}.sticky-column{position:sticky;left:0;z-index:11;background:var(--header-bg)}.actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;right:0;background:var(--header-bg)}.table-container{width:100%;overflow-y:auto;border-top:1px solid #e0e0e0;scrollbar-width:none}.table-container::-webkit-scrollbar{display:none}.column-header{display:flex;align-items:center;gap:7px}.column-header img{cursor:pointer}.shadow-hidden{position:relative}.shadow-hidden:before{content:\"\";position:absolute;z-index:11;top:-10px;left:0;width:100%;height:10px;background:linear-gradient(to top,var(--scroll-shadow),transparent)}.resize-handle{position:relative;left:14px;width:1.5px;background-color:#dddd}.resize-handle:hover{background-color:#2196f3}.columnDiv{display:flex;justify-content:space-between}.search{display:flex;justify-content:space-between;border:1px solid rgba(67,69,85,.3);border-radius:7px;align-self:center;padding:3px}.search-bar{width:100%;margin:5px}.configSearch{height:22px;padding:3px;margin:10p;background-color:#247dff;border-radius:4px}input::placeholder{color:#abafb1}.sort-indicators{display:inline-block;width:10px;padding-left:5px}.sort-direction{font-size:12px;color:var(--text-color);opacity:.7}.tableHeader{cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .3s}.tableHeader:hover{background-color:var(--hover-bg)}.search-component{top:163%;left:0;z-index:-10;background-color:#fff;box-shadow:0 2px 10px #0000001a}input{border:none}.card{background:#fff;box-shadow:0 2px #0a0a0a1f;border-radius:8px;border-color:#e9e9e9}.fsearch{width:100%;justify-content:space-between;font-weight:400;font-size:13px;display:flex;background:#f0f5ff;border-radius:6px;align-self:center}.content{margin:6px;width:150px}.fsearch-bar{display:flex;flex-direction:row;width:100%;margin:5px;transition:width .3s ease}.search.resized{width:calc(100% - 40px)}.filter-content{width:100%;max-height:150px;padding-left:5px}.label-data{font-weight:200;font-size:12px;color:#434555d9}input[type=checkbox]{height:16px;width:16px;border-radius:5px;margin-left:2px}input[type=checkbox]:after{width:4px;height:7px;left:5px;top:3px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:checked{--r: 43deg}.checkbox-cont{display:flex;align-items:center}.searchinput{border:none;background-color:#f0f5ff;width:85%;font-size:12px;color:#275efe;font-weight:600}.searchSvg{margin-right:3px}.close-icon{margin-left:4px;width:36px;height:32px;cursor:pointer;padding-top:9px;padding-bottom:9px;background-color:#ffefee;color:red;border-radius:4px;transition:background-color .3s ease,color .3s ease}.close-icon:hover{background-color:red;color:#fff}.checkboxdiv{display:flex;align-items:center}.checkboxdiv input{flex-shrink:0}input:focus,input:active,select:focus,select:active,textarea:focus,textarea:active,button:focus,button:active{outline:none!important}@supports (-webkit-appearance: none) or (-moz-appearance: none){input[type=checkbox]{--active: #275EFE;--active-inner: #fff;--focus: 2px rgba(39, 94, 254, .3);--border: #BBC1E1;--border-hover: #275EFE;--background: #fff;--disabled: #F6F8FF;--disabled-inner: #E1E6F9;-webkit-appearance:none;-moz-appearance:none;height:21px;outline:none;display:inline-block;vertical-align:top;position:relative;margin:0;cursor:pointer;border:1px solid var(--bc, var(--border));background:var(--b, var(--background))!important;transition:background .3s,border-color .3s,box-shadow .2s}input[type=checkbox]:after{content:\"\";display:block;left:0;top:0;position:absolute;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}input[type=checkbox]:checked{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:disabled{--b: var(--disabled);cursor:not-allowed;opacity:.9}input[type=checkbox]:disabled:checked{--b: var(--disabled-inner);--bc: var(--border)}input[type=checkbox]:disabled+label{cursor:not-allowed}input[type=checkbox]:hover:not(:checked):not(:disabled){--bc: var(--border-hover)}input[type=checkbox]:focus{box-shadow:0 0 0 var(--focus)}input[type=checkbox]:not(.switch){width:21px}input[type=checkbox]:not(.switch):after{opacity:var(--o, 0)}input[type=checkbox]:not(.switch):checked{--o: 1}input[type=checkbox]+label{font-size:14px;line-height:21px;display:inline-block;vertical-align:top;cursor:pointer;margin-left:4px}input[type=checkbox]:not(.switch){border-radius:7px}input[type=checkbox]:not(.switch):after{width:5px;height:9px;border:2px solid var(--active-inner);border-top:0;border-left:0;left:7px;top:4px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:not(.switch):checked{--r: 43deg}input[type=checkbox].switch{width:38px;border-radius:11px}input[type=checkbox].switch:after{left:2px;top:2px;border-radius:50%;width:15px;height:15px;background:var(--ab, var(--border));transform:translate(var(--x, 0))}input[type=checkbox].switch:checked{--ab: var(--active-inner);--x: 17px}input[type=checkbox].switch:disabled:not(:checked):after{opacity:.6}input[type=checkbox]:indeterminate{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:indeterminate:after{content:\"\";display:block;left:8px;top:5px;rotate:69deg;position:absolute;width:2px;height:9px;background:var(--active-inner);opacity:6;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}}:host{--primary-color: #275EFE;--secondary-color: #6C757D;--text-color: #434555;--border-color: #e0e0e0;--hover-bg: #f9f9f9;--header-bg: #ffffff;--body-bg: #ffffff;--danger-color: #FF2C10;--scroll-shadow: rgba(0, 0, 0, .08);--box-shadow: 0 2px 10px rgba(0, 0, 0, .1)}:host(.dark-theme){--primary-color: #6c8dfa;--text-color: #ffffff;--header-bg: #2c2c2c;--body-bg: #1e1e1e;--border-color: #404040;--hover-bg: #373737}.hyper-link:hover{color:#00f!important;text-decoration:underline;cursor:pointer}.on-edit:hover .edit-icon{visibility:visible}.nxt-lop-input{border-radius:5px;color:#2c3137;font-weight:400;font-size:13px;transition:all .2s}.input-box{border:solid}.inlineAdd{align-items:center;gap:10px;padding-top:10px}.addIconBor{padding:4px;border-radius:5px;border:1px solid #6c757d;transition:background-color .3s,border-color .3s}.addIcon{padding:1px;border-radius:5px;background-color:#ddd;transition:background-color .3s}.addIconBor:hover .addIcon{background-color:#bbd3ff}::ng-deep .modal-backdrop{background-color:#000000b3!important}::ng-deep .modal-backdrop.show{opacity:1!important}.eicon-container:hover .edit-icon svg path{fill:#2163ff!important}.eicon-container:hover .edit-icon{background-color:#c9d2ff!important;cursor:pointer}.eicon-container:hover{border:1px solid #2163ff!important}.dicon-container:hover .delete-icon svg path{stroke:#fff!important;fill:transparent!important}.dicon-container:hover .delete-icon{background-color:#ff7575!important;cursor:pointer}.dicon-container:hover{border:1px solid #ff2121!important}.clickable-img{position:relative;cursor:pointer;padding:2px;border:1px solid #dddddd;border-radius:5px}.clickable-img:hover{border:1px solid rgb(31,105,255);border-radius:5px}.clickable-img:hover div svg{background-color:#ecf3ff!important}.clickable-img:hover div{background-color:#ecf3ff!important}.dropdown-menu{left:unset!important;right:300%;top:12.5px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 4px 8px #0000001a}.dropdown .dropdown-menu{display:block}.dropdown-menu .btn{display:block;padding:10px;width:100%;text-align:left;background:transparent;border:none;cursor:pointer}[dir=rtl] .search{margin-left:7px}[dir=rtl] .noOfRec{gap:4px}[dir=rtl] .sticky-column{position:sticky;right:0;z-index:11;background:var(--header-bg)}[dir=rtl] .actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;left:0;background:var(--header-bg)}[dir=rtl] .resize-handle{position:relative;right:14px;width:1.5px;background-color:#dddd}[dir=rtl] .sort-indicators{padding-right:5px}::ng-deep [dir=rtl] nxt-pagination .dropdown-arrow{left:5px;right:unset!important}::ng-deep [dir=rtl] nxt-button .dropdown-menu{right:unset!important;left:0!important}[dir=rtl] .dropdown-menu{left:300%!important;right:unset!important}[dir=rtl] .fc-btn-text{padding-right:10px}.selected-cell{border-left:2px solid #2196F3!important;border-right:2px solid #2196F3!important;position:relative;z-index:1}.selected-column{position:relative;border:2px solid #2196F3!important;border-bottom:none!important;border-radius:4px}.close-column-btn{position:absolute;top:1px;right:1px;width:15px;height:15px;background:#f32121;color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:9px;cursor:pointer;z-index:2}.close-column-btn:hover{background:#1976d2!important}.table-row:last-child .selected-cell{border-bottom:2px solid #2196F3!important}.hover-content{position:absolute;z-index:1;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #00000026;padding:10px;min-width:200px;border-radius:5px;top:70%;left:0;cursor:pointer}.expense-file{text-decoration:none;transition:text-decoration .2s ease-in-out;cursor:pointer}.expense-file:hover{text-decoration:underline;color:#0056b3;cursor:pointer}.popover-container .hover-content{display:none;position:absolute;cursor:pointer}.popover-container:hover .hover-content{display:block;cursor:pointer}.summary-row{font-weight:700}.non-summary-table-cell{display:table-cell;padding:12px;text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color);border:solid 1px white!important}.summary-table-cell{display:table-cell;padding:12px;text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color);border:solid 1px var(--border-color)!important;border-top:solid 1.5px var(--border-color)!important}.last-cell{border-right:1px solid var(--border-color)!important}.table-last-cell{border-bottom:1px solid var(--border-color)!important}.skeleton-loader{display:table;width:100%;border-collapse:collapse}.skeleton-row{display:table-row;border-bottom:1px solid var(--border-color)}.skeleton-cell{display:table-cell;padding:12px;height:35px;background:#fff;position:relative}.skeleton-cell:before{content:\"\";position:absolute;inset:3px;background:linear-gradient(90deg,#f5f5f5 25%,#eaeaea,#f5f5f5 75%);background-size:200% 100%;animation:pulse 1.5s infinite linear;border-radius:4px}.skeleton-cell.sticky-column{position:sticky;left:0;z-index:11;background:#f5f5f5}.skeleton-cell.actionCol.sticky-column{position:sticky;right:0;left:auto;background:#f5f5f5}@keyframes pulse{0%{background-position:200% 0}to{background-position:-200% 0}}.form-builder-table-box{height:108px;display:flex;justify-content:center;align-items:center;border:1px dashed #a8a1a1}\n"] }]
|
|
1439
|
+
], template: "<div class=\"table-layout\" [id]=\"tableId\" [ngStyle]=\"{'padding-top': '1px', 'width': tableWidth}\" [dir]=\"direction\">\n <div>\n <div *ngIf=\"title\" class=\"d-flex justify-content-center table-title align-text-center\">\n {{title}}\n </div>\n <div *ngIf=\"isNosIndicator || searchBar || isButtons\" class=\"flex justify-content-between\" style=\"padding-bottom: 20px;\">\n <div class=\"flex\">\n <!-- SKS26APR25 List View Filter -->\n <app-list-view-filter *ngIf=\"listViews && listViews.length > 0\"\n [listViews]=\"listViews\"\n [selectedView]=\"selectedView\"\n [displayedColumns] = 'displayedColumns'\n [tableFilterArray]=\"tableFilterArray\"\n (listViewEmit)=\"listViewEmit($event)\">\n </app-list-view-filter>\n <div *ngIf=\"(!listViews || listViews.length === 0) && isNosIndicator\" class=\"noOfRec\" style=\"display: flex; align-items: flex-end;\">\n <p style=\"font-weight: 500; margin-right: 5px; margin-bottom: 0px;\">\n Nos </p>\n <div style=\"color: rgb(43, 87, 249);\">{{totalRecords || totalCount}}</div>\n </div>\n </div>\n\n <div class=\"flex\" style=\"align-items: center;\">\n <div *ngIf=\"searchBar\" class=\"search\">\n <div class=\"flex search-bar\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\"\n stroke=\"#787486\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M21.6295 20.1667L19.7271 18.3333\" stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <input type=\"text\" placeholder=\"Search\"\n (keyup)=\"searchConfigs ? emptySearch($event.target.value) : applyFilter($event.target.value)\"\n [value]=\"searchBoxValue || ''\" #input>\n <svg *ngIf=\"searchConfigs && searchBar\" class=\"configSearch\" (click)=\"onSearch(input.value)\"\n width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 5H20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M14 8H17\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M21 11.5C21 16.75 16.75 21 11.5 21C6.25 21 2 16.75 2 11.5C2 6.25 6.25 2 11.5 2\"\n stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M22 22L20 20\" stroke=\"#ffffff\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <div class=\"flex\" *ngIf=\"isButtons\" style=\"padding-left: 7px; gap: 7px;\">\n <div class=\"flex\" *ngFor=\"let button of buttonArray\">\n <nxt-button class=\"data-table-fsbtn\"\n (buttonClickEmit)=\"(button.type === 'group' || button.type === 'dropdown') ? commonButtonClick($event) : commonButtonClick(button)\"\n [buttonType]=\"button.class\" [buttonValue]=\"button.name\" [buttonConfig]=\"button.buttonConfig\"\n [type]=\"button.type\" class=\"ms-2 me-2\" [fcBtnIconLeftSrc]=\"button.fcBtnIconLeftSrc\"\n [isImageSvg]=\"button.isImageSvg\">\n </nxt-button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"table-margin\">\n <div class=\"table-container\" [ngStyle]=\"{ height: isPagination ? '450px' : 'auto' }\" #tableContainer\n (scroll)=\"onScroll(tableContainer)\">\n <ng-container>\n <div class=\"custom-table\">\n <!--SKS15FEB25 Table Header -->\n <div class=\"table-header\" [ngClass]=\"{ 'shadow': isScrolled }\">\n <div class=\"table-row\">\n <!--SKS15FEB25 Checkbox Column -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column head-color\">\n <input type=\"checkbox\" (click)=\"$event.stopPropagation()\" (change)=\"masterToggle()\"\n [checked]=\"selection?.hasValue()\"\n [indeterminate]=\"selection?.hasValue() && !isAllSelected()\"\n class=\"custom-checkbox\">\n </div>\n\n <!--SKS15FEB25 Data Columns -->\n <div *ngFor=\"let column of currentDisplayedColumns; let i = index\"\n class=\"table-cell tableHeader head-color\"\n [class.sticky-column]=\"i === (stickyCondition - 1)\"\n [class.active-column]=\"activeColumn === column\"\n [class.selected-column]=\"isEditable && selectedColumn === column\"\n (click)=\"$event.stopPropagation(); onColumnClick(column); currentSortColumns.includes(column) ? sortData(column) : ''\"\n (mouseenter)=\"hoveredColumn = column\" (mouseleave)=\"hoveredColumn = null\">\n <div class=\"columnDiv\">\n <div class=\"column-header\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"isEditable && selectedColumn === column\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(column)\">\n \u2715\n </div>\n <div class=\"ellipsis\"\n [title]=\"currentHeaderLabels[currentDisplayedColumns.indexOf(column)]\">\n {{ currentHeaderLabels[currentDisplayedColumns.indexOf(column)] }}\n </div>\n <div class=\"position-relative\">\n <svg *ngIf=\"currentFilterColumns.includes(column)\" (click)=\"$event.stopPropagation(); filter(column)\"\n style=\"padding-right: 2px;\" width=\"12\" height=\"11\"\n viewBox=\"0 0 12 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M10.75 1.25H0.75L4.75 5.71722V8.80556L6.75 9.75V5.71722L10.75 1.25Z\"\n stroke=\"#242533\" stroke-width=\"1.2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <!--SKS15FEB25 Red dot for active filter -->\n <circle\n *ngIf=\"filterDataArray && filterDataArray[column]?.length > 0\"\n cx=\"9\" cy=\"2\" r=\"2.5\" fill=\"red\"></circle>\n </svg>\n <div *ngIf=\"currentSortColumns.includes(column)\" class=\"sort-indicators\">\n <span *ngIf=\"currentSortColumn === column\" class=\"sort-direction\">\n {{ currentSortDirection === 'asc' ? '\u2191' : currentSortDirection\n === 'desc' ? '\u2193' : '' }}\n </span>\n <span\n *ngIf=\"hoveredColumn === column && currentSortColumn !== column\"\n class=\"sort-direction\">\n \u2191\n </span>\n </div>\n <div *ngIf=\"searchFilter && column === selectedFilter\"\n class=\"search-component position-absolute\" (click)=\"$event.stopPropagation();\">\n <div class=\"card\">\n <div class=\"content\">\n <div class=\"flex\">\n <div class=\"fsearch\" [class.resized]=\"isResized\">\n <div class=\"fsearch-bar\">\n <svg class=\"searchSvg\" width=\"18\" height=\"20\"\n viewBox=\"0 0 24 22\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.6413 19.25C16.6322 19.25 20.6781 15.3511 20.6781 10.5417C20.6781 5.73218 16.6322 1.83333 11.6413 1.83333C6.6504 1.83333 2.60449 5.73218 2.60449 10.5417C2.60449 15.3511 6.6504 19.25 11.6413 19.25Z\"\n stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M21.6295 20.1667L19.7271 18.3333\"\n stroke=\"#787486\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n <input class=\"width-100\" type=\"text\"\n placeholder=\"Search\"\n [(ngModel)]=\"searchText\"\n class=\"searchinput\">\n </div>\n </div>\n <svg *ngIf=\"isResized\" (click)=\"closefilter()\"\n class=\"close-icon\" width=\"24\" height=\"24\"\n viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9.16998 14.83L14.83 9.17001\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M14.83 14.83L9.16998 9.17001\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M9 22H15C20 22 22 20 22 15V9C22 4 20 2 15 2H9C4 2 2 4 2 9V15C2 20 4 22 9 22Z\"\n stroke=\"currentColor\" stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n <div class=\"filter-content\" [style]=\"'overflow-y: auto'\">\n <div\n *ngFor=\"let data of filterArray | searchFilter : searchText\">\n <div class=\"mt-3 mb-3 checkboxdiv\"\n style=\"gap: 5px;\">\n <input type=\"checkbox\"\n [checked]=\"isSelected(data)\" [value]=\"data\"\n [id]=\"data\" (change)=\"checkedData(data)\">\n <div class=\"ms-2 label-data\">{{data}}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"resize-handle\"></div> <!--SKS15FEB25 appRowResizer -->\n </div>\n </div>\n\n <!--SKS15FEB25 Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"table-cell head-color actionCol sticky-column\"\n style=\"padding: 12px !important;\">\n {{actionColumHeader}}\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Table Body -->\n <div class=\"table-body\" *ngIf=\"!isLoading\">\n <div *ngFor=\"let element of dataSource.data; let i = index\" class=\"table-row\"\n (click)=\"tableClick(element)\">\n <!--SKS15FEB25 Checkbox Cell -->\n <div *ngIf=\"withCheckBox\" class=\"table-cell sticky-column body-color\">\n <input type=\"checkbox\" class=\"custom-checkbox\" (click)=\"$event.stopPropagation()\"\n (change)=\"separateRowSelect(selection.toggle(element), element)\"\n [checked]=\"selection.isSelected(element)\"\n [disabled]=\"(element.isPayProcessed === true)\">\n </div>\n\n <!--SKS15FEB25 Data Cells -->\n <div *ngFor=\"let column of currentDisplayedColumns; let last = last; ellipsis\"\n class=\"table-cell body-color\"\n [class.selected-cell]=\"isEditable && selectedColumn === column\">\n <div>\n <div *ngIf=\"hyperLinkColumns?.includes(column)\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ ('-' | getValue: element : column) | date }}\n </div>\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ ('-' | getValue: element : column) | time }}\n </div>\n </ng-container>\n </ng-template>\n <ng-template #default>\n <div (click)=\"onClickHyperlink(column,element, checkHyperlinkCheck(column))\"\n class=\"{{checkHyperlinkCheck(column) ? ' hyper-link clickable ' : ''}} ellipsis\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n {{ '-' | getValue: element : column }}\n </div>\n </ng-template>\n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\">\n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\"\n width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\"\n fill=\"#434555\" fill-opacity=\"0.5\" />\n </svg>\n </ng-container>\n </div>\n\n <div *ngIf=\"!editColumn?.includes(column)\">\n <div *ngIf=\"!checkHyperlinkCheck(column) && !fileColumns?.includes(column)\"\n style=\"font-size: {{rowTextSize ? rowTextSize : '13px'}}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n <ng-container *ngIf=\"isDateColumn(column); else checkTime\">\n <!-- {{ getValue(element,column) | date }} -->\n {{ ('-' | getValue: element : column) | date }}\n </ng-container>\n <ng-template #checkTime>\n <ng-container *ngIf=\"isTimeColumn(column); else default\">\n <!-- {{ getValue(element,column) | time }} -->\n {{ ('-' | getValue: element : column) | time }}\n </ng-container>\n </ng-template>\n <ng-template #default>\n <!-- {{ getValue(element,column)}} -->\n {{ '-' | getValue: element : column }}\n </ng-template>\n <!--SKS15FEB25 rightnav column -->\n <ng-container *ngIf=\"objectColumns?.includes(column)\">\n <svg class=\"ms-2\" (click)=\"onSideNavInfoClick(element, column)\"\n width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M6.00033 11.8334C2.77866 11.8334 0.166992 9.22171 0.166992 6.00008C0.166992 2.77842 2.77866 0.166748 6.00033 0.166748C9.22196 0.166748 11.8337 2.77842 11.8337 6.00008C11.8337 9.22171 9.22196 11.8334 6.00033 11.8334ZM5.41699 5.41675V8.91675H6.58366V5.41675H5.41699ZM5.41699 3.08341V4.25008H6.58366V3.08341H5.41699Z\"\n fill=\"#434555\" fill-opacity=\"0.5\" />\n </svg>\n </ng-container>\n </div>\n <!-- SKS18MAR25 file column -->\n <div *ngIf=\"fileColumns?.includes(column)\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n class=\"popover-container\">\n <!-- Trigger -->\n <div class=\"hover-base\">\n <svg width=\"14\" height=\"16\" viewBox=\"0 0 14 16\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M13 7.78525L7.04859 13.7602C6.81767 13.9945 6.54217 14.1805 6.23819 14.3076C5.9342 14.4346 5.60784 14.5 5.27817 14.5C4.94849 14.5 4.62213 14.4346 4.31814 14.3076C4.01416 14.1805 3.73866 13.9945 3.50774 13.7602L1.72732 11.9578C1.26124 11.4864 1 10.8516 1 10.1902C1 9.52876 1.26124 8.89388 1.72732 8.42257L8.06883 2.08913C8.2548 1.90245 8.47605 1.75429 8.71983 1.65317C8.96361 1.55206 9.22508 1.5 9.48917 1.5C9.75325 1.5 10.0147 1.55206 10.2585 1.65317C10.5023 1.75429 10.7235 1.90245 10.9095 2.08913L11.6197 2.79616C11.8072 2.98131 11.956 3.20159 12.0576 3.44429C12.1591 3.68699 12.2114 3.94731 12.2114 4.21023C12.2114 4.47316 12.1591 4.73348 12.0576 4.97618C11.956 5.21888 11.8072 5.43916 11.6197 5.62431L5.99834 11.2408C5.90535 11.3341 5.79472 11.4082 5.67284 11.4587C5.55095 11.5093 5.42021 11.5353 5.28817 11.5353C5.15612 11.5353 5.02539 11.5093 4.9035 11.4587C4.78161 11.4082 4.67098 11.3341 4.578 11.2408L4.22791 10.8823C4.13416 10.7897 4.05975 10.6795 4.00897 10.5582C3.95819 10.4368 3.93205 10.3067 3.93205 10.1752C3.93205 10.0438 3.95819 9.91361 4.00897 9.79226C4.05975 9.67091 4.13416 9.56077 4.22791 9.46819L7.99881 5.74381\"\n stroke=\"#434555\" stroke-width=\"1.3\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n\n <!-- Popover Content -->\n <div class=\"hover-content\">\n <div class=\"expenseCon\">\n <div *ngFor=\"let data of element[column]\">\n <div class=\"cursor-pointer expense-file\"\n (click)=\"expenseAttachment(data?.file)\">\n {{ data?.fileName }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 added input box for inline edit input-->\n <div *ngIf=\"editColumn && editColumn.length > 0\">\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('string') \"\n class=\"on-edit d-flex\">\n <input #editColElement class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event, element,column)\"\n [readOnly]=\"element.editRow ? false : true\">\n </div>\n <!--SKS15FEB25 In table, like text input, added drop down and time inputs as well -->\n <div *ngIf=\" ('-' | editColumnCheck: column : editColumn) === ('object') \"\n class=\"on-edit d-flex\">\n <input\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('text') \"\n #editColElement class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [readOnly]=\"element.editRow ? false : true\">\n <input\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('time') \"\n type=\"time\" class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [ngModel]=\"getValue(element,column)\"\n [class]=\"element.editRow ? 'input-box' : '' \" placeholder=\"HH:mm:ss\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [disabled]=\"element.editRow ? false : true\" />\n <div\n *ngIf=\" ('-' | editColumnType: column : editColumn) === ('dropdown') \">\n <select type=\"dropdown\" *ngIf=\"element.editRow\"\n class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\">\n <option [disabled]=\"element.editRow ? false : true\"\n *ngFor=\"let data of [] | editColumnDropdown: column : editColumn \"\n [ngModel]=\"data.value || data.name\">{{data.name}}</option>\n </select>\n <input *ngIf=\"!element.editRow\" #editColElement\n class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\"\n [class]=\"element.editRow ? 'input-box' : '' \"\n [attr.placeholder]=\"element.editRow ? 'Enter' : ''\"\n [ngModel]=\"getValue(element,column)\"\n (ngModelChange)=\"updateEdit(i,$event,element,column)\"\n [readOnly]=\"true\">\n </div>\n\n </div>\n </div>\n </div>\n </div>\n\n <!--SKS15FEB25 Action Buttons -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"table-cell actionCol\">\n <div class=\"actionButton\" style=\"display: flex; align-items: center;\">\n\n <!--SKS15FEB25 Edit Button -->\n <div *ngIf=\"isEditRow\" class=\"eicon-container\" matTooltip=\"Edit Record\"\n style=\"padding: 2px; border: 1px solid #dcdcdc; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\" edit-icon\"\n style=\"padding: 2px 4px; border-radius: 5px; background-color: #f5f5f5;\">\n <svg (click)=\"onEdit(element)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\"\n fill=\"#6C757D\" />\n </svg>\n </div>\n </div>\n\n\n <!--SKS15FEB25 Delete Button -->\n <div *ngIf=\"isDeleteRow\" class=\"dicon-container\" matTooltip=\"Delete Record\"\n style=\"padding: 2px; border: 1px solid #ffb5b5; border-radius: 5px; margin-left: 3px; margin-right: 3px;\">\n <div class=\"delete-icon\"\n style=\"padding: 2px 4px; border-radius: 5px; background-color: #feeeed;\">\n <svg (click)=\"deleteRecord(element,i)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\"\n stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\"\n stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <!--SKS15FEB25 Render inline buttons up to Size -->\n <div *ngFor=\"let button of actionButtonArray?.buttonArray; let i = index\">\n <div *ngIf=\"i < actionButtonArray?.size\"\n style=\" margin-left: 3px; margin-right: 3px;\">\n <div *ngIf=\"isConditionMet(element, button.conditions)\"\n [matTooltip]=button.tooltip\n (click)=\"actionButtonClicked(button,element)\"\n (mouseenter)=\"$event.target.style.border = '1px solid ' + button.hoverBorderColor\"\n (mouseleave)=\"$event.target.style.border = '1px solid ' + button.borderColor\"\n style=\"padding: 2px; border-radius: {{button.borderRadius}}px; border: 1px solid {{button.borderColor}};\">\n <div (mouseenter)=\"$event.target.style.backgroundColor = button.hoverBackgroundColor\"\n (mouseleave)=\"$event.target.style.backgroundColor = button.backgroundColor\"\n style=\"padding: {{button.padding}}px {{button.padding + 2}}px; border-radius: {{button.borderRadius}}px; background-color: {{button.backgroundColor}};\">\n <img *ngIf=\"button.iconSrc\" #imgElement [src]=\"button.iconSrc\"\n (mouseenter)=\"imgElement.src = button.hoverIconSrc || button.iconSrc\"\n (mouseleave)=\"imgElement.src = button.iconSrc\">\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"dropdownActionButton && dropdownActionButton.length > 0\"\n class=\"dropdown\">\n <div class=\"clickable-img\" (click)=\"toggleDropdown(i)\"\n style=\" margin-left: 3px; margin-right: 3px;\">\n <div\n style=\"background-color: #f5f5f5; padding: 2px 4px; border-radius: 5px;\">\n <svg style=\"background-color: #f5f5f5; border-radius: 5px; border: 1px solid #6c757d;\"\n width=\"16\" height=\"16\" viewBox=\"0 0 40 40\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\"\n fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\"\n stroke-miterlimit=\"10\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\"\n stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n </div>\n\n <div class=\"dropdown-menu\"\n [style.right]=\"((actionButtonArray?.size ?? 0) - (actionButtonArray?.buttonArray?.size ?? 0) + (isEditRow ? 1 : 0) + (isDeleteRow ? 1 : 0) + (dropdownActionButton?.length > 0 ? 1 : 0)) * 100 + '%'\"\n *ngIf=\"currentOpenIndex === i\">\n <div *ngFor=\"let btn of dropdownActionButton\">\n <button *ngIf=\"isConditionMet(element, btn.conditions)\"\n [attr.data-id]=\"element.id\" style=\"display: flex;\" type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n [matTooltip]=btn.tooltip [disabled]=\"btn.buttonDisable\"\n (click)=\"actionButtonClicked(btn,element)\">\n <img *ngIf=\"btn.iconSrc\" [src]=\"btn.iconSrc\">\n <div class=\"fc-btn-text\" style=\"padding-left: 10px;\">\n {{btn.name}}</div>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- SKS20MAR25 Summary Rows -->\n <ng-container\n *ngIf=\"summaryRows && summaryRows.length > 0 && isSummaryColumn && dataSource.data && dataSource?.data?.length > 0 && !isLoading\">\n <div *ngFor=\"let row of summaryRows\" class=\"table-row summary-row\">\n <!-- Label in the first column -->\n <div *ngIf=\"withCheckBox\" class=\"non-summary-table-cell\"></div>\n <!-- Empty cells to align with data columns -->\n <div *ngFor=\"let col of isSummaryStartColumn; let last = last\"\n class=\"non-summary-table-cell\" [class.last-cell]=\"last\">\n </div> <!-- Value or input in the last column -->\n <div class=\"summary-table-cell\"\n [class.selected-cell]=\"isEditable && selectedColumn === row.fieldName\"\n (click)=\"$event.stopPropagation(); onColumnClick(row.fieldName)\">{{ row.label }}\n </div>\n <div class=\"summary-table-cell\"\n [class.selected-cell]=\"isEditable && selectedColumn === row.fieldName\">\n <ng-container *ngIf=\"row.type === 'calculation'\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"isEditable && selectedColumn === row.fieldName\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(row.fieldName)\">\n \u2715\n </div>\n {{ summaryValues[row.fieldName] | number }}\n </ng-container>\n <ng-container *ngIf=\"row.type === 'input'\">\n <input type=\"number\" [(ngModel)]=\"summaryValues[row.fieldName]\"\n (ngModelChange)=\"onSummaryInputChange()\" class=\"nxt-lop-input table-width\"\n style=\"font-size: {{ rowTextSize ? rowTextSize : '13px' }}; color: {{rowTextColor ? rowTextColor : '#2c3137'}};\">\n </ng-container>\n </div>\n <!-- SKS20MAR25 Empty cells to align with data columns -->\n <div *ngFor=\"let col of isSummaryEndColumn; let last = last\"\n class=\"non-summary-table-cell\">\n </div>\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"non-summary-table-cell actionCol sticky-column\">\n </div>\n </div>\n </ng-container>\n\n <!--SKS28MAR25 In the Loading section -->\n <div class=\"table-body\" *ngIf=\"isLoading\">\n <!-- Repeat for 5 skeleton rows -->\n <div *ngFor=\"let _ of [1,2,3,4,5]\" class=\"table-row\">\n <!-- Checkbox Column -->\n <div *ngIf=\"withCheckBox\" class=\"skeleton-cell sticky-column\"></div>\n\n <!-- Data Columns -->\n <div *ngFor=\"let col of currentDisplayedColumns\" class=\"skeleton-cell \"></div>\n\n <!-- Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"skeleton-cell actionCol\"></div>\n </div>\n </div>\n <!--SKS15FEB25 No Data Row -->\n <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from !== 'formBuilder'\" class=\"\">\n No records/data found.\n </div>\n <!-- <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from === 'formBuilder'\" class=\"form-builder-table-box\">\n Add / drags fields from elements sections\n </div> -->\n </div>\n </ng-container>\n </div>\n <!--SKS15FEB25 Pagination -->\n <div [class.shadow-hidden]=\"isShadowHidden\">\n <!-- table input save button changes -->\n <div class=\"d-flex inlineAdd justify-content-end\">\n <div class=\"flex addIconBor cursor-pointer\" *ngIf=\"addInlineRecord \"\n (click)=\"addTableRecord(inlineElement)\" matTooltip=\"Add Record\">\n <div class=\"addIcon\">\n <svg class=\"nav-icon\" xmlns=\"http://www.w3.org/2000/svg\" height=\"24\"\n viewBox=\"0 -960 960 960\" width=\"24\">\n <path\n d=\"M440-280h80v-160h160v-80H520v-160h-80v160H280v80h160v160Zm40 200q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z\" />\n </svg>\n </div>\n </div>\n <!--SKS15FEB25 removed button disable logic, added another condition for button showing-->\n <!--SKS15FEB25 SR06JAN2025 button disable logic for not select any employee-->\n <nxt-button *ngIf=\"(editColumn?.length > 0 || tableSaveButton) && from != 'formBuilder'\"\n buttonType=\"btn btn-primary\" [buttonDisable]=\"selection?.selected?.length === 0\"\n (buttonClickEmit)=\"saveButton()\" buttonValue=\"Save\"></nxt-button>\n </div>\n <nxt-pagination *ngIf=\"isPagination\" [pageSizeOptions]=\"pageSizeOptions\" [collectionSize]=\"configPagination ? totalRecords || totalCount : filterTableNos\"\n [pageSize]=\"pageSize\" [currentPage]=\"pageIndex\" [firstLastButtons]=\"true\"\n (event)=\"pageParams($event)\">\n </nxt-pagination>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS15FEB25 alert on deleting record -->\n<div *ngIf=\"deleteModal\" class=\"modal modal-backdrop show d-block\" id=\"deleteRecord\" tabindex=\"-1\"\n aria-labelledby=\"deleteRecordLabel\" [attr.aria-hidden]=\"!deleteModal\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <b class=\"modal-title fs-5\" id=\"deleteRecordLabel\">Delete Record</b>\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\n (click)=\"deleteModal = false\"></button>\n </div>\n <div class=\"modal-body\">\n Are you sure want to delete the record ?\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\"\n (click)=\"deleteModal = false\">No</button>\n <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\n (click)=\"deleteRecordData()\">Yes</button>\n </div>\n </div>\n </div>\n</div>", styles: [".custom-table{display:table;width:100%;border-collapse:collapse;direction:var(--direction);background:var(--body-bg)}.table-header{display:table-header-group;position:sticky;top:0;z-index:100;box-shadow:none;transition:box-shadow .3s ease-in-out;background:var(--header-bg)}.shadow{box-shadow:0 4px 5px #0001!important}.table-body{display:table-row-group}.table-row{display:table-row;position:relative;border-bottom:1px solid var(--border-color)}.table-cell{display:table-cell;padding:12px;border-bottom:solid 1px var(--border-color);text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color)}.sticky-column{position:sticky;left:0;z-index:11;background:var(--header-bg)}.actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;right:0;background:var(--header-bg)}.table-container{width:100%;overflow-y:auto;border-top:1px solid #e0e0e0;scrollbar-width:none}.table-container::-webkit-scrollbar{display:none}.column-header{display:flex;align-items:center;gap:7px}.column-header img{cursor:pointer}.shadow-hidden{position:relative}.shadow-hidden:before{content:\"\";position:absolute;z-index:11;top:-10px;left:0;width:100%;height:10px;background:linear-gradient(to top,var(--scroll-shadow),transparent)}.resize-handle{position:relative;left:14px;width:1.5px;background-color:#dddd}.resize-handle:hover{background-color:#2196f3}.columnDiv{display:flex;justify-content:space-between}.search{display:flex;justify-content:space-between;border:1px solid rgba(67,69,85,.3);border-radius:7px;align-self:center;padding:3px}.search-bar{width:100%;margin:5px}.configSearch{height:22px;padding:3px;margin:10p;background-color:#247dff;border-radius:4px}input::placeholder{color:#abafb1}.sort-indicators{display:inline-block;width:10px;padding-left:5px}.sort-direction{font-size:12px;color:var(--text-color);opacity:.7}.tableHeader{cursor:pointer;-webkit-user-select:none;user-select:none;transition:background-color .3s}.tableHeader:hover{background-color:var(--hover-bg)}.search-component{top:163%;left:0;z-index:-10;background-color:#fff;box-shadow:0 2px 10px #0000001a}input{border:none}.card{background:#fff;box-shadow:0 2px #0a0a0a1f;border-radius:8px;border-color:#e9e9e9}.fsearch{width:100%;justify-content:space-between;font-weight:400;font-size:13px;display:flex;background:#f0f5ff;border-radius:6px;align-self:center}.content{margin:6px;width:150px}.fsearch-bar{display:flex;flex-direction:row;width:100%;margin:5px;transition:width .3s ease}.search.resized{width:calc(100% - 40px)}.filter-content{width:100%;max-height:150px;padding-left:5px}.label-data{font-weight:200;font-size:12px;color:#434555d9}input[type=checkbox]{height:16px;width:16px;border-radius:5px;margin-left:2px}input[type=checkbox]:after{width:4px;height:7px;left:5px;top:3px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:checked{--r: 43deg}.checkbox-cont{display:flex;align-items:center}.searchinput{border:none;background-color:#f0f5ff;width:85%;font-size:12px;color:#275efe;font-weight:600}.searchSvg{margin-right:3px}.close-icon{margin-left:4px;width:36px;height:32px;cursor:pointer;padding-top:9px;padding-bottom:9px;background-color:#ffefee;color:red;border-radius:4px;transition:background-color .3s ease,color .3s ease}.close-icon:hover{background-color:red;color:#fff}.checkboxdiv{display:flex;align-items:center}.checkboxdiv input{flex-shrink:0}input:focus,input:active,select:focus,select:active,textarea:focus,textarea:active,button:focus,button:active{outline:none!important}@supports (-webkit-appearance: none) or (-moz-appearance: none){input[type=checkbox]{--active: #275EFE;--active-inner: #fff;--focus: 2px rgba(39, 94, 254, .3);--border: #BBC1E1;--border-hover: #275EFE;--background: #fff;--disabled: #F6F8FF;--disabled-inner: #E1E6F9;-webkit-appearance:none;-moz-appearance:none;height:21px;outline:none;display:inline-block;vertical-align:top;position:relative;margin:0;cursor:pointer;border:1px solid var(--bc, var(--border));background:var(--b, var(--background))!important;transition:background .3s,border-color .3s,box-shadow .2s}input[type=checkbox]:after{content:\"\";display:block;left:0;top:0;position:absolute;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}input[type=checkbox]:checked{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:disabled{--b: var(--disabled);cursor:not-allowed;opacity:.9}input[type=checkbox]:disabled:checked{--b: var(--disabled-inner);--bc: var(--border)}input[type=checkbox]:disabled+label{cursor:not-allowed}input[type=checkbox]:hover:not(:checked):not(:disabled){--bc: var(--border-hover)}input[type=checkbox]:focus{box-shadow:0 0 0 var(--focus)}input[type=checkbox]:not(.switch){width:21px}input[type=checkbox]:not(.switch):after{opacity:var(--o, 0)}input[type=checkbox]:not(.switch):checked{--o: 1}input[type=checkbox]+label{font-size:14px;line-height:21px;display:inline-block;vertical-align:top;cursor:pointer;margin-left:4px}input[type=checkbox]:not(.switch){border-radius:7px}input[type=checkbox]:not(.switch):after{width:5px;height:9px;border:2px solid var(--active-inner);border-top:0;border-left:0;left:7px;top:4px;transform:rotate(var(--r, 20deg))}input[type=checkbox]:not(.switch):checked{--r: 43deg}input[type=checkbox].switch{width:38px;border-radius:11px}input[type=checkbox].switch:after{left:2px;top:2px;border-radius:50%;width:15px;height:15px;background:var(--ab, var(--border));transform:translate(var(--x, 0))}input[type=checkbox].switch:checked{--ab: var(--active-inner);--x: 17px}input[type=checkbox].switch:disabled:not(:checked):after{opacity:.6}input[type=checkbox]:indeterminate{--b: var(--active);--bc: var(--active);--d-o: .3s;--d-t: .6s;--d-t-e: cubic-bezier(.2, .85, .32, 1.2)}input[type=checkbox]:indeterminate:after{content:\"\";display:block;left:8px;top:5px;rotate:69deg;position:absolute;width:2px;height:9px;background:var(--active-inner);opacity:6;transition:transform var(--d-t, .3s) var(--d-t-e, ease),opacity var(--d-o, .2s)}}:host{--primary-color: #275EFE;--secondary-color: #6C757D;--text-color: #434555;--border-color: #e0e0e0;--hover-bg: #f9f9f9;--header-bg: #ffffff;--body-bg: #ffffff;--danger-color: #FF2C10;--scroll-shadow: rgba(0, 0, 0, .08);--box-shadow: 0 2px 10px rgba(0, 0, 0, .1)}:host(.dark-theme){--primary-color: #6c8dfa;--text-color: #ffffff;--header-bg: #2c2c2c;--body-bg: #1e1e1e;--border-color: #404040;--hover-bg: #373737}.hyper-link:hover{color:#00f!important;text-decoration:underline;cursor:pointer}.on-edit:hover .edit-icon{visibility:visible}.nxt-lop-input{border-radius:5px;color:#2c3137;font-weight:400;font-size:13px;transition:all .2s}.input-box{border:solid}.inlineAdd{align-items:center;gap:10px;padding-top:10px}.addIconBor{padding:4px;border-radius:5px;border:1px solid #6c757d;transition:background-color .3s,border-color .3s}.addIcon{padding:1px;border-radius:5px;background-color:#ddd;transition:background-color .3s}.addIconBor:hover .addIcon{background-color:#bbd3ff}::ng-deep .modal-backdrop{background-color:#000000b3!important}::ng-deep .modal-backdrop.show{opacity:1!important}.eicon-container:hover .edit-icon svg path{fill:#2163ff!important}.eicon-container:hover .edit-icon{background-color:#c9d2ff!important;cursor:pointer}.eicon-container:hover{border:1px solid #2163ff!important}.dicon-container:hover .delete-icon svg path{stroke:#fff!important;fill:transparent!important}.dicon-container:hover .delete-icon{background-color:#ff7575!important;cursor:pointer}.dicon-container:hover{border:1px solid #ff2121!important}.clickable-img{position:relative;cursor:pointer;padding:2px;border:1px solid #dddddd;border-radius:5px}.clickable-img:hover{border:1px solid rgb(31,105,255);border-radius:5px}.clickable-img:hover div svg{background-color:#ecf3ff!important}.clickable-img:hover div{background-color:#ecf3ff!important}.dropdown-menu{left:unset!important;right:300%;top:12.5px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 4px 8px #0000001a}.dropdown .dropdown-menu{display:block}.dropdown-menu .btn{display:block;padding:10px;width:100%;text-align:left;background:transparent;border:none;cursor:pointer}[dir=rtl] .search{margin-left:7px}[dir=rtl] .noOfRec{gap:4px}[dir=rtl] .sticky-column{position:sticky;right:0;z-index:11;background:var(--header-bg)}[dir=rtl] .actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;left:0;background:var(--header-bg)}[dir=rtl] .resize-handle{position:relative;right:14px;width:1.5px;background-color:#dddd}[dir=rtl] .sort-indicators{padding-right:5px}::ng-deep [dir=rtl] nxt-pagination .dropdown-arrow{left:5px;right:unset!important}::ng-deep [dir=rtl] nxt-button .dropdown-menu{right:unset!important;left:0!important}[dir=rtl] .dropdown-menu{left:300%!important;right:unset!important}[dir=rtl] .fc-btn-text{padding-right:10px}.selected-cell{border-left:2px solid #2196F3!important;border-right:2px solid #2196F3!important;position:relative;z-index:1}.selected-column{position:relative;border:2px solid #2196F3!important;border-bottom:none!important;border-radius:4px}.close-column-btn{position:absolute;top:1px;right:1px;width:15px;height:15px;background:#f32121;color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:9px;cursor:pointer;z-index:2}.close-column-btn:hover{background:#1976d2!important}.table-row:last-child .selected-cell{border-bottom:2px solid #2196F3!important}.hover-content{position:absolute;z-index:1;background:#fff;border:1px solid #ccc;box-shadow:0 2px 5px #00000026;padding:10px;min-width:200px;border-radius:5px;top:70%;left:0;cursor:pointer}.expense-file{text-decoration:none;transition:text-decoration .2s ease-in-out;cursor:pointer}.expense-file:hover{text-decoration:underline;color:#0056b3;cursor:pointer}.popover-container .hover-content{display:none;position:absolute;cursor:pointer}.popover-container:hover .hover-content{display:block;cursor:pointer}.summary-row{font-weight:700}.non-summary-table-cell{display:table-cell;padding:12px;text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color);border:solid 1px white!important}.summary-table-cell{display:table-cell;padding:12px;text-overflow:ellipsis;white-space:nowrap;position:relative;color:var(--text-color);border:solid 1px var(--border-color)!important;border-top:solid 1.5px var(--border-color)!important}.last-cell{border-right:1px solid var(--border-color)!important}.table-last-cell{border-bottom:1px solid var(--border-color)!important}.skeleton-loader{display:table;width:100%;border-collapse:collapse}.skeleton-row{display:table-row;border-bottom:1px solid var(--border-color)}.skeleton-cell{display:table-cell;padding:12px;height:35px;background:#fff;position:relative}.skeleton-cell:before{content:\"\";position:absolute;inset:3px;background:linear-gradient(90deg,#f5f5f5 25%,#eaeaea,#f5f5f5 75%);background-size:200% 100%;animation:pulse 1.5s infinite linear;border-radius:4px}.skeleton-cell.sticky-column{position:sticky;left:0;z-index:11;background:#f5f5f5}.skeleton-cell.actionCol.sticky-column{position:sticky;right:0;left:auto;background:#f5f5f5}@keyframes pulse{0%{background-position:200% 0}to{background-position:-200% 0}}.form-builder-table-box{height:108px;display:flex;justify-content:center;align-items:center;border:1px dashed #a8a1a1}\n"] }]
|
|
1440
1440
|
}], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i1.DataService }, { type: i2.ChangeService }], propDecorators: { data: [{
|
|
1441
1441
|
type: Input
|
|
1442
1442
|
}], tableFilterData: [{
|
|
@@ -1551,4 +1551,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1551
1551
|
type: HostListener,
|
|
1552
1552
|
args: ['document:click', ['$event']]
|
|
1553
1553
|
}] } });
|
|
1554
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBYyxZQUFZLEVBQXFELE1BQU0sZUFBZSxDQUFDO0FBQy9KLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDL0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNqRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQs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QUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2RyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdHLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZHLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JHLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JHLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FB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QUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdHLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZHLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hHLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hHLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVHLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hHLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssU0FBUyxD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LENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzFHLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDbEgsSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN0SCxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzFHLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDbEksSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUNySCxJQUFJLENBQUMsY0FBYyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzdILElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUE7UUFHN0csSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDL0csSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUE7UUFDNUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQzNILElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDckQsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUMzRyxJ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QUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFFekMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RFLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdDLE1BQU0sS0FBSyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUN6QyxNQUFNLEdBQUcsR0FBRyxLQUFLLEdBQUcsUUFBUSxDQUFDO1lBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUQsQ0FBQzthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQTtRQUNsQyxDQUFDO1FBQ0QsSUFBRyxJQUFJLENBQUMsaUJBQWlCLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMzRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNsRyxDQUFDO1FBQ0QsSUFBRyxJQUFJLENBQUMsaUJBQWlCLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxJQUFJ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O3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBMEJhLElBQUk7c0JBQXZCLFNBQVM7dUJBQUMsT0FBTztnQkFDVyxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkEydkJpQixlQUFlO3NCQUExRCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3Q2hpbGQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCwgUmVuZGVyZXIyLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOeHRCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi9idXR0b24vbnh0LWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnh0UGFnaW5hdGlvbiB9IGZyb20gJy4uL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoRmlsdGVyUGlwZSB9IGZyb20gJy4uLy4uL3BpcGUvc2VhcmNoLWZpbHRlci9zZWFyY2gtZmlsdGVyLnBpcGUnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlL2RhdGUvZGF0ZS5waXBlJztcbmltcG9ydCB7IFRpbWVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZS90aW1lL3RpbWUucGlwZSc7XG5pbXBvcnQgeyBFZGl0Q29sdW1uQ2hlY2tQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZS9lZGl0Q29sdW1uQ2hlY2svZWRpdC1jb2x1bW4tY2hlY2sucGlwZSc7XG5pbXBvcnQgeyBFZGl0Q29sdW1uRHJvcGRvd25QaXBlIH0gZnJvbSAnLi4vLi4vcGlwZS9lZGl0Q29sdW1uRHJvcGRvd24vZWRpdC1jb2x1bW4tZHJvcGRvd24ucGlwZSc7XG5pbXBvcnQgeyBFZGl0Q29sdW1uVHlwZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlL2VkaXRDb2x1bW5UeXBlL2VkaXQtY29sdW1uLXR5cGUucGlwZSc7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBBUElNZXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9hcGltZXRhJztcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IENoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGFuZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEdldFZhbHVlUGlwZSB9IGZyb20gJy4uLy4uL3BpcGUvZ2V0LXZhbHVlLnBpcGUnO1xuaW1wb3J0IHsgTGlzdFZpZXdGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9saXN0LXZpZXctZmlsdGVyL2xpc3Qtdmlldy1maWx0ZXIuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbnh0LWRhdGF0YWJsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBOeHRCdXR0b25Db21wb25lbnQsXG4gICAgTnh0UGFnaW5hdGlvbixcbiAgICBTZWFyY2hGaWx0ZXJQaXBlLFxuICAgIERhdGVQaXBlLFxuICAgIFRpbWVQaXBlLFxuICAgIEVkaXRDb2x1bW5DaGVja1BpcGUsXG4gICAgRWRpdENvbHVtbkRyb3Bkb3duUGlwZSxcbiAgICBFZGl0Q29sdW1uVHlwZVBpcGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBHZXRWYWx1ZVBpcGUsXG4gICAgTGlzdFZpZXdGaWx0ZXJDb21wb25lbnRcbiAgICAvLyBSb3dSZXNpemVyRGlyZWN0aXZlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZGF0YXRhYmxlLmNvbXBvbmVudC5jc3MnXG59KVxuZXhwb3J0IGNsYXNzIE54dERhdGF0YWJsZSB7XG4gIEBJbnB1dCgpIGRhdGE6IGFueVtdID0gW107ICAvLyAgZ2V0IGRhdGEgdGhhdCB0byBiZSBkaXNwbGF5ZWQgaW4gYSBhcnJheVxuICBASW5wdXQoKSB0YWJsZUZpbHRlckRhdGE6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGNvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgLy8gQ29sdW1ucyBoYXZlIGEgbGFiZWwsIGEgY29sdW1uIHR5cGUsIGFuZCBmaWx0ZXIgZGV0YWlscy5cbiAgQElucHV0KCkgd2l0aENoZWNrQm94OiBib29sZWFuOyAgLy8gZ2V0IGlmIHdpdGggb3Igd2l0aG91dCBjaGVja2JveCBpbiB0YWJsZVxuICBASW5wdXQoKSBzZWFyY2hCYXI6IGJvb2xlYW47IC8vIGlmIGl0IGlzIHRydWUsIHRoZSBzZWFyY2ggYmFyIHdpbGwgYmUgZGlzcGxheWVkIG9uIHRhYmxlXG4gIEBJbnB1dCgpIHRhYmxlU2F2ZUJ1dHRvbiA9IGZhbHNlOyAvLyBzYXZlIGJ1dHRvbiBmb3IgZWRpdGluZyBMT1AgaW4gcGF5cm9sbCB0YWJsZSwgIGNoYW5nZWQgbmFtZSBmcm9tICdzYXZlTE9QJ1xuICBASW5wdXQoKSBzdGlja3lDb2x1bW4gPSBmYWxzZTsgLy8gaWYgdGhlIGxhc3QgY29sdW1uIHNob3VsZCBiZSBzdGlja3ksIGl0IHNob3VsZCBiZSBzZW50IGFzIGJvb2xlYW4gdmFsdWVcbiAgQElucHV0KCkgdGFibGVXaWR0aCA9ICcxMDAlJzsgLy8gd2lkdGggb2YgdGFibGUgY2FuIGJlIGFkanVzdGVkIGZyb20gcGFyZW50LCBieSBkZWZhdWx0IGl0IGlzIDEwMCVcbiAgQElucHV0KCkgYWN0aW9uQ29sdW1IZWFkZXIgPSAnQWN0aW9uJzsgIC8vIHRvIGNoYW5nZSB0aGUgaGVhZGVyIGZvciBhY3Rpb24gY29sdW1uXG4gIEBJbnB1dCgpIGFjdGlvbkJ1dHRvbjogYm9vbGVhbjsgIC8vdG8gc2hvdyBidXR0b24gY29sdW0gYXMgYWN0aW9uXG4gIEBJbnB1dCgpIHRpdGxlOiBhbnk7Ly8gdGhlIHRpdGxlIGZvciB0aGUgdGFibGU7XG4gIEBJbnB1dCgpIGlzQnV0dG9uczogYm9vbGVhbjsvLyBpcyBidXR0b24gcHJlc2VudCBpbiB0YWJsZTtcbiAgQElucHV0KCkgYnV0dG9uQXJyYXk6IGFueTsvLyBidXR0b25zIHRvIGJlIGRpc3BsYXllZDtcbiAgQElucHV0KCkgdGFibGVJZDogYW55OyAvLyBpZCBvZiB0YWJsZVxuICBASW5wdXQoKSBpc0VkaXRSb3c6IGJvb2xlYW47IC8vIGlmIGl0IGlzIHRydWUsIHRoZSByb3cgY2FuIGJlIGVkaXRlZFxuICBASW5wdXQoKSBpc0RlbGV0ZVJvdzogYm9vbGVhbjsgLy8gaWYgaXQgaXMgdHJ1ZSwgdGhlIHJvdyBjYW4gYmUgZGVsZXRlZFxuICBASW5wdXQoKSBhZGRJbmxpbmVSZWNvcmQ6IGJvb2xlYW47IC8vIGlmIGl0IGlzIHRydWUsIHRoZSByb3cgY2FuIGJlIGFkZGVkIGlubGluZVxuICBASW5wdXQoKSBzZWFyY2hDb25maWdzOiBhbnk7IC8vIHNlYXJjaCBjb25maWd1cmF0aW9uc1xuICBASW5wdXQoKSBkaXJlY3Rpb246ICdydGwnIHwgJ2x0cicgPSAnbHRyJzsgLy8gZGlyZWN0aW9uIG9mIHRhYmxlXG4gIEBJbnB1dCgpIHBhZ2luYXRpb246IGFueTsgLy8gcGFnaW5hdGlvbiBjb25maWd1cmF0aW9uc1xuICBASW5wdXQoKSBhY3Rpb25CdXR0b25BcnJheTogYW55OyAvLyBhY3Rpb24gYnV0dG9uIGNvbmZpZ3VyYXRpb25zXG4gIEBJbnB1dCgpIG11bHRpcGxlRmlsdGVyOiBhbnk7IC8vIGlmIHBhZ2luYXRpb24gdHJ1ZSB0aGVuIHRoaXMgd2lsbCBiZSB1c2VkXG4gIEBJbnB1dCgpIGlzUGFnaW5hdGlvbjogYW55OyAvLyBwYWdpbmF0aW9uIGNvbmZpZ3VyYXRpb25zIGlmIHRydWUgdGhlbiBwYWdpbmF0aW9uIHdpbGwgYmUgZW5hYmxlZFxuICBASW5wdXQoKSBpc05vc0luZGljYXRvcjogYW55OyAvLyBpZiB0cnVlIHRoZW4gbm8gZGF0YSBpbmRpY2F0b3Igd2lsbCBiZSBzaG93blxuICBASW5wdXQoKSBpc0VkaXRhYmxlOiBhbnk7IC8vIGlmIHRydWUgdGhlbiB0YWJsZSB3aWxsIGJlIGVkaXRhYmxlXG4gIEBJbnB1dCgpIGZyb206IGFueTsgLy8gZnJvbSBkYXRlIHBhbHRmb3JtIGJhc2VkIGluaXRpYWxpemUgaW5wdXRzIGV4Oi0gJ2Zvcm1CdWlsZGVyJ1xuICBASW5wdXQoKSBxdWVzdGlvbjogYW55OyAvLyBxdWVzdGlvbiBpcyB1c2VkIGZvciBueHQgZm9ybSBidWlsZGVyIHRhYmxlIHByZXZpZXdcbiAgQElucHV0KCkgcm93VGV4dFNpemU6IGFueTsgLy8gc2l6ZSBvZiByb3cgdGV4dFxuICBASW5wdXQoKSByb3dUZXh0Q29sb3I6IGFueTsgLy8gY29sb3Igb2Ygcm93IHRleHRcbiAgQElucHV0KCkgYXBpTWV0YTogc3RyaW5nOyAvLyBhcGkgbWV0YSBpcyB1c2VkIGZvciBueHQgZm9ybSBidWlsZGVyIHRhYmxlIHByZXZpZXdcbiAgQElucHV0KCkgc3VtbWFyeVJvd3M6IGFueTsgLy8gSW5wdXQgZm9yIGNvbmZpZ3VyYWJsZSBzdW1tYXJ5IHJvd3NcbiAgQElucHV0KCkgc3VtbWFyeUNvbHVtbnM6IGFueTsgLy8gSW5wdXQgZm9yIHN1bW1hcnkgY29sdW1ucyBjb25maWdcbiAgQElucHV0KCkgaXNMb2FkaW5nOiBhbnk7IC8vU0tTMjhNQVIyNSBJbnB1dCBmb3IgbG9hZGluZyBpbmRpY2F0b3JcbiAgQElucHV0KCkgdGFibGVDb25maWc6IGFueTsgLy8gdGFibGUgY29uZmlnIGZvciBueHQgZm9ybSBidWlsZGVyIHRhYmxlXG4gIEBJbnB1dCgpIHRhYmxlUGFyYW1zOiBhbnk7IC8vU0tTMTdBUFIyNSBSZWNlaXZlcyB0YWJsZVBhcmFtcyBpbmZvcm1hdGlvbiBmcm9tIHBhcmVudCBjb21wb25lbnRcbiAgQElucHV0KCkgbGlzdFZpZXdzOiBhbnlbXSA9IFtdOyAvL1NLUzI2QVBSMjUgUHJlZGVmaW5lZCBsaXN0IHZpZXdzXG5cbiAgQE91dHB1dCgpIHRhYmxlUm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47IC8vIGRhdGFzIHRvIGJlIHBhc3NlZCB3aGVuIHRhYmxlIHJvdyBpcyBjbGlja2VkXG4gIEBPdXRwdXQoKSBvbkVkaXREYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAvLyBpZiBlZGl0IGJ1dHRvbiBpcyBjbGlja2VkLCB0aGUgZGF0YSBvZiB0aGF0IHJvdyB3aWxsIGJlIHBhc3NlZFxuICBAT3V0cHV0KCkgc2F2ZUJ1dHRvbkRhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47IC8vIGVkaXRlZCByb3dzIGRhdGEgd2lsbCBiZSBwYXNzZWRcbiAgQE91dHB1dCgpIG9uRGVsZXRlRGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PjsgIC8vIHdoZW4gZGVsZXRlIGJ1dHRvbiBjbGlja2VkIHBhc3MgdGhlIGRhdGFcbiAgQE91dHB1dCgpIGJ1dHRvbkVtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47IC8vIHRoaXMgd2lsbCBlbWl0IGEgdGFibGUgdG9wIGJ1dHRvbiBjbGljayBldmVudFxuICBAT3V0cHV0KCkgaHlwZXJMaW5rRW1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PjsgLy8gaHlwZXIgbGluayBjbGljayBldmVudFxuICBAT3V0cHV0KCkgc2lkZU5hdkVtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZGF0YTogYW55LCBjb2w6IGFueSwgY29uZmlnOiBhbnkgfT47IC8vIHJpZ2h0bmF2IGNvbHVtbiBlbWl0XG4gIEBPdXRwdXQoKSBhY3Rpb25CdXR0b25FbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAvLyBkYXRhcyB0byBiZSBwYXNzZWQgd2hlbiB0YWJsZSByb3cgYWN0aXZlIGJ1dHRvbiBpcyBjbGlja2VkXG4gIEBPdXRwdXQoKSBjb2x1bW5TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBjb2x1bW46IHN0cmluZywgZGF0YTogYW55W10gfT4oKTtcbiAgQE91dHB1dCgpIHJlbW92ZUNvbHVtbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBjb2x1bW46IHN0cmluZywgZGF0YTogYW55W10gfT4oKTtcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRWYWx1ZXMgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpOyAvLyB0byBwYXNzIHRoZSBzZWxlY3RlZCBjaGVja2JveCB2YWx1ZXNcbiAgQE91dHB1dCgpIGZpbGVFbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7IC8vIHRvIHBhc3MgdGhlIGZpbGVcbiAgQE91dHB1dCgpIE54dFRhYmxlUGFyYW1zRW1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PjsgLy9TS1MxN0FQUjI1IHRvIHBhc3MgdGhlIHRhYmxlUGFyYW1zIGluZm9ybWF0aW9uXG4gIEBPdXRwdXQoKSBOeHRUYWJsZUZpbHRlckVtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47IC8vU0tTM01BWTI1IGZpbHRlciBjb2x1bW4gdmFsIGdldCBlbWl0IFxuICBAT3V0cHV0KCkgTnh0VGFibGVFbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAvLyB7XG4gIC8vICAgXCJwYWdpbmF0aW9uXCI6IHsgICAgICAgLy8gNFxuICAvLyAgICAgICBcInBhZ2VTaXplXCI6IDEwLFxuICAvLyAgICAgICBcInBhZ2VJbmRleFwiOiAxMFxuICAvLyAgIH0sXG4gIC8vICAgXCJ0YWJsZVNlYXJjaFwiOiB7ICAgICAgLy8gMVxuICAvLyAgICAgICBcImZpZWxkc1wiIDogW1xuICAvLyAgICAgICAgICAgXCJsaWdodFR5cGVcIixcbiAgLy8gICAgICAgICAgIFwic3lzdGVtXCIsXG4gIC8vICAgICAgICAgICBcInN0YXR1c1wiXG4gIC8vICAgICAgIF0gLFxuICAvLyAgICAgICBcInZhbHVlXCI6ICdyLTAwMScgXG4gIC8vICAgfSwgIFxuICAvLyAgIFwic2VhcmNoRmlsdGVyRGF0YVwiOiB7ICAvLyAyXG4gIC8vICAgICAgIFwibGlnaHRUeXBlXCI6IFtcbiAgLy8gICAgICAgICAgIFwiQUFcIixcbiAgLy8gICAgICAgICAgIFwiQkJcIiBcbiAgLy8gICAgICAgXVxuICAvLyAgIH0sXG4gIC8vICAgXCJzb3J0XCI6IHsgICAgICAgICAgICAgIC8vIDNcbiAgLy8gICAgICAgXCJjb2x1bW5cIjogXCJhc3NldENvZGVcIixcbiAgLy8gICAgICAgXCJkaXJlY3Rpb25cIjogXCJhc2NcIlxuICAvLyAgIH1cbiAgLy8gfVxuXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydCE6IE1hdFNvcnQ7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlQ29udGFpbmVyJykgdGFibGVDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBzZWxlY3Rpb246IGFueTsgLy8gdG8gZ2V0IHRoZSBzZWxlY3RlZCByb3dcbiAgc3RpY2t5Q29uZGl0aW9uITogbnVtYmVyOyAvLyB0byBnZXQgdGhlIHN0aWNreSBjb2x1bW4gaW5kZXhcbiAgc2VhcmNoRmlsdGVyID0gZmFsc2U7IC8vIHRvIGdldCB0aGUgc2VhcmNoIGZpbHRlclxuICBmaWx0ZXJBcnJheTogQXJyYXk8YW55PiA9IFtdOyAvLyB0byBnZXQgdGhlIGZpbHRlciBhcnJheVxuICBzZWxlY3RlZEZpbHRlcjogYW55OyAvLyB0byBnZXQgdGhlIHNlbGVjdGVkIGZpbHRlclxuICByZW5kZXJDb2x1bW5zOiBzdHJpbmcgPSAnZGlzcGxheWVkQ29sdW1ucyc7IC8vIHRvIGdldCB0aGUgcmVuZGVyZWQgY29sdW1uc1xuICBwYWdlU2l6ZU9wdGlvbnM6IEFycmF5PGFueT4gIC8vIGZvciBwYWdpbmF0aW9uIGdldCB0aGUgcGFnZSBzaXplIG9wdGlvbnNcbiAgZGF0YVNvdXJjZTogYW55OyAgLy8gZm9yIHRhYmxlIGRhdGEgc291cmNlXG4gIHRvdGFsQ291bnQhOiBudW1iZXIgLy8gY291bnQgb2YgdG90YWwgcmVjb3Jkc1xuICBzZWFyY2hCb3hWYWx1ZTogYW55OyAvLyB0byBnZXQgdGhlIHNlYXJjaCBib3ggdmFsdWVcbiAgcHJldlNlYXJjaDogYW55OyAvLyB0byBnZXQgdGhlIHByZXZpb3VzIHNlYXJjaCB2YWx1ZVxuICBhY3RpdmVDb2x1bW46IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyBUcmFjayB0aGUgYWN0aXZlIGNvbHVtblxuICBpc1Njcm9sbGVkID0gZmFsc2U7IC8vIEJvb2xlYW4gZmxhZyB0byB0cmFjayBzY3JvbGwgc3RhdGVcbiAgaXNTaGFkb3dIaWRkZW4gPSBmYWxzZTsgLy8gQm9vbGVhbiBmbGFnIHRvIHRyYWNrIHNoYWRvdyBzdGF0ZVxuICBjdXJyZW50U29ydENvbHVtbjogc3RyaW5nID0gJyc7IC8vIHRvIGdldCB0aGUgY3VycmVudCBzb3J0IGNvbHVtblxuICBjdXJyZW50U29ydERpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgfCAnbm9uZScgPSAnbm9uZSc7IC8vIHRvIGdldCB0aGUgY3VycmVudCBzb3J0IGRpcmVjdGlvblxuICBvcmlnaW5hbERhdGE6IGFueTsgLy8gU3RvcmUgb3JpZ2luYWwgZGF0YSBmb3Igc29ydGluZ1xuICBob3ZlcmVkQ29sdW1uOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gVHJhY2sgdGhlIGhvdmVyZWQgY29sdW1uXG4gIHNlYXJjaFRleHQ6IGFueTsgLy8gdG8gZ2V0IHRoZSBzZWFyY2ggdGV4dFxuICBtdWx0aXBsZUZpbHRlckFycmF5OiBhbnk7IC8vIHRvIGdldCB0aGUgbXVsdGlwbGUgZmlsdGVyIGFycmF5XG4gIHRhYmxlRmlsdGVyQXJyYXk6IGFueTsgLy8gdG8gZ2V0IHRoZSB0YWJsZSBmaWx0ZXIgYXJyYXlcbiAgZmlsdGVyRGF0YUFycmF5OiBhbnkgPSB7fSAvLyB0byBnZXQgdGhlIGZpbHRlciBkYXRhIGFycmF5XG4gIGlzUmVzaXplZDogYm9vbGVhbiA9IGZhbHNlOyAvLyBmb3IgdGFibGUgY29sdW1uIHJlc2l6ZVxuICBzRmlsdGVyRGF0YTogYW55OyAvLyB0byBnZXQgdGhlIHNlYXJjaCBmaWx0ZXIgZGF0YVxuICBoZWFkZXJMYWJlbHM6IEFycmF5PGFueT4gPSBbXTsgLy8gdG8gZ2V0IHRoZSBoZWFkZXIgbGFiZWxzXG4gIGRpc3BsYXllZENvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgLy8gdG8gZ2V0IHRoZSBkaXNwbGF5ZWQgY29sdW1uc1xuICBmaWx0ZXJDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107IC8vIHRvIGdldCB0aGUgZmlsdGVyIGNvbHVtbnNcbiAgY3VycmVudEZpbHRlckNvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgLy8gdG8gZ2V0IHRoZSBmaWx0ZXIgY29sdW1uc1xuICBzb3J0Q29sdW1uczogQXJyYXk8YW55PiA9IFtdOyAvLyB0byBnZXQgdGhlIGZpbHRlciBjb2x1bW5zXG4gIGN1cnJlbnRTb3J0Q29sdW1uczogQXJyYXk8YW55PiA9IFtdOyAvLyB0byBnZXQgdGhlIGZpbHRlciBjb2x1bW5zXG4gIGh5cGVyTGlua0NvbHVtbnM6IEFycmF5PHN0cmluZz4gPSBbXTsgLy8gdG8gZ2V0IHRoZSBoeXBlciBsaW5rIGNvbHVtbnNcbiAgZWRpdENvbHVtbjogQXJyYXk8YW55PiA9IFtdOyAgLy8gdG8gZ2V0IHRoZSBlZGl0IGNvbHVtblxuICBkYXRlQ29sdW1uczogQXJyYXk8YW55PiA9IFtdOyAvLyB0byBnZXQgdGhlIGRhdGUgY29sdW1uc1xuICB0aW1lQ29sdW1uczogQXJyYXk8YW55PiA9IFtdOyAgLy8gdG8gZ2V0IHRoZSB0aW1lIGNvbHVtbnNcbiAgb2JqZWN0Q29sdW1uczogQXJyYXk8YW55PiA9IFtdOyAgLy8gdG8gZ2V0IHRoZSBvYmplY3QgY29sdW1uc1xuICBmaWxlQ29sdW1uczogQXJyYXk8YW55PiA9IFtdOyAgLy8gdG8gZ2V0IHRoZSBmaWxlIGNvbHVtbnNcbiAgYm9vbGVhbkNvbHVtbnMgOiBBcnJheTxhbnk+ID0gW107ICAvLyB0byBnZXQgdGhlIGJvb2xlYW4gY29sdW1uc1xuICBpbmxpbmVFbGVtZW50OiBhbnkgLy8gZm9yIGFkZCBhIG5ldyByb3cgb24gdGFibGVcbiAgcGFnZVNpemU6IGFueSAgLy8gZm9yIHBhZ2luYXRpb24gZ2V0IHRoZSBwYWdlIHNpemVcbiAgcGFnZUluZGV4OiBhbnkgLy8gZm9yIHBhZ2luYXRpb24gZ2V0IHRoZSBwYWdlIGluZGV4XG4gIHRvdGFsUmVjb3JkczogbnVtYmVyOyAvLyBmb3IgcGFnaW5hdGlvbiBnZXQgdGhlIHRvdGFsIHJlY29yZHNcbiAgY29uZmlnUGFnaW5hdGlvbjogYm9vbGVhbiA9IGZhbHNlOyAvLyBmbGFnIGZvciBjb25maWcgcGFnaW5hdGlvblxuICBkZWxldGVEYXRhOiBhbnk7IC8vIHRvIGdldCB0aGUgZGVsZXRlIHJvd1xuICBkZWxldGVNb2RhbCA9IGZhbHNlOyAvLyBmb3IgY29uZm9ybWF0aW9uIHBvcHVwXG4gIGRyb3Bkb3duQWN0aW9uQnV0dG9uOiBhbnk7IC8vIGZvciBhY3Rpb24gY29sdW1uIGRyb3Bkb3duIGJ1dHRvblxuICBjdXJyZW50T3BlbkluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDsgLy8gdHJhY2sgdGhlIGN1cnJlbnQgb3BlbiBhY3Rpb24gZHJvcGRvd24gaWNvbiBpbmRleFxuICBjbGlja0xpc3RlbmVyOiBhbnk7IC8vIGFjdGlvbiBjb2x1bW4gZHJvcGRvd24gYnV0dG9uIGNsaWNrIGxpc3RlbmVyIGZvciBjbG9zZSBhIGRyb3Bkb3duIGJ1dHRvblxuICBzZWxlY3RlZENvbHVtbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vIHRvIGdldCB0aGUgc2VsZWN0ZWQgY29sdW1uXG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uOyAgLy8gZm9yIHRhYmxlIGRhdGEgc3Vic2NyaXB0aW9uXG4gIGRlbGV0ZUluZGV4OiBudW1iZXI7IC8vIHRvIGdldCB0aGUgZGVsZXRlIGluZGV4XG4gIHNob3dQb3BvdmVyID0gdHJ1ZTtcbiAgc3VtbWFyeVZhbHVlczogeyBbbGFiZWw6IHN0cmluZ106IG51bWJlciB9ID0ge307IC8vIFNLUzIwTUFSMjUgT2JqZWN0IHRvIHN0b3JlIHN1bW1hcnkgcm93IHZhbHVlc1xuICBpc1N1bW1hcnlDb2x1bW46IGJvb2xlYW4gPSBmYWxzZTsgLy8gU0tTMjBNQVIyNSBGbGFnIHRvIGNoZWNrIGlmIHRoZSBjb2x1bW4gaXMgaW4gdGhlIGRpc3BseWNvbHVtbnMgYXJyYXlcbiAgaXNTdW1tYXJ5U3RhcnRDb2x1bW46IGFueVtdO1xuICBpc1N1bW1hcnlFbmRDb2x1bW46IGFueVtdO1xuICBmaWx0ZXJCb3hEYXRhOiBhbnk7XG4gIGZpbHRlclRhYmxlTm9zOiBhbnk7XG4gIHNlbGVjdGVkVmlldzogYW55ID0gJyc7ICAgICAgICAgLy8gU2VsZWN0ZWQgbGlzdCB2aWV3IG5hbWVcbiAgaXNEcm9wZG93bk9wZW46IGJvb2xlYW4gPSBmYWxzZTsgLy8gVHJhY2tzIGRyb3Bkb3duIHZpc2liaWxpdHlcbiAgY3VycmVudFZpZXdGaWx0ZXI6IGFueVxuICBjdXJyZW50SGVhZGVyTGFiZWxzOiBhbnlbXTtcbiAgY3VycmVudERpc3BsYXllZENvbHVtbnM6IGFueVtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsIHByaXZhdGUgY2hhbmdlU2VydmljZTogQ2hhbmdlU2VydmljZSkgeyB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIHRoaXMuZGF0YVNvdXJjZSA9IHsgZGF0YTogW10gfTsgLy8gb3IgdXNlIGEgcHJvcGVyIGRhdGEgc3RydWN0dXJlXG4gICAgLy8gY29uc29sZS5sb2coXCJuZ09uQ2hhbmdlcyBpcyBydW5uaW5nXCIpXG4gICAgaWYgKHRoaXMuZnJvbSA9PT0gJ2Zvcm1CdWlsZGVyJykge1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5xdWVzdGlvbj8uaW5wdXQgPyB0aGlzLnF1ZXN0aW9uPy5pbnB1dCA6IFtdXG4gICAgICBjb25zdCBwYXJzZWRNZXRhID0gdHlwZW9mIHRoaXMucXVlc3Rpb25bJ2ZpZWxkc01ldGEnXSA9PT0gJ29iamVjdCcgPyB0aGlzLnF1ZXN0aW9uWydmaWVsZHNNZXRhJ10gOiBKU09OLnBhcnNlKHRoaXMucXVlc3Rpb25bJ2ZpZWxkc01ldGEnXSk7XG4gICAgICBpZiAoIHBhcnNlZE1ldGEgPT09IG51bGwgfHwgIHBhcnNlZE1ldGEgPT09IHVuZGVmaW5lZCB8fCAhQXJyYXkuaXNBcnJheShwYXJzZWRNZXRhKSB8fCBwYXJzZWRNZXRhPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdObyB2YWxpZCBtZXRhZGF0YSBwcm92aWRlZCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50YWJsZUNvbmZpZykge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLnRhYmxlQ29uZmlnO1xuICAgICAgICB0aGlzLmlzTm9zSW5kaWNhdG9yID0gY29uZmlnPy5pc05vc0luZGljYXRvciAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWRkSW5saW5lUmVjb3JkID0gY29uZmlnLmFkZElubGluZVJlY29yZCAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNQYWdpbmF0aW9uID0gY29uZmlnLmlzUGFnaW5hdGlvbiAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9uID0gY29uZmlnLmFjdGlvbkJ1dHRvbiAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNEZWxldGVSb3cgPSBjb25maWcuaXNEZWxldGVSb3cgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmlzRWRpdFJvdyA9IGNvbmZpZy5pc0VkaXRSb3cgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLnNlYXJjaEJhciA9IGNvbmZpZy5zZWFyY2hCYXIgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQnV0dG9ucyA9IGNvbmZpZy5pc0J1dHRvbnMgIT09IGZhbHNlOyAvL3N1bW1hcnlDb2x1bW5cbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IGNvbmZpZy5pdGVtc1BlclBhZ2UgfHwgNTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaGVhZGVyTGFiZWxzID0gcGFyc2VkTWV0YVxuICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uc3VtbWFyeUNvbHVtbiAhPT0gdHJ1ZSAmJiBjb2x1bW4uc3VtbWFyeVJvdyAhPT0gdHJ1ZSAmJiBjb2x1bW4ubGFiZWwpIC8vIEV4Y2x1ZGUgb25seSB3aGVuIGV4cGxpY2l0bHkgdHJ1ZVxuICAgICAgICAubWFwKGNvbHVtbiA9PiBjb2x1bW4ubGFiZWwpO1xuICAgICAgdGhpcy5jdXJyZW50SGVhZGVyTGFiZWxzID0gdGhpcy5oZWFkZXJMYWJlbHNcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHBhcnNlZE1ldGFcbiAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnN1bW1hcnlDb2x1bW4gIT09IHRydWUgJiYgY29sdW1uLnN1bW1hcnlSb3cgIT09IHRydWUgJiYgY29sdW1uLmFwaU5hbWUpIC8vIEV4Y2x1ZGUgb25seSB3aGVuIGV4cGxpY2l0bHkgdHJ1ZVxuICAgICAgICAubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICB0aGlzLmN1cnJlbnREaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zO1xuICAgICAgICB0aGlzLmZpbHRlckNvbHVtbnMgPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZpbHRlciA9PT0gdHJ1ZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMuc29ydENvbHVtbnMgPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnNvcnQgPT09IHRydWUpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLmh5cGVyTGlua0NvbHVtbnMgPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmh5cGVyTGluayA9PT0gdHJ1ZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMuZWRpdENvbHVtbiA9IHBhcnNlZE1ldGEuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4ucmVhZE9ubHkgPT09IGZhbHNlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5hcGlOYW1lKTtcbiAgICAgICAgdGhpcy5kYXRlQ29sdW1ucyA9IHBhcnNlZE1ldGEuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udHlwZSA9PT0gJ0RhdGUnKS5tYXAoY29sdW1uID0+IGNvbHVtbi5hcGlOYW1lKTtcbiAgICAgICAgdGhpcy50aW1lQ29sdW1ucyA9IHBhcnNlZE1ldGEuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udHlwZSA9PT0gJ1RpbWUnKS5tYXAoY29sdW1uID0+IGNvbHVtbi5hcGlOYW1lKTtcbiAgICAgICAgdGhpcy5vYmplY3RDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi50eXBlID09PSAnT2JqZWN0JykubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMuZmlsZUNvbHVtbnMgPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnR5cGUgPT09ICdGaWxlJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMuYm9vbGVhbkNvbHVtbnMgPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnR5cGUgPT09ICdCb29sZWFuJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG5cbiAgICAgIHRoaXMuc3VtbWFyeUNvbHVtbnMgPSBwYXJzZWRNZXRhXG4gICAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5zdW1tYXJ5Q29sdW1uID09PSB0cnVlKVxuICAgICAgICAubWFwKCh7IGFwaU5hbWUsIGZsZFR5cGUsIC4uLnJlc3QgfSkgPT4gKHtcbiAgICAgICAgICBmaWVsZE5hbWU6IGFwaU5hbWUsXG4gICAgICAgICAgdHlwZTogZmxkVHlwZSxcbiAgICAgICAgICAuLi5yZXN0XG4gICAgICAgIH0pKTtcbiAgICAgIHRoaXMuc3VtbWFyeVJvd3MgPSBwYXJzZWRNZXRhXG4gICAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5zdW1tYXJ5Um93ID09PSB0cnVlKVxuICAgICAgICAubWFwKCh7IGFwaU5hbWUsIGZsZFR5cGUsIC4uLnJlc3QgfSkgPT4gKHtcbiAgICAgICAgICBmaWVsZE5hbWU6IGFwaU5hbWUsXG4gICAgICAgICAgdHlwZTogZmxkVHlwZSxcbiAgICAgICAgICAuLi5yZXN0XG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgLy8gRW5zdXJlIGB0aGlzLmRhdGFgIGlzIGFuIGFycmF5XG4gICAgaWYgKCF0aGlzLmRhdGEgfHwgIUFycmF5LmlzQXJyYXkodGhpcy5kYXRhKSkge1xuICAgICAgY29uc29sZS53YXJuKCdEYXRhIGlzIG5vdCBpbml0aWFsaXplZCBvciBpcyBub3QgYW4gYXJyYXknKTtcbiAgICAgIHRoaXMuZGF0YSA9IFtdOyAgLy8gSW5pdGlhbGl6ZSBhcyBhbiBlbXB0eSBhcnJheSBpZiBpdCdzIG5vdCB2YWxpZFxuICAgIH1cbiAgICAvLyBFbnN1cmUgYHRoaXMuZGF0YVNvdXJjZS5kYXRhYCBpcyBpbml0aWFsaXplZFxuICAgIC8vU0tTMTVGRUIyNSBJbml0aWFsaXplIHRoaXMgaW4geW91ciBkYXRhIGZldGNoIG1ldGhvZFxuICAgIHRoaXMub3JpZ2luYWxEYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgdGhpcy5zRmlsdGVyRGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5vcmlnaW5hbERhdGE7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMucGFnaW5hdGlvbj8ucGFnZVNpemUgPyB0aGlzLnBhZ2luYXRpb25bJ3BhZ2VTaXplJ10gOiB0aGlzLnBhZ2VTaXplIHx8IDEwO1xuICAgIHRoaXMucGFnZUluZGV4ID0gdGhpcy5wYWdpbmF0aW9uPy5wYWdlSW5kZXggPyB0aGlzLnBhZ2luYXRpb25bJ3BhZ2VJbmRleCddIDogdGhpcy5wYWdlSW5kZXggfHwgMTtcbiAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IHRoaXMucGFnaW5hdGlvbj8udG90YWxSZWNvcmRzID8gdGhpcy5wYWdpbmF0aW9uWyd0b3RhbFJlY29yZHMnXSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IHRoaXMucGFnaW5hdGlvbj8ucGFnZVNpemVPcHRpb25zID8gdGhpcy5wYWdpbmF0aW9uWydwYWdlU2l6ZU9wdGlvbnMnXSA6IFsnNScsICcxMCcsICcyNScsICc1MCcsICcxMDAnLCAnMjAwJ107XG4gICAgdGhpcy5jb25maWdQYWdpbmF0aW9uID0gISEodGhpcy5wYWdpbmF0aW9uICYmIE9iamVjdC5rZXlzKHRoaXMucGFnaW5hdGlvbikubGVuZ3RoID4gMCk7XG4gICAgdGhpcy5pc1BhZ2luYXRpb24gPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzUGFnaW5hdGlvbiA9PT0gdHJ1ZSA/IHRoaXMuaXNQYWdpbmF0aW9uID0gdHJ1ZSA6IHRoaXMuaXNQYWdpbmF0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5pc05vc0luZGljYXRvciA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaXNOb3NJbmRpY2F0b3IgPT09IHRydWUgPyB0aGlzLmlzTm9zSW5kaWNhdG9yID0gdHJ1ZSA6IHRoaXMuaXNOb3NJbmRpY2F0b3IgPSBmYWxzZTtcbiAgICB0aGlzLmlzRWRpdGFibGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzRWRpdGFibGUgPT09IGZhbHNlID8gdGhpcy5pc0VkaXRhYmxlID0gZmFsc2UgOiB0aGlzLmlzRWRpdGFibGUgPSB0cnVlXG5cblxuICAgIHRoaXMuaGVhZGVyTGFiZWxzID0gdGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLm1hcChjb2x1bW4gPT4gY29sdW1uLmxhYmVsKSA6IHRoaXMuaGVhZGVyTGFiZWxzO1xuICAgIHRoaXMuY3VycmVudEhlYWRlckxhYmVscyA9IHRoaXMuaGVhZGVyTGFiZWxzXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSkgOiB0aGlzLmRpc3BsYXllZENvbHVtbnM7XG4gICAgdGhpcy5jdXJyZW50RGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucztcbiAgICAvLyBTS1MyME1BUjI1IENoZWNrIGlmIHRoZSBkaXNwbHljb2x1bW4ncyBoYXZlIGEgc3VtbWFyeSBjb2x1bW5cbiAgICBpZiAodGhpcy5zdW1tYXJ5Q29sdW1ucyAmJiB0aGlzLnN1bW1hcnlDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IFsuLi50aGlzLmRpc3BsYXllZENvbHVtbnMsIC4uLnRoaXMuc3VtbWFyeUNvbHVtbnMubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKV07XG4gICAgICB0aGlzLmN1cnJlbnREaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zO1xuICAgICAgdGhpcy5oZWFkZXJMYWJlbHMgPSBbLi4udGhpcy5oZWFkZXJMYWJlbHMsIC4uLnRoaXMuc3VtbWFyeUNvbHVtbnMubWFwKGNvbHVtbiA9PiBjb2x1bW4ubGFiZWwpXTtcbiAgICAgIHRoaXMuY3VycmVudEhlYWRlckxhYmVscyA9IHRoaXMuaGVhZGVyTGFiZWxzXG4gICAgfVxuICAgIGlmICh0aGlzLnN1bW1hcnlSb3dzICYmIHRoaXMuc3VtbWFyeVJvd3MubGVuZ3RoID4gMCAmJiB0aGlzLmRpc3BsYXllZENvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5pc1N1bW1hcnlDb2x1bW4gPSB0aGlzLmRpc3BsYXllZENvbHVtbnMuc29tZShlbGVtZW50ID0+IGVsZW1lbnQgPT09IHRoaXMuc3VtbWFyeVJvd3NbMF0uY29sdW1uKTtcbiAgICAgIGlmICh0aGlzLmlzU3VtbWFyeUNvbHVtbikge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucy5pbmRleE9mKHRoaXMuc3VtbWFyeVJvd3NbMF0uY29sdW1uKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHRoaXMuaXNTdW1tYXJ5U3RhcnRDb2x1bW4gPSB0aGlzLmRpc3BsYXllZENvbHVtbnMuc2xpY2UoMCwgaW5kZXggLSAxKTtcbiAgICAgICAgICB0aGlzLmlzU3VtbWFyeUVuZENvbHVtbiA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucy5zbGljZShpbmRleCArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZmlsdGVyQ29sdW1ucyA9ICB0aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmlsdGVyID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5maWx0ZXJDb2x1bW5zO1xuICAgIHRoaXMuc29ydENvbHVtbnMgPSAgdGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnNvcnQgPT09IHRydWUpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSkgOiB0aGlzLnNvcnRDb2x1bW5zO1xuICAgIHRoaXMuaHlwZXJMaW5rQ29sdW1ucyA9ICB0aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uaHlwZXJMaW5rID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5oeXBlckxpbmtDb2x1bW5zO1xuICAgIHRoaXMuZWRpdENvbHVtbiA9IHRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5lZGl0ID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5lZGl0Q29sdW1uO1xuICAgIHRoaXMuZGF0ZUNvbHVtbnMgPSAgdGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZsZFR5cGUgPT09ICdkYXRlJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuZGF0ZUNvbHVtbnM7XG4gICAgdGhpcy50aW1lQ29sdW1ucyA9ICB0aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmxkVHlwZSA9PT0gJ3RpbWUnKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy50aW1lQ29sdW1ucztcbiAgICB0aGlzLm9iamVjdENvbHVtbnMgPSAgdGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZsZFR5cGUgPT09ICdvYmplY3QnKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5vYmplY3RDb2x1bW5zO1xuICAgIHRoaXMuZmlsZUNvbHVtbnMgPSAgdGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZsZFR5cGUgPT09ICdmaWxlJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuZmlsZUNvbHVtbnM7XG4gICAgdGhpcy5ib29sZWFuQ29sdW1ucyA9ICB0aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmxkVHlwZSA9PT0gJ2Jvb2xlYW4nKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5ib29sZWFuQ29sdW1ucztcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJDb2x1bW5zID0gdGhpcy5maWx0ZXJDb2x1bW5zXG4gICAgdGhpcy5jdXJyZW50U29ydENvbHVtbnMgPSB0aGlzLnNvcnRDb2x1bW5zXG4gICAgdGhpcy5pbmxpbmVFbGVtZW50ID0gT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuZGlzcGxheWVkQ29sdW1ucy5tYXAoa2V5ID0+IFtrZXksIFwiXCJdKSk7XG5cbiAgICB0aGlzLmRyb3Bkb3duQWN0aW9uQnV0dG9uID0gKHRoaXMuYWN0aW9uQnV0dG9uQXJyYXk/LmJ1dHRvbkFycmF5ICYmIHRoaXMuYWN0aW9uQnV0dG9uQXJyYXk/LmJ1dHRvbkFycmF5Py5sZW5ndGggPiAwKSA/IHRoaXMuYWN0aW9uQnV0dG9uQXJyYXk/LmJ1dHRvbkFycmF5Py5zbGljZSh0aGlzLmFjdGlvbkJ1dHRvbkFycmF5Py5zaXplKSA6IFtdO1xuICAgIFxuICAgIHRoaXMuc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odHJ1ZSwgW10pO1xuICAgIGlmICghdGhpcy50b3RhbFJlY29yZHMgJiYgdGhpcy5kYXRhICYmIHRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICBjb25zdCBwYWdlSW5kZXggPSBOdW1iZXIodGhpcy5wYWdlSW5kZXgpIHx8IDA7XG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IE51bWJlcih0aGlzLnBhZ2VTaXplKSB8fCAxMDtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gKHBhZ2VJbmRleCAtIDEpICogcGFnZVNpemU7XG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIHBhZ2VTaXplO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGE/LnNsaWNlKHN0YXJ0LCBlbmQpIHx8IFtdO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YVxuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xuICAgIH0sIDEwMClcbiAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLnRvdGFsUmVjb3JkcyB8fCB0aGlzLmRhdGE/Lmxlbmd0aFxuICAgIHRoaXMuZmlsdGVyVGFibGVOb3MgPSB0aGlzLnRvdGFsUmVjb3JkcyB8fCB0aGlzLmRhdGE/Lmxlbmd0aFxuICAgIGlmICh0aGlzLnN0aWNreUNvbHVtbiA9PT0gdHJ1ZSAmJiB0aGlzLmRpc3BsYXllZENvbHVtbnMpIHtcbiAgICAgIHRoaXMuc3RpY2t5Q29uZGl0aW9uID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPy5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RpY2t5Q29uZGl0aW9uID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPy5sZW5ndGggKyAxO1xuICAgIH1cbiAgICBpZiAodGhpcy53aXRoQ2hlY2tCb3ggJiYgdGhpcy5hY3Rpb25CdXR0b24pIHtcbiAgICAgIHRoaXMucmVuZGVyQ29sdW1ucyA9ICdib3RoJztcbiAgICB9IGVsc2UgaWYgKHRoaXMud2l0aENoZWNrQm94KSB7XG4gICAgICB0aGlzLnJlbmRlckNvbHVtbnMgPSAnc2VsZWN0JztcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aW9uQnV0dG9uKSB7XG4gICAgICB0aGlzLnJlbmRlckNvbHVtbnMgPSAnYWN0aW9uJztcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VhcmNoQ29uZmlncz8uc2VhcmNoRmlsdGVyVmFsKSB7XG4gICAgICB0aGlzLnNlYXJjaEJveFZhbHVlID0gdGhpcy5zZWFyY2hDb25maWdzPy5zZWFyY2hGaWx0ZXJWYWw7IC8vIFNob3cgdmFsdWUgaW4gdGhlIHNlYXJjaCBib3hcbiAgICAgIHRoaXMucHJldlNlYXJjaCA9IHRoaXMuc2VhcmNoQ29uZmlncz8uc2VhcmNoRmlsdGVyVmFsO1xuICAgIH1cbiAgICBpZih0aGlzLmN1cnJlbnRWaWV3RmlsdGVyID09PSB1bmRlZmluZWQgfHwgdGhpcy5jdXJyZW50Vmlld0ZpbHRlciA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5jdXJyZW50Vmlld0ZpbHRlciA9IHRoaXMubGlzdFZpZXdzICYmIHRoaXMubGlzdFZpZXdzLmxlbmd0aCA+IDAgPyB0aGlzLmxpc3RWaWV3c1swXSA6IG51bGw7XG4gICAgfVxuICAgIGlmKHRoaXMuY3VycmVudFZpZXdGaWx0ZXIgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmN1cnJlbnRWaWV3RmlsdGVyICE9PSBudWxsKXtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gdGhpcy5jdXJyZW50Vmlld0ZpbHRlci5maWx0ZXJOYW1lO1xuICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY3VycmVudFZpZXdGaWx0ZXI/LmNvbHVtbnMgfHwgW107XG4gICAgICBpZihjb2x1bW5zLmxlbmd0aCA+IDApe1xuICAgICAgICB0aGlzLmN1cnJlbnREaXNwbGF5ZWRDb2x1bW5zID0gY29sdW1ucy5tYXAoY29sID0+IGNvbC5uYW1lKTtcbiAgICAgICAgdGhpcy5jdXJyZW50SGVhZGVyTGFiZWxzID0gdGhpcy5jdXJyZW50RGlzcGxheWVkQ29sdW1ucy5tYXAobmFtZSA9PiB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmRpc3BsYXllZENvbHVtbnMuaW5kZXhPZihuYW1lKTtcbiAgICAgICAgICByZXR1cm4gaW5kZXggIT09IC0xID8gdGhpcy5oZWFkZXJMYWJlbHNbaW5kZXhdIDogbmFtZTsgLy8gZmFsbGJhY2sgdG8gbmFtZSBpZiBubyBsYWJlbCBmb3VuZFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuZmlsdGVyYWJsZSA9PT0gdHJ1ZSkubWFwKGNvbCA9PiBjb2wubmFtZSk7XG4gICAgICAgIHRoaXMuY3VycmVudFNvcnRDb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5zb3J0YWJsZSA9PT0gdHJ1ZSkubWFwKGNvbCA9PiBjb2wubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXJDb2x1bW5zPy5sZW5ndGggPiAwICYmIHRoaXMuY29uZmlnUGFnaW5hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheSA9IHt9O1xuICAgICAgY29uc3QgZmlsdE9ianM6IGFueSA9IHt9O1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyQ29sdW1ucy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5W2VsZW1lbnRdID0gbnVsbDtcbiAgICAgICAgZmlsdE9ianNbZWxlbWVudF0gPSBbXTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kYXRhLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudEZpbHRlckNvbHVtbnMuZm9yRWFjaCgoa2V5OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoZWxlbWVudCwga2V5KTsgIC8vIDwtIGdldCBuZXN0ZWQgdmFsdWVcbiAgICBcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZmlsdE9ianNba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheVtrZXldID0gbmV3IFNldChmaWx0T2Jqc1trZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXkgPSB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheSA9IHRoaXMubXVsdGlwbGVGaWx0ZXI7XG4gICAgfVxuICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBmaWx0ZXJlZCBhcnJheSB0aGF0IGV4Y2x1ZGVzIGFueSBjb2x1bW4gd2l0aCAnWydcbiAgICBjb25zdCB0ZW1wRmlsdGVyQ29sdW1ucyA9IHRoaXMuZmlsdGVyQ29sdW1ucy5maWx0ZXIoKGtleTogc3RyaW5nKSA9PiAha2V5LmluY2x1ZGVzKCdbJykpO1xuICAgIGlmICh0ZW1wRmlsdGVyQ29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlsdE9ianM6IGFueSA9IHt9O1xuICAgICAgLy8gSW5pdGlhbGl6ZSBlbXB0eSBTZXQgZm9yIGVhY2ggZmlsdGVyZWQgY29sdW1uXG4gICAgICB0ZW1wRmlsdGVyQ29sdW1ucy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBmaWx0T2Jqc1trZXldID0gbmV3IFNldCgpO1xuICAgICAgfSk7XG4gICAgXG4gICAgICAvLyBGaWxsIHRoZSBzZXRzIHdpdGggdW5pcXVlIHZhbHVlc1xuICAgICAgdGhpcy50YWJsZUZpbHRlckRhdGE/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICB0ZW1wRmlsdGVyQ29sdW1ucy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZShlbGVtZW50LCBrZXkpO1xuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmaWx0T2Jqc1trZXldLmFkZCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pOyAgXG4gICAgICAvLyBDb252ZXJ0IHNldHMgdG8gYXJyYXlzIGFuZCBmb3JtYXQgYXMgcmVxdWVzdGVkXG4gICAgICB0aGlzLnRhYmxlRmlsdGVyQXJyYXkgPSB0ZW1wRmlsdGVyQ29sdW1ucy5tYXAoKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiB7IFtrZXldOiBBcnJheS5mcm9tKGZpbHRPYmpzW2tleV0pIH07XG4gICAgICB9KTtcbiAgICB9ICAgIFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudGFibGVDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgdGFibGVCb2R5ID0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50YWJsZS1ib2R5Jyk7XG4gICAgICAgIGlmICh0YWJsZUJvZHkgJiYgdGhpcy5pc1BhZ2luYXRpb24pIHtcbiAgICAgICAgICB0aGlzLmlzU2hhZG93SGlkZGVuID0gISh0YWJsZUJvZHkuc2Nyb2xsSGVpZ2h0IDwgNDUwKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMTUwMCk7IC8vIFdhaXRzIDEwMG1zIGZvciByZW5kZXJpbmdcbiAgICAvLyBTS1MyME1BUjI1IEluaXRpYWxpemUgc3VtbWFyeVZhbHVlcyBmb3IgaW5wdXQgcm93cyBhbmQgY29tcHV0ZSB2YWx1ZXNcbiAgICBpZiAoY2hhbmdlc1snc3VtbWFyeVJvd3MnXSB8fCBjaGFuZ2VzWydzdW1tYXJ5Q29sdW1ucyddIHx8IGNoYW5nZXNbJ2RhdGEnXSkge1xuICAgICAgdGhpcy5jb21wdXRlU3VtbWFyeUNvbHVtbnMoKTsgLy8gQ29tcHV0ZSBwZXItcm93IHN1bW1hcnkgY29sdW1ucyBmaXJzdFxuICAgICAgdGhpcy5zdW1tYXJ5Um93cz8uZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICBpZiAocm93LnR5cGUgPT09ICdpbnB1dCcgJiYgdGhpcy5zdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnN1bW1hcnlWYWx1ZXNbcm93LmZpZWxkTmFtZV0gPSAwOyAvLyBEZWZhdWx0IHRvIDAgZm9yIGlucHV0c1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29tcHV0ZVN1bW1hcnlWYWx1ZXMoKTtcbiAgICB9XG4gICAgdGhpcy5zZWFyY2hDb25maWdzICYmIHRoaXMuc2VhcmNoQm94VmFsdWUgPyB0aGlzLmVtcHR5U2VhcmNoKHRoaXMuc2VhcmNoQm94VmFsdWUpIDogdGhpcy5hcHBseUZpbHRlcih0aGlzLnRhYmxlUGFyYW1zPy50YWJsZVNlYXJjaCwnb25DaGFuZ2UnKSAvLyBTS1MxN0FQUjI1IHVwZGF0ZSBzZWFyY2ggYm94IHZhbHVlXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSB7IGRhdGE6IFtdIH07IC8vIG9yIHVzZSBhIHByb3BlciBkYXRhIHN0cnVjdHVyZVxuICAgIC8vIFNLUzEzTUFSMjUgZ2V0IGRhdGEgZnJvbSBxdWVzdGlvbiBpZiBmcm9tIGZvcm1CdWlsZGVyXG4gICAgaWYgKHRoaXMuZnJvbSA9PT0gJ2Zvcm1CdWlsZGVyJykge1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5xdWVzdGlvbj8uaW5wdXQgPyB0aGlzLnF1ZXN0aW9uPy5pbnB1dCA6IFtdXG4gICAgICBjb25zdCBwYXJzZWRNZXRhID0gdHlwZW9mIHRoaXMucXVlc3Rpb25bJ2ZpZWxkc01ldGEnXSA9PT0gJ29iamVjdCcgPyB0aGlzLnF1ZXN0aW9uWydmaWVsZHNNZXRhJ10gfHwgW10gOiBKU09OLnBhcnNlKHRoaXMucXVlc3Rpb25bJ2ZpZWxkc01ldGEnXSk7XG4gICAgICBpZiAoIHBhcnNlZE1ldGEgPT09IG51bGwgfHwgIHBhcnNlZE1ldGEgPT09IHVuZGVmaW5lZCB8fCAhQXJyYXkuaXNBcnJheShwYXJzZWRNZXRhKSB8fCBwYXJzZWRNZXRhPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdObyB2YWxpZCBtZXRhZGF0YSBwcm92aWRlZCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50YWJsZUNvbmZpZykge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLnRhYmxlQ29uZmlnO1xuICAgICAgICB0aGlzLmlzTm9zSW5kaWNhdG9yID0gY29uZmlnPy5pc05vc0luZGljYXRvciAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWRkSW5saW5lUmVjb3JkID0gY29uZmlnLmFkZElubGluZVJlY29yZCAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNQYWdpbmF0aW9uID0gY29uZmlnLmlzUGFnaW5hdGlvbiAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9uID0gY29uZmlnLmFjdGlvbkJ1dHRvbiAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNEZWxldGVSb3cgPSBjb25maWcuaXNEZWxldGVSb3cgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmlzRWRpdFJvdyA9IGNvbmZpZy5pc0VkaXRSb3cgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLnNlYXJjaEJhciA9IGNvbmZpZy5zZWFyY2hCYXIgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQnV0dG9ucyA9IGNvbmZpZy5pc0J1dHRvbnMgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gY29uZmlnLml0ZW1zUGVyUGFnZSB8fCA1O1xuICAgICAgfVxuICAgICAgdGhpcy5oZWFkZXJMYWJlbHMgPSBwYXJzZWRNZXRhXG4gICAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5zdW1tYXJ5Q29sdW1uICE9PSB0cnVlICYmIGNvbHVtbi5zdW1tYXJ5Um93ICE9PSB0cnVlICYmIGNvbHVtbi5sYWJlbCkgLy8gRXhjbHVkZSBvbmx5IHdoZW4gZXhwbGljaXRseSB0cnVlXG4gICAgICAgIC5tYXAoY29sdW1uID0+IGNvbHVtbi5sYWJlbCk7XG4gICAgICAgIHRoaXMuY3VycmVudEhlYWRlckxhYmVscyA9IHRoaXMuaGVhZGVyTGFiZWxzXG5cbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHBhcnNlZE1ldGFcbiAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnN1bW1hcnlDb2x1bW4gIT09IHRydWUgJiYgY29sdW1uLnN1bW1hcnlSb3cgIT09IHRydWUgJiYgY29sdW1uLmFwaU5hbWUpIC8vIEV4Y2x1ZGUgb25seSB3aGVuIGV4cGxpY2l0bHkgdHJ1ZVxuICAgICAgICAubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMuY3VycmVudERpc3BsYXllZENvbHVtbnMgPSB0aGlzLmRpc3BsYXllZENvbHVtbnM7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5maWx0ZXIgPT09IHRydWUpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLnNvcnRDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5zb3J0ID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5hcGlOYW1lKTtcbiAgICAgICAgdGhpcy5oeXBlckxpbmtDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5oeXBlckxpbmsgPT09IHRydWUpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLmVkaXRDb2x1bW4gPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnJlYWRPbmx5ID09PSBmYWxzZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMuZGF0ZUNvbHVtbnMgPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZsZFR5cGUgPT09ICdEYXRlJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMudGltZUNvbHVtbnMgPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZsZFR5cGUgPT09ICdUaW1lJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMub2JqZWN0Q29sdW1ucyA9IHBhcnNlZE1ldGEuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmxkVHlwZSA9PT0gJ09iamVjdCcpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLmZpbGVDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5mbGRUeXBlID09PSAnRmlsZScpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLmJvb2xlYW5Db2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5mbGRUeXBlID09PSAnQm9vbGVhbicpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuXG4gICAgICB0aGlzLnN1bW1hcnlDb2x1bW5zID0gcGFyc2VkTWV0YVxuICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uc3VtbWFyeUNvbHVtbiA9PT0gdHJ1ZSlcbiAgICAgICAgLm1hcCgoeyBhcGlOYW1lLCBmbGRUeXBlLCAuLi5yZXN0IH0pID0+ICh7XG4gICAgICAgICAgZmllbGROYW1lOiBhcGlOYW1lLFxuICAgICAgICAgIHR5cGU6IGZsZFR5cGUsXG4gICAgICAgICAgLi4ucmVzdFxuICAgICAgICB9KSk7XG4gICAgICB0aGlzLnN1bW1hcnlSb3dzID0gcGFyc2VkTWV0YVxuICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uc3VtbWFyeVJvdyA9PT0gdHJ1ZSlcbiAgICAgICAgLm1hcCgoeyBhcGlOYW1lLCBmbGRUeXBlLCAuLi5yZXN0IH0pID0+ICh7XG4gICAgICAgICAgZmllbGROYW1lOiBhcGlOYW1lLFxuICAgICAgICAgIHR5cGU6IGZsZFR5cGUsXG4gICAgICAgICAgLi4ucmVzdFxuICAgICAgICB9KSk7XG4gICAgICAgIGlmICh0aGlzLmFwaU1ldGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxldCBvcHRpb25zID0gW107XG4gICAgICAgICAgLy8gQVAtMjZNQVIyNSBFbnN1cmUgdGhhdCB0aGlzLmFwaU1ldGEgaXMgYWx3YXlzIGFuIG9iamVjdC4gIFxuICAgICAgICAgLy9BUC0yNk1BUjI1IElmIGl0J3MgYWxyZWFkeSBhbiBvYmplY3QsIGtlZXAgaXQgYXMgaXM7IG90aGVyd2lzZSwgcGFyc2UgaXQgZnJvbSBhIEpTT04gc3RyaW5nLlxuICAgICAgICAgIHRoaXMuYXBpTWV0YSA9IHR5cGVvZiB0aGlzLmFwaU1ldGEgPT09ICdvYmplY3QnID8gdGhpcy5hcGlNZXRhIDogSlNPTi5wYXJzZSh0aGlzLmFwaU1ldGEpO1xuICAgICAgICAgIGxldCBhcGlPYmo6IGFueSA9IHRoaXMuYXBpTWV0YTtcbiAgICAgICAgICBpZiAoYXBpT2JqICYmIGFwaU9iai5lbmRwb2ludCkge1xuICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuYXBpUmVzcG9uc2UoYXBpT2JqLmVuZHBvaW50KT8uc3Vic2NyaWJlKChhcGlSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlcztcbiAgICAgICAgICAgIGlmIChhcGlPYmoudmFyaWFibGUpIHtcbiAgICAgICAgICAgICAgLy8gVkQgMjJNYXkyNCAtIGhhbmRsaW5nIG11bHRpcGxlIGNoaWxkIG9iamVjdHNcbiAgICAgICAgICAgICAgcmVzcG9uc2VzID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShhcGlSZXNwb25zZSwgYXBpT2JqLnZhcmlhYmxlKTtcbiAgICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgICAgLy8gSEEgMTlKQU4yNCBUbyBhdm9pZCB1bmRlZmluZWQgZXJyb3IgaW4gY29uc29sZVxuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3BvbnNlcz8ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcCA9IHJlc3BvbnNlc1tpXTtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzcCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb3B0aW9ucyA9IHJlc3VsdHM7XG4gICAgICAgICAgICB9IGVsc2UgeyAgLy8gVkQgMTlKQU4yNCAtIGlmIHJlc3BvbnNlIGhhcyB2YWx1ZSh3aGljaCBpcyBhcnJheSkgb25seVxuICAgICAgICAgICAgICByZXNwb25zZXMgPSBhcGlSZXNwb25zZTtcbiAgICAgICAgICAgICAgb3B0aW9ucyA9IHJlc3BvbnNlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLm1hcCgob2JqOiBhbnkpID0+ICh7IC4uLm9iaiwgZWRpdDogZmFsc2UgfSkpO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gb3B0aW9ucztcblxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVkQgTk9WMjMgLSBoYW5kbGUgdGhlIGRlcGVuZGVudCB1cGRhdGUgZm9yIGRyb3Bkb3duXG4gICAgICAgIGxldCBzb3VyY2VJZCA9IGFwaU9iaj8uc291cmNlUXVlc3Rpb25JZDtcbiAgICAgICAgbGV0IGZpZWxkID0gYXBpT2JqPy5maWVsZDsgICAgICAgIC8vIFZEIDEzTUFZMjQgLSBkeW5hbWljIGZpZWxkIGNoYW5nZXNcbiAgICAgICAgaWYgKHNvdXJjZUlkKSB7XG4gICAgICAgICAgLy8gLy8gVkQgMTBNYXkyNCBTdWJzY3JpYmUgZm9yIHRoZSBjaGFuZ2VzXG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY2hhbmdlQW5ub3VuY2VkJC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoY2hhbmdlVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNoYW5nZVZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VWYWx1ZS52YWx1ZU9iaiAhPSB1bmRlZmluZWQgJiYgY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQgPT0gYXBpT2JqLnNvdXJjZVF1ZXN0aW9uSWQpIHtcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLm1hcCgob2JqOiBhbnkpID0+ICh7IC4uLm9iaiwgZWRpdDogZmFsc2UgfSkpO1xuICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSBjaGFuZ2VWYWx1ZS52YWx1ZU9iajtcbiAgICAgICAgICAgICAgICAgIGxldCB2YWxpZEl0ZW0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgLy8gVkQgMTNNQVkyNCAtIGJpbmQgZHluYW1pYyBmaWVsZFxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFZEIDI2SnVuMjQgLSB0byBoYW5kbGUgbXVsdGlwbGUgb2JqZWN0c1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iakVsZW1lbnRWYWx1ZSA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoZWxlbWVudCwgZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iakl0ZW1WYWx1ZSA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoaXRlbSwgZmllbGQpXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9iakVsZW1lbnRWYWx1ZSA9PSBvYmpJdGVtVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkSXRlbSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvL1JTIDE0RkVCMjAyNVxuICAgICAgICAgICAgICAgICAgLy9VcGRhdGUgUGFnaW5hdGlvbiBiZWZvcmUgZW1pdFxuICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBbLi4udGhpcy5kYXRhLCBpdGVtXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBbLi4udGhpcy5kYXRhXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0VGFibGVEYXRhVmFsdWUodGhpcy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gU0tTMjBNQVIyNSBNYW51YWxseSB0cmlnZ2VyIG5nT25DaGFuZ2VzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdPbkNoYW5nZXMoe30pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVNlcnZpY2UuY29uZmlybUNoYW5nZShhcGlPYmo/LnNvdXJjZVF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlYXJjaEJhciA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuc2VhcmNoQmFyID09PSB0cnVlID8gdGhpcy5zZWFyY2hCYXIgPSB0cnVlIDogdGhpcy5zZWFyY2hCYXIgPSBmYWxzZTtcbiAgICB0aGlzLndpdGhDaGVja0JveCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMud2l0aENoZWNrQm94ID09PSBmYWxzZSA/IHRoaXMud2l0aENoZWNrQm94ID0gZmFsc2UgOiB0aGlzLndpdGhDaGVja0JveCA9IHRydWU7XG4gICAgdGhpcy5pc0VkaXRSb3cgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzRWRpdFJvdyA9PT0gZmFsc2UgPyB0aGlzLmlzRWRpdFJvdyA9IGZhbHNlIDogdGhpcy5pc0VkaXRSb3cgPSB0cnVlO1xuICAgIHRoaXMuaXNEZWxldGVSb3cgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzRGVsZXRlUm93ID09PSBmYWxzZSA/IHRoaXMuaXNEZWxldGVSb3cgPSBmYWxzZSA6IHRoaXMuaXNEZWxldGVSb3cgPSB0cnVlO1xuICAgIHRoaXMuYWN0aW9uQnV0dG9uID09PSB1bmRlZmluZWQgfHwgdGhpcy5hY3Rpb25CdXR0b24gPT09IGZhbHNlID8gdGhpcy5hY3Rpb25CdXR0b24gPSBmYWxzZSA6IHRoaXMuYWN0aW9uQnV0dG9uID0gdHJ1ZTtcbiAgICB0aGlzLmlzQnV0dG9ucyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaXNCdXR0b25zID09PSBmYWxzZSA/IHRoaXMuaXNCdXR0b25zID0gZmFsc2UgOiB0aGlzLmlzQnV0dG9ucyA9IHRydWU7XG4gICAgdGhpcy5hZGRJbmxpbmVSZWNvcmQgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmFkZElubGluZVJlY29yZCA9PT0gZmFsc2UgPyB0aGlzLmFkZElubGluZVJlY29yZCA9IGZhbHNlIDogdGhpcy5hZGRJbmxpbmVSZWNvcmQgPSB0cnVlO1xuICAgIHRoaXMuaXNQYWdpbmF0aW9uID09PSB1bmRlZmluZWQgfHwgdGhpcy5pc1BhZ2luYXRpb24gPT09IHRydWUgPyB0aGlzLmlzUGFnaW5hdGlvbiA9IHRydWUgOiB0aGlzLmlzUGFnaW5hdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNOb3NJbmRpY2F0b3IgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzTm9zSW5kaWNhdG9yID09PSB0cnVlID8gdGhpcy5pc05vc0luZGljYXRvciA9IHRydWUgOiB0aGlzLmlzTm9zSW5kaWNhdG9yID0gZmFsc2U7XG4gICAgdGhpcy5pc0VkaXRhYmxlID09PSB1bmRlZmluZWQgfHwgdGhpcy5pc0VkaXRhYmxlID09PSBmYWxzZSA/IHRoaXMuaXNFZGl0YWJsZSA9IGZhbHNlIDogdGhpcy5pc0VkaXRhYmxlID0gdHJ1ZVxuXG5cbiAgICB0aGlzLmhlYWRlckxhYmVscyA9IHRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5tYXAoY29sdW1uID0+IGNvbHVtbi5sYWJlbCkgOiB0aGlzLmhlYWRlckxhYmVscztcbiAgICB0aGlzLmN1cnJlbnRIZWFkZXJMYWJlbHMgPSB0aGlzLmhlYWRlckxhYmVsc1xuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5kaXNwbGF5ZWRDb2x1bW5zO1xuICAgIHRoaXMuY3VycmVudERpc3BsYXllZENvbHVtbnMgPSB0aGlzLmRpc3BsYXllZENvbHVtbnM7XG4gICAgaWYgKHRoaXMuc3VtbWFyeUNvbHVtbnMgJiYgdGhpcy5zdW1tYXJ5Q29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBbLi4udGhpcy5kaXNwbGF5ZWRDb2x1bW5zLCAuLi50aGlzLnN1bW1hcnlDb2x1bW5zLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSldO1xuICAgICAgdGhpcy5jdXJyZW50RGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucztcbiAgICAgIHRoaXMuaGVhZGVyTGFiZWxzID0gWy4uLnRoaXMuaGVhZGVyTGFiZWxzLCAuLi50aGlzLnN1bW1hcnlDb2x1bW5zLm1hcChjb2x1bW4gPT4gY29sdW1uLmxhYmVsKV07XG4gICAgICB0aGlzLmN1cnJlbnRIZWFkZXJMYWJlbHMgPSB0aGlzLmhlYWRlckxhYmVsc1xuICAgIH1cblxuICAgIHRoaXMuZmlsdGVyQ29sdW1ucyA9dGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZpbHRlciA9PT0gdHJ1ZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuZmlsdGVyQ29sdW1ucztcbiAgICB0aGlzLnNvcnRDb2x1bW5zID10aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uc29ydCA9PT0gdHJ1ZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuc29ydENvbHVtbnM7XG4gICAgdGhpcy5oeXBlckxpbmtDb2x1bW5zID10aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uaHlwZXJMaW5rID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5oeXBlckxpbmtDb2x1bW5zO1xuICAgIHRoaXMuZWRpdENvbHVtbiA9IHRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5lZGl0ID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5lZGl0Q29sdW1uO1xuICAgIHRoaXMuZGF0ZUNvbHVtbnMgPXRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi50eXBlID09PSAnZGF0ZScpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSk6IHRoaXMuZGF0ZUNvbHVtbnM7XG4gICAgdGhpcy50aW1lQ29sdW1ucyA9dGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnR5cGUgPT09ICd0aW1lJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMudGltZUNvbHVtbnM7XG4gICAgdGhpcy5vYmplY3RDb2x1bW5zID10aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udHlwZSA9PT0gJ29iamVjdCcpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSkgOiB0aGlzLm9iamVjdENvbHVtbnM7XG4gICAgdGhpcy5maWxlQ29sdW1ucyA9dGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnR5cGUgPT09ICdmaWxlJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuZmlsZUNvbHVtbnM7XG4gICAgdGhpcy5ib29sZWFuQ29sdW1ucyA9dGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnR5cGUgPT09ICdib29sZWFuJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuYm9vbGVhbkNvbHVtbnM7XG5cbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJDb2x1bW5zID0gdGhpcy5maWx0ZXJDb2x1bW5zXG4gICAgdGhpcy5jdXJyZW50U29ydENvbHVtbnMgPSB0aGlzLnNvcnRDb2x1bW5zXG4gICAgdGhpcy5pbmxpbmVFbGVtZW50ID0gT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuZGlzcGxheWVkQ29sdW1ucy5tYXAoa2V5ID0+IFtrZXksIFwiXCJdKSk7XG5cbiAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5wYWdpbmF0aW9uPy5wYWdlU2l6ZSA/IHRoaXMucGFnaW5hdGlvblsncGFnZVNpemUnXSA6IHRoaXMudGFibGVQYXJhbXM/LnBhZ2luYXRpb24/LnBhZ2VTaXplIHx8MTA7XG4gICAgdGhpcy5wYWdlSW5kZXggPSB0aGlzLnBhZ2luYXRpb24/LnBhZ2VJbmRleCA/IHRoaXMucGFnaW5hdGlvblsncGFnZUluZGV4J10gOiB0aGlzLnRhYmxlUGFyYW1zPy5wYWdpbmF0aW9uPy5wYWdlSW5kZXggfHwxO1xuICAgIHRoaXMudG90YWxSZWNvcmRzID0gdGhpcy5wYWdpbmF0aW9uPy50b3RhbFJlY29yZHMgPyB0aGlzLnBhZ2luYXRpb25bJ3RvdGFsUmVjb3JkcyddIDogdW5kZWZpbmVkO1xuICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gdGhpcy5wYWdpbmF0aW9uPy5wYWdlU2l6ZU9wdGlvbnMgPyB0aGlzLnBhZ2luYXRpb25bJ3BhZ2VTaXplT3B0aW9ucyddIDogWyc1JywgJzEwJywgJzI1JywgJzUwJywgJzEwMCcsICcyMDAnXTtcbiAgICB0aGlzLmNvbmZpZ1BhZ2luYXRpb24gPSAhISh0aGlzLnBhZ2luYXRpb24gJiYgT2JqZWN0LmtleXModGhpcy5wYWdpbmF0aW9uKS5sZW5ndGggPiAwKTtcblxuICAgIHRoaXMuZHJvcGRvd25BY3Rpb25CdXR0b24gPSB0aGlzLmFjdGlvbkJ1dHRvbkFycmF5Py5idXR0b25BcnJheT8uc2xpY2UodGhpcy5hY3Rpb25CdXR0b25BcnJheT8uc2l6ZSk7XG5cbiAgICB0aGlzLm9yaWdpbmFsRGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuICAgIHRoaXMuc0ZpbHRlckRhdGEgPSBbLi4udGhpcy5kYXRhXTtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMub3JpZ2luYWxEYXRhO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnUGFnaW5hdGlvbiA9PT0gZmFsc2UgJiYgdGhpcy5kYXRhICYmIHRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICBjb25zdCBwYWdlSW5kZXggPSBOdW1iZXIodGhpcy5wYWdlSW5kZXgpIHx8IDA7XG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IE51bWJlcih0aGlzLnBhZ2VTaXplKSB8fCAxMDtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gKHBhZ2VJbmRleCAtIDEpICogcGFnZVNpemU7XG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIHBhZ2VTaXplO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGE/LnNsaWNlKHN0YXJ0LCBlbmQpIHx8IFtdO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YVxuICAgIH1cbiAgICBpZih0aGlzLmN1cnJlbnRWaWV3RmlsdGVyID09PSB1bmRlZmluZWQgfHwgdGhpcy5jdXJyZW50Vmlld0ZpbHRlciA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5jdXJyZW50Vmlld0ZpbHRlciA9IHRoaXMubGlzdFZpZXdzICYmIHRoaXMubGlzdFZpZXdzLmxlbmd0aCA+IDAgPyB0aGlzLmxpc3RWaWV3c1swXSA6IG51bGw7XG4gICAgfVxuICAgIGlmKHRoaXMuY3VycmVudFZpZXdGaWx0ZXIgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmN1cnJlbnRWaWV3RmlsdGVyICE9PSBudWxsKXtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gdGhpcy5jdXJyZW50Vmlld0ZpbHRlci5maWx0ZXJOYW1lO1xuICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY3VycmVudFZpZXdGaWx0ZXI/LmNvbHVtbnMgfHwgW107XG4gICAgICBpZihjb2x1bW5zLmxlbmd0aCA+IDApe1xuICAgICAgICB0aGlzLmN1cnJlbnREaXNwbGF5ZWRDb2x1bW5zID0gY29sdW1ucy5tYXAoY29sID0+IGNvbC5uYW1lKTtcbiAgICAgICAgdGhpcy5jdXJyZW50SGVhZGVyTGFiZWxzID0gdGhpcy5jdXJyZW50RGlzcGxheWVkQ29sdW1ucy5tYXAobmFtZSA9PiB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmRpc3BsYXllZENvbHVtbnMuaW5kZXhPZihuYW1lKTtcbiAgICAgICAgICByZXR1cm4gaW5kZXggIT09IC0xID8gdGhpcy5oZWFkZXJMYWJlbHNbaW5kZXhdIDogbmFtZTsgLy8gZmFsbGJhY2sgdG8gbmFtZSBpZiBubyBsYWJlbCBmb3VuZFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuZmlsdGVyYWJsZSA9PT0gdHJ1ZSApLm1hcChjb2wgPT4gY29sLm5hbWUpO1xuICAgICAgICB0aGlzLmN1cnJlbnRTb3J0Q29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuc29ydGFibGUgPT09IHRydWUpLm1hcChjb2wgPT4gY29sLm5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5jdXJyZW50RmlsdGVyQ29sdW1ucz8ubGVuZ3RoID4gMCAmJiB0aGlzLmNvbmZpZ1BhZ2luYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXkgPSB7fTtcbiAgICAgIGNvbnN0IGZpbHRPYmpzOiBhbnkgPSB7fTtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlckNvbHVtbnMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheVtlbGVtZW50XSA9IG51bGw7XG4gICAgICAgIGZpbHRPYmpzW2VsZW1lbnRdID0gW107XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJDb2x1bW5zLmZvckVhY2goKGtleTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKGVsZW1lbnQsIGtleSk7ICAvLyA8LSBnZXQgbmVzdGVkIHZhbHVlXG4gICAgXG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZpbHRPYmpzW2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXlba2V5XSA9IG5ldyBTZXQoZmlsdE9ianNba2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5ID0gdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXkgPSB0aGlzLm11bHRpcGxlRmlsdGVyO1xuICAgIH1cbiAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgZmlsdGVyZWQgYXJyYXkgdGhhdCBleGNsdWRlcyBhbnkgY29sdW1uIHdpdGggJ1snXG4gICAgY29uc3QgdGVtcEZpbHRlckNvbHVtbnMgPSB0aGlzLmZpbHRlckNvbHVtbnMuZmlsdGVyKChrZXk6IHN0cmluZykgPT4gIWtleS5pbmNsdWRlcygnWycpKTtcbiAgICBpZiAodGVtcEZpbHRlckNvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpbHRPYmpzOiBhbnkgPSB7fTtcbiAgICAgIC8vIEluaXRpYWxpemUgZW1wdHkgU2V0IGZvciBlYWNoIGZpbHRlcmVkIGNvbHVtblxuICAgICAgdGVtcEZpbHRlckNvbHVtbnMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgZmlsdE9ianNba2V5XSA9IG5ldyBTZXQoKTtcbiAgICAgIH0pO1xuICAgICAgLy8gRmlsbCB0aGUgc2V0cyB3aXRoIHVuaXF1ZSB2YWx1ZXNcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJEYXRhPy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgdGVtcEZpbHRlckNvbHVtbnMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoZWxlbWVudCwga2V5KTtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZmlsdE9ianNba2V5XS5hZGQodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICBcbiAgICAgIC8vIENvbnZlcnQgc2V0cyB0byBhcnJheXMgYW5kIGZvcm1hdCBhcyByZXF1ZXN0ZWRcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJBcnJheSA9IHRlbXBGaWx0ZXJDb2x1bW5zLm1hcCgoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgW2tleV06IEFycmF5LmZyb20oZmlsdE9ianNba2V5XSkgfTtcbiAgICAgIH0pO1xuICAgIH0gICAgICAgXG4gICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0cnVlLCBbXSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgICB9LCAwKVxuICAgIHRoaXMudG90YWxDb3VudCA9IHRoaXMudG90YWxSZWNvcmRzIHx8IHRoaXMuZGF0YT8ubGVuZ3RoXG4gICAgdGhpcy5maWx0ZXJUYWJsZU5vcyA9IHRoaXMudG90YWxSZWNvcmRzIHx8IHRoaXMuZGF0YT8ubGVuZ3RoXG4gICAgY29uc3QgTnh0RGF0YVRhYmxlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnTnh0RGF0YVRhYmxlJykpO1xuICAgIHRoaXMuY3VycmVudFNvcnRDb2x1bW4gPSBOeHREYXRhVGFibGU/LmN1cnJlbnRTb3J0Q29sdW1uO1xuICAgIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPSBOeHREYXRhVGFibGU/LmN1cnJlbnRTb3J0RGlyZWN0aW9uO1xuICAgIGlmIChOeHREYXRhVGFibGU/LmFkZFJlY29yZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5wYWdlU2l6ZSA9IE54dERhdGFUYWJsZT8ucGFnZVNpemVcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gTnh0RGF0YVRhYmxlPy5wYWdlSW5kZXhcbiAgICAgIHZhciBvYmo6IGFueSA9IHt9O1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuaW5saW5lRWxlbWVudCk7XG4gICAgICBrZXlzLmZvckVhY2goKGVsZW1lbnRLZXk6IGFueSkgPT4ge1xuICAgICAgICBvYmpbZWxlbWVudEtleV0gPSAnJztcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kYXRhLnB1c2gob2JqKTtcbiAgICAgIGNvbnN0IGRhdGE6IGFueSA9IHRoaXMuZGF0YTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcblxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KHRoaXMuZGF0YVt0aGlzLmRhdGEubGVuZ3RoIC0gMV0pO1xuICAgICAgdGhpcy5kYXRhW3RoaXMuZGF0YS5sZW5ndGggLSAxXS5lZGl0Um93ID0gdHJ1ZTtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdOeHREYXRhVGFibGUnLCBKU09OLnN0cmluZ2lmeSh7IGFkZFJlY29yZDogZmFsc2UsIHBhZ2VTaXplOiAxMCwgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCwgY3VycmVudFNvcnRDb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGN1cnJlbnRTb3J0RGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uIH0pKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RpY2t5Q29sdW1uID09PSB0cnVlICYmIHRoaXMuZGlzcGxheWVkQ29sdW1ucykge1xuICAgICAgdGhpcy5zdGlja3lDb25kaXRpb24gPSB0aGlzLmRpc3BsYXllZENvbHVtbnM/Lmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGlja3lDb25kaXRpb24gPSB0aGlzLmRpc3BsYXllZENvbHVtbnM/Lmxlbmd0aCArIDE7XG4gICAgfVxuICAgIGlmICh0aGlzLndpdGhDaGVja0JveCAmJiB0aGlzLmFjdGlvbkJ1dHRvbikge1xuICAgICAgdGhpcy5yZW5kZXJDb2x1bW5zID0gJ2JvdGgnO1xuICAgIH0gZWxzZSBpZiAodGhpcy53aXRoQ2hlY2tCb3gpIHtcbiAgICAgIHRoaXMucmVuZGVyQ29sdW1ucyA9ICdzZWxlY3QnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5hY3Rpb25CdXR0b24pIHtcbiAgICAgIHRoaXMucmVuZGVyQ29sdW1ucyA9ICdhY3Rpb24nO1xuICAgIH1cblxuICAgIC8vIFNLUzE5TUFSMjUgYWRkIGZpcnN0IGxpbmUgZm9yIGZvcm1idWlsZGVyIHRhYmxlXG4gICAgaWYgKHRoaXMuaXNFZGl0YWJsZSkgeyB0aGlzLmFkZFRhYmxlUmVjb3JkKHRoaXMuaW5saW5lRWxlbWVudCkgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy50YWJsZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICBjb25zdCB0YWJsZUJvZHkgPSB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnRhYmxlLWJvZHknKTtcbiAgICAgICAgaWYgKHRhYmxlQm9keSAmJiB0aGlzLmlzUGFnaW5hdGlvbikge1xuICAgICAgICAgIHRoaXMuaXNTaGFkb3dIaWRkZW4gPSAhKHRhYmxlQm9keS5zY3JvbGxIZWlnaHQgPCA0NTApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCAxNTAwKTsgLy8gV2FpdHMgMTAwbXMgZm9yIHJlbmRlcmluZ1xuICAgIC8vIFNLUzE3QVBSMjUgdGFibGUgcGFyZW1zIGRhdGEgdXBkYXRlXG4gICAgaWYgKHRoaXMuc2VhcmNoQ29uZmlncz8uc2VhcmNoRmlsdGVyVmFsKSB7XG4gICAgICB0aGlzLnNlYXJjaEJveFZhbHVlID0gdGhpcy5zZWFyY2hDb25maWdzPy5zZWFyY2hGaWx0ZXJWYWw7IC8vIFNob3cgdmFsdWUgaW4gdGhlIHNlYXJjaCBib3hcbiAgICAgIHRoaXMucHJldlNlYXJjaCA9IHRoaXMuc2VhcmNoQ29uZmlncz8uc2VhcmNoRmlsdGVyVmFsO1xuICAgIH0gZWxzZSBpZih0aGlzLnRhYmxlUGFyYW1zPy50YWJsZVNlYXJjaCl7XG4gICAgICB0aGlzLnNlYXJjaEJveFZhbHVlID0gdGhpcy50YWJsZVBhcmFtcz8udGFibGVTZWFyY2g7XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoQ29uZmlncyAmJiB0aGlzLnNlYXJjaEJveFZhbHVlID8gdGhpcy5lbXB0eVNlYXJjaCh0aGlzLnNlYXJjaEJveFZhbHVlKSA6ICcnXG4gICAgdGhpcy5maWx0ZXJEYXRhQXJyYXkgPSB0aGlzLnRhYmxlUGFyYW1zPy5zZWFyY2hGaWx0ZXJEYXRhID8gdGhpcy50YWJsZVBhcmFtcz8uc2VhcmNoRmlsdGVyRGF0YSA6IHt9O1xuICAgIHRoaXMuc29ydERhdGEodGhpcy50YWJsZVBhcmFtcz8uc29ydD8uY29sdW1uLCB0aGlzLnRhYmxlUGFyYW1zPy5zb3J0Py5kaXJlY3Rpb24sdHJ1ZSlcbiAgfVxuXG4gIC8vIFNLUzIwTUFSMjUgc3VtbWFyeSBjb2x1bW5zIGNhbGNcbiAgY29tcHV0ZVN1bW1hcnlDb2x1bW5zKCkge1xuICAgIGlmICh0aGlzLnN1bW1hcnlDb2x1bW5zICYmIHRoaXMuc3VtbWFyeUNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLm1hcChyb3cgPT4ge1xuICAgICAgICBjb25zdCBuZXdSb3cgPSB7IC4uLnJvdyB9O1xuICAgICAgICB0aGlzLnN1bW1hcnlDb2x1bW5zLmZvckVhY2goc3VtbWFyeUNvbCA9PiB7XG4gICAgICAgICAgaWYgKHN1bW1hcnlDb2wudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJyAmJiBzdW1tYXJ5Q29sLm9wZXJhdGlvbiA9PT0gJ3N1bScgJiYgc3VtbWFyeUNvbC5vcGVyYW5kcykge1xuICAgICAgICAgICAgY29uc3Qgc3VtID0gc3VtbWFyeUNvbC5vcGVyYW5kcy5yZWR1Y2UoKGFjYywgb3BlcmFuZCkgPT4gYWNjICsgKE51bWJlcihuZXdSb3dbb3BlcmFuZF0pIHx8IDApLCAwKTtcbiAgICAgICAgICAgIG5ld1Jvd1tzdW1tYXJ5Q29sLmZpZWxkTmFtZV0gPSBzdW07XG4gICAgICAgICAgfSBlbHNlIGlmIChzdW1tYXJ5Q29sLnR5cGUgPT09ICdjYWxjdWxhdGlvbicgJiYgc3VtbWFyeUNvbC5vcGVyYXRpb24gPT09ICdzdWJ0cmFjdCcgJiYgc3VtbWFyeUNvbC5vcGVyYW5kcykge1xuICAgICAgICAgICAgY29uc3QgW2ZpcnN0T3BlcmFuZCwgLi4ucmVzdE9wZXJhbmRzXSA9IHN1bW1hcnlDb2wub3BlcmFuZHM7XG4gICAgICAgICAgICBsZXQgc3VtID0gTnVtYmVyKG5ld1Jvd1tmaXJzdE9wZXJhbmRdKSB8fCAwOyAvLyBTdGFydCB3aXRoIHRoZSBmaXJzdCBvcGVyYW5kXG4gICAgICAgICAgICBzdW0gPSByZXN0T3BlcmFuZHMucmVkdWNlKChhY2MsIG9wZXJhbmQpID0+IGFjYyAtIChOdW1iZXIobmV3Um93W29wZXJhbmRdKSB8fCAwKSwgc3VtKTtcbiAgICAgICAgICAgIG5ld1Jvd1tzdW1tYXJ5Q29sLmZpZWxkTmFtZV0gPSBzdW07XG4gICAgICAgICAgfSBlbHNlIGlmIChzdW1tYXJ5Q29sLnR5cGUgPT09ICdjYWxjdWxhdGlvbicgJiYgc3VtbWFyeUNvbC5vcGVyYXRpb24gPT09ICdtdWx0aXBseScgJiYgc3VtbWFyeUNvbC5vcGVyYW5kcykge1xuICAgICAgICAgICAgY29uc3QgcHJvZHVjdCA9IHN1bW1hcnlDb2wub3BlcmFuZHMucmVkdWNlKChhY2MsIG9wZXJhbmQpID0+IGFjYyAqIChOdW1iZXIobmV3Um93W29wZXJhbmRdKSB8fCAwKSwgMSk7IC8vIFN0YXJ0IHdpdGggMVxuICAgICAgICAgICAgbmV3Um93W3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHByb2R1Y3Q7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ld1JvdztcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGE7IC8vIFVwZGF0ZSBkYXRhU291cmNlXG4gICAgICBpZiAoIXRoaXMudG90YWxSZWNvcmRzICYmIHRoaXMuZGF0YSAmJiB0aGlzLmlzUGFnaW5hdGlvbikge1xuICAgICAgICBjb25zdCBwYWdlSW5kZXggPSBOdW1iZXIodGhpcy5wYWdlSW5kZXgpIHx8IDA7XG4gICAgICAgIGNvbnN0IHBhZ2VTaXplID0gTnVtYmVyKHRoaXMucGFnZVNpemUpIHx8IDEwO1xuICAgICAgICBjb25zdCBzdGFydCA9IChwYWdlSW5kZXggLSAxKSAqIHBhZ2VTaXplO1xuICAgICAgICBjb25zdCBlbmQgPSBzdGFydCArIHBhZ2VTaXplO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YT8uc2xpY2Uoc3RhcnQsIGVuZCkgfHwgW107XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzUGFnaW5hdGlvbikge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBTS1MyME1BUjI1IENvbXB1dGUgdmFsdWVzIGZvciBzdW1tYXJ5IHJvd3NcbiAgY29tcHV0ZVN1bW1hcnlWYWx1ZXMoKSB7XG4gICAgdGhpcy5zdW1tYXJ5Um93cz8uZm9yRWFjaChyb3cgPT4ge1xuICAgICAgaWYgKHJvdy50eXBlID09PSAnY2FsY3VsYXRpb24nKSB7XG4gICAgICAgIGlmIChyb3cub3BlcmF0aW9uID09PSAnc3VtJyAmJiByb3cuY29sdW1uKSB7XG4gICAgICAgICAgLy8gQ29ycmVjdCBzdW0gb3BlcmF0aW9uXG4gICAgICAgICAgdGhpcy5zdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdID0gdGhpcy5kYXRhLnJlZHVjZShcbiAgICAgICAgICAgIChhY2MsIGRhdGFSb3cpID0+IGFjYyArIChOdW1iZXIoZGF0YVJvd1tyb3cuY29sdW1uXSkgfHwgMCksXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChyb3cub3BlcmF0aW9uID09PSAnc3VidHJhY3QnICYmIHJvdy5jb2x1bW4pIHtcbiAgICAgICAgICAvLyBTdWJ0cmFjdCBzaG91bGQgc3RhcnQgd2l0aCB0aGUgZmlyc3QgdmFsdWVcbiAgICAgICAgICB0aGlzLnN1bW1hcnlWYWx1ZXNbcm93LmZpZWxkTmFtZV0gPSB0aGlzLmRhdGEucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywgZGF0YVJvdywgaW5kZXgpID0+IGluZGV4ID09PSAwID8gTnVtYmVyKGRhdGFSb3dbcm93LmNvbHVtbl0pIHx8IDAgOiBhY2MgLSAoTnVtYmVyKGRhdGFSb3dbcm93LmNvbHVtbl0pIHx8IDApLFxuICAgICAgICAgICAgMFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocm93Lm9wZXJhdGlvbiA9PT0gJ211bHRpcGx5JyAmJiByb3cuY29sdW1uKSB7XG4gICAgICAgICAgLy8gTXVsdGlwbHkgc2hvdWxkIHN0YXJ0IHdpdGggMVxuICAgICAgICAgIHRoaXMuc3VtbWFyeVZhbHVlc1tyb3cuZmllbGROYW1lXSA9IHRoaXMuZGF0YS5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCBkYXRhUm93KSA9PiBhY2MgKiAoTnVtYmVyKGRhdGFSb3dbcm93LmNvbHVtbl0pIHx8IDApLCAvLyBVc2UgMSBpbnN0ZWFkIG9mIDBcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHJvdy5vcGVyYXRpb24gPT09ICdzdWJ0cmFjdCcgJiYgcm93Lm9wZXJhbmRzKSB7XG4gICAgICAgICAgLy8gU3VidHJhY3QgYmFzZWQgb24gb3BlcmFuZHNcbiAgICAgICAgICBjb25zdCBbb3AxLCBvcDJdID0gcm93Lm9wZXJhbmRzO1xuICAgICAgICAgIHRoaXMuc3VtbWFyeVZhbHVlc1tyb3cuZmllbGROYW1lXSA9ICh0aGlzLnN1bW1hcnlWYWx1ZXNbb3AxXSB8fCAwKSAtICh0aGlzLnN1bW1hcnlWYWx1ZXNbb3AyXSB8fCAwKTtcbiAgICAgICAgfSBlbHNlIGlmIChyb3cub3BlcmF0aW9uID09PSAnc3VtJyAmJiByb3cub3BlcmFuZHMpIHtcbiAgICAgICAgICAvLyBTdW0gYmFzZWQgb24gb3BlcmFuZHNcbiAgICAgICAgICBjb25zdCBbb3AxLCBvcDJdID0gcm93Lm9wZXJhbmRzO1xuICAgICAgICAgIHRoaXMuc3VtbWFyeVZhbHVlc1tyb3cuZmllbGROYW1lXSA9ICh0aGlzLnN1bW1hcnlWYWx1ZXNbb3AxXSB8fCAwKSArICh0aGlzLnN1bW1hcnlWYWx1ZXNbb3AyXSB8fCAwKTtcbiAgICAgICAgfSBlbHNlIGlmIChyb3cub3BlcmF0aW9uID09PSAnbXVsdGlwbHknICYmIHJvdy5vcGVyYW5kcykge1xuICAgICAgICAgIC8vIE11bHRpcGx5IGJhc2VkIG9uIG9wZXJhbmRzXG4gICAgICAgICAgY29uc3QgW29wMSwgb3AyXSA9IHJvdy5vcGVyYW5kcztcbiAgICAgICAgICB0aGlzLnN1bW1hcnlWYWx1ZXNbcm93LmZpZWxkTmFtZV0gPSAodGhpcy5zdW1tYXJ5VmFsdWVzW29wMV0gfHwgMCkgKiAodGhpcy5zdW1tYXJ5VmFsdWVzW29wMl0gfHwgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIFNLUzIwTUFSMjUgSGFuZGxlIG1hbnVhbCBpbnB1dCBjaGFuZ2VzIGluIHN1bW1hcnkgcm93cyBcbiAgb25TdW1tYXJ5SW5wdXRDaGFuZ2UoKSB7XG4gICAgdGhpcy5jb21wdXRlU3VtbWFyeVZhbHVlcygpO1xuICB9XG4gIC8vIFNLUzE1RkVCMjUgQ3VzdG9tIHNvcnQgZnVuY3Rpb25cbiAgc29ydERhdGEoY29sdW1uOiBzdHJpbmcsIHNvcnRpbmdTdGF0ZT86IGFueSB8IHVuZGVmaW5lZCwgY3VycmVudFN0YXRlPzphbnkgfHVuZGVmaW5lZCwgZnJvbT86YW55KSB7XG4gICAgLy8gRGVmaW5lIHNvcnRpbmcgc3RhdGVzXG4gICAgY29uc3Qgc29ydGluZ1N0YXRlcyA9IFsnYXNjJywgJ2Rlc2MnLCAnbm9uZSddO1xuICAgIGlmICh0aGlzLmNvbmZpZ1BhZ2luYXRpb24gPT09IGZhbHNlIHx8IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA9PT0gdGhpcy50b3RhbFJlY29yZHMpIHtcbiAgICAgIC8vIERldGVybWluZSB0aGUgY3VycmVudCBzb3J0aW5nIHN0YXRlXG4gICAgICBpZiAodGhpcy5jdXJyZW50U29ydENvbHVtbiA9PT0gY29sdW1uICYmICFzb3J0aW5nU3RhdGUpIHtcbiAgICAgICAgLy8gTW92ZSB0byB0aGUgbmV4dCBzb3J0aW5nIHN0YXRlXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHNvcnRpbmdTdGF0ZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9IHNvcnRpbmdTdGF0ZXNbKGN1cnJlbnRJbmRleCArIDEpICUgc29ydGluZ1N0YXRlcy5sZW5ndGhdIGFzIFwiYXNjXCIgfCBcImRlc2NcIiB8IFwibm9uZVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgYSBuZXcgY29sdW1uIGlzIHNlbGVjdGVkLCBzdGFydCB3aXRoIGFzY2VuZGluZyBzb3J0XG4gICAgICAgIHRoaXMuY3VycmVudFNvcnRDb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPSBzb3J0aW5nU3RhdGUgfHwgJ2FzYyc7XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5maWx0ZXJCb3hEYXRhICYmIHRoaXMuZmlsdGVyQm94RGF0YS5sZW5ndGggPiAwID8gdGhpcy5maWx0ZXJCb3hEYXRhIDogdGhpcy5kYXRhU291cmNlLmRhdGE7XG4gICAgICAvLyBPbmx5IHNvcnQgaWYgdGhlIGRpcmVjdGlvbiBpcyAnYXNjJyBvciAnZGVzYydcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnYXNjJyB8fCB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnZGVzYycpIHtcbiAgICAgICAgZGF0YS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgbGV0IHZhbHVlQSA9IHRoaXMuZ2V0VmFsdWUoYSwgY29sdW1uKTtcbiAgICAgICAgICBsZXQgdmFsdWVCID0gdGhpcy5nZXRWYWx1ZShiLCBjb2x1bW4pO1xuICAgICAgICAgIC8vIEhhbmRsZSB1bmRlZmluZWQgb3IgbnVsbCB2YWx1ZXNcbiAgICAgICAgICBpZiAodmFsdWVBID09IG51bGwgJiYgdmFsdWVCID09IG51bGwpIHJldHVybiAwOyAvLyBCb3RoIGFyZSBudWxsL3VuZGVmaW5lZFxuICAgICAgICAgIGlmICh2YWx1ZUEgPT0gbnVsbCkgcmV0dXJuIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xOyAvLyB2YWx1ZUEgaXMgbnVsbFxuICAgICAgICAgIGlmICh2YWx1ZUIgPT0gbnVsbCkgcmV0dXJuIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gLTEgOiAxOyAvLyB2YWx1ZUIgaXMgbnVsbFxuICAgICAgICAgIC8vIEhhbmRsZSBkYXRlIHNvcnRpbmdcbiAgICAgICAgICBpZiAodGhpcy5pc0RhdGVDb2x1bW4oY29sdW1uKSkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZUEgPSBuZXcgRGF0ZSh2YWx1ZUEpO1xuICAgICAgICAgICAgY29uc3QgZGF0ZUIgPSBuZXcgRGF0ZSh2YWx1ZUIpO1xuICAgICAgICAgICAgdmFsdWVBID0gZGF0ZUEuZ2V0VGltZSgpO1xuICAgICAgICAgICAgdmFsdWVCID0gZGF0ZUIuZ2V0VGltZSgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlQSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlQiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBudW1iZXIgc29ydGluZ1xuICAgICAgICAgICAgdmFsdWVBID0gTnVtYmVyKHZhbHVlQSk7XG4gICAgICAgICAgICB2YWx1ZUIgPSBOdW1iZXIodmFsdWVCKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZUEgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZUIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgc3RyaW5nIGNvbXBhcmlzb25cbiAgICAgICAgICAgIHZhbHVlQSA9IHZhbHVlQS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgdmFsdWVCID0gdmFsdWVCLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIENvbXBhcmUgdmFsdWVzXG4gICAgICAgICAgaWYgKHZhbHVlQSA8IHZhbHVlQikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gLTEgOiAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVBID4gdmFsdWVCKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAxIDogLTE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIHZhbHVlcyBhcmUgdGhlIHNhbWUsIHJldHVybiAwIHRvIG1haW50YWluIG9yaWdpbmFsIG9yZGVyXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IFsuLi5kYXRhXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhZ2VJbmRleCA9IE51bWJlcih0aGlzLnBhZ2VJbmRleCkgfHwgMDtcbiAgICAgICAgY29uc3QgcGFnZVNpemUgPSBOdW1iZXIodGhpcy5wYWdlU2l6ZSkgfHwgMTA7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gKHBhZ2VJbmRleCAtIDEpICogcGFnZVNpemU7XG4gICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgcGFnZVNpemU7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5maWx0ZXJCb3hEYXRhID8gdGhpcy5maWx0ZXJCb3hEYXRhPy5zbGljZShzdGFydCwgZW5kKSB8fCBbXSA6IHRoaXMuZGF0YT8uc2xpY2Uoc3RhcnQsIGVuZCkgfHwgW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERldGVybWluZSB0aGUgY3VycmVudCBzb3J0aW5nIHN0YXRlXG4gICAgICBpZiAodGhpcy5jdXJyZW50U29ydENvbHVtbiA9PT0gY29sdW1uKSB7XG4gICAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgc29ydGluZyBzdGF0ZVxuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBzb3J0aW5nU3RhdGVzLmluZGV4T2YodGhpcy5jdXJyZW50U29ydERpcmVjdGlvbik7XG4gICAgICAgIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPSBzb3J0aW5nU3RhdGVzWyhjdXJyZW50SW5kZXggKyAxKSAlIHNvcnRpbmdTdGF0ZXMubGVuZ3RoXSBhcyBcImFzY1wiIHwgXCJkZXNjXCIgfCBcIm5vbmVcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIGEgbmV3IGNvbHVtbiBpcyBzZWxlY3RlZCwgc3RhcnQgd2l0aCBhc2NlbmRpbmcgc29ydFxuICAgICAgICB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uID0gY29sdW1uO1xuICAgICAgICB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID0gJ2FzYyc7XG4gICAgICB9XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnTnh0RGF0YVRhYmxlJywgSlNPTi5zdHJpbmdpZnkoeyBhZGRSZWNvcmQ6IGZhbHNlLCBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCwgY3VycmVudFNvcnRDb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGN1cnJlbnRTb3J0RGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uIH0pKTtcbiAgICAgIC8vIE9ubHkgc29ydCBpZiB0aGUgZGlyZWN0aW9uIGlzICdhc2MnIG9yICdkZXNjJ1xuICAgICAgaWYoY3VycmVudFN0YXRlICE9PSB0cnVlICYmIGZyb20gIT09ICdvbkNoYW5nZScpdGhpcy5OeHRUYWJsZUVtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXggfSwgdGFibGVTZWFyY2g6IHsgZmllbGRzOiB0aGlzLmRpc3BsYXllZENvbHVtbnMsIHZhbHVlOiB0aGlzLnNlYXJjaEJveFZhbHVlIH0sIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uLGxpc3RWaWV3OiB0aGlzLnNlbGVjdGVkVmlld30gfSlcbiAgICB9XG4gICAgaWYoZnJvbSAhPT0gJ29uQ2hhbmdlJyl0aGlzLk54dFRhYmxlUGFyYW1zRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCB9LHRhYmxlU2VhcmNoOiB0aGlzLnNlYXJjaEJveFZhbHVlLCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiAsbGlzdFZpZXc6IHRoaXMuc2VsZWN0ZWRWaWV3fX0pXG4gICAgaWYoZnJvbSA9PT0gJ29uQ2hhbmdlJykgdGhpcy5wYWdlUGFyYW1zKHRoaXMudGFibGVQYXJhbXM/LnBhZ2luYXRpb24sJ29uQ2hhbmdlJylcbiAgfVxuXG4gIG9uU2Nyb2xsKHRhYmxlQ29udGFpbmVyOiBIVE1MRWxlbWVudCkge1xuICAgIHRoaXMuaXNTY3JvbGxlZCA9IHRhYmxlQ29udGFpbmVyLnNjcm9sbFRvcCA+IDA7XG4gICAgY29uc3QgdGFibGVCb2R5SGVpZ2h0ID0gdGFibGVDb250YWluZXIuc2Nyb2xsSGVpZ2h0O1xuICAgIGNvbnN0IGlzQXRCb3R0b20gPSB0YWJsZUJvZHlIZWlnaHQgLSB0YWJsZUNvbnRhaW5lci5zY3JvbGxUb3AgPD0gdGFibGVDb250YWluZXIuY2xpZW50SGVpZ2h0ICsgMTtcbiAgICAvL1NLUzE1RkVCMjUgRW5zdXJlIHNoYWRvdyBpcyBoaWRkZW4gb25seSBpZiB0YWJsZSBib2R5IGhlaWdodCBpcyBncmVhdGVyIHRoYW4gNDAwcHhcbiAgICBpZiAodGhpcy5pc1BhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMuaXNTaGFkb3dIaWRkZW4gPSAhKGlzQXRCb3R0b20gfHwgdGFibGVCb2R5SGVpZ2h0IDwgNDUwKTtcbiAgICB9XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgbG9zaW5nIHRoZSBmaWx0ZXIgY29tcG9uZW50IHdoZW4gdGhlIG1vdXNlIGlzIGNsaWNrZWQgb3V0c2lkZSB0YWJsZVxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pIG9uRG9jdW1lbnRDbGljayhldmVudDogYW55KSB7XG4gICAgdGhpcy5zZWFyY2hGaWx0ZXIgPSBmYWxzZTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgLy8gcHJldmVudHMgYW55IG90aGVyIGRlZmF1bHQgYWN0aW9uXG4gIH1cblxuICAvL1NLUzE1RkVCMjUgZmlsdGVyIGRhdGEgdGhhdCB0byBiZSBkaXNwbGF5ZWQgaW4gaGVhZGVyIGZpbHRlciBpY29uIGlzIHBhc3NlZCBpbiAnZmlsdGVyQXJyYXknIGFycmF5XG4gIGZpbHRlcihkYXRhczogYW55KSB7XG4gICAgdGhpcy5maWx0ZXJBcnJheSA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRGaWx0ZXIgPSBkYXRhcztcbiAgICB0aGlzLmZpbHRlckFycmF5ID0gdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5Py5bZGF0YXNdO1xuICAgIHRoaXMuc2VhcmNoRmlsdGVyID0gIXRoaXMuc2VhcmNoRmlsdGVyO1xuICAgIHRoaXMuaXNSZXNpemVkID0gdGhpcy5maWx0ZXJEYXRhQXJyYXlbdGhpcy5zZWxlY3RlZEZpbHRlcl0/Lmxlbmd0aCA+IDBcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgIGVtaXR0aW5nIHBhZ3Igc2l6ZSBhbmQgaW5kZXggdG8gcGFyZW50IG9uIHBhZ2luYXRpbmdcbiAgcGFnZVBhcmFtcyhldmVudDogYW55LCBmcm9tPzphbnkpIHtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IGV2ZW50Py5wYWdlSW5kZXggfHwgdGhpcy5wYWdlSW5kZXhcbiAgICB0aGlzLnBhZ2VTaXplID0gZXZlbnQ/LnBhZ2VTaXplIHx8IHRoaXMucGFnZVNpemVcbiAgICB0aGlzLmZpbHRlclRhYmxlTm9zID0gdGhpcy5maWx0ZXJCb3hEYXRhPy5sZW5ndGhcbiAgICBpZiAodGhpcy5jb25maWdQYWdpbmF0aW9uID09PSBmYWxzZSB8fCB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IHRoaXMudG90YWxSZWNvcmRzKSB7XG4gICAgICBpZihmcm9tICE9PSAnb25DaGFuZ2UnKXRoaXMuYXBwbHlGaWx0ZXIodGhpcy5zZWFyY2hCb3hWYWx1ZSAsICdwYWdlUGFyYW1zJylcbiAgICAgIGNvbnN0IHN0YXJ0ID0gKE51bWJlcih0aGlzLnBhZ2VJbmRleCkgLSAxKSAqIE51bWJlcih0aGlzLnBhZ2VTaXplKTtcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmZpbHRlckJveERhdGE/LnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZihmcm9tICE9PSAnb25DaGFuZ2UnKXRoaXMuTnh0VGFibGVFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4IH0sIHRhYmxlU2VhcmNoOiB7IGZpZWxkczogdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLCB2YWx1ZTogdGhpcy5zZWFyY2hCb3hWYWx1ZSB9LCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiAsbGlzdFZpZXc6IHRoaXMuc2VsZWN0ZWRWaWV3fSB9KVxuICAgIH1cbiAgICBpZihmcm9tICE9PSAnb25DaGFuZ2UnKXRoaXMuTnh0VGFibGVQYXJhbXNFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4IH0sdGFibGVTZWFyY2g6IHRoaXMuc2VhcmNoQm94VmFsdWUsIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uICxsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9fSlcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgYXBwbHkgc2VhcmNoIGJhciBmaWx0ZXIgdXNpbmcgbWF0XG4gIGFwcGx5RmlsdGVyKGV2ZW50OiBhbnksIGZyb20/OiBhbnkpIHtcbiAgICBsZXQgZmlsdGVyVmFsdWUgPSBldmVudDtcbiAgICBmaWx0ZXJWYWx1ZSA/IGZpbHRlclZhbHVlID0gZmlsdGVyVmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCkgOiBmaWx0ZXJWYWx1ZSA9ICcnO1xuICAgIHRoaXMuc2VhcmNoQm94VmFsdWUgPSBmaWx0ZXJWYWx1ZVxuICAgIGlmICghZmlsdGVyVmFsdWUpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5vcmlnaW5hbERhdGFcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLm9yaWdpbmFsRGF0YS5maWx0ZXIoaXRlbSA9PlxuICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMuc29tZShjb2x1bW4gPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtjb2x1bW5dPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLmluY2x1ZGVzKGZpbHRlclZhbHVlKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmKGZyb20gIT09ICdwYWdlUGFyYW1zJyAmJiBmcm9tICE9PSAnb25DaGFuZ2UnKSB0aGlzLnBhZ2VJbmRleCA9IDFcbiAgICB0aGlzLnNGaWx0ZXJEYXRhID0gdGhpcy5kYXRhU291cmNlLmRhdGFcbiAgICB0aGlzLmZpbHRlclRhYmxlTm9zID0gdGhpcy5zRmlsdGVyRGF0YT8ubGVuZ3RoXG4gICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy5kYXRhLmxlbmd0aFxuICAgIGNvbnN0IHN0YXJ0ID0gKE51bWJlcih0aGlzLnBhZ2VJbmRleCkgLSAxKSAqIE51bWJlcih0aGlzLnBhZ2VTaXplKTtcbiAgICBjb25zdCBlbmQgPSBzdGFydCArIE51bWJlcih0aGlzLnBhZ2VTaXplKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhPy5zbGljZShzdGFydCwgZW5kKTtcbiAgICB0aGlzLmZpbHRlclJldGFpbihmcm9tID09PSAnb25DaGFuZ2UnID8gdGhpcy50YWJsZVBhcmFtcz8uc2VhcmNoRmlsdGVyRGF0YSB8fCB0aGlzLmZpbHRlckRhdGFBcnJheSA6IHRoaXMuZmlsdGVyRGF0YUFycmF5LGZyb20gKVxuICB9XG5cbiAgLyoqIFNLUzE1RkVCMjUgV2hldGhlciB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGVsZW1lbnRzIG1hdGNoZXMgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzLiAqL1xuICBpc0FsbFNlbGVjdGVkKCkge1xuICAgIC8vIGNoZWNrIGlmIGFsbCByb3dzIGFyZSBzZWxlY3RlZFxuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoO1xuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGg7XG4gICAgcmV0dXJuIG51bVNlbGVjdGVkID09PSBudW1Sb3dzO1xuICB9XG5cbiAgLyoqIFNLUzE1RkVCMjUgU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uLiAqL1xuICBtYXN0ZXJUb2dnbGUoKSB7XG4gICAgLy8gaWYgdGhlcmUgaXMgYSBzZWxlY3Rpb24gdGhlbiBjbGVhciB0aGF0IHNlbGVjdGlvblxuICAgIC8vIGVtaXQgdGhlIHNlbGVjdGVkIHZhbHVlIG9ubHkgdG8gcGFyZW50XG4gICAgaWYgKHRoaXMuaXNTb21lU2VsZWN0ZWQoKSkge1xuICAgICAgLy8gICB0byByZW1vdmUgdGhlIGVkaXRSb3csIGlmIHRoZSBjaGVja2JveCBpcyB1bmNoZWNrZWRcbiAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudD8uZWRpdFJvdykgZWxlbWVudC5lZGl0Um93ID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLmVtaXQodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBubyBpdGVtcyBhcmUgc2VsZWN0ZWQsIGVpdGhlciBzZWxlY3QgYWxsIGl0ZW1zIG9yIGNsZWFyIHRoZSBzZWxlY3Rpb25cbiAgICAgIC8vIGVtaXQgdGhlIHNlbGVjdGVkIHZhbHVlcyB0byBwYXJlbnRcbiAgICAgIHRoaXMuaXNBbGxTZWxlY3RlZCgpID8gdGhpcy5zZWxlY3Rpb24uY2xlYXIoKSA6IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB0aGlzLnNlbGVjdGlvbi5zZWxlY3Qocm93KSk7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLmVtaXQodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG5cblxuICAvLyBTS1MxNUZFQjI1IENoZWNrcyB3aGV0aGVyIGFueSBpdGVtcyBhcmUgY3VycmVudGx5IHNlbGVjdGVkIGluIHRoZSB0YWJsZS5cbiAgaXNTb21lU2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aCA+IDA7XG4gIH1cblxuXG4gIC8vIFNLUzE1RkVCMjUgZW1pdCB0aGUgY2hlY2sgYm94IHZhbHVlcywgdGhhdCBzZWxlY3RlZCBzZXBhcmF0ZWx5XG4gIHNlcGFyYXRlUm93U2VsZWN0KGRhdGE6IGFueSwgZWxlbWVudDogYW55KSB7XG4gICAgLy8gICB0byByZW1vdmUgdGhlIGVkaXRSb3cgaWQgY2hlY2sgYm94IGlzIHVuY2hlY2tlZCBvbiBzZXBhcmF0ZSByb3dcbiAgICBpZiAoZGF0YSAmJiBlbGVtZW50Py5lZGl0Um93KSB7XG4gICAgICBlbGVtZW50LmVkaXRSb3cgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuZW1pdCh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZClcbiAgICB9XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgZGF0YSB0aGF0IHRvIGJlIHBhc3NlZCwgd2hlbiB0YWJsZSByb3cgaXMgY2xpY2tlZFxuICB0YWJsZUNsaWNrKGRhdGE6IGFueSkge1xuICAgIHRoaXMudGFibGVSb3dDbGljay5lbWl0KGRhdGEpO1xuICB9XG4gIGdldE5lc3RlZFZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghb2JqIHx8ICFwYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xuICBcbiAgICByZXR1cm4gcGF0aFxuICAgICAgLnJlcGxhY2UoL1xcWyhcXGQrKVxcXS9nLCAnLiQxJykgLy8gdHVybnMgXCJtZW1iZXJzWzBdXCIgaW50byBcIm1lbWJlcnMuMFwiXG4gICAgICAuc3BsaXQoJy4nKVxuICAgICAgLnJlZHVjZSgoYWNjLCBwYXJ0KSA9PiAoYWNjICYmIGFjY1twYXJ0XSAhPT0gdW5kZWZpbmVkKSA/IGFjY1twYXJ0XSA6IHVuZGVmaW5lZCwgb2JqKTtcbiAgfVxuICBcbiAgLy9TS1MxNUZFQjI1IFJldGFpbiB0aGUgZmlsdGVyZGF0YVxuICBmaWx0ZXJSZXRhaW4oZmlsdGVya2V5OiBhbnksIGZyb20/OmFueSkge1xuICAgIGlmIChmaWx0ZXJrZXkgJiYgT2JqZWN0LmtleXMoZmlsdGVya2V5KS5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5zRmlsdGVyRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhID0gW107XG4gICAgICBsZXQgaXNEYXRhQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKGZpbHRlcmtleSkpIHtcbiAgICAgICAgaWYgKGZpbHRlcmtleVtrZXldICYmIGZpbHRlcmtleVtrZXldLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpc0RhdGFDaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFpc0RhdGFDaGVja2VkKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuc0ZpbHRlckRhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoZmlsdGVya2V5KSkge1xuICAgICAgICAgIGlmIChmaWx0ZXJrZXlba2V5XSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuc0ZpbHRlckRhdGEuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldE5lc3RlZFZhbHVlKGl0ZW0sIGtleSk7XG4gICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJrZXlba2V5XS5pbmNsdWRlcyh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICBcbiAgICAgICAgICAgIGNvbnN0IGRhdGExID0gWy4uLnRoaXMuZGF0YSwgLi4uZGF0YV07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLnJlbW92ZUR1cGxpY2F0ZXMoZGF0YTEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZihmcm9tICE9PSAncGFnZVBhcmFtcycgJiYgZnJvbSAhPT0gJ29uQ2hhbmdlJykgdGhpcy5wYWdlSW5kZXggPSAxXG4gICAgY29uc3Qgc3RhcnQgPSAoTnVtYmVyKHRoaXMucGFnZUluZGV4KSAtIDEpICogTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgIHRoaXMuZmlsdGVyQm94RGF0YSA9IHRoaXMuZGF0YVxuICAgIHRoaXMuZmlsdGVyVGFibGVOb3MgPSB0aGlzLmZpbHRlckJveERhdGE/Lmxlbmd0aFxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhPy5zbGljZShzdGFydCwgZW5kKTtcbiAgICB0aGlzLmRhdGEgPSB0aGlzLm9yaWdpbmFsRGF0YVxuICAgIHRoaXMuc29ydERhdGEodGhpcy5jdXJyZW50U29ydENvbHVtbiAsdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbix1bmRlZmluZWQsZnJvbSlcbiAgfVxuXG4vLyBTS1MxNUZFQjI1IHRvIHJlbW92ZSBkdXBsaWNhdGUgb2JqZWN0IGZyb20gdHdvIGFycmF5cyAoc2FmZSBzdHJpbmdpZnkpXG5yZW1vdmVEdXBsaWNhdGVzKG9iamVjdHM6IGFueSkge1xuICBjb25zb2xlLmxvZyhcInJlbW92ZUR1cGxpY2F0ZXNcIixvYmplY3RzKVxuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHVuaXF1ZU9iamVjdHM6IGFueVtdID0gW107XG5cbiAgY29uc3Qgc2FmZVN0cmluZ2lmeSA9IChvYmo6IGFueSkgPT4ge1xuICAgIGNvbnN0IHNlZW5PYmpzID0gbmV3IFdlYWtTZXQoKTtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBudWxsOyAvLyByZXBsYWNlIHVuZGVmaW5lZCB0byBhdm9pZCBpc3N1ZXNcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNlZW5PYmpzLmhhcyh2YWx1ZSkpIHJldHVybjsgLy8gc2tpcCBjaXJjdWxhclxuICAgICAgICBzZWVuT2Jqcy5hZGQodmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuICB9O1xuXG4gIG9iamVjdHMuZm9yRWFjaCgob2JqOiBhbnkpID0+IHtcbiAgICBjb25zdCBrZXkgPSBzYWZlU3RyaW5naWZ5KG9iaik7XG4gICAgaWYgKCFzZWVuLmhhcyhrZXkpKSB7XG4gICAgICBzZWVuLmFkZChrZXkpO1xuICAgICAgdW5pcXVlT2JqZWN0cy5wdXNoKG9iaik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdW5pcXVlT2JqZWN0cztcbn1cblxuICAvLyBTS1MxNUZFQjI1ICBvbiBkZWxldGUgY2xpY2sgc2F2ZSB0aGUgZGF0YSBpbiB2YXJpYWJsZXNcbiAgZGVsZXRlUmVjb3JkKGRhdGE6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmZyb20gPT09ICdmb3JtQnVpbGRlcicpIHtcbiAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gWy4uLnRoaXMuZGF0YVNvdXJjZS5kYXRhXTsgLy8gQ3JlYXRlIGEgbmV3IHJlZmVyZW5jZVxuICAgICAgdXBkYXRlZERhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdXBkYXRlZERhdGE7IC8vIFJlYXNzaWduIHRvIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxuICAgICAgdGhpcy5kYXRhID0gdXBkYXRlZERhdGE7IC8vIFN5bmMgdGhpcy5kYXRhXG4gICAgICB0aGlzLmNvbXB1dGVTdW1tYXJ5VmFsdWVzKCk7XG4gICAgICB0aGlzLmVtaXRUYWJsZURhdGFWYWx1ZSh0aGlzLmRhdGFTb3VyY2UuZGF0YSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWxldGVEYXRhID0gZGF0YTtcbiAgICAgIHRoaXMuZGVsZXRlSW5kZXggPSBpbmRleDtcbiAgICAgIHRoaXMuZGVsZXRlTW9kYWwgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgIGFmdGVyIGNsaWNraW5nIHllcyBpbiBkZWxldGUgYWxlcnQgbW9kYWwsIGVtaXQgdG8gcGFyZW50XG4gIGRlbGV0ZVJlY29yZERhdGEoKSB7XG4gICAgdGhpcy5vbkRlbGV0ZURhdGEuZW1pdCh7IGRhdGE6IHRoaXMuZGVsZXRlRGF0YSwgYWxsRGF0YTogdGhpcy5kYXRhIH0pO1xuICAgIHRoaXMuZGVsZXRlTW9kYWwgPSBmYWxzZTtcbiAgfVxuXG4gIC8vU0tTMTVGRUIyNSB0byBzYXZlIHRoZSBlZGl0ZWQgZGF0YSBpbiB0YWJsZTtcbiAgc2F2ZUJ1dHRvbigpIHtcbiAgICAvLyBlbWl0dGluZyBhbGwgZGF0YSB3aXRoIHNlbGVjdGVkIGRhdGFcbiAgICB0aGlzLnNhdmVCdXR0b25EYXRhLmVtaXQoeyBzZWxlY3RlZERhdGE6IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLCBhbGxEYXRhOiB0aGlzLmRhdGEgfSk7XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgcGFzcyB0aGUgcmVqZWN0ZWQgcmVhc29uXG4gIG9uRWRpdChkYXRhOiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSBkYXRhLmVkaXRSb3cgPSB0cnVlOyAvLyBtYWRlIGVkaXRpbmcgcm93IGFzIHRydWUgLy8gIHNvbHZlIHVuZGVmaW5lZCBlcnJvciBvbiBzdHJpbmdcbiAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QoZGF0YSk7XG4gICAgdGhpcy5vbkVkaXREYXRhLmVtaXQoeyBkYXRhOiBkYXRhLCBhbGxEYXRhOiB0aGlzLmRhdGEgfSk7XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IHRhYmxlIHRvcCBidXR0b25zIGVtaXRcbiAgY29tbW9uQnV0dG9uQ2xpY2soYnV0dG9uOiBhbnkpIHtcbiAgICB0aGlzLmJ1dHRvbkVtaXQuZW1pdChidXR0b24pO1xuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmV0cmlldmUgZGF0YSBmcm9tIG9iamVjdHMuIFxuICAvLyBJbiAnZWxlbWVudCcgd2Ugd2lsbCBwYXNzIG9iamVjdCBhbmQgaW4gJ2NvbHVtbicgd2Ugd2lsbCBwYXNzIHBhdGggYXMgc3RyaW5nIGVnLmVtcGxveWVlLmZpbmFuY2VJbmZvWzBdLnVhbiB0byByZXRpZXZlIHVhbiB2YWx1ZSBcbiAgZ2V0VmFsdWUoZWxlbWVudDogYW55LCBjb2x1bW46IHN0cmluZykge1xuICAgIGlmICghZWxlbWVudCB8fCAhY29sdW1uKSB7XG4gICAgICByZXR1cm4gJyc7IC8vIFJldHVybiBlbXB0eSBzdHJpbmcgb3IgbnVsbCBpZiBlbGVtZW50IG9yIGNvbHVtbiBpcyBpbnZhbGlkXG4gICAgfVxuICAgIGxldCBmbGRzID0gY29sdW1uLnNwbGl0KCcuJyk7XG4gICAgbGV0IGN1cnJlbnQgPSBlbGVtZW50O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IHNwbGl0RmxkcyA9IGZsZHNbaV0uc3BsaXQoJ1snKTtcbiAgICAgIGlmIChzcGxpdEZsZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W2ZsZHNbaV1dID8/ICcnOyAvLyBVc2UgbnVsbGlzaCBjb2FsZXNjaW5nIHRvIGhhbmRsZSB1bmRlZmluZWQvbnVsbFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGluZGV4ID0gTnVtYmVyKHNwbGl0Rmxkc1sxXS5zcGxpdCgnXScpWzBdKTtcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnRbc3BsaXRGbGRzWzBdXT8uW2luZGV4XSA/PyAnJzsgLy8gU2FmZWx5IGFjY2VzcyBhcnJheSBpbmRleFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3VycmVudDtcbiAgfVxuICAvL1NLUzE1RkVCMjUgaHlwZXJsaW5sIGNvbHVtbnMgb25seSBlbWl0dGVkXG4gIG9uQ2xpY2tIeXBlcmxpbmsoY29sdW1uOiBhbnksIGVsZW1lbnQ6IGFueSwgaXNIeXBlckxpbms6IGFueSkge1xuICAgIGlmIChpc0h5cGVyTGluaykgdGhpcy5oeXBlckxpbmtFbWl0LmVtaXQoeyBjb2x1bW46IGNvbHVtbiwgZWxlbWVudDogZWxlbWVudCB9KTtcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgdG8gY2hlY2sgd2hldGhlciB0aGUgaHlwZXJsaW5rIGFjdGlvbiBpcyBwcmVzZW50IGluIHRoYXQgY29sdW1uXG4gIGNoZWNrSHlwZXJsaW5rQ2hlY2soY29sOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5oeXBlckxpbmtDb2x1bW5zPy5pbmNsdWRlcyhjb2wpID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBvbiBhZGQgcmVjb3JkIGluIHRhYmxlLCB0aGUgJ2lubGluZUVsZW1lbnQnIHZhbHVlcyB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoZSB0YWJsZSBkYXRhIFxuICBhZGRUYWJsZVJlY29yZChlbGVtZW50OiBhbnksZnJvbT86YW55KSB7XG4gICAgaWYgKHRoaXMuY29uZmlnUGFnaW5hdGlvbiA9PT0gZmFsc2UgfHwgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSB0aGlzLnRvdGFsUmVjb3Jkcykge1xuICAgICAgdmFyIG9iajogYW55ID0ge307XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZWxlbWVudCk7XG4gICAgICBrZXlzLmZvckVhY2goKGVsZW1lbnRLZXk6IGFueSkgPT4ge1xuICAgICAgICBvYmpbZWxlbWVudEtleV0gPSAnJztcbiAgICAgIH0pO1xuICAgICAgLy8gU0tTMjBNQVIyNSBDb21wdXRlIHN1bW1hcnkgY29sdW1ucyBmb3IgdGhlIG5ldyByb3dcbiAgICAgIGlmICh0aGlzLnN1bW1hcnlDb2x1bW5zICYmIHRoaXMuc3VtbWFyeUNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnN1bW1hcnlDb2x1bW5zLmZvckVhY2goc3VtbWFyeUNvbCA9PiB7XG4gICAgICAgICAgaWYgKHN1bW1hcnlDb2wudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJyAmJiBzdW1tYXJ5Q29sLm9wZXJhdGlvbiA9PT0gJ3N1bScgJiYgc3VtbWFyeUNvbC5vcGVyYW5kcykge1xuICAgICAgICAgICAgY29uc3Qgc3VtID0gc3VtbWFyeUNvbC5vcGVyYW5kcy5yZWR1Y2UoKGFjYywgb3BlcmFuZCkgPT4gYWNjICsgKE51bWJlcihvYmpbb3BlcmFuZF0pIHx8IDApLCAwKTtcbiAgICAgICAgICAgIG9ialtzdW1tYXJ5Q29sLmZpZWxkTmFtZV0gPSBzdW07XG4gICAgICAgICAgfSBlbHNlIGlmIChzdW1tYXJ5Q29sLnR5cGUgPT09ICdjYWxjdWxhdGlvbicgJiYgc3VtbWFyeUNvbC5vcGVyYXRpb24gPT09ICdzdWJ0cmFjdCcgJiYgc3VtbWFyeUNvbC5vcGVyYW5kcykge1xuICAgICAgICAgICAgY29uc3Qgc3VtID0gc3VtbWFyeUNvbC5vcGVyYW5kcy5yZWR1Y2UoKGFjYywgb3BlcmFuZCkgPT4gYWNjIC0gKE51bWJlcihvYmpbb3BlcmFuZF0pIHx8IDApLCAwKTtcbiAgICAgICAgICAgIG9ialtzdW1tYXJ5Q29sLmZpZWxkTmFtZV0gPSBzdW07XG4gICAgICAgICAgfSBlbHNlIGlmIChzdW1tYXJ5Q29sLnR5cGUgPT09ICdjYWxjdWxhdGlvbicgJiYgc3VtbWFyeUNvbC5vcGVyYXRpb24gPT09ICdtdWx0aXBseScgJiYgc3VtbWFyeUNvbC5vcGVyYW5kcykge1xuICAgICAgICAgICAgY29uc3Qgc3VtID0gc3VtbWFyeUNvbC5vcGVyYW5kcy5yZWR1Y2UoKGFjYywgb3BlcmFuZCkgPT4gYWNjICogKE51bWJlcihvYmpbb3BlcmFuZF0pIHx8IDApLCAwKTtcbiAgICAgICAgICAgIG9ialtzdW1tYXJ5Q29sLmZpZWxkTmFtZV0gPSBzdW07XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKHN1bW1hcnlDb2wudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJyAmJiBzdW1tYXJ5Q29sLm9wZXJhdGlvbiA9PT0gJ3N1YnRyYWN0JyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzKSB7XG4gICAgICAgICAgICBjb25zdCBzdW0gPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnNsaWNlKDEpLnJlZHVjZShcbiAgICAgICAgICAgICAgKGFjYywgb3BlcmFuZCkgPT4gYWNjIC0gKE51bWJlcihvYmpbb3BlcmFuZF0pIHx8IDApLFxuICAgICAgICAgICAgICBOdW1iZXIob2JqW3N1bW1hcnlDb2wub3BlcmFuZHNbMF1dKSB8fCAwXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgb2JqW3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHN1bTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoc3VtbWFyeUNvbC50eXBlID09PSAnY2FsY3VsYXRpb24nICYmIHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnbXVsdGlwbHknICYmIHN1bW1hcnlDb2wub3BlcmFuZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y3QgPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnJlZHVjZShcbiAgICAgICAgICAgICAgKGFjYywgb3BlcmFuZCkgPT4gYWNjICogKE51bWJlcihvYmpbb3BlcmFuZF0pIHx8IDApLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgb2JqW3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHByb2R1Y3Q7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGF0YS5wdXNoKG9iaik7XG4gICAgICBjb25zdCBkYXRhOiBhbnkgPSB0aGlzLmRhdGE7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XG5cbiAgICAgIGlmICh0aGlzLnN0aWNreUNvbHVtbiA9PT0gdHJ1ZSAmJiB0aGlzLmRpc3BsYXllZENvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5zdGlja3lDb25kaXRpb24gPSB0aGlzLmRpc3BsYXllZENvbHVtbnM/Lmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RpY2t5Q29uZGl0aW9uID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPy5sZW5ndGggKyAxO1xuICAgICAgfVxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IDEwXG4gICAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLmRhdGEubGVuZ3RoXG4gICAgICB0aGlzLmZpbHRlclRhYmxlTm9zICs9IDEgXG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IE1hdGguY2VpbCh0aGlzLnRvdGFsQ291bnQgLyB0aGlzLnBhZ2VTaXplKTtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gKE51bWJlcih0aGlzLnBhZ2VJbmRleCkgLSAxKSAqIE51bWJlcih0aGlzLnBhZ2VTaXplKTtcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgICAgaWYgKCF0aGlzLmlzUGFnaW5hdGlvbikge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGE/LnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KHRoaXMuZGF0YVt0aGlzLmRhdGEubGVuZ3RoIC0gMV0pO1xuICAgICAgdGhpcy5kYXRhW3RoaXMuZGF0YS5sZW5ndGggLSAxXS5lZGl0Um93ID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGFnZUluZGV4ID0gTWF0aC5jZWlsKHRoaXMudG90YWxSZWNvcmRzIC8gMTApO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ054dERhdGFUYWJsZScsIEpTT04uc3RyaW5naWZ5KHsgYWRkUmVjb3JkOiB0cnVlLCBwYWdlU2l6ZTogMTAsIHBhZ2VJbmRleDogcGFnZUluZGV4LCBjdXJyZW50U29ydENvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgY3VycmVudFNvcnREaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gfSkpO1xuICAgICAgaWYoZnJvbSAhPT0gJ29uQ2hhbmdlJyl0aGlzLk54dFRhYmxlRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogMTAsIHBhZ2VJbmRleDogcGFnZUluZGV4IH0sIHRhYmxlU2VhcmNoOiB7IGZpZWxkczogdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLCB2YWx1ZTogdGhpcy5zZWFyY2hCb3hWYWx1ZSB9LCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiAsbGlzdFZpZXc6IHRoaXMuc2VsZWN0ZWRWaWV3fSB9KVxuICAgIH1cbiAgICBpZiAodGhpcy5mcm9tID09PSAnZm9ybUJ1aWxkZXInKSB7XG4gICAgICB0aGlzLmVtaXRUYWJsZURhdGFWYWx1ZSh0aGlzLmRhdGFTb3VyY2UuZGF0YSk7XG4gICAgfVxuICAgIHRoaXMuY29tcHV0ZVN1bW1hcnlWYWx1ZXMoKTtcbiAgICBpZihmcm9tICE9PSAnb25DaGFuZ2UnKXRoaXMuTnh0VGFibGVQYXJhbXNFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4IH0sdGFibGVTZWFyY2g6IHRoaXMuc2VhcmNoQm94VmFsdWUsIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uICxsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9fSlcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgQWN0aW9uIGJ1dHRvbiBjb25kaXRpb25hbGx5IGRpc3BsYXllZCBmdW5jdGlvblxuICBpc0NvbmRpdGlvbk1ldChlbGVtZW50OiBhbnksIGNvbmRpdGlvbnM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChjb25kaXRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHsgYW5kQ29uZGl0aW9uTGlzdCwgb3JDb25kaXRpb25MaXN0IH0gPSBjb25kaXRpb25zO1xuICAgICAgLy8gIElmIGFuZENvbmRpdGlvbkxpc3QgZXhpc3RzLCBjaGVjayB0aGF0IGFsbCBjb25kaXRpb25zIGFyZSBtZXRcbiAgICAgIGNvbnN0IGlzQW5kQ29uZGl0aW9uTWV0ID0gYW5kQ29uZGl0aW9uTGlzdCA/IGFuZENvbmRpdGlvbkxpc3QuZXZlcnkoKGNvbmQ6IHsgY29uZGl0aW9uOiBzdHJpbmcgfCBhbnlbXTsgY29sdW1uOiBzdHJpbmcgfCBudW1iZXI7IH0pID0+XG4gICAgICAgIGNvbmQuY29uZGl0aW9uLmluY2x1ZGVzKGVsZW1lbnRbY29uZC5jb2x1bW5dKVxuICAgICAgKSA6IHRydWU7IC8vICBJZiBubyBhbmRDb25kaXRpb25MaXN0LCBjb25zaWRlciBpdCBhcyBhbHdheXMgbWV0XG4gICAgICAvLyAgSWYgb3JDb25kaXRpb25MaXN0IGV4aXN0cywgY2hlY2sgaWYgYXQgbGVhc3Qgb25lIGNvbmRpdGlvbiBpcyBtZXRcbiAgICAgIGNvbnN0IGlzT3JDb25kaXRpb25NZXQgPSBvckNvbmRpdGlvbkxpc3QgPyBvckNvbmRpdGlvbkxpc3Quc29tZSgoY29uZDogeyBjb25kaXRpb246IHN0cmluZyB8IGFueVtdOyBjb2x1bW46IHN0cmluZyB8IG51bWJlcjsgfSkgPT5cbiAgICAgICAgY29uZC5jb25kaXRpb24uaW5jbHVkZXMoZWxlbWVudFtjb25kLmNvbHVtbl0pXG4gICAgICApIDogdHJ1ZTsgLy8gIElmIG5vIG9yQ29uZGl0aW9uTGlzdCwgY29uc2lkZXIgaXQgYXMgYWx3YXlzIG1ldFxuICAgICAgLy8gIFJldHVybiB0cnVlIGlmIHRoZSBBTkQgY29uZGl0aW9uIGlzIG1ldCBhbmQgdGhlIE9SIGNvbmRpdGlvbiBpcyBtZXRcbiAgICAgIHJldHVybiBpc0FuZENvbmRpdGlvbk1ldCAmJiBpc09yQ29uZGl0aW9uTWV0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IENoZWNrIGlmIHRoZSBjb2x1bW4gaXMgYSBkYXRlIGNvbHVtblxuICBpc0RhdGVDb2x1bW4oY29sdW1uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlQ29sdW1ucz8uaW5jbHVkZXMoY29sdW1uKSA/PyBmYWxzZTtcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgQ2hlY2sgaWYgdGhlIGNvbHVtbiBpcyBhIHRpbWUgY29sdW1uXG4gIGlzVGltZUNvbHVtbihjb2x1bW46IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRpbWVDb2x1bW5zPy5pbmNsdWRlcyhjb2x1bW4pID8/IGZhbHNlO1xuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBjb25maWcgc2VhcmNoIGZpbHRlciBib3ggZnVuY3Rpb25cbiAgb25TZWFyY2goZXZlbnQ6IGFueSxmcm9tPzphbnkpIHtcbiAgICB0aGlzLnNlYXJjaEJveFZhbHVlID0gZXZlbnQ7IC8vIFVwZGF0ZSB0aGUgZGlzcGxheWVkIHZhbHVlIGluIHRoZSBzZWFyY2ggYm94XG4gICAgaWYgKHRoaXMuc2VhcmNoQ29uZmlncyB8fCB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IHRoaXMudG90YWxSZWNvcmRzKSB7XG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IDFcbiAgICAgIHRoaXMucGFnZVNpemUgPSAxMFxuICAgICAgaWYoZnJvbSAhPT0gJ29uQ2hhbmdlJyl0aGlzLk54dFRhYmxlRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwgcGFnZUluZGV4OiBOdW1iZXIodGhpcy5wYWdlSW5kZXgpIH0sIHRhYmxlU2VhcmNoOiB7IGZpZWxkczogdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLCB2YWx1ZTogdGhpcy5zZWFyY2hCb3hWYWx1ZSB9LCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiAsbGlzdFZpZXc6IHRoaXMuc2VsZWN0ZWRWaWV3fSB9KVxuICAgIH1cbiAgICBpZihmcm9tICE9PSAnb25DaGFuZ2UnKXRoaXMuTnh0VGFibGVQYXJhbXNFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4IH0sdGFibGVTZWFyY2g6IHRoaXMuc2VhcmNoQm94VmFsdWUsIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uICxsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9fSlcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgSWYgdGhlIHZhbHVlIGluIHRoZSBzZWFyY2ggYm94IGlzIGVtcHR5LCBjYWxsIHRoZSBvblNlYXJjaCBmdW5jdGlvbiBhdXRvbWF0aWNhbGx5XG4gIGVtcHR5U2VhcmNoKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoIWV2ZW50LnRyaW0oKSAmJiAodGhpcy5wcmV2U2VhcmNoICE9IGV2ZW50LnRyaW0oKSkpIHtcbiAgICAgIHRoaXMub25TZWFyY2goZXZlbnQpXG4gICAgfVxuICAgIHRoaXMucHJldlNlYXJjaCA9IGV2ZW50LnRyaW0oKVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBpbmZvU2lkZXNjcmVlbiBlbWl0IFxuICBvblNpZGVOYXZJbmZvQ2xpY2soZGF0YTogYW55LCBjb2w6IGFueSkge1xuICAgIHRoaXMuc2lkZU5hdkVtaXQuZW1pdCh7XG4gICAgICBkYXRhLCBjb2wsXG4gICAgICBjb25maWc6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IGZvciBhY3RpdmUgY29sdW1uIHNlbGVjdFxuICBvbkNvbHVtbkNsaWNrKGNvbHVtbjogc3RyaW5nKSB7XG4gICAgdGhpcy5hY3RpdmVDb2x1bW4gPSBjb2x1bW47XG4gICAgaWYgKCF0aGlzLmlzRWRpdGFibGUpIHtcbiAgICAgIC8vIEV4aXN0aW5nIHNvcnQvZmlsdGVyIGxvZ2ljXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW4gPT09IGNvbHVtbikge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbiA9IG51bGw7XG4gICAgICB0aGlzLmNvbHVtblNlbGVjdGVkLmVtaXQobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW4gPSBjb2x1bW47XG4gICAgICBjb25zdCBjb2x1bW5EYXRhID0gdGhpcy5kYXRhU291cmNlLmRhdGEubWFwKHJvdyA9PiAoe1xuICAgICAgICB2YWx1ZTogcm93W2NvbHVtbl0sXG4gICAgICAgIGlkOiByb3cuaWQgLy8gb3IgdW5pcXVlIGlkZW50aWZpZXJcbiAgICAgIH0pKTtcbiAgICAgIHRoaXMuY29sdW1uU2VsZWN0ZWQuZW1pdCh7IGNvbHVtbiwgZGF0YTogY29sdW1uRGF0YSB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IGZvciBjbG9zZSBzZWFyY2ggZmlsdGVyIGJveFxuICBjbG9zZWZpbHRlcihmcm9tPzphbnkpIHtcbiAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZSB8fCAxMFxuICAgIHRoaXMucGFnZUluZGV4ID0gMVxuICAgIHRoaXMuZmlsdGVyRGF0YUFycmF5W3RoaXMuc2VsZWN0ZWRGaWx0ZXJdID0gW11cbiAgICB0aGlzLmlzUmVzaXplZCA9IGZhbHNlXG4gICAgaWYgKHRoaXMuY29uZmlnUGFnaW5hdGlvbiA9PT0gZmFsc2UgfHwgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSB0aGlzLnRvdGFsUmVjb3Jkcykge1xuICAgICAgdGhpcy5maWx0ZXJSZXRhaW4odGhpcy5maWx0ZXJEYXRhQXJyYXkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKGZyb20gIT09ICdvbkNoYW5nZScpdGhpcy5OeHRUYWJsZUVtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IDEwLCBwYWdlSW5kZXg6IDEgfSwgdGFibGVTZWFyY2g6IHsgZmllbGRzOiB0aGlzLmRpc3BsYXllZENvbHVtbnMsIHZhbHVlOiB0aGlzLnNlYXJjaEJveFZhbHVlIH0sIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uICxsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9IH0pXG4gICAgfVxuICAgIGlmKGZyb20gIT09ICdvbkNoYW5nZScpdGhpcy5OeHRUYWJsZVBhcmFtc0VtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXggfSx0YWJsZVNlYXJjaDogdGhpcy5zZWFyY2hCb3hWYWx1ZSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gLGxpc3RWaWV3OiB0aGlzLnNlbGVjdGVkVmlld319KVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBzZWFyY2ggZmlsdGVyIGJveCBjaGVja2JveCByZXRhaW5cbiAgaXNTZWxlY3RlZChldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuZmlsdGVyRGF0YUFycmF5W3RoaXMuc2VsZWN0ZWRGaWx0ZXJdICYmIHRoaXMuZmlsdGVyRGF0YUFycmF5W3RoaXMuc2VsZWN0ZWRGaWx0ZXJdLmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBzZWFyY2ggZmlsdGVyIGJveCBjaGVja2JveCBzZWxlY3RcbiAgY2hlY2tlZERhdGEoZXZlbnQ6IGFueSxmcm9tPzphbnkpIHtcbiAgICBjb25zb2xlLmxvZyhcImNoZWNrZWREYXRhXCIsZXZlbnQpXG4gICAgbGV0IHNlbGVjdGVkQXJyYXkgPSBbXVxuICAgIHNlbGVjdGVkQXJyYXkgPSB0aGlzLmZpbHRlckRhdGFBcnJheVt0aGlzLnNlbGVjdGVkRmlsdGVyXSA/IHRoaXMuZmlsdGVyRGF0YUFycmF5W3RoaXMuc2VsZWN0ZWRGaWx0ZXJdIDogW11cbiAgICBpZiAoc2VsZWN0ZWRBcnJheSAmJiBzZWxlY3RlZEFycmF5LmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgc2VsZWN0ZWRBcnJheSA9IHNlbGVjdGVkQXJyYXkuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0gIT09IGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0ZWRBcnJheS5wdXNoKGV2ZW50KTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJEYXRhQXJyYXlbdGhpcy5zZWxlY3RlZEZpbHRlcl0gPSBzZWxlY3RlZEFycmF5XG4gICAgdGhpcy5pc1Jlc2l6ZWQgPSBzZWxlY3RlZEFycmF5Py5sZW5ndGggPiAwXG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAhPT0gdGhpcy50b3RhbFJlY29yZHMgJiYgdGhpcy5jb25maWdQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IDFcbiAgICAgIHRoaXMucGFnZVNpemUgPSAxMFxuICAgICAgaWYoZnJvbSAhPT0gJ29uQ2hhbmdlJyl0aGlzLk54dFRhYmxlRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwgcGFnZUluZGV4OiBOdW1iZXIodGhpcy5wYWdlSW5kZXgpIH0sIHRhYmxlU2VhcmNoOiB7IGZpZWxkczogdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLCB2YWx1ZTogdGhpcy5zZWFyY2hCb3hWYWx1ZSB9LCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiAsbGlzdFZpZXc6IHRoaXMuc2VsZWN0ZWRWaWV3fSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlclJldGFpbih0aGlzLmZpbHRlckRhdGFBcnJheSlcbiAgICB9XG4gICAgaWYoZnJvbSAhPT0gJ29uQ2hhbmdlJyl0aGlzLk54dFRhYmxlUGFyYW1zRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCB9LHRhYmxlU2VhcmNoOiB0aGlzLnNlYXJjaEJveFZhbHVlLCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiAsbGlzdFZpZXc6IHRoaXMuc2VsZWN0ZWRWaWV3fX0pXG4gIH1cblxuICAvLyBTS1MxNUZFQjI1ICBhY3Rpb24gY29sdW1uIGRyb3Bkb3duIGJ1dHRvbnMgY2xvc2VcbiAgcHJpdmF0ZSBhZGRDbGlja091dHNpZGVMaXN0ZW5lcigpIHtcbiAgICBpZiAoIXRoaXMuY2xpY2tMaXN0ZW5lcikge1xuICAgICAgdGhpcy5jbGlja0xpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5kcm9wZG93bicpKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50T3BlbkluZGV4ID0gbnVsbDtcbiAgICAgICAgICB0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXIoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy9TS1MxNUZFQjI1IGlmIGNsb3NlIHRoZSBkcm9wZG93biBtZW51IHN0b3AgdGhlIGNsaWNrIGxpc3RlbmVyXG4gIHByaXZhdGUgcmVtb3ZlQ2xpY2tMaXN0ZW5lcigpIHtcbiAgICBpZiAodGhpcy5jbGlja0xpc3RlbmVyKSB7XG4gICAgICB0aGlzLmNsaWNrTGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuY2xpY2tMaXN0ZW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSAgYWN0aW9uIGNvbHVtbiBkcm9wZG93biBidXR0b25zIG9wZW4gLyBjO29zZVxuICB0b2dnbGVEcm9wZG93bihpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5jdXJyZW50T3BlbkluZGV4ID0gdGhpcy5jdXJyZW50T3BlbkluZGV4ID09PSBpbmRleCA/IG51bGwgOiBpbmRleDtcbiAgICB0aGlzLmFkZENsaWNrT3V0c2lkZUxpc3RlbmVyKCk7XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgYWN0aW9uIGJ1dHRvbiBldm50IGVtaXRcbiAgYWN0aW9uQnV0dG9uQ2xpY2tlZChldmVudDogYW55LCBkYXRhOiBhbnkpIHtcbiAgICB0aGlzLmFjdGlvbkJ1dHRvbkVtaXQuZW1pdCh7IGV2ZW50LCBkYXRhIH0pXG4gIH1cblxuICByZW1vdmVDb2woY29sdW1uOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1uID0gbnVsbDtcbiAgICAvLyBFbWl0IGRlc2VsZWN0aW9uXG4gICAgaWYgKCF0aGlzLmlzRWRpdGFibGUpIHtcbiAgICAgIC8vIEV4aXN0aW5nIHNvcnQvZmlsdGVyIGxvZ2ljXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29sdW1uRGF0YSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLm1hcChyb3cgPT4gKHtcbiAgICAgIHZhbHVlOiByb3dbY29sdW1uXSxcbiAgICAgIGlkOiByb3cuaWQgLy8gb3IgdW5pcXVlIGlkZW50aWZpZXJcbiAgICB9KSk7XG4gICAgdGhpcy5yZW1vdmVDb2x1bW4uZW1pdCh7IGNvbHVtbiwgZGF0YTogY29sdW1uRGF0YSB9KTtcblxuICB9XG4gIGVtaXRUYWJsZURhdGFWYWx1ZSh1cGRhdGVkVGFibGVEYXRhOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh1cGRhdGVkVGFibGVEYXRhKTtcbiAgfVxuXG4gIHVwZGF0ZUVkaXQoaW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSwgZWxlbWVudDogYW55LCBjb2x1bW46IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHVwZGF0ZWRFbGVtZW50ID0gdGhpcy51cGRhdGVWYWx1ZShlbGVtZW50LCBjb2x1bW4sIHZhbHVlKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YVtpbmRleF0gPSB1cGRhdGVkRWxlbWVudDtcblxuICAgIC8vIFNLUzIwTUFSMjUgRW5zdXJlIHRoaXMuZGF0YSBpcyB1cGRhdGVkIHNpbmNlIHN1bW1hcnkgdXNlcyB0aGUgZnVsbCBkYXRhc2V0XG4gICAgY29uc3QgZGF0YUluZGV4ID0gdGhpcy5kYXRhLmZpbmRJbmRleCgoaXRlbTogYW55KSA9PiBpdGVtID09PSBlbGVtZW50KTtcbiAgICBpZiAoZGF0YUluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5kYXRhW2RhdGFJbmRleF0gPSB1cGRhdGVkRWxlbWVudDtcbiAgICB9XG4gICAgLy8gUmVjb21wdXRlIHN1bW1hcnkgY29sdW1ucyBmb3IgdGhlIHVwZGF0ZWQgcm93XG4gICAgaWYgKHRoaXMuc3VtbWFyeUNvbHVtbnMgJiYgdGhpcy5zdW1tYXJ5Q29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnN1bW1hcnlDb2x1bW5zLmZvckVhY2goc3VtbWFyeUNvbCA9PiB7XG4gICAgICAgIGlmIChzdW1tYXJ5Q29sLnR5cGUgPT09ICdjYWxjdWxhdGlvbicgJiYgc3VtbWFyeUNvbC5vcGVyYW5kcyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzLmxlbmd0aCkge1xuICAgICAgICAgIGlmIChzdW1tYXJ5Q29sLm9wZXJhdGlvbiA9PT0gJ3N1bScpIHtcbiAgICAgICAgICAgIHVwZGF0ZWRFbGVtZW50W3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHN1bW1hcnlDb2wub3BlcmFuZHMucmVkdWNlKFxuICAgICAgICAgICAgICAoYWNjLCBvcGVyYW5kKSA9PiBhY2MgKyAoTnVtYmVyKHVwZGF0ZWRFbGVtZW50W29wZXJhbmRdKSB8fCAwKSxcbiAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnbXVsdGlwbHknKSB7XG4gICAgICAgICAgICB1cGRhdGVkRWxlbWVudFtzdW1tYXJ5Q29sLmZpZWxkTmFtZV0gPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnJlZHVjZShcbiAgICAgICAgICAgICAgKGFjYywgb3BlcmFuZCkgPT4gYWNjICogKE51bWJlcih1cGRhdGVkRWxlbWVudFtvcGVyYW5kXSkgfHwgMCksICAvLyBTdGFydCB3aXRoIDEgaW5zdGVhZCBvZiAwXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdW1tYXJ5Q29sLm9wZXJhdGlvbiA9PT0gJ3N1YnRyYWN0Jykge1xuICAgICAgICAgICAgdXBkYXRlZEVsZW1lbnRbc3VtbWFyeUNvbC5maWVsZE5hbWVdID0gc3VtbWFyeUNvbC5vcGVyYW5kcy5zbGljZSgxKS5yZWR1Y2UoXG4gICAgICAgICAgICAgIChhY2MsIG9wZXJhbmQpID0+IGFjYyAtIChOdW1iZXIodXBkYXRlZEVsZW1lbnRbb3BlcmFuZF0pIHx8IDApLFxuICAgICAgICAgICAgICBOdW1iZXIodXBkYXRlZEVsZW1lbnRbc3VtbWFyeUNvbC5vcGVyYW5kc1swXV0pIHx8IDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhW2luZGV4XSA9IHVwZGF0ZWRFbGVtZW50O1xuICAgICAgaWYgKGRhdGFJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5kYXRhW2RhdGFJbmRleF0gPSB1cGRhdGVkRWxlbWVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuZnJvbSA9PT0gJ2Zvcm1CdWlsZGVyJykge1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGFbaW5kZXhdID0gdGhpcy51cGRhdGVWYWx1ZShlbGVtZW50LCBjb2x1bW4sIHZhbHVlKTtcbiAgICAgIHRoaXMuZW1pdFRhYmxlRGF0YVZhbHVlKHRoaXMuZGF0YVNvdXJjZS5kYXRhKVxuICAgIH1cbiAgICB0aGlzLmNvbXB1dGVTdW1tYXJ5VmFsdWVzKCk7XG4gIH1cbiAgLy8gU0tTMThNQVIyNSB1cGRhdGUgZWxlbWVudFxuICB1cGRhdGVWYWx1ZShlbGVtZW50OiBhbnksIGNvbHVtbjogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgbGV0IGZsZHMgPSBjb2x1bW4/LnNwbGl0KCcuJyk7XG4gICAgbGV0IG9iaiA9IGVsZW1lbnQ7IC8vIEtlZXAgcmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCBvYmplY3RcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmxkcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIGxldCBzcGxpdEZsZHMgPSBmbGRzW2ldLnNwbGl0KCdbJyk7XG4gICAgICBpZiAoc3BsaXRGbGRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBvYmogPSBvYmpbZmxkc1tpXV0gfHwgKG9ialtmbGRzW2ldXSA9IHt9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBpbmRleCA9IE51bWJlcihzcGxpdEZsZHNbMV0uc3BsaXQoJ10nKVswXSk7XG4gICAgICAgIG9iaiA9IG9ialtzcGxpdEZsZHNbMF1dIHx8IChvYmpbc3BsaXRGbGRzWzBdXSA9IFtdKTtcbiAgICAgICAgb2JqID0gb2JqW2luZGV4XSB8fCAob2JqW2luZGV4XSA9IHt9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIGZpbmFsIHByb3BlcnR5XG4gICAgbGV0IGxhc3RLZXkgPSBmbGRzW2ZsZHMubGVuZ3RoIC0gMV07XG4gICAgbGV0IHNwbGl0TGFzdEtleSA9IGxhc3RLZXkuc3BsaXQoJ1snKTtcbiAgICBpZiAoc3BsaXRMYXN0S2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgb2JqW2xhc3RLZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBpbmRleCA9IE51bWJlcihzcGxpdExhc3RLZXlbMV0uc3BsaXQoJ10nKVswXSk7XG4gICAgICBvYmpbc3BsaXRMYXN0S2V5WzBdXVtpbmRleF0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIGV4cGVuc2VBdHRhY2htZW50KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpbGVFbWl0LmVtaXQoZXZlbnQpXG4gIH1cbiAgbGlzdFZpZXdFbWl0KGV2ZW50KXtcbiAgICBpZihldmVudC5hY3Rpb24gPT09ICdmaWx0ZXJHZXQnKXtcbiAgICAgIGV2ZW50WydkYXRhJ109IHRoaXMuZmlsdGVyQ29sdW1uc1xuICAgICAgaWYoIXRoaXMudGFibGVGaWx0ZXJEYXRhIHx8IHRoaXMudGFibGVGaWx0ZXJEYXRhLmxlbmd0aCA9PT0gMCl7XG4gICAgICAgIHRoaXMuTnh0VGFibGVGaWx0ZXJFbWl0LmVtaXQoZXZlbnQpXG4gICAgICB9XG4gICAgfSBlbHNleyBcbiAgICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdzZWxlY3QnIHx8IGV2ZW50LmFjdGlvbiA9PT0gJ3NhdmUnKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gZXZlbnQuZGF0YS5maWx0ZXJOYW1lO1xuICAgICAgICB0aGlzLmN1cnJlbnRWaWV3RmlsdGVyID0gZXZlbnQuZGF0YTtcbiAgICAgICAgdGhpcy5uZ09uQ2hhbmdlcyh7fSlcbiAgICAgIH1cbiAgICAgIHRoaXMuTnh0VGFibGVGaWx0ZXJFbWl0LmVtaXQoZXZlbnQpXG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGFibGUtbGF5b3V0XCIgW2lkXT1cInRhYmxlSWRcIiBbbmdTdHlsZV09XCJ7J3BhZGRpbmctdG9wJzogJzFweCcsICd3aWR0aCc6IHRhYmxlV2lkdGh9XCIgW2Rpcl09XCJkaXJlY3Rpb25cIj5cbiAgICA8ZGl2PiA8IS0tIGNsYXNzPVwibS00XCIgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJ0aXRsZVwiIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgdGFibGUtdGl0bGUgYWxpZ24tdGV4dC1jZW50ZXIgcHQtM1wiPlxuICAgICAgICAgICAge3t0aXRsZX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNOb3NJbmRpY2F0b3IgfHwgc2VhcmNoQmFyIHx8IGlzQnV0dG9uc1wiIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiIHN0eWxlPVwicGFkZGluZy1ib3R0b206IDIwcHg7XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMjZBUFIyNSBMaXN0IFZpZXcgRmlsdGVyIC0tPlxuICAgICAgICAgICAgICAgIDxhcHAtbGlzdC12aWV3LWZpbHRlciAqbmdJZj1cImxpc3RWaWV3cyAmJiBsaXN0Vmlld3MubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgICAgIFtsaXN0Vmlld3NdPVwibGlzdFZpZXdzXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkVmlld109XCJzZWxlY3RlZFZpZXdcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzcGxheWVkQ29sdW1uc10gPSAnZGlzcGxheWVkQ29sdW1ucydcbiAgICAgICAgICAgICAgICAgICAgW3RhYmxlRmlsdGVyQXJyYXldPVwidGFibGVGaWx0ZXJBcnJheVwiXG4gICAgICAgICAgICAgICAgICAgIChsaXN0Vmlld0VtaXQpPVwibGlzdFZpZXdFbWl0KCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1saXN0LXZpZXctZmlsdGVyPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoIWxpc3RWaWV3cyB8fCBsaXN0Vmlld3MubGVuZ3RoID09PSAwKSAmJiBpc05vc0luZGljYXRvclwiIGNsYXNzPVwibm9PZlJlY1wiIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1wiPlxuICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT1cImZvbnQtd2VpZ2h0OiA1MDA7IG1hcmdpbi1yaWdodDogNXB4OyBtYXJnaW4tYm90dG9tOiAwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBOb3MgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiY29sb3I6IHJnYig0MywgODcsIDI0OSk7XCI+e3t0b3RhbFJlY29yZHMgfHwgdG90YWxDb3VudH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaEJhclwiIGNsYXNzPVwic2VhcmNoXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHNlYXJjaC1iYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEuNjQxMyAxOS4yNUMxNi42MzIyIDE5LjI1IDIwLjY3ODEgMTUuMzUxMSAyMC42NzgxIDEwLjU0MTdDMjAuNjc4MSA1LjczMjE4IDE2LjYzMjIgMS44MzMzMyAxMS42NDEzIDEuODMzMzNDNi42NTA0IDEuODMzMzMgMi42MDQ0OSA1LjczMjE4IDIuNjA0NDkgMTAuNTQxN0MyLjYwNDQ5IDE1LjM1MTEgNi42NTA0IDE5LjI1IDExLjY0MTMgMTkuMjVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzc4NzQ4NlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMS42Mjk1IDIwLjE2NjdMMTkuNzI3MSAxOC4zMzMzXCIgc3Ryb2tlPVwiIzc4NzQ4NlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwic2VhcmNoQ29uZmlncyA/IGVtcHR5U2VhcmNoKCRldmVudC50YXJnZXQudmFsdWUpIDogYXBwbHlGaWx0ZXIoJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hCb3hWYWx1ZSB8fCAnJ1wiICNpbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJzZWFyY2hDb25maWdzICYmIHNlYXJjaEJhclwiIGNsYXNzPVwiY29uZmlnU2VhcmNoXCIgKGNsaWNrKT1cIm9uU2VhcmNoKGlucHV0LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQgNUgyMFwiIHN0cm9rZT1cIiNmZmZmZmZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQgOEgxN1wiIHN0cm9rZT1cIiNmZmZmZmZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjEgMTEuNUMyMSAxNi43NSAxNi43NSAyMSAxMS41IDIxQzYuMjUgMjEgMiAxNi43NSAyIDExLjVDMiA2LjI1IDYuMjUgMiAxMS41IDJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjZmZmZmZmXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyIDIyTDIwIDIwXCIgc3Ryb2tlPVwiI2ZmZmZmZlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiICpuZ0lmPVwiaXNCdXR0b25zXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDdweDsgZ2FwOiA3cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCIgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBidXR0b25BcnJheVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG54dC1idXR0b24gY2xhc3M9XCJkYXRhLXRhYmxlLWZzYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2tFbWl0KT1cIihidXR0b24udHlwZSA9PT0gJ2dyb3VwJyB8fCBidXR0b24udHlwZSA9PT0gJ2Ryb3Bkb3duJykgPyBjb21tb25CdXR0b25DbGljaygkZXZlbnQpIDogY29tbW9uQnV0dG9uQ2xpY2soYnV0dG9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2J1dHRvblR5cGVdPVwiYnV0dG9uLmNsYXNzXCIgW2J1dHRvblZhbHVlXT1cImJ1dHRvbi5uYW1lXCIgW2J1dHRvbkNvbmZpZ109XCJidXR0b24uYnV0dG9uQ29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJidXR0b24udHlwZVwiIGNsYXNzPVwibXMtMiBtZS0yXCIgW2ZjQnRuSWNvbkxlZnRTcmNdPVwiYnV0dG9uLmZjQnRuSWNvbkxlZnRTcmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0ltYWdlU3ZnXT1cImJ1dHRvbi5pc0ltYWdlU3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L254dC1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1tYXJnaW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIiBbbmdTdHlsZV09XCJ7IGhlaWdodDogaXNQYWdpbmF0aW9uID8gJzQ1MHB4JyA6ICdhdXRvJyB9XCIgI3RhYmxlQ29udGFpbmVyXG4gICAgICAgICAgICAgICAgKHNjcm9sbCk9XCJvblNjcm9sbCh0YWJsZUNvbnRhaW5lcilcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXRhYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBUYWJsZSBIZWFkZXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtaGVhZGVyXCIgW25nQ2xhc3NdPVwieyAnc2hhZG93JzogaXNTY3JvbGxlZCB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBDaGVja2JveCBDb2x1bW4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ3aXRoQ2hlY2tCb3hcIiBjbGFzcz1cInRhYmxlLWNlbGwgc3RpY2t5LWNvbHVtbiBoZWFkLWNvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIChjaGFuZ2UpPVwibWFzdGVyVG9nZ2xlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvbj8uaGFzVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0aW9uPy5oYXNWYWx1ZSgpICYmICFpc0FsbFNlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IERhdGEgQ29sdW1ucyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGN1cnJlbnREaXNwbGF5ZWRDb2x1bW5zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFibGUtY2VsbCB0YWJsZUhlYWRlciBoZWFkLWNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zdGlja3ktY29sdW1uXT1cImkgPT09IChzdGlja3lDb25kaXRpb24gLSAxKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlLWNvbHVtbl09XCJhY3RpdmVDb2x1bW4gPT09IGNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWQtY29sdW1uXT1cImlzRWRpdGFibGUgJiYgc2VsZWN0ZWRDb2x1bW4gPT09IGNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvbkNvbHVtbkNsaWNrKGNvbHVtbik7IGN1cnJlbnRTb3J0Q29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pID8gc29ydERhdGEoY29sdW1uKSA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImhvdmVyZWRDb2x1bW4gPSBjb2x1bW5cIiAobW91c2VsZWF2ZSk9XCJob3ZlcmVkQ29sdW1uID0gbnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbkRpdlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4taGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWRkIGNsb3NlIGJ1dHRvbiBmb3Igc2VsZWN0ZWQgY29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNFZGl0YWJsZSAmJiBzZWxlY3RlZENvbHVtbiA9PT0gY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2xvc2UtY29sdW1uLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyByZW1vdmVDb2woY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pyVXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWxsaXBzaXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImN1cnJlbnRIZWFkZXJMYWJlbHNbY3VycmVudERpc3BsYXllZENvbHVtbnMuaW5kZXhPZihjb2x1bW4pXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY3VycmVudEhlYWRlckxhYmVsc1tjdXJyZW50RGlzcGxheWVkQ29sdW1ucy5pbmRleE9mKGNvbHVtbildIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJjdXJyZW50RmlsdGVyQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgZmlsdGVyKGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1yaWdodDogMnB4O1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMiAxMVwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAuNzUgMS4yNUgwLjc1TDQuNzUgNS43MTcyMlY4LjgwNTU2TDYuNzUgOS43NVY1LjcxNzIyTDEwLjc1IDEuMjVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzI0MjUzM1wiIHN0cm9rZS13aWR0aD1cIjEuMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgUmVkIGRvdCBmb3IgYWN0aXZlIGZpbHRlciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmlsdGVyRGF0YUFycmF5ICYmIGZpbHRlckRhdGFBcnJheVtjb2x1bW5dPy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3g9XCI5XCIgY3k9XCIyXCIgcj1cIjIuNVwiIGZpbGw9XCJyZWRcIj48L2NpcmNsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImN1cnJlbnRTb3J0Q29sdW1ucy5pbmNsdWRlcyhjb2x1bW4pXCIgY2xhc3M9XCJzb3J0LWluZGljYXRvcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImN1cnJlbnRTb3J0Q29sdW1uID09PSBjb2x1bW5cIiBjbGFzcz1cInNvcnQtZGlyZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/ICfihpEnIDogY3VycmVudFNvcnREaXJlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09ICdkZXNjJyA/ICfihpMnIDogJycgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJob3ZlcmVkQ29sdW1uID09PSBjb2x1bW4gJiYgY3VycmVudFNvcnRDb2x1bW4gIT09IGNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic29ydC1kaXJlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oaRXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VhcmNoRmlsdGVyICYmIGNvbHVtbiA9PT0gc2VsZWN0ZWRGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWNvbXBvbmVudCBwb3NpdGlvbi1hYnNvbHV0ZVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzZWFyY2hcIiBbY2xhc3MucmVzaXplZF09XCJpc1Jlc2l6ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzZWFyY2gtYmFyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwic2VhcmNoU3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDIyXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjY0MTMgMTkuMjVDMTYuNjMyMiAxOS4yNSAyMC42NzgxIDE1LjM1MTEgMjAuNjc4MSAxMC41NDE3QzIwLjY3ODEgNS43MzIxOCAxNi42MzIyIDEuODMzMzMgMTEuNjQxMyAxLjgzMzMzQzYuNjUwNCAxLjgzMzMzIDIuNjA0NDkgNS43MzIxOCAyLjYwNDQ5IDEwLjU0MTdDMi42MDQ0OSAxNS4zNTExIDYuNjUwNCAxOS4yNSAxMS42NDEzIDE5LjI1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM3ODc0ODZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjEuNjI5NSAyMC4xNjY3TDE5LjcyNzEgMTguMzMzM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM3ODc0ODZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ3aWR0aC0xMDBcIiB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2hpbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiaXNSZXNpemVkXCIgKGNsaWNrKT1cImNsb3NlZmlsdGVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNsb3NlLWljb25cIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS4xNjk5OCAxNC44M0wxNC44MyA5LjE3MDAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNC44MyAxNC44M0w5LjE2OTk4IDkuMTcwMDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05IDIySDE1QzIwIDIyIDIyIDIwIDIyIDE1VjlDMjIgNCAyMCAyIDE1IDJIOUM0IDIgMiA0IDIgOVYxNUMyIDIwIDQgMjIgOSAyMlpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNvbnRlbnRcIiBbc3R5bGVdPVwiJ292ZXJmbG93LXk6IGF1dG8nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBmaWx0ZXJBcnJheSB8IHNlYXJjaEZpbHRlciA6IHNlYXJjaFRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgbWItMyBjaGVja2JveGRpdlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImdhcDogNXB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNTZWxlY3RlZChkYXRhKVwiIFt2YWx1ZV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZGF0YVwiIChjaGFuZ2UpPVwiY2hlY2tlZERhdGEoZGF0YSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtcy0yIGxhYmVsLWRhdGFcIj57e2RhdGF9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplLWhhbmRsZVwiPjwvZGl2PiA8IS0tU0tTMTVGRUIyNSBhcHBSb3dSZXNpemVyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IEFjdGlvbiBDb2x1bW4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25CdXR0b24gfHwgaXNEZWxldGVSb3cgfHwgaXNFZGl0Um93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFibGUtY2VsbCBoZWFkLWNvbG9yIGFjdGlvbkNvbCBzdGlja3ktY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMTJweCAhaW1wb3J0YW50O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3thY3Rpb25Db2x1bUhlYWRlcn19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IFRhYmxlIEJvZHkgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtYm9keVwiICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGVsZW1lbnQgb2YgZGF0YVNvdXJjZS5kYXRhOyBsZXQgaSA9IGluZGV4XCIgY2xhc3M9XCJ0YWJsZS1yb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidGFibGVDbGljayhlbGVtZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBDaGVja2JveCBDZWxsIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwid2l0aENoZWNrQm94XCIgY2xhc3M9XCJ0YWJsZS1jZWxsIHN0aWNreS1jb2x1bW4gYm9keS1jb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94XCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXBhcmF0ZVJvd1NlbGVjdChzZWxlY3Rpb24udG9nZ2xlKGVsZW1lbnQpLCBlbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmlzU2VsZWN0ZWQoZWxlbWVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIoZWxlbWVudC5pc1BheVByb2Nlc3NlZCA9PT0gdHJ1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgRGF0YSBDZWxscyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGN1cnJlbnREaXNwbGF5ZWRDb2x1bW5zOyBsZXQgbGFzdCA9IGxhc3Q7IGVsbGlwc2lzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFibGUtY2VsbCBib2R5LWNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZC1jZWxsXT1cImlzRWRpdGFibGUgJiYgc2VsZWN0ZWRDb2x1bW4gPT09IGNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaHlwZXJMaW5rQ29sdW1ucz8uaW5jbHVkZXMoY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNEYXRlQ29sdW1uKGNvbHVtbik7IGVsc2UgY2hlY2tUaW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJvbkNsaWNrSHlwZXJsaW5rKGNvbHVtbixlbGVtZW50LCBjaGVja0h5cGVybGlua0NoZWNrKGNvbHVtbikpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7Y2hlY2tIeXBlcmxpbmtDaGVjayhjb2x1bW4pID8gJyBoeXBlci1saW5rIGNsaWNrYWJsZSAnIDogJyd9fSBlbGxpcHNpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IHt7cm93VGV4dFNpemUgPyByb3dUZXh0U2l6ZSA6ICcxM3B4J319OyBjb2xvcjoge3tyb3dUZXh0Q29sb3IgPyByb3dUZXh0Q29sb3IgOiAnIzJjMzEzNyd9fTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAoJy0nIHwgZ2V0VmFsdWU6IGVsZW1lbnQgOiBjb2x1bW4pIHwgZGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NoZWNrVGltZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1RpbWVDb2x1bW4oY29sdW1uKTsgZWxzZSBkZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwib25DbGlja0h5cGVybGluayhjb2x1bW4sZWxlbWVudCwgY2hlY2tIeXBlcmxpbmtDaGVjayhjb2x1bW4pKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tjaGVja0h5cGVybGlua0NoZWNrKGNvbHVtbikgPyAnIGh5cGVyLWxpbmsgY2xpY2thYmxlICcgOiAnJ319IGVsbGlwc2lzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IHt7cm93VGV4dFNpemUgPyByb3dUZXh0U2l6ZSA6ICcxM3B4J319OyBjb2xvcjoge3tyb3dUZXh0Q29sb3IgPyByb3dUZXh0Q29sb3IgOiAnIzJjMzEzNyd9fTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgKCctJyB8IGdldFZhbHVlOiBlbGVtZW50IDogY29sdW1uKSB8IHRpbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJvbkNsaWNrSHlwZXJsaW5rKGNvbHVtbixlbGVtZW50LCBjaGVja0h5cGVybGlua0NoZWNrKGNvbHVtbikpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7Y2hlY2tIeXBlcmxpbmtDaGVjayhjb2x1bW4pID8gJyBoeXBlci1saW5rIGNsaWNrYWJsZSAnIDogJyd9fSBlbGxpcHNpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IHt7cm93VGV4dFNpemUgPyByb3dUZXh0U2l6ZSA6ICcxM3B4J319OyBjb2xvcjoge3tyb3dUZXh0Q29sb3IgPyByb3dUZXh0Q29sb3IgOiAnIzJjMzEzNyd9fTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnLScgfCBnZXRWYWx1ZTogZWxlbWVudCA6IGNvbHVtbiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IHJpZ2h0bmF2IGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9iamVjdENvbHVtbnM/LmluY2x1ZGVzKGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJtcy0yXCIgKGNsaWNrKT1cIm9uU2lkZU5hdkluZm9DbGljayhlbGVtZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuMDAwMzMgMTEuODMzNEMyLjc3ODY2IDExLjgzMzQgMC4xNjY5OTIgOS4yMjE3MSAwLjE2Njk5MiA2LjAwMDA4QzAuMTY2OTkyIDIuNzc4NDIgMi43Nzg2NiAwLjE2Njc0OCA2LjAwMDMzIDAuMTY2NzQ4QzkuMjIxOTYgMC4xNjY3NDggMTEuODMzNyAyLjc3ODQyIDExLjgzMzcgNi4wMDAwOEMxMS44MzM3IDkuMjIxNzEgOS4yMjE5NiAxMS44MzM0IDYuMDAwMzMgMTEuODMzNFpNNS40MTY5OSA1LjQxNjc1VjguOTE2NzVINi41ODM2NlY1LjQxNjc1SDUuNDE2OTlaTTUuNDE2OTkgMy4wODM0MVY0LjI1MDA4SDYuNTgzNjZWMy4wODM0MUg1LjQxNjk5WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNDM0NTU1XCIgZmlsbC1vcGFjaXR5PVwiMC41XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZWRpdENvbHVtbj8uaW5jbHVkZXMoY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWNoZWNrSHlwZXJsaW5rQ2hlY2soY29sdW1uKSAmJiAhZmlsZUNvbHVtbnM/LmluY2x1ZGVzKGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IHt7cm93VGV4dFNpemUgPyByb3dUZXh0U2l6ZSA6ICcxM3B4J319OyBjb2xvcjoge3tyb3dUZXh0Q29sb3IgPyByb3dUZXh0Q29sb3IgOiAnIzJjMzEzNyd9fTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0RhdGVDb2x1bW4oY29sdW1uKTsgZWxzZSBjaGVja1RpbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldFZhbHVlKGVsZW1lbnQsY29sdW1uKSB8IGRhdGUgfX0gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgKCctJyB8IGdldFZhbHVlOiBlbGVtZW50IDogY29sdW1uKSB8IGRhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjaGVja1RpbWU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVGltZUNvbHVtbihjb2x1bW4pOyBlbHNlIGRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRWYWx1ZShlbGVtZW50LGNvbHVtbikgfCB0aW1lIH19IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAoJy0nIHwgZ2V0VmFsdWU6IGVsZW1lbnQgOiBjb2x1bW4pIHwgdGltZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7IGdldFZhbHVlKGVsZW1lbnQsY29sdW1uKX19IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICctJyB8IGdldFZhbHVlOiBlbGVtZW50IDogY29sdW1uIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgcmlnaHRuYXYgY29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9iamVjdENvbHVtbnM/LmluY2x1ZGVzKGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibXMtMlwiIChjbGljayk9XCJvblNpZGVOYXZJbmZvQ2xpY2soZWxlbWVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNi4wMDAzMyAxMS44MzM0QzIuNzc4NjYgMTEuODMzNCAwLjE2Njk5MiA5LjIyMTcxIDAuMTY2OTkyIDYuMDAwMDhDMC4xNjY5OTIgMi43Nzg0MiAyLjc3ODY2IDAuMTY2NzQ4IDYuMDAwMzMgMC4xNjY3NDhDOS4yMjE5NiAwLjE2Njc0OCAxMS44MzM3IDIuNzc4NDIgMTEuODMzNyA2LjAwMDA4QzExLjgzMzcgOS4yMjE3MSA5LjIyMTk2IDExLjgzMzQgNi4wMDAzMyAxMS44MzM0Wk01LjQxNjk5IDUuNDE2NzVWOC45MTY3NUg2LjU4MzY2VjUuNDE2NzVINS40MTY5OVpNNS40MTY5OSAzLjA4MzQxVjQuMjUwMDhINi41ODM2NlYzLjA4MzQxSDUuNDE2OTlaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNDM0NTU1XCIgZmlsbC1vcGFjaXR5PVwiMC41XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTS1MxOE1BUjI1IGZpbGUgY29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlsZUNvbHVtbnM/LmluY2x1ZGVzKGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IHt7IHJvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCcgfX07IGNvbG9yOiB7e3Jvd1RleHRDb2xvciA/IHJvd1RleHRDb2xvciA6ICcjMmMzMTM3J319O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBvcG92ZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRyaWdnZXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG92ZXItYmFzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNCAxNlwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMyA3Ljc4NTI1TDcuMDQ4NTkgMTMuNzYwMkM2LjgxNzY3IDEzLjk5NDUgNi41NDIxNyAxNC4xODA1IDYuMjM4MTkgMTQuMzA3NkM1LjkzNDIgMTQuNDM0NiA1LjYwNzg0IDE0LjUgNS4yNzgxNyAxNC41QzQuOTQ4NDkgMTQuNSA0LjYyMjEzIDE0LjQzNDYgNC4zMTgxNCAxNC4zMDc2QzQuMDE0MTYgMTQuMTgwNSAzLjczODY2IDEzLjk5NDUgMy41MDc3NCAxMy43NjAyTDEuNzI3MzIgMTEuOTU3OEMxLjI2MTI0IDExLjQ4NjQgMSAxMC44NTE2IDEgMTAuMTkwMkMxIDkuNTI4NzYgMS4yNjEyNCA4Ljg5Mzg4IDEuNzI3MzIgOC40MjI1N0w4LjA2ODgzIDIuMDg5MTNDOC4yNTQ4IDEuOTAyNDUgOC40NzYwNSAxLjc1NDI5IDguNzE5ODMgMS42NTMxN0M4Ljk2MzYxIDEuNTUyMDYgOS4yMjUwOCAxLjUgOS40ODkxNyAxLjVDOS43NTMyNSAxLjUgMTAuMDE0NyAxLjU1MjA2IDEwLjI1ODUgMS42NTMxN0MxMC41MDIzIDEuNzU0MjkgMTAuNzIzNSAxLjkwMjQ1IDEwLjkwOTUgMi4wODkxM0wxMS42MTk3IDIuNzk2MTZDMTEuODA3MiAyLjk4MTMxIDExLjk1NiAzLjIwMTU5IDEyLjA1NzYgMy40NDQyOUMxMi4xNTkxIDMuNjg2OTkgMTIuMjExNCAzLjk0NzMxIDEyLjIxMTQgNC4yMTAyM0MxMi4yMTE0IDQuNDczMTYgMTIuMTU5MSA0LjczMzQ4IDEyLjA1NzYgNC45NzYxOEMxMS45NTYgNS4yMTg4OCAxMS44MDcyIDUuNDM5MTYgMTEuNjE5NyA1LjYyNDMxTDUuOTk4MzQgMTEuMjQwOEM1LjkwNTM1IDExLjMzNDEgNS43OTQ3MiAxMS40MDgyIDUuNjcyODQgMTEuNDU4N0M1LjU1MDk1IDExLjUwOTMgNS40MjAyMSAxMS41MzUzIDUuMjg4MTcgMTEuNTM1M0M1LjE1NjEyIDExLjUzNTMgNS4wMjUzOSAxMS41MDkzIDQuOTAzNSAxMS40NTg3QzQuNzgxNjEgMTEuNDA4MiA0LjY3MDk4IDExLjMzNDEgNC41NzggMTEuMjQwOEw0LjIyNzkxIDEwLjg4MjNDNC4xMzQxNiAxMC43ODk3IDQuMDU5NzUgMTAuNjc5NSA0LjAwODk3IDEwLjU1ODJDMy45NTgxOSAxMC40MzY4IDMuOTMyMDUgMTAuMzA2NyAzLjkzMjA1IDEwLjE3NTJDMy45MzIwNSAxMC4wNDM4IDMuOTU4MTkgOS45MTM2MSA0LjAwODk3IDkuNzkyMjZDNC4wNTk3NSA5LjY3MDkxIDQuMTM0MTYgOS41NjA3NyA0LjIyNzkxIDkuNDY4MTlMNy45OTg4MSA1Ljc0MzgxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM0MzQ1NTVcIiBzdHJva2Utd2lkdGg9XCIxLjNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFBvcG92ZXIgQ29udGVudCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3Zlci1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV4cGVuc2VDb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZGF0YSBvZiBlbGVtZW50W2NvbHVtbl1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBleHBlbnNlLWZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJleHBlbnNlQXR0YWNobWVudChkYXRhPy5maWxlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGE/LmZpbGVOYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBhZGRlZCBpbnB1dCBib3ggZm9yIGlubGluZSBlZGl0IGlucHV0LS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImVkaXRDb2x1bW4gJiYgZWRpdENvbHVtbi5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIgKCctJyB8IGVkaXRDb2x1bW5DaGVjazogY29sdW1uIDogZWRpdENvbHVtbikgPT09ICgnc3RyaW5nJykgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwib24tZWRpdCBkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAjZWRpdENvbEVsZW1lbnQgY2xhc3M9XCJueHQtbG9wLWlucHV0IHRhYmxlLXdpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZToge3sgcm93VGV4dFNpemUgPyByb3dUZXh0U2l6ZSA6ICcxM3B4JyB9fTsgY29sb3I6IHt7cm93VGV4dENvbG9yID8gcm93VGV4dENvbG9yIDogJyMyYzMxMzcnfX07XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZWxlbWVudC5lZGl0Um93ID8gJ2lucHV0LWJveCcgOiAnJyBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cImVsZW1lbnQuZWRpdFJvdyA/ICdFbnRlcicgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0VmFsdWUoZWxlbWVudCxjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVFZGl0KGksJGV2ZW50LCBlbGVtZW50LGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJlbGVtZW50LmVkaXRSb3cgPyBmYWxzZSA6IHRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IEluIHRhYmxlLCBsaWtlIHRleHQgaW5wdXQsIGFkZGVkIGRyb3AgZG93biBhbmQgdGltZSBpbnB1dHMgYXMgd2VsbCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiAoJy0nIHwgZWRpdENvbHVtbkNoZWNrOiBjb2x1bW4gOiBlZGl0Q29sdW1uKSA9PT0gKCdvYmplY3QnKSBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJvbi1lZGl0IGQtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIgKCctJyB8IGVkaXRDb2x1bW5UeXBlOiBjb2x1bW4gOiBlZGl0Q29sdW1uKSA9PT0gKCd0ZXh0JykgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZWRpdENvbEVsZW1lbnQgY2xhc3M9XCJueHQtbG9wLWlucHV0IHRhYmxlLXdpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZToge3sgcm93VGV4dFNpemUgPyByb3dUZXh0U2l6ZSA6ICcxM3B4JyB9fTsgY29sb3I6IHt7cm93VGV4dENvbG9yID8gcm93VGV4dENvbG9yIDogJyMyYzMxMzcnfX07XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZWxlbWVudC5lZGl0Um93ID8gJ2lucHV0LWJveCcgOiAnJyBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cImVsZW1lbnQuZWRpdFJvdyA/ICdFbnRlcicgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0VmFsdWUoZWxlbWVudCxjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVFZGl0KGksJGV2ZW50LGVsZW1lbnQsY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImVsZW1lbnQuZWRpdFJvdyA/IGZhbHNlIDogdHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIgKCctJyB8IGVkaXRDb2x1bW5UeXBlOiBjb2x1bW4gOiBlZGl0Q29sdW1uKSA9PT0gKCd0aW1lJykgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGltZVwiIGNsYXNzPVwibnh0LWxvcC1pbnB1dCB0YWJsZS13aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IHt7IHJvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCcgfX07IGNvbG9yOiB7e3Jvd1RleHRDb2xvciA/IHJvd1RleHRDb2xvciA6ICcjMmMzMTM3J319O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0VmFsdWUoZWxlbWVudCxjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZWxlbWVudC5lZGl0Um93ID8gJ2lucHV0LWJveCcgOiAnJyBcIiBwbGFjZWhvbGRlcj1cIkhIOm1tOnNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVFZGl0KGksJGV2ZW50LGVsZW1lbnQsY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImVsZW1lbnQuZWRpdFJvdyA/IGZhbHNlIDogdHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIgKCctJyB8IGVkaXRDb2x1bW5UeXBlOiBjb2x1bW4gOiBlZGl0Q29sdW1uKSA9PT0gKCdkcm9wZG93bicpIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgdHlwZT1cImRyb3Bkb3duXCIgKm5nSWY9XCJlbGVtZW50LmVkaXRSb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm54dC1sb3AtaW5wdXQgdGFibGUtd2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZToge3sgcm93VGV4dFNpemUgPyByb3dUZXh0U2l6ZSA6ICcxM3B4JyB9fTsgY29sb3I6IHt7cm93VGV4dENvbG9yID8gcm93VGV4dENvbG9yIDogJyMyYzMxMzcnfX07XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImVsZW1lbnQuZWRpdFJvdyA/ICdpbnB1dC1ib3gnIDogJycgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlRWRpdChpLCRldmVudCxlbGVtZW50LGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbZGlzYWJsZWRdPVwiZWxlbWVudC5lZGl0Um93ID8gZmFsc2UgOiB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXRhIG9mIFtdIHwgZWRpdENvbHVtbkRyb3Bkb3duOiBjb2x1bW4gOiBlZGl0Q29sdW1uIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJkYXRhLnZhbHVlIHx8IGRhdGEubmFtZVwiPnt7ZGF0YS5uYW1lfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCIhZWxlbWVudC5lZGl0Um93XCIgI2VkaXRDb2xFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibnh0LWxvcC1pbnB1dCB0YWJsZS13aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7eyByb3dUZXh0U2l6ZSA/IHJvd1RleHRTaXplIDogJzEzcHgnIH19OyBjb2xvcjoge3tyb3dUZXh0Q29sb3IgPyByb3dUZXh0Q29sb3IgOiAnIzJjMzEzNyd9fTtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZWxlbWVudC5lZGl0Um93ID8gJ2lucHV0LWJveCcgOiAnJyBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJlbGVtZW50LmVkaXRSb3cgPyAnRW50ZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJnZXRWYWx1ZShlbGVtZW50LGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVFZGl0KGksJGV2ZW50LGVsZW1lbnQsY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBBY3Rpb24gQnV0dG9ucyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGlvbkJ1dHRvbiB8fCBpc0RlbGV0ZVJvdyB8fCBpc0VkaXRSb3dcIiBjbGFzcz1cInRhYmxlLWNlbGwgYWN0aW9uQ29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uQnV0dG9uXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyO1wiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgRWRpdCBCdXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRWRpdFJvd1wiIGNsYXNzPVwiZWljb24tY29udGFpbmVyXCIgbWF0VG9vbHRpcD1cIkVkaXQgUmVjb3JkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAycHg7IGJvcmRlcjogMXB4IHNvbGlkICNkY2RjZGM7IGJvcmRlci1yYWRpdXM6IDVweDsgbWFyZ2luLWxlZnQ6IDNweDsgbWFyZ2luLXJpZ2h0OiAzcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgZWRpdC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMnB4IDRweDsgYm9yZGVyLXJhZGl1czogNXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwib25FZGl0KGVsZW1lbnQpXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMS4xMDY3IDYuMDcxNzRMOS45MjgzMyA0Ljg5MzRMMi4xNjY2NyAxMi42NTUxVjEzLjgzMzRIMy4zNDVMMTEuMTA2NyA2LjA3MTc0Wk0xMi4yODUgNC44OTM0TDEzLjQ2MzMgMy43MTUwN0wxMi4yODUgMi41MzY3NEwxMS4xMDY3IDMuNzE1MDdMMTIuMjg1IDQuODkzNFpNNC4wMzUgMTUuNTAwMUgwLjVWMTEuOTY0MkwxMS42OTU4IDAuNzY4NDAzQzExLjg1MjEgMC42MTIxNzcgMTIuMDY0IDAuNTI0NDE0IDEyLjI4NSAwLjUyNDQxNEMxMi41MDYgMC41MjQ0MTQgMTIuNzE3OSAwLjYxMjE3NyAxMi44NzQyIDAuNzY4NDAzTDE1LjIzMTcgMy4xMjU5QzE1LjM4NzkgMy4yODIxOCAxNS40NzU3IDMuNDk0MSAxNS40NzU3IDMuNzE1MDdDMTUuNDc1NyAzLjkzNjA0IDE1LjM4NzkgNC4xNDc5NiAxNS4yMzE3IDQuMzA0MjRMNC4wMzU4MyAxNS41MDAxSDQuMDM1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNkM3NTdEXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgRGVsZXRlIEJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNEZWxldGVSb3dcIiBjbGFzcz1cImRpY29uLWNvbnRhaW5lclwiIG1hdFRvb2x0aXA9XCJEZWxldGUgUmVjb3JkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAycHg7IGJvcmRlcjogMXB4IHNvbGlkICNmZmI1YjU7IGJvcmRlci1yYWRpdXM6IDVweDsgbWFyZ2luLWxlZnQ6IDNweDsgbWFyZ2luLXJpZ2h0OiAzcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWxldGUtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDJweCA0cHg7IGJvcmRlci1yYWRpdXM6IDVweDsgYmFja2dyb3VuZC1jb2xvcjogI2ZlZWVlZDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cImRlbGV0ZVJlY29yZChlbGVtZW50LGkpXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNCAzLjk4NzI2QzExLjc4IDMuNzY3MjYgOS41NDY2NyAzLjY1MzkzIDcuMzIgMy42NTM5M0M2IDMuNjUzOTMgNC42OCAzLjcyMDYgMy4zNiAzLjg1MzkzTDIgMy45ODcyNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNGRjJDMTBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNS42NjY1IDMuMzEzNjJMNS44MTMxNyAyLjQ0MDI4QzUuOTE5ODQgMS44MDY5NSA1Ljk5OTg0IDEuMzMzNjIgNy4xMjY1IDEuMzMzNjJIOC44NzMxN0M5Ljk5OTg0IDEuMzMzNjIgMTAuMDg2NSAxLjgzMzYyIDEwLjE4NjUgMi40NDY5NUwxMC4zMzMyIDMuMzEzNjJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyLjU2NjcgNi4wOTM3NUwxMi4xMzM0IDEyLjgwNzFDMTIuMDYgMTMuODUzNyAxMiAxNC42NjcxIDEwLjE0IDE0LjY2NzFINS44NjAwMkM0LjAwMDAyIDE0LjY2NzEgMy45NDAwMiAxMy44NTM3IDMuODY2NjggMTIuODA3MUwzLjQzMzM1IDYuMDkzNzVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuODg2NDcgMTEuMDAwNEg5LjEwNjQ3XCIgc3Ryb2tlPVwiI0ZGMkMxMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjMzMzUgOC4zMzMyNUg5LjY2NjgzXCIgc3Ryb2tlPVwiI0ZGMkMxMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBSZW5kZXIgaW5saW5lIGJ1dHRvbnMgdXAgdG8gU2l6ZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBidXR0b24gb2YgYWN0aW9uQnV0dG9uQXJyYXk/LmJ1dHRvbkFycmF5OyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpIDwgYWN0aW9uQnV0dG9uQXJyYXk/LnNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCIgbWFyZ2luLWxlZnQ6IDNweDsgbWFyZ2luLXJpZ2h0OiAzcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDb25kaXRpb25NZXQoZWxlbWVudCwgYnV0dG9uLmNvbmRpdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09YnV0dG9uLnRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uQnV0dG9uQ2xpY2tlZChidXR0b24sZWxlbWVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIiRldmVudC50YXJnZXQuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAnICsgYnV0dG9uLmhvdmVyQm9yZGVyQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIiRldmVudC50YXJnZXQuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAnICsgYnV0dG9uLmJvcmRlckNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDJweDsgYm9yZGVyLXJhZGl1czoge3tidXR0b24uYm9yZGVyUmFkaXVzfX1weDsgIGJvcmRlcjogMXB4IHNvbGlkIHt7YnV0dG9uLmJvcmRlckNvbG9yfX07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAobW91c2VlbnRlcik9XCIkZXZlbnQudGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGJ1dHRvbi5ob3ZlckJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIiRldmVudC50YXJnZXQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gYnV0dG9uLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzoge3tidXR0b24ucGFkZGluZ319cHgge3tidXR0b24ucGFkZGluZyArIDJ9fXB4OyBib3JkZXItcmFkaXVzOiB7e2J1dHRvbi5ib3JkZXJSYWRpdXN9fXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiB7e2J1dHRvbi5iYWNrZ3JvdW5kQ29sb3J9fTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImJ1dHRvbi5pY29uU3JjXCIgI2ltZ0VsZW1lbnQgW3NyY109XCJidXR0b24uaWNvblNyY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJpbWdFbGVtZW50LnNyYyA9IGJ1dHRvbi5ob3Zlckljb25TcmMgfHwgYnV0dG9uLmljb25TcmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiaW1nRWxlbWVudC5zcmMgPSBidXR0b24uaWNvblNyY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkcm9wZG93bkFjdGlvbkJ1dHRvbiAmJiBkcm9wZG93bkFjdGlvbkJ1dHRvbi5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xpY2thYmxlLWltZ1wiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bihpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIiBtYXJnaW4tbGVmdDogM3B4OyBtYXJnaW4tcmlnaHQ6IDNweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7IHBhZGRpbmc6IDJweCA0cHg7IGJvcmRlci1yYWRpdXM6IDVweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsgYm9yZGVyLXJhZGl1czogNXB4OyBib3JkZXI6IDFweCBzb2xpZCAjNmM3NTdkO1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgNDAgNDBcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTkuOTk5OSAyNS42NjY3QzIzLjY4MTggMjUuNjY2NyAyNi42NjY2IDIyLjY4MTkgMjYuNjY2NiAxOUMyNi42NjY2IDE1LjMxODEgMjMuNjgxOCAxMi4zMzM0IDE5Ljk5OTkgMTIuMzMzNEMxNi4zMTggMTIuMzMzNCAxMy4zMzMzIDE1LjMxODEgMTMuMzMzMyAxOUMxMy4zMzMzIDIyLjY4MTkgMTYuMzE4IDI1LjY2NjcgMTkuOTk5OSAyNS42NjY3WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzI5MkQzMlwiIHN0cm9rZT1cIiMyOTJEMzJcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLW1pdGVybGltaXQ9XCIxMFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3LjY0NjcgMTguMTZMMjAuMDAwMSAyMC41MDY3TDIyLjM1MzQgMTguMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUucmlnaHRdPVwiKChhY3Rpb25CdXR0b25BcnJheT8uc2l6ZSA/PyAwKSAtIChhY3Rpb25CdXR0b25BcnJheT8uYnV0dG9uQXJyYXk/LnNpemUgPz8gMCkgKyAoaXNFZGl0Um93ID8gMSA6IDApICsgKGlzRGVsZXRlUm93ID8gMSA6IDApICsgKGRyb3Bkb3duQWN0aW9uQnV0dG9uPy5sZW5ndGggPiAwID8gMSA6IDApKSAqIDEwMCArICclJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImN1cnJlbnRPcGVuSW5kZXggPT09IGlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGJ0biBvZiBkcm9wZG93bkFjdGlvbkJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc0NvbmRpdGlvbk1ldChlbGVtZW50LCBidG4uY29uZGl0aW9ucylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWlkXT1cImVsZW1lbnQuaWRcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1pY29uIHt7YnRuLmJ1dHRvblR5cGV9fSB0b29sdGlwLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1idG4udG9vbHRpcCBbZGlzYWJsZWRdPVwiYnRuLmJ1dHRvbkRpc2FibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uQnV0dG9uQ2xpY2tlZChidG4sZWxlbWVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImJ0bi5pY29uU3JjXCIgW3NyY109XCJidG4uaWNvblNyY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmMtYnRuLXRleHRcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMTBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YnRuLm5hbWV9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0tTMjBNQVIyNSBTdW1tYXJ5IFJvd3MgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdW1tYXJ5Um93cyAmJiBzdW1tYXJ5Um93cy5sZW5ndGggPiAwICYmIGlzU3VtbWFyeUNvbHVtbiAmJiBkYXRhU291cmNlLmRhdGEgJiYgZGF0YVNvdXJjZT8uZGF0YT8ubGVuZ3RoID4gMCAmJiAhaXNMb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcm93IG9mIHN1bW1hcnlSb3dzXCIgY2xhc3M9XCJ0YWJsZS1yb3cgc3VtbWFyeS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBMYWJlbCBpbiB0aGUgZmlyc3QgY29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwid2l0aENoZWNrQm94XCIgY2xhc3M9XCJub24tc3VtbWFyeS10YWJsZS1jZWxsXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRW1wdHkgY2VsbHMgdG8gYWxpZ24gd2l0aCBkYXRhIGNvbHVtbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbCBvZiBpc1N1bW1hcnlTdGFydENvbHVtbjsgbGV0IGxhc3QgPSBsYXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibm9uLXN1bW1hcnktdGFibGUtY2VsbFwiIFtjbGFzcy5sYXN0LWNlbGxdPVwibGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gPCEtLSBWYWx1ZSBvciBpbnB1dCBpbiB0aGUgbGFzdCBjb2x1bW4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5LXRhYmxlLWNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkLWNlbGxdPVwiaXNFZGl0YWJsZSAmJiBzZWxlY3RlZENvbHVtbiA9PT0gcm93LmZpZWxkTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvbkNvbHVtbkNsaWNrKHJvdy5maWVsZE5hbWUpXCI+e3sgcm93LmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VtbWFyeS10YWJsZS1jZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZC1jZWxsXT1cImlzRWRpdGFibGUgJiYgc2VsZWN0ZWRDb2x1bW4gPT09IHJvdy5maWVsZE5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWRkIGNsb3NlIGJ1dHRvbiBmb3Igc2VsZWN0ZWQgY29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0VkaXRhYmxlICYmIHNlbGVjdGVkQ29sdW1uID09PSByb3cuZmllbGROYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjbG9zZS1jb2x1bW4tYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcmVtb3ZlQ29sKHJvdy5maWVsZE5hbWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKclVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN1bW1hcnlWYWx1ZXNbcm93LmZpZWxkTmFtZV0gfCBudW1iZXIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdy50eXBlID09PSAnaW5wdXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBbKG5nTW9kZWwpXT1cInN1bW1hcnlWYWx1ZXNbcm93LmZpZWxkTmFtZV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblN1bW1hcnlJbnB1dENoYW5nZSgpXCIgY2xhc3M9XCJueHQtbG9wLWlucHV0IHRhYmxlLXdpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IHt7IHJvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCcgfX07IGNvbG9yOiB7e3Jvd1RleHRDb2xvciA/IHJvd1RleHRDb2xvciA6ICcjMmMzMTM3J319O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzIwTUFSMjUgRW1wdHkgY2VsbHMgdG8gYWxpZ24gd2l0aCBkYXRhIGNvbHVtbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbCBvZiBpc1N1bW1hcnlFbmRDb2x1bW47IGxldCBsYXN0ID0gbGFzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5vbi1zdW1tYXJ5LXRhYmxlLWNlbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25CdXR0b24gfHwgaXNEZWxldGVSb3cgfHwgaXNFZGl0Um93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibm9uLXN1bW1hcnktdGFibGUtY2VsbCBhY3Rpb25Db2wgc3RpY2t5LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMjhNQVIyNSBJbiB0aGUgTG9hZGluZyBzZWN0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWJvZHlcIiAqbmdJZj1cImlzTG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUmVwZWF0IGZvciA1IHNrZWxldG9uIHJvd3MgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgXyBvZiBbMSwyLDMsNCw1XVwiIGNsYXNzPVwidGFibGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ2hlY2tib3ggQ29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwid2l0aENoZWNrQm94XCIgY2xhc3M9XCJza2VsZXRvbi1jZWxsIHN0aWNreS1jb2x1bW5cIj48L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERhdGEgQ29sdW1ucyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY29sIG9mIGN1cnJlbnREaXNwbGF5ZWRDb2x1bW5zXCIgY2xhc3M9XCJza2VsZXRvbi1jZWxsIFwiPjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aW9uIENvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGlvbkJ1dHRvbiB8fCBpc0RlbGV0ZVJvdyB8fCBpc0VkaXRSb3dcIiBjbGFzcz1cInNrZWxldG9uLWNlbGwgYWN0aW9uQ29sXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IE5vIERhdGEgUm93IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRhdGFTb3VyY2UuZGF0YSAmJiBkYXRhU291cmNlPy5kYXRhPy5sZW5ndGggPT09IDAgJiYgIWlzTG9hZGluZyAmJiBmcm9tICE9PSAnZm9ybUJ1aWxkZXInXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyByZWNvcmRzL2RhdGEgZm91bmQuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cImRhdGFTb3VyY2UuZGF0YSAmJiBkYXRhU291cmNlPy5kYXRhPy5sZW5ndGggPT09IDAgJiYgIWlzTG9hZGluZyAmJiBmcm9tID09PSAnZm9ybUJ1aWxkZXInXCIgY2xhc3M9XCJmb3JtLWJ1aWxkZXItdGFibGUtYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkICAvIGRyYWdzIGZpZWxkcyBmcm9tIGVsZW1lbnRzIHNlY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBQYWdpbmF0aW9uIC0tPlxuICAgICAgICAgICAgPGRpdiBbY2xhc3Muc2hhZG93LWhpZGRlbl09XCJpc1NoYWRvd0hpZGRlblwiPlxuICAgICAgICAgICAgICAgIDwhLS0gdGFibGUgaW5wdXQgc2F2ZSBidXR0b24gY2hhbmdlcyAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGlubGluZUFkZCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFkZEljb25Cb3IgY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cImFkZElubGluZVJlY29yZCBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZFRhYmxlUmVjb3JkKGlubGluZUVsZW1lbnQpXCIgbWF0VG9vbHRpcD1cIkFkZCBSZWNvcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGRJY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cIm5hdi1pY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgLTk2MCA5NjAgOTYwXCIgd2lkdGg9XCIyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00NDAtMjgwaDgwdi0xNjBoMTYwdi04MEg1MjB2LTE2MGgtODB2MTYwSDI4MHY4MGgxNjB2MTYwWm00MCAyMDBxLTgzIDAtMTU2LTMxLjVUMTk3LTE5N3EtNTQtNTQtODUuNS0xMjdUODAtNDgwcTAtODMgMzEuNS0xNTZUMTk3LTc2M3E1NC01NCAxMjctODUuNVQ0ODAtODgwcTgzIDAgMTU2IDMxLjVUNzYzLTc2M3E1NCA1NCA4NS41IDEyN1Q4ODAtNDgwcTAgODMtMzEuNSAxNTZUNzYzLTE5N3EtNTQgNTQtMTI3IDg1LjVUNDgwLTgwWm0wLTgwcTEzNCAwIDIyNy05M3Q5My0yMjdxMC0xMzQtOTMtMjI3dC0yMjctOTNxLTEzNCAwLTIyNyA5M3QtOTMgMjI3cTAgMTM0IDkzIDIyN3QyMjcgOTNabTAtMzIwWlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IHJlbW92ZWQgYnV0dG9uIGRpc2FibGUgbG9naWMsIGFkZGVkIGFub3RoZXIgY29uZGl0aW9uIGZvciBidXR0b24gc2hvd2luZy0tPlxuICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBTUjA2SkFOMjAyNSBidXR0b24gZGlzYWJsZSBsb2dpYyBmb3Igbm90IHNlbGVjdCBhbnkgZW1wbG95ZWUtLT5cbiAgICAgICAgICAgICAgICAgICAgPG54dC1idXR0b24gKm5nSWY9XCIoZWRpdENvbHVtbj8ubGVuZ3RoID4gMCAgfHwgdGFibGVTYXZlQnV0dG9uKSAmJiBmcm9tICE9ICdmb3JtQnVpbGRlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uVHlwZT1cImJ0biBidG4tcHJpbWFyeVwiIFtidXR0b25EaXNhYmxlXT1cInNlbGVjdGlvbj8uc2VsZWN0ZWQ/Lmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2tFbWl0KT1cInNhdmVCdXR0b24oKVwiIGJ1dHRvblZhbHVlPVwiU2F2ZVwiPjwvbnh0LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bnh0LXBhZ2luYXRpb24gKm5nSWY9XCJpc1BhZ2luYXRpb25cIiBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiIFtjb2xsZWN0aW9uU2l6ZV09XCJjb25maWdQYWdpbmF0aW9uID8gdG90YWxSZWNvcmRzIHx8IHRvdGFsQ291bnQgOiBmaWx0ZXJUYWJsZU5vc1wiXG4gICAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiIFtjdXJyZW50UGFnZV09XCJwYWdlSW5kZXhcIiBbZmlyc3RMYXN0QnV0dG9uc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgKGV2ZW50KT1cInBhZ2VQYXJhbXMoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwvbnh0LXBhZ2luYXRpb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLVNLUzE1RkVCMjUgYWxlcnQgb24gZGVsZXRpbmcgcmVjb3JkIC0tPlxuPGRpdiAqbmdJZj1cImRlbGV0ZU1vZGFsXCIgY2xhc3M9XCJtb2RhbCBtb2RhbC1iYWNrZHJvcCBzaG93ICBkLWJsb2NrXCIgaWQ9XCJkZWxldGVSZWNvcmRcIiB0YWJpbmRleD1cIi0xXCJcbiAgICBhcmlhLWxhYmVsbGVkYnk9XCJkZWxldGVSZWNvcmRMYWJlbFwiIFthdHRyLmFyaWEtaGlkZGVuXT1cIiFkZWxldGVNb2RhbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8YiBjbGFzcz1cIm1vZGFsLXRpdGxlIGZzLTVcIiBpZD1cImRlbGV0ZVJlY29yZExhYmVsXCI+RGVsZXRlIFJlY29yZDwvYj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZU1vZGFsID0gZmFsc2VcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICBBcmUgeW91IHN1cmUgd2FudCB0byBkZWxldGUgdGhlIHJlY29yZCA/XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlTW9kYWwgPSBmYWxzZVwiPk5vPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVSZWNvcmREYXRhKClcIj5ZZXM8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|
|
1554
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBYyxZQUFZLEVBQXFELE1BQU0sZUFBZSxDQUFDO0FBQy9KLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDL0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNqRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQs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QUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2RyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdHLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZHLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JHLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JHLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FB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Q0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0csSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkcsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEcsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEcsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEcsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxTQUFT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QUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDMUcsSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUNsSCxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3RILElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDMUcsSUFBSSxDQUFDLGVBQWUsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUNsSSxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JILElBQUksQ0FBQyxjQUFjLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxD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WUFBWTtzQkFBcEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQTBCYSxJQUFJO3NCQUF2QixTQUFTO3VCQUFDLE9BQU87Z0JBQ1csY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBMnZCaUIsZUFBZTtzQkFBMUQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0NoaWxkLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QsIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0U29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTnh0QnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vYnV0dG9uL254dC1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IE54dFBhZ2luYXRpb24gfSBmcm9tICcuLi9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFNlYXJjaEZpbHRlclBpcGUgfSBmcm9tICcuLi8uLi9waXBlL3NlYXJjaC1maWx0ZXIvc2VhcmNoLWZpbHRlci5waXBlJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZS9kYXRlL2RhdGUucGlwZSc7XG5pbXBvcnQgeyBUaW1lUGlwZSB9IGZyb20gJy4uLy4uL3BpcGUvdGltZS90aW1lLnBpcGUnO1xuaW1wb3J0IHsgRWRpdENvbHVtbkNoZWNrUGlwZSB9IGZyb20gJy4uLy4uL3BpcGUvZWRpdENvbHVtbkNoZWNrL2VkaXQtY29sdW1uLWNoZWNrLnBpcGUnO1xuaW1wb3J0IHsgRWRpdENvbHVtbkRyb3Bkb3duUGlwZSB9IGZyb20gJy4uLy4uL3BpcGUvZWRpdENvbHVtbkRyb3Bkb3duL2VkaXQtY29sdW1uLWRyb3Bkb3duLnBpcGUnO1xuaW1wb3J0IHsgRWRpdENvbHVtblR5cGVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZS9lZGl0Q29sdW1uVHlwZS9lZGl0LWNvbHVtbi10eXBlLnBpcGUnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQVBJTWV0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvYXBpbWV0YSc7XG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBHZXRWYWx1ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlL2dldC12YWx1ZS5waXBlJztcbmltcG9ydCB7IExpc3RWaWV3RmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vbGlzdC12aWV3LWZpbHRlci9saXN0LXZpZXctZmlsdGVyLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ254dC1kYXRhdGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTnh0QnV0dG9uQ29tcG9uZW50LFxuICAgIE54dFBhZ2luYXRpb24sXG4gICAgU2VhcmNoRmlsdGVyUGlwZSxcbiAgICBEYXRlUGlwZSxcbiAgICBUaW1lUGlwZSxcbiAgICBFZGl0Q29sdW1uQ2hlY2tQaXBlLFxuICAgIEVkaXRDb2x1bW5Ecm9wZG93blBpcGUsXG4gICAgRWRpdENvbHVtblR5cGVQaXBlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgR2V0VmFsdWVQaXBlLFxuICAgIExpc3RWaWV3RmlsdGVyQ29tcG9uZW50XG4gICAgLy8gUm93UmVzaXplckRpcmVjdGl2ZVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2RhdGF0YWJsZS5jb21wb25lbnQuY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBOeHREYXRhdGFibGUge1xuICBASW5wdXQoKSBkYXRhOiBhbnlbXSA9IFtdOyAgLy8gIGdldCBkYXRhIHRoYXQgdG8gYmUgZGlzcGxheWVkIGluIGEgYXJyYXlcbiAgQElucHV0KCkgdGFibGVGaWx0ZXJEYXRhOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBjb2x1bW5zOiBBcnJheTxhbnk+ID0gW107IC8vIENvbHVtbnMgaGF2ZSBhIGxhYmVsLCBhIGNvbHVtbiB0eXBlLCBhbmQgZmlsdGVyIGRldGFpbHMuXG4gIEBJbnB1dCgpIHdpdGhDaGVja0JveDogYm9vbGVhbjsgIC8vIGdldCBpZiB3aXRoIG9yIHdpdGhvdXQgY2hlY2tib3ggaW4gdGFibGVcbiAgQElucHV0KCkgc2VhcmNoQmFyOiBib29sZWFuOyAvLyBpZiBpdCBpcyB0cnVlLCB0aGUgc2VhcmNoIGJhciB3aWxsIGJlIGRpc3BsYXllZCBvbiB0YWJsZVxuICBASW5wdXQoKSB0YWJsZVNhdmVCdXR0b24gPSBmYWxzZTsgLy8gc2F2ZSBidXR0b24gZm9yIGVkaXRpbmcgTE9QIGluIHBheXJvbGwgdGFibGUsICBjaGFuZ2VkIG5hbWUgZnJvbSAnc2F2ZUxPUCdcbiAgQElucHV0KCkgc3RpY2t5Q29sdW1uID0gZmFsc2U7IC8vIGlmIHRoZSBsYXN0IGNvbHVtbiBzaG91bGQgYmUgc3RpY2t5LCBpdCBzaG91bGQgYmUgc2VudCBhcyBib29sZWFuIHZhbHVlXG4gIEBJbnB1dCgpIHRhYmxlV2lkdGggPSAnMTAwJSc7IC8vIHdpZHRoIG9mIHRhYmxlIGNhbiBiZSBhZGp1c3RlZCBmcm9tIHBhcmVudCwgYnkgZGVmYXVsdCBpdCBpcyAxMDAlXG4gIEBJbnB1dCgpIGFjdGlvbkNvbHVtSGVhZGVyID0gJ0FjdGlvbic7ICAvLyB0byBjaGFuZ2UgdGhlIGhlYWRlciBmb3IgYWN0aW9uIGNvbHVtblxuICBASW5wdXQoKSBhY3Rpb25CdXR0b246IGJvb2xlYW47ICAvL3RvIHNob3cgYnV0dG9uIGNvbHVtIGFzIGFjdGlvblxuICBASW5wdXQoKSB0aXRsZTogYW55Oy8vIHRoZSB0aXRsZSBmb3IgdGhlIHRhYmxlO1xuICBASW5wdXQoKSBpc0J1dHRvbnM6IGJvb2xlYW47Ly8gaXMgYnV0dG9uIHByZXNlbnQgaW4gdGFibGU7XG4gIEBJbnB1dCgpIGJ1dHRvbkFycmF5OiBhbnk7Ly8gYnV0dG9ucyB0byBiZSBkaXNwbGF5ZWQ7XG4gIEBJbnB1dCgpIHRhYmxlSWQ6IGFueTsgLy8gaWQgb2YgdGFibGVcbiAgQElucHV0KCkgaXNFZGl0Um93OiBib29sZWFuOyAvLyBpZiBpdCBpcyB0cnVlLCB0aGUgcm93IGNhbiBiZSBlZGl0ZWRcbiAgQElucHV0KCkgaXNEZWxldGVSb3c6IGJvb2xlYW47IC8vIGlmIGl0IGlzIHRydWUsIHRoZSByb3cgY2FuIGJlIGRlbGV0ZWRcbiAgQElucHV0KCkgYWRkSW5saW5lUmVjb3JkOiBib29sZWFuOyAvLyBpZiBpdCBpcyB0cnVlLCB0aGUgcm93IGNhbiBiZSBhZGRlZCBpbmxpbmVcbiAgQElucHV0KCkgc2VhcmNoQ29uZmlnczogYW55OyAvLyBzZWFyY2ggY29uZmlndXJhdGlvbnNcbiAgQElucHV0KCkgZGlyZWN0aW9uOiAncnRsJyB8ICdsdHInID0gJ2x0cic7IC8vIGRpcmVjdGlvbiBvZiB0YWJsZVxuICBASW5wdXQoKSBwYWdpbmF0aW9uOiBhbnk7IC8vIHBhZ2luYXRpb24gY29uZmlndXJhdGlvbnNcbiAgQElucHV0KCkgYWN0aW9uQnV0dG9uQXJyYXk6IGFueTsgLy8gYWN0aW9uIGJ1dHRvbiBjb25maWd1cmF0aW9uc1xuICBASW5wdXQoKSBtdWx0aXBsZUZpbHRlcjogYW55OyAvLyBpZiBwYWdpbmF0aW9uIHRydWUgdGhlbiB0aGlzIHdpbGwgYmUgdXNlZFxuICBASW5wdXQoKSBpc1BhZ2luYXRpb246IGFueTsgLy8gcGFnaW5hdGlvbiBjb25maWd1cmF0aW9ucyBpZiB0cnVlIHRoZW4gcGFnaW5hdGlvbiB3aWxsIGJlIGVuYWJsZWRcbiAgQElucHV0KCkgaXNOb3NJbmRpY2F0b3I6IGFueTsgLy8gaWYgdHJ1ZSB0aGVuIG5vIGRhdGEgaW5kaWNhdG9yIHdpbGwgYmUgc2hvd25cbiAgQElucHV0KCkgaXNFZGl0YWJsZTogYW55OyAvLyBpZiB0cnVlIHRoZW4gdGFibGUgd2lsbCBiZSBlZGl0YWJsZVxuICBASW5wdXQoKSBmcm9tOiBhbnk7IC8vIGZyb20gZGF0ZSBwYWx0Zm9ybSBiYXNlZCBpbml0aWFsaXplIGlucHV0cyBleDotICdmb3JtQnVpbGRlcidcbiAgQElucHV0KCkgcXVlc3Rpb246IGFueTsgLy8gcXVlc3Rpb24gaXMgdXNlZCBmb3Igbnh0IGZvcm0gYnVpbGRlciB0YWJsZSBwcmV2aWV3XG4gIEBJbnB1dCgpIHJvd1RleHRTaXplOiBhbnk7IC8vIHNpemUgb2Ygcm93IHRleHRcbiAgQElucHV0KCkgcm93VGV4dENvbG9yOiBhbnk7IC8vIGNvbG9yIG9mIHJvdyB0ZXh0XG4gIEBJbnB1dCgpIGFwaU1ldGE6IHN0cmluZzsgLy8gYXBpIG1ldGEgaXMgdXNlZCBmb3Igbnh0IGZvcm0gYnVpbGRlciB0YWJsZSBwcmV2aWV3XG4gIEBJbnB1dCgpIHN1bW1hcnlSb3dzOiBhbnk7IC8vIElucHV0IGZvciBjb25maWd1cmFibGUgc3VtbWFyeSByb3dzXG4gIEBJbnB1dCgpIHN1bW1hcnlDb2x1bW5zOiBhbnk7IC8vIElucHV0IGZvciBzdW1tYXJ5IGNvbHVtbnMgY29uZmlnXG4gIEBJbnB1dCgpIGlzTG9hZGluZzogYW55OyAvL1NLUzI4TUFSMjUgSW5wdXQgZm9yIGxvYWRpbmcgaW5kaWNhdG9yXG4gIEBJbnB1dCgpIHRhYmxlQ29uZmlnOiBhbnk7IC8vIHRhYmxlIGNvbmZpZyBmb3Igbnh0IGZvcm0gYnVpbGRlciB0YWJsZVxuICBASW5wdXQoKSB0YWJsZVBhcmFtczogYW55OyAvL1NLUzE3QVBSMjUgUmVjZWl2ZXMgdGFibGVQYXJhbXMgaW5mb3JtYXRpb24gZnJvbSBwYXJlbnQgY29tcG9uZW50XG4gIEBJbnB1dCgpIGxpc3RWaWV3czogYW55W10gPSBbXTsgLy9TS1MyNkFQUjI1IFByZWRlZmluZWQgbGlzdCB2aWV3c1xuXG4gIEBPdXRwdXQoKSB0YWJsZVJvd0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAvLyBkYXRhcyB0byBiZSBwYXNzZWQgd2hlbiB0YWJsZSByb3cgaXMgY2xpY2tlZFxuICBAT3V0cHV0KCkgb25FZGl0RGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PjsgLy8gaWYgZWRpdCBidXR0b24gaXMgY2xpY2tlZCwgdGhlIGRhdGEgb2YgdGhhdCByb3cgd2lsbCBiZSBwYXNzZWRcbiAgQE91dHB1dCgpIHNhdmVCdXR0b25EYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAvLyBlZGl0ZWQgcm93cyBkYXRhIHdpbGwgYmUgcGFzc2VkXG4gIEBPdXRwdXQoKSBvbkRlbGV0ZURhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47ICAvLyB3aGVuIGRlbGV0ZSBidXR0b24gY2xpY2tlZCBwYXNzIHRoZSBkYXRhXG4gIEBPdXRwdXQoKSBidXR0b25FbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAvLyB0aGlzIHdpbGwgZW1pdCBhIHRhYmxlIHRvcCBidXR0b24gY2xpY2sgZXZlbnRcbiAgQE91dHB1dCgpIGh5cGVyTGlua0VtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47IC8vIGh5cGVyIGxpbmsgY2xpY2sgZXZlbnRcbiAgQE91dHB1dCgpIHNpZGVOYXZFbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGRhdGE6IGFueSwgY29sOiBhbnksIGNvbmZpZzogYW55IH0+OyAvLyByaWdodG5hdiBjb2x1bW4gZW1pdFxuICBAT3V0cHV0KCkgYWN0aW9uQnV0dG9uRW1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PjsgLy8gZGF0YXMgdG8gYmUgcGFzc2VkIHdoZW4gdGFibGUgcm93IGFjdGl2ZSBidXR0b24gaXMgY2xpY2tlZFxuICBAT3V0cHV0KCkgY29sdW1uU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgY29sdW1uOiBzdHJpbmcsIGRhdGE6IGFueVtdIH0+KCk7XG4gIEBPdXRwdXQoKSByZW1vdmVDb2x1bW4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgY29sdW1uOiBzdHJpbmcsIGRhdGE6IGFueVtdIH0+KCk7XG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGVkVmFsdWVzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTsgLy8gdG8gcGFzcyB0aGUgc2VsZWN0ZWQgY2hlY2tib3ggdmFsdWVzXG4gIEBPdXRwdXQoKSBmaWxlRW1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpOyAvLyB0byBwYXNzIHRoZSBmaWxlXG4gIEBPdXRwdXQoKSBOeHRUYWJsZVBhcmFtc0VtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47IC8vU0tTMTdBUFIyNSB0byBwYXNzIHRoZSB0YWJsZVBhcmFtcyBpbmZvcm1hdGlvblxuICBAT3V0cHV0KCkgTnh0VGFibGVGaWx0ZXJFbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAvL1NLUzNNQVkyNSBmaWx0ZXIgY29sdW1uIHZhbCBnZXQgZW1pdCBcbiAgQE91dHB1dCgpIE54dFRhYmxlRW1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PjtcbiAgLy8ge1xuICAvLyAgIFwicGFnaW5hdGlvblwiOiB7ICAgICAgIC8vIDRcbiAgLy8gICAgICAgXCJwYWdlU2l6ZVwiOiAxMCxcbiAgLy8gICAgICAgXCJwYWdlSW5kZXhcIjogMTBcbiAgLy8gICB9LFxuICAvLyAgIFwidGFibGVTZWFyY2hcIjogeyAgICAgIC8vIDFcbiAgLy8gICAgICAgXCJmaWVsZHNcIiA6IFtcbiAgLy8gICAgICAgICAgIFwibGlnaHRUeXBlXCIsXG4gIC8vICAgICAgICAgICBcInN5c3RlbVwiLFxuICAvLyAgICAgICAgICAgXCJzdGF0dXNcIlxuICAvLyAgICAgICBdICxcbiAgLy8gICAgICAgXCJ2YWx1ZVwiOiAnci0wMDEnIFxuICAvLyAgIH0sICBcbiAgLy8gICBcInNlYXJjaEZpbHRlckRhdGFcIjogeyAgLy8gMlxuICAvLyAgICAgICBcImxpZ2h0VHlwZVwiOiBbXG4gIC8vICAgICAgICAgICBcIkFBXCIsXG4gIC8vICAgICAgICAgICBcIkJCXCIgXG4gIC8vICAgICAgIF1cbiAgLy8gICB9LFxuICAvLyAgIFwic29ydFwiOiB7ICAgICAgICAgICAgICAvLyAzXG4gIC8vICAgICAgIFwiY29sdW1uXCI6IFwiYXNzZXRDb2RlXCIsXG4gIC8vICAgICAgIFwiZGlyZWN0aW9uXCI6IFwiYXNjXCJcbiAgLy8gICB9XG4gIC8vIH1cblxuICBAVmlld0NoaWxkKE1hdFNvcnQpIHNvcnQhOiBNYXRTb3J0O1xuICBAVmlld0NoaWxkKCd0YWJsZUNvbnRhaW5lcicpIHRhYmxlQ29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgc2VsZWN0aW9uOiBhbnk7IC8vIHRvIGdldCB0aGUgc2VsZWN0ZWQgcm93XG4gIHN0aWNreUNvbmRpdGlvbiE6IG51bWJlcjsgLy8gdG8gZ2V0IHRoZSBzdGlja3kgY29sdW1uIGluZGV4XG4gIHNlYXJjaEZpbHRlciA9IGZhbHNlOyAvLyB0byBnZXQgdGhlIHNlYXJjaCBmaWx0ZXJcbiAgZmlsdGVyQXJyYXk6IEFycmF5PGFueT4gPSBbXTsgLy8gdG8gZ2V0IHRoZSBmaWx0ZXIgYXJyYXlcbiAgc2VsZWN0ZWRGaWx0ZXI6IGFueTsgLy8gdG8gZ2V0IHRoZSBzZWxlY3RlZCBmaWx0ZXJcbiAgcmVuZGVyQ29sdW1uczogc3RyaW5nID0gJ2Rpc3BsYXllZENvbHVtbnMnOyAvLyB0byBnZXQgdGhlIHJlbmRlcmVkIGNvbHVtbnNcbiAgcGFnZVNpemVPcHRpb25zOiBBcnJheTxhbnk+ICAvLyBmb3IgcGFnaW5hdGlvbiBnZXQgdGhlIHBhZ2Ugc2l6ZSBvcHRpb25zXG4gIGRhdGFTb3VyY2U6IGFueTsgIC8vIGZvciB0YWJsZSBkYXRhIHNvdXJjZVxuICB0b3RhbENvdW50ITogbnVtYmVyIC8vIGNvdW50IG9mIHRvdGFsIHJlY29yZHNcbiAgc2VhcmNoQm94VmFsdWU6IGFueTsgLy8gdG8gZ2V0IHRoZSBzZWFyY2ggYm94IHZhbHVlXG4gIHByZXZTZWFyY2g6IGFueTsgLy8gdG8gZ2V0IHRoZSBwcmV2aW91cyBzZWFyY2ggdmFsdWVcbiAgYWN0aXZlQ29sdW1uOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gVHJhY2sgdGhlIGFjdGl2ZSBjb2x1bW5cbiAgaXNTY3JvbGxlZCA9IGZhbHNlOyAvLyBCb29sZWFuIGZsYWcgdG8gdHJhY2sgc2Nyb2xsIHN0YXRlXG4gIGlzU2hhZG93SGlkZGVuID0gZmFsc2U7IC8vIEJvb2xlYW4gZmxhZyB0byB0cmFjayBzaGFkb3cgc3RhdGVcbiAgY3VycmVudFNvcnRDb2x1bW46IHN0cmluZyA9ICcnOyAvLyB0byBnZXQgdGhlIGN1cnJlbnQgc29ydCBjb2x1bW5cbiAgY3VycmVudFNvcnREaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnIHwgJ25vbmUnID0gJ25vbmUnOyAvLyB0byBnZXQgdGhlIGN1cnJlbnQgc29ydCBkaXJlY3Rpb25cbiAgb3JpZ2luYWxEYXRhOiBhbnk7IC8vIFN0b3JlIG9yaWdpbmFsIGRhdGEgZm9yIHNvcnRpbmdcbiAgaG92ZXJlZENvbHVtbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vIFRyYWNrIHRoZSBob3ZlcmVkIGNvbHVtblxuICBzZWFyY2hUZXh0OiBhbnk7IC8vIHRvIGdldCB0aGUgc2VhcmNoIHRleHRcbiAgbXVsdGlwbGVGaWx0ZXJBcnJheTogYW55OyAvLyB0byBnZXQgdGhlIG11bHRpcGxlIGZpbHRlciBhcnJheVxuICB0YWJsZUZpbHRlckFycmF5OiBhbnk7IC8vIHRvIGdldCB0aGUgdGFibGUgZmlsdGVyIGFycmF5XG4gIGZpbHRlckRhdGFBcnJheTogYW55ID0ge30gLy8gdG8gZ2V0IHRoZSBmaWx0ZXIgZGF0YSBhcnJheVxuICBpc1Jlc2l6ZWQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gZm9yIHRhYmxlIGNvbHVtbiByZXNpemVcbiAgc0ZpbHRlckRhdGE6IGFueTsgLy8gdG8gZ2V0IHRoZSBzZWFyY2ggZmlsdGVyIGRhdGFcbiAgaGVhZGVyTGFiZWxzOiBBcnJheTxhbnk+ID0gW107IC8vIHRvIGdldCB0aGUgaGVhZGVyIGxhYmVsc1xuICBkaXNwbGF5ZWRDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107IC8vIHRvIGdldCB0aGUgZGlzcGxheWVkIGNvbHVtbnNcbiAgZmlsdGVyQ29sdW1uczogQXJyYXk8YW55PiA9IFtdOyAvLyB0byBnZXQgdGhlIGZpbHRlciBjb2x1bW5zXG4gIGN1cnJlbnRGaWx0ZXJDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107IC8vIHRvIGdldCB0aGUgZmlsdGVyIGNvbHVtbnNcbiAgc29ydENvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgLy8gdG8gZ2V0IHRoZSBmaWx0ZXIgY29sdW1uc1xuICBjdXJyZW50U29ydENvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgLy8gdG8gZ2V0IHRoZSBmaWx0ZXIgY29sdW1uc1xuICBoeXBlckxpbmtDb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107IC8vIHRvIGdldCB0aGUgaHlwZXIgbGluayBjb2x1bW5zXG4gIGVkaXRDb2x1bW46IEFycmF5PGFueT4gPSBbXTsgIC8vIHRvIGdldCB0aGUgZWRpdCBjb2x1bW5cbiAgZGF0ZUNvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgLy8gdG8gZ2V0IHRoZSBkYXRlIGNvbHVtbnNcbiAgdGltZUNvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgIC8vIHRvIGdldCB0aGUgdGltZSBjb2x1bW5zXG4gIG9iamVjdENvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgIC8vIHRvIGdldCB0aGUgb2JqZWN0IGNvbHVtbnNcbiAgZmlsZUNvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgIC8vIHRvIGdldCB0aGUgZmlsZSBjb2x1bW5zXG4gIGJvb2xlYW5Db2x1bW5zIDogQXJyYXk8YW55PiA9IFtdOyAgLy8gdG8gZ2V0IHRoZSBib29sZWFuIGNvbHVtbnNcbiAgaW5saW5lRWxlbWVudDogYW55IC8vIGZvciBhZGQgYSBuZXcgcm93IG9uIHRhYmxlXG4gIHBhZ2VTaXplOiBhbnkgIC8vIGZvciBwYWdpbmF0aW9uIGdldCB0aGUgcGFnZSBzaXplXG4gIHBhZ2VJbmRleDogYW55IC8vIGZvciBwYWdpbmF0aW9uIGdldCB0aGUgcGFnZSBpbmRleFxuICB0b3RhbFJlY29yZHM6IG51bWJlcjsgLy8gZm9yIHBhZ2luYXRpb24gZ2V0IHRoZSB0b3RhbCByZWNvcmRzXG4gIGNvbmZpZ1BhZ2luYXRpb246IGJvb2xlYW4gPSBmYWxzZTsgLy8gZmxhZyBmb3IgY29uZmlnIHBhZ2luYXRpb25cbiAgZGVsZXRlRGF0YTogYW55OyAvLyB0byBnZXQgdGhlIGRlbGV0ZSByb3dcbiAgZGVsZXRlTW9kYWwgPSBmYWxzZTsgLy8gZm9yIGNvbmZvcm1hdGlvbiBwb3B1cFxuICBkcm9wZG93bkFjdGlvbkJ1dHRvbjogYW55OyAvLyBmb3IgYWN0aW9uIGNvbHVtbiBkcm9wZG93biBidXR0b25cbiAgY3VycmVudE9wZW5JbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7IC8vIHRyYWNrIHRoZSBjdXJyZW50IG9wZW4gYWN0aW9uIGRyb3Bkb3duIGljb24gaW5kZXhcbiAgY2xpY2tMaXN0ZW5lcjogYW55OyAvLyBhY3Rpb24gY29sdW1uIGRyb3Bkb3duIGJ1dHRvbiBjbGljayBsaXN0ZW5lciBmb3IgY2xvc2UgYSBkcm9wZG93biBidXR0b25cbiAgc2VsZWN0ZWRDb2x1bW46IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyB0byBnZXQgdGhlIHNlbGVjdGVkIGNvbHVtblxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjsgIC8vIGZvciB0YWJsZSBkYXRhIHN1YnNjcmlwdGlvblxuICBkZWxldGVJbmRleDogbnVtYmVyOyAvLyB0byBnZXQgdGhlIGRlbGV0ZSBpbmRleFxuICBzaG93UG9wb3ZlciA9IHRydWU7XG4gIHN1bW1hcnlWYWx1ZXM6IHsgW2xhYmVsOiBzdHJpbmddOiBudW1iZXIgfSA9IHt9OyAvLyBTS1MyME1BUjI1IE9iamVjdCB0byBzdG9yZSBzdW1tYXJ5IHJvdyB2YWx1ZXNcbiAgaXNTdW1tYXJ5Q29sdW1uOiBib29sZWFuID0gZmFsc2U7IC8vIFNLUzIwTUFSMjUgRmxhZyB0byBjaGVjayBpZiB0aGUgY29sdW1uIGlzIGluIHRoZSBkaXNwbHljb2x1bW5zIGFycmF5XG4gIGlzU3VtbWFyeVN0YXJ0Q29sdW1uOiBhbnlbXTtcbiAgaXNTdW1tYXJ5RW5kQ29sdW1uOiBhbnlbXTtcbiAgZmlsdGVyQm94RGF0YTogYW55O1xuICBmaWx0ZXJUYWJsZU5vczogYW55O1xuICBzZWxlY3RlZFZpZXc6IGFueSA9ICcnOyAgICAgICAgIC8vIFNlbGVjdGVkIGxpc3QgdmlldyBuYW1lXG4gIGlzRHJvcGRvd25PcGVuOiBib29sZWFuID0gZmFsc2U7IC8vIFRyYWNrcyBkcm9wZG93biB2aXNpYmlsaXR5XG4gIGN1cnJlbnRWaWV3RmlsdGVyOiBhbnlcbiAgY3VycmVudEhlYWRlckxhYmVsczogYW55W107XG4gIGN1cnJlbnREaXNwbGF5ZWRDb2x1bW5zOiBhbnlbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLCBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UpIHsgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSB7IGRhdGE6IFtdIH07IC8vIG9yIHVzZSBhIHByb3BlciBkYXRhIHN0cnVjdHVyZVxuICAgIC8vIGNvbnNvbGUubG9nKFwibmdPbkNoYW5nZXMgaXMgcnVubmluZ1wiKVxuICAgIGlmICh0aGlzLmZyb20gPT09ICdmb3JtQnVpbGRlcicpIHtcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMucXVlc3Rpb24/LmlucHV0ID8gdGhpcy5xdWVzdGlvbj8uaW5wdXQgOiBbXVxuICAgICAgY29uc3QgcGFyc2VkTWV0YSA9IHR5cGVvZiB0aGlzLnF1ZXN0aW9uWydmaWVsZHNNZXRhJ10gPT09ICdvYmplY3QnID8gdGhpcy5xdWVzdGlvblsnZmllbGRzTWV0YSddIDogSlNPTi5wYXJzZSh0aGlzLnF1ZXN0aW9uWydmaWVsZHNNZXRhJ10pO1xuICAgICAgaWYgKCBwYXJzZWRNZXRhID09PSBudWxsIHx8ICBwYXJzZWRNZXRhID09PSB1bmRlZmluZWQgfHwgIUFycmF5LmlzQXJyYXkocGFyc2VkTWV0YSkgfHwgcGFyc2VkTWV0YT8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignTm8gdmFsaWQgbWV0YWRhdGEgcHJvdmlkZWQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudGFibGVDb25maWcpIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy50YWJsZUNvbmZpZztcbiAgICAgICAgdGhpcy5pc05vc0luZGljYXRvciA9IGNvbmZpZz8uaXNOb3NJbmRpY2F0b3IgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmFkZElubGluZVJlY29yZCA9IGNvbmZpZy5hZGRJbmxpbmVSZWNvcmQgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUGFnaW5hdGlvbiA9IGNvbmZpZy5pc1BhZ2luYXRpb24gIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbiA9IGNvbmZpZy5hY3Rpb25CdXR0b24gIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmlzRGVsZXRlUm93ID0gY29uZmlnLmlzRGVsZXRlUm93ICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0VkaXRSb3cgPSBjb25maWcuaXNFZGl0Um93ICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWFyY2hCYXIgPSBjb25maWcuc2VhcmNoQmFyICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0J1dHRvbnMgPSBjb25maWcuaXNCdXR0b25zICE9PSBmYWxzZTsgLy9zdW1tYXJ5Q29sdW1uXG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBjb25maWcuaXRlbXNQZXJQYWdlIHx8IDU7XG4gICAgICB9XG4gICAgICB0aGlzLmhlYWRlckxhYmVscyA9IHBhcnNlZE1ldGFcbiAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnN1bW1hcnlDb2x1bW4gIT09IHRydWUgJiYgY29sdW1uLnN1bW1hcnlSb3cgIT09IHRydWUgJiYgY29sdW1uLmxhYmVsKSAvLyBFeGNsdWRlIG9ubHkgd2hlbiBleHBsaWNpdGx5IHRydWVcbiAgICAgICAgLm1hcChjb2x1bW4gPT4gY29sdW1uLmxhYmVsKTtcbiAgICAgIHRoaXMuY3VycmVudEhlYWRlckxhYmVscyA9IHRoaXMuaGVhZGVyTGFiZWxzXG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBwYXJzZWRNZXRhXG4gICAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5zdW1tYXJ5Q29sdW1uICE9PSB0cnVlICYmIGNvbHVtbi5zdW1tYXJ5Um93ICE9PSB0cnVlICYmIGNvbHVtbi5hcGlOYW1lKSAvLyBFeGNsdWRlIG9ubHkgd2hlbiBleHBsaWNpdGx5IHRydWVcbiAgICAgICAgLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgdGhpcy5jdXJyZW50RGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucztcbiAgICAgICAgdGhpcy5maWx0ZXJDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5maWx0ZXIgPT09IHRydWUpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLnNvcnRDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5zb3J0ID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5hcGlOYW1lKTtcbiAgICAgICAgdGhpcy5oeXBlckxpbmtDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5oeXBlckxpbmsgPT09IHRydWUpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLmVkaXRDb2x1bW4gPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnJlYWRPbmx5ID09PSBmYWxzZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMuZGF0ZUNvbHVtbnMgPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnR5cGUgPT09ICdEYXRlJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMudGltZUNvbHVtbnMgPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnR5cGUgPT09ICdUaW1lJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMub2JqZWN0Q29sdW1ucyA9IHBhcnNlZE1ldGEuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udHlwZSA9PT0gJ09iamVjdCcpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLmZpbGVDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi50eXBlID09PSAnRmlsZScpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLmJvb2xlYW5Db2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi50eXBlID09PSAnQm9vbGVhbicpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuXG4gICAgICB0aGlzLnN1bW1hcnlDb2x1bW5zID0gcGFyc2VkTWV0YVxuICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uc3VtbWFyeUNvbHVtbiA9PT0gdHJ1ZSlcbiAgICAgICAgLm1hcCgoeyBhcGlOYW1lLCBmbGRUeXBlLCAuLi5yZXN0IH0pID0+ICh7XG4gICAgICAgICAgZmllbGROYW1lOiBhcGlOYW1lLFxuICAgICAgICAgIHR5cGU6IGZsZFR5cGUsXG4gICAgICAgICAgLi4ucmVzdFxuICAgICAgICB9KSk7XG4gICAgICB0aGlzLnN1bW1hcnlSb3dzID0gcGFyc2VkTWV0YVxuICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uc3VtbWFyeVJvdyA9PT0gdHJ1ZSlcbiAgICAgICAgLm1hcCgoeyBhcGlOYW1lLCBmbGRUeXBlLCAuLi5yZXN0IH0pID0+ICh7XG4gICAgICAgICAgZmllbGROYW1lOiBhcGlOYW1lLFxuICAgICAgICAgIHR5cGU6IGZsZFR5cGUsXG4gICAgICAgICAgLi4ucmVzdFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIC8vIEVuc3VyZSBgdGhpcy5kYXRhYCBpcyBhbiBhcnJheVxuICAgIGlmICghdGhpcy5kYXRhIHx8ICFBcnJheS5pc0FycmF5KHRoaXMuZGF0YSkpIHtcbiAgICAgIGNvbnNvbGUud2FybignRGF0YSBpcyBub3QgaW5pdGlhbGl6ZWQgb3IgaXMgbm90IGFuIGFycmF5Jyk7XG4gICAgICB0aGlzLmRhdGEgPSBbXTsgIC8vIEluaXRpYWxpemUgYXMgYW4gZW1wdHkgYXJyYXkgaWYgaXQncyBub3QgdmFsaWRcbiAgICB9XG4gICAgLy8gRW5zdXJlIGB0aGlzLmRhdGFTb3VyY2UuZGF0YWAgaXMgaW5pdGlhbGl6ZWRcbiAgICAvL1NLUzE1RkVCMjUgSW5pdGlhbGl6ZSB0aGlzIGluIHlvdXIgZGF0YSBmZXRjaCBtZXRob2RcbiAgICB0aGlzLm9yaWdpbmFsRGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuICAgIHRoaXMuc0ZpbHRlckRhdGEgPSBbLi4udGhpcy5kYXRhXTtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMub3JpZ2luYWxEYXRhO1xuICAgIHRoaXMucGFnZVNpemUgPSB0aGlzLnBhZ2luYXRpb24/LnBhZ2VTaXplID8gdGhpcy5wYWdpbmF0aW9uWydwYWdlU2l6ZSddIDogdGhpcy5wYWdlU2l6ZSB8fCAxMDtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IHRoaXMucGFnaW5hdGlvbj8ucGFnZUluZGV4ID8gdGhpcy5wYWdpbmF0aW9uWydwYWdlSW5kZXgnXSA6IHRoaXMucGFnZUluZGV4IHx8IDE7XG4gICAgdGhpcy50b3RhbFJlY29yZHMgPSB0aGlzLnBhZ2luYXRpb24/LnRvdGFsUmVjb3JkcyA/IHRoaXMucGFnaW5hdGlvblsndG90YWxSZWNvcmRzJ10gOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSB0aGlzLnBhZ2luYXRpb24/LnBhZ2VTaXplT3B0aW9ucyA/IHRoaXMucGFnaW5hdGlvblsncGFnZVNpemVPcHRpb25zJ10gOiBbJzUnLCAnMTAnLCAnMjUnLCAnNTAnLCAnMTAwJywgJzIwMCddO1xuICAgIHRoaXMuY29uZmlnUGFnaW5hdGlvbiA9ICEhKHRoaXMucGFnaW5hdGlvbiAmJiBPYmplY3Qua2V5cyh0aGlzLnBhZ2luYXRpb24pLmxlbmd0aCA+IDApO1xuICAgIHRoaXMuaXNQYWdpbmF0aW9uID09PSB1bmRlZmluZWQgfHwgdGhpcy5pc1BhZ2luYXRpb24gPT09IHRydWUgPyB0aGlzLmlzUGFnaW5hdGlvbiA9IHRydWUgOiB0aGlzLmlzUGFnaW5hdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNOb3NJbmRpY2F0b3IgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzTm9zSW5kaWNhdG9yID09PSB0cnVlID8gdGhpcy5pc05vc0luZGljYXRvciA9IHRydWUgOiB0aGlzLmlzTm9zSW5kaWNhdG9yID0gZmFsc2U7XG4gICAgdGhpcy5pc0VkaXRhYmxlID09PSB1bmRlZmluZWQgfHwgdGhpcy5pc0VkaXRhYmxlID09PSBmYWxzZSA/IHRoaXMuaXNFZGl0YWJsZSA9IGZhbHNlIDogdGhpcy5pc0VkaXRhYmxlID0gdHJ1ZVxuXG5cbiAgICB0aGlzLmhlYWRlckxhYmVscyA9IHRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucz8ubWFwKGNvbHVtbiA9PiBjb2x1bW4ubGFiZWwpIDogdGhpcy5oZWFkZXJMYWJlbHM7XG4gICAgdGhpcy5jdXJyZW50SGVhZGVyTGFiZWxzID0gdGhpcy5oZWFkZXJMYWJlbHNcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnM/Lm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSkgOiB0aGlzLmRpc3BsYXllZENvbHVtbnM7XG4gICAgdGhpcy5jdXJyZW50RGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucztcbiAgICAvLyBTS1MyME1BUjI1IENoZWNrIGlmIHRoZSBkaXNwbHljb2x1bW4ncyBoYXZlIGEgc3VtbWFyeSBjb2x1bW5cbiAgICBpZiAodGhpcy5zdW1tYXJ5Q29sdW1ucyAmJiB0aGlzLnN1bW1hcnlDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IFsuLi50aGlzLmRpc3BsYXllZENvbHVtbnMsIC4uLnRoaXMuc3VtbWFyeUNvbHVtbnMubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKV07XG4gICAgICB0aGlzLmN1cnJlbnREaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zO1xuICAgICAgdGhpcy5oZWFkZXJMYWJlbHMgPSBbLi4udGhpcy5oZWFkZXJMYWJlbHMsIC4uLnRoaXMuc3VtbWFyeUNvbHVtbnMubWFwKGNvbHVtbiA9PiBjb2x1bW4ubGFiZWwpXTtcbiAgICAgIHRoaXMuY3VycmVudEhlYWRlckxhYmVscyA9IHRoaXMuaGVhZGVyTGFiZWxzXG4gICAgfVxuICAgIGlmICh0aGlzLnN1bW1hcnlSb3dzICYmIHRoaXMuc3VtbWFyeVJvd3MubGVuZ3RoID4gMCAmJiB0aGlzLmRpc3BsYXllZENvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5pc1N1bW1hcnlDb2x1bW4gPSB0aGlzLmRpc3BsYXllZENvbHVtbnMuc29tZShlbGVtZW50ID0+IGVsZW1lbnQgPT09IHRoaXMuc3VtbWFyeVJvd3NbMF0uY29sdW1uKTtcbiAgICAgIGlmICh0aGlzLmlzU3VtbWFyeUNvbHVtbikge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucy5pbmRleE9mKHRoaXMuc3VtbWFyeVJvd3NbMF0uY29sdW1uKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHRoaXMuaXNTdW1tYXJ5U3RhcnRDb2x1bW4gPSB0aGlzLmRpc3BsYXllZENvbHVtbnMuc2xpY2UoMCwgaW5kZXggLSAxKTtcbiAgICAgICAgICB0aGlzLmlzU3VtbWFyeUVuZENvbHVtbiA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucy5zbGljZShpbmRleCArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZmlsdGVyQ29sdW1ucyA9ICB0aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmlsdGVyID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5maWx0ZXJDb2x1bW5zO1xuICAgIHRoaXMuc29ydENvbHVtbnMgPSAgdGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnNvcnQgPT09IHRydWUpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSkgOiB0aGlzLnNvcnRDb2x1bW5zO1xuICAgIHRoaXMuaHlwZXJMaW5rQ29sdW1ucyA9ICB0aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uaHlwZXJMaW5rID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5oeXBlckxpbmtDb2x1bW5zO1xuICAgIHRoaXMuZWRpdENvbHVtbiA9IHRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5lZGl0ID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5lZGl0Q29sdW1uO1xuICAgIHRoaXMuZGF0ZUNvbHVtbnMgPSAgdGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZsZFR5cGUgPT09ICdkYXRlJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuZGF0ZUNvbHVtbnM7XG4gICAgdGhpcy50aW1lQ29sdW1ucyA9ICB0aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmxkVHlwZSA9PT0gJ3RpbWUnKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy50aW1lQ29sdW1ucztcbiAgICB0aGlzLm9iamVjdENvbHVtbnMgPSAgdGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZsZFR5cGUgPT09ICdvYmplY3QnKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5vYmplY3RDb2x1bW5zO1xuICAgIHRoaXMuZmlsZUNvbHVtbnMgPSAgdGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZsZFR5cGUgPT09ICdmaWxlJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMuZmlsZUNvbHVtbnM7XG4gICAgdGhpcy5ib29sZWFuQ29sdW1ucyA9ICB0aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmxkVHlwZSA9PT0gJ2Jvb2xlYW4nKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5ib29sZWFuQ29sdW1ucztcbiAgICBcbiAgICB0aGlzLmN1cnJlbnRGaWx0ZXJDb2x1bW5zID0gdGhpcy5maWx0ZXJDb2x1bW5zXG4gICAgdGhpcy5jdXJyZW50U29ydENvbHVtbnMgPSB0aGlzLnNvcnRDb2x1bW5zXG4gICAgdGhpcy5pbmxpbmVFbGVtZW50ID0gT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuZGlzcGxheWVkQ29sdW1ucy5tYXAoa2V5ID0+IFtrZXksIFwiXCJdKSk7XG5cbiAgICB0aGlzLmRyb3Bkb3duQWN0aW9uQnV0dG9uID0gKHRoaXMuYWN0aW9uQnV0dG9uQXJyYXk/LmJ1dHRvbkFycmF5ICYmIHRoaXMuYWN0aW9uQnV0dG9uQXJyYXk/LmJ1dHRvbkFycmF5Py5sZW5ndGggPiAwKSA/IHRoaXMuYWN0aW9uQnV0dG9uQXJyYXk/LmJ1dHRvbkFycmF5Py5zbGljZSh0aGlzLmFjdGlvbkJ1dHRvbkFycmF5Py5zaXplKSA6IFtdO1xuICAgIFxuICAgIHRoaXMuc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odHJ1ZSwgW10pO1xuICAgIGlmICghdGhpcy50b3RhbFJlY29yZHMgJiYgdGhpcy5kYXRhICYmIHRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICBjb25zdCBwYWdlSW5kZXggPSBOdW1iZXIodGhpcy5wYWdlSW5kZXgpIHx8IDA7XG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IE51bWJlcih0aGlzLnBhZ2VTaXplKSB8fCAxMDtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gKHBhZ2VJbmRleCAtIDEpICogcGFnZVNpemU7XG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIHBhZ2VTaXplO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGE/LnNsaWNlKHN0YXJ0LCBlbmQpIHx8IFtdO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YVxuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xuICAgIH0sIDEwMClcbiAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLnRvdGFsUmVjb3JkcyB8fCB0aGlzLmRhdGE/Lmxlbmd0aFxuICAgIHRoaXMuZmlsdGVyVGFibGVOb3MgPSB0aGlzLnRvdGFsUmVjb3JkcyB8fCB0aGlzLmRhdGE/Lmxlbmd0aFxuICAgIGlmICh0aGlzLnN0aWNreUNvbHVtbiA9PT0gdHJ1ZSAmJiB0aGlzLmRpc3BsYXllZENvbHVtbnMpIHtcbiAgICAgIHRoaXMuc3RpY2t5Q29uZGl0aW9uID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPy5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RpY2t5Q29uZGl0aW9uID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPy5sZW5ndGggKyAxO1xuICAgIH1cbiAgICBpZiAodGhpcy53aXRoQ2hlY2tCb3ggJiYgdGhpcy5hY3Rpb25CdXR0b24pIHtcbiAgICAgIHRoaXMucmVuZGVyQ29sdW1ucyA9ICdib3RoJztcbiAgICB9IGVsc2UgaWYgKHRoaXMud2l0aENoZWNrQm94KSB7XG4gICAgICB0aGlzLnJlbmRlckNvbHVtbnMgPSAnc2VsZWN0JztcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aW9uQnV0dG9uKSB7XG4gICAgICB0aGlzLnJlbmRlckNvbHVtbnMgPSAnYWN0aW9uJztcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VhcmNoQ29uZmlncz8uc2VhcmNoRmlsdGVyVmFsKSB7XG4gICAgICB0aGlzLnNlYXJjaEJveFZhbHVlID0gdGhpcy5zZWFyY2hDb25maWdzPy5zZWFyY2hGaWx0ZXJWYWw7IC8vIFNob3cgdmFsdWUgaW4gdGhlIHNlYXJjaCBib3hcbiAgICAgIHRoaXMucHJldlNlYXJjaCA9IHRoaXMuc2VhcmNoQ29uZmlncz8uc2VhcmNoRmlsdGVyVmFsO1xuICAgIH1cbiAgICBpZih0aGlzLmN1cnJlbnRWaWV3RmlsdGVyID09PSB1bmRlZmluZWQgfHwgdGhpcy5jdXJyZW50Vmlld0ZpbHRlciA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5jdXJyZW50Vmlld0ZpbHRlciA9IHRoaXMubGlzdFZpZXdzICYmIHRoaXMubGlzdFZpZXdzLmxlbmd0aCA+IDAgPyB0aGlzLmxpc3RWaWV3c1swXSA6IG51bGw7XG4gICAgfVxuICAgIGlmKHRoaXMuY3VycmVudFZpZXdGaWx0ZXIgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmN1cnJlbnRWaWV3RmlsdGVyICE9PSBudWxsKXtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gdGhpcy5jdXJyZW50Vmlld0ZpbHRlci5maWx0ZXJOYW1lO1xuICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY3VycmVudFZpZXdGaWx0ZXI/LmNvbHVtbnMgfHwgW107XG4gICAgICBpZihjb2x1bW5zLmxlbmd0aCA+IDApe1xuICAgICAgICB0aGlzLmN1cnJlbnREaXNwbGF5ZWRDb2x1bW5zID0gY29sdW1ucy5tYXAoY29sID0+IGNvbC5uYW1lKTtcbiAgICAgICAgdGhpcy5jdXJyZW50SGVhZGVyTGFiZWxzID0gdGhpcy5jdXJyZW50RGlzcGxheWVkQ29sdW1ucy5tYXAobmFtZSA9PiB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmRpc3BsYXllZENvbHVtbnMuaW5kZXhPZihuYW1lKTtcbiAgICAgICAgICByZXR1cm4gaW5kZXggIT09IC0xID8gdGhpcy5oZWFkZXJMYWJlbHNbaW5kZXhdIDogbmFtZTsgLy8gZmFsbGJhY2sgdG8gbmFtZSBpZiBubyBsYWJlbCBmb3VuZFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuZmlsdGVyYWJsZSA9PT0gdHJ1ZSkubWFwKGNvbCA9PiBjb2wubmFtZSk7XG4gICAgICAgIHRoaXMuY3VycmVudFNvcnRDb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5zb3J0YWJsZSA9PT0gdHJ1ZSkubWFwKGNvbCA9PiBjb2wubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXJDb2x1bW5zPy5sZW5ndGggPiAwICYmIHRoaXMuY29uZmlnUGFnaW5hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheSA9IHt9O1xuICAgICAgY29uc3QgZmlsdE9ianM6IGFueSA9IHt9O1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyQ29sdW1ucy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5W2VsZW1lbnRdID0gbnVsbDtcbiAgICAgICAgZmlsdE9ianNbZWxlbWVudF0gPSBbXTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kYXRhLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudEZpbHRlckNvbHVtbnMuZm9yRWFjaCgoa2V5OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoZWxlbWVudCwga2V5KTsgIC8vIDwtIGdldCBuZXN0ZWQgdmFsdWVcbiAgICBcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZmlsdE9ianNba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheVtrZXldID0gbmV3IFNldChmaWx0T2Jqc1trZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXkgPSB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheSA9IHRoaXMubXVsdGlwbGVGaWx0ZXI7XG4gICAgfVxuICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBmaWx0ZXJlZCBhcnJheSB0aGF0IGV4Y2x1ZGVzIGFueSBjb2x1bW4gd2l0aCAnWydcbiAgICBjb25zdCB0ZW1wRmlsdGVyQ29sdW1ucyA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucy5maWx0ZXIoKGtleTogc3RyaW5nKSA9PiAha2V5LmluY2x1ZGVzKCdbJykpO1xuICAgIGlmICh0ZW1wRmlsdGVyQ29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlsdE9ianM6IGFueSA9IHt9O1xuICAgICAgLy8gSW5pdGlhbGl6ZSBlbXB0eSBTZXQgZm9yIGVhY2ggZmlsdGVyZWQgY29sdW1uXG4gICAgICB0ZW1wRmlsdGVyQ29sdW1ucy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBmaWx0T2Jqc1trZXldID0gbmV3IFNldCgpO1xuICAgICAgfSk7XG4gICAgXG4gICAgICAvLyBGaWxsIHRoZSBzZXRzIHdpdGggdW5pcXVlIHZhbHVlc1xuICAgICAgdGhpcy50YWJsZUZpbHRlckRhdGE/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICB0ZW1wRmlsdGVyQ29sdW1ucy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZShlbGVtZW50LCBrZXkpO1xuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmaWx0T2Jqc1trZXldLmFkZCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pOyAgXG4gICAgICAvLyBDb252ZXJ0IHNldHMgdG8gYXJyYXlzIGFuZCBmb3JtYXQgYXMgcmVxdWVzdGVkXG4gICAgICB0aGlzLnRhYmxlRmlsdGVyQXJyYXkgPSB0ZW1wRmlsdGVyQ29sdW1ucy5tYXAoKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiB7IFtrZXldOiBBcnJheS5mcm9tKGZpbHRPYmpzW2tleV0pIH07XG4gICAgICB9KTtcbiAgICB9ICAgIFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudGFibGVDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgdGFibGVCb2R5ID0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50YWJsZS1ib2R5Jyk7XG4gICAgICAgIGlmICh0YWJsZUJvZHkgJiYgdGhpcy5pc1BhZ2luYXRpb24pIHtcbiAgICAgICAgICB0aGlzLmlzU2hhZG93SGlkZGVuID0gISh0YWJsZUJvZHkuc2Nyb2xsSGVpZ2h0IDwgNDUwKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMTUwMCk7IC8vIFdhaXRzIDEwMG1zIGZvciByZW5kZXJpbmdcbiAgICAvLyBTS1MyME1BUjI1IEluaXRpYWxpemUgc3VtbWFyeVZhbHVlcyBmb3IgaW5wdXQgcm93cyBhbmQgY29tcHV0ZSB2YWx1ZXNcbiAgICBpZiAoY2hhbmdlc1snc3VtbWFyeVJvd3MnXSB8fCBjaGFuZ2VzWydzdW1tYXJ5Q29sdW1ucyddIHx8IGNoYW5nZXNbJ2RhdGEnXSkge1xuICAgICAgdGhpcy5jb21wdXRlU3VtbWFyeUNvbHVtbnMoKTsgLy8gQ29tcHV0ZSBwZXItcm93IHN1bW1hcnkgY29sdW1ucyBmaXJzdFxuICAgICAgdGhpcy5zdW1tYXJ5Um93cz8uZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICBpZiAocm93LnR5cGUgPT09ICdpbnB1dCcgJiYgdGhpcy5zdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnN1bW1hcnlWYWx1ZXNbcm93LmZpZWxkTmFtZV0gPSAwOyAvLyBEZWZhdWx0IHRvIDAgZm9yIGlucHV0c1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29tcHV0ZVN1bW1hcnlWYWx1ZXMoKTtcbiAgICB9XG4gICAgdGhpcy5zZWFyY2hDb25maWdzICYmIHRoaXMuc2VhcmNoQm94VmFsdWUgPyB0aGlzLmVtcHR5U2VhcmNoKHRoaXMuc2VhcmNoQm94VmFsdWUpIDogdGhpcy5hcHBseUZpbHRlcih0aGlzLnRhYmxlUGFyYW1zPy50YWJsZVNlYXJjaCwnb25DaGFuZ2UnKSAvLyBTS1MxN0FQUjI1IHVwZGF0ZSBzZWFyY2ggYm94IHZhbHVlXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSB7IGRhdGE6IFtdIH07IC8vIG9yIHVzZSBhIHByb3BlciBkYXRhIHN0cnVjdHVyZVxuICAgIC8vIFNLUzEzTUFSMjUgZ2V0IGRhdGEgZnJvbSBxdWVzdGlvbiBpZiBmcm9tIGZvcm1CdWlsZGVyXG4gICAgaWYgKHRoaXMuZnJvbSA9PT0gJ2Zvcm1CdWlsZGVyJykge1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5xdWVzdGlvbj8uaW5wdXQgPyB0aGlzLnF1ZXN0aW9uPy5pbnB1dCA6IFtdXG4gICAgICBjb25zdCBwYXJzZWRNZXRhID0gdHlwZW9mIHRoaXMucXVlc3Rpb25bJ2ZpZWxkc01ldGEnXSA9PT0gJ29iamVjdCcgPyB0aGlzLnF1ZXN0aW9uWydmaWVsZHNNZXRhJ10gfHwgW10gOiBKU09OLnBhcnNlKHRoaXMucXVlc3Rpb25bJ2ZpZWxkc01ldGEnXSk7XG4gICAgICBpZiAoIHBhcnNlZE1ldGEgPT09IG51bGwgfHwgIHBhcnNlZE1ldGEgPT09IHVuZGVmaW5lZCB8fCAhQXJyYXkuaXNBcnJheShwYXJzZWRNZXRhKSB8fCBwYXJzZWRNZXRhPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdObyB2YWxpZCBtZXRhZGF0YSBwcm92aWRlZCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50YWJsZUNvbmZpZykge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLnRhYmxlQ29uZmlnO1xuICAgICAgICB0aGlzLmlzTm9zSW5kaWNhdG9yID0gY29uZmlnPy5pc05vc0luZGljYXRvciAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWRkSW5saW5lUmVjb3JkID0gY29uZmlnLmFkZElubGluZVJlY29yZCAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNQYWdpbmF0aW9uID0gY29uZmlnLmlzUGFnaW5hdGlvbiAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9uID0gY29uZmlnLmFjdGlvbkJ1dHRvbiAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNEZWxldGVSb3cgPSBjb25maWcuaXNEZWxldGVSb3cgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmlzRWRpdFJvdyA9IGNvbmZpZy5pc0VkaXRSb3cgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLnNlYXJjaEJhciA9IGNvbmZpZy5zZWFyY2hCYXIgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQnV0dG9ucyA9IGNvbmZpZy5pc0J1dHRvbnMgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gY29uZmlnLml0ZW1zUGVyUGFnZSB8fCA1O1xuICAgICAgfVxuICAgICAgdGhpcy5oZWFkZXJMYWJlbHMgPSBwYXJzZWRNZXRhXG4gICAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5zdW1tYXJ5Q29sdW1uICE9PSB0cnVlICYmIGNvbHVtbi5zdW1tYXJ5Um93ICE9PSB0cnVlICYmIGNvbHVtbi5sYWJlbCkgLy8gRXhjbHVkZSBvbmx5IHdoZW4gZXhwbGljaXRseSB0cnVlXG4gICAgICAgIC5tYXAoY29sdW1uID0+IGNvbHVtbi5sYWJlbCk7XG4gICAgICAgIHRoaXMuY3VycmVudEhlYWRlckxhYmVscyA9IHRoaXMuaGVhZGVyTGFiZWxzXG5cbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHBhcnNlZE1ldGFcbiAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnN1bW1hcnlDb2x1bW4gIT09IHRydWUgJiYgY29sdW1uLnN1bW1hcnlSb3cgIT09IHRydWUgJiYgY29sdW1uLmFwaU5hbWUpIC8vIEV4Y2x1ZGUgb25seSB3aGVuIGV4cGxpY2l0bHkgdHJ1ZVxuICAgICAgICAubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMuY3VycmVudERpc3BsYXllZENvbHVtbnMgPSB0aGlzLmRpc3BsYXllZENvbHVtbnM7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5maWx0ZXIgPT09IHRydWUpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLnNvcnRDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5zb3J0ID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5hcGlOYW1lKTtcbiAgICAgICAgdGhpcy5oeXBlckxpbmtDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5oeXBlckxpbmsgPT09IHRydWUpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLmVkaXRDb2x1bW4gPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnJlYWRPbmx5ID09PSBmYWxzZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMuZGF0ZUNvbHVtbnMgPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZsZFR5cGUgPT09ICdEYXRlJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMudGltZUNvbHVtbnMgPSBwYXJzZWRNZXRhLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZsZFR5cGUgPT09ICdUaW1lJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uYXBpTmFtZSk7XG4gICAgICAgIHRoaXMub2JqZWN0Q29sdW1ucyA9IHBhcnNlZE1ldGEuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmxkVHlwZSA9PT0gJ09iamVjdCcpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLmZpbGVDb2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5mbGRUeXBlID09PSAnRmlsZScpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuICAgICAgICB0aGlzLmJvb2xlYW5Db2x1bW5zID0gcGFyc2VkTWV0YS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5mbGRUeXBlID09PSAnQm9vbGVhbicpLm1hcChjb2x1bW4gPT4gY29sdW1uLmFwaU5hbWUpO1xuXG4gICAgICB0aGlzLnN1bW1hcnlDb2x1bW5zID0gcGFyc2VkTWV0YVxuICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uc3VtbWFyeUNvbHVtbiA9PT0gdHJ1ZSlcbiAgICAgICAgLm1hcCgoeyBhcGlOYW1lLCBmbGRUeXBlLCAuLi5yZXN0IH0pID0+ICh7XG4gICAgICAgICAgZmllbGROYW1lOiBhcGlOYW1lLFxuICAgICAgICAgIHR5cGU6IGZsZFR5cGUsXG4gICAgICAgICAgLi4ucmVzdFxuICAgICAgICB9KSk7XG4gICAgICB0aGlzLnN1bW1hcnlSb3dzID0gcGFyc2VkTWV0YVxuICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uc3VtbWFyeVJvdyA9PT0gdHJ1ZSlcbiAgICAgICAgLm1hcCgoeyBhcGlOYW1lLCBmbGRUeXBlLCAuLi5yZXN0IH0pID0+ICh7XG4gICAgICAgICAgZmllbGROYW1lOiBhcGlOYW1lLFxuICAgICAgICAgIHR5cGU6IGZsZFR5cGUsXG4gICAgICAgICAgLi4ucmVzdFxuICAgICAgICB9KSk7XG4gICAgICAgIGlmICh0aGlzLmFwaU1ldGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxldCBvcHRpb25zID0gW107XG4gICAgICAgICAgLy8gQVAtMjZNQVIyNSBFbnN1cmUgdGhhdCB0aGlzLmFwaU1ldGEgaXMgYWx3YXlzIGFuIG9iamVjdC4gIFxuICAgICAgICAgLy9BUC0yNk1BUjI1IElmIGl0J3MgYWxyZWFkeSBhbiBvYmplY3QsIGtlZXAgaXQgYXMgaXM7IG90aGVyd2lzZSwgcGFyc2UgaXQgZnJvbSBhIEpTT04gc3RyaW5nLlxuICAgICAgICAgIHRoaXMuYXBpTWV0YSA9IHR5cGVvZiB0aGlzLmFwaU1ldGEgPT09ICdvYmplY3QnID8gdGhpcy5hcGlNZXRhIDogSlNPTi5wYXJzZSh0aGlzLmFwaU1ldGEpO1xuICAgICAgICAgIGxldCBhcGlPYmo6IGFueSA9IHRoaXMuYXBpTWV0YTtcbiAgICAgICAgICBpZiAoYXBpT2JqICYmIGFwaU9iai5lbmRwb2ludCkge1xuICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuYXBpUmVzcG9uc2UoYXBpT2JqLmVuZHBvaW50KT8uc3Vic2NyaWJlKChhcGlSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlcztcbiAgICAgICAgICAgIGlmIChhcGlPYmoudmFyaWFibGUpIHtcbiAgICAgICAgICAgICAgLy8gVkQgMjJNYXkyNCAtIGhhbmRsaW5nIG11bHRpcGxlIGNoaWxkIG9iamVjdHNcbiAgICAgICAgICAgICAgcmVzcG9uc2VzID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShhcGlSZXNwb25zZSwgYXBpT2JqLnZhcmlhYmxlKTtcbiAgICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgICAgLy8gSEEgMTlKQU4yNCBUbyBhdm9pZCB1bmRlZmluZWQgZXJyb3IgaW4gY29uc29sZVxuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3BvbnNlcz8ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcCA9IHJlc3BvbnNlc1tpXTtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzcCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb3B0aW9ucyA9IHJlc3VsdHM7XG4gICAgICAgICAgICB9IGVsc2UgeyAgLy8gVkQgMTlKQU4yNCAtIGlmIHJlc3BvbnNlIGhhcyB2YWx1ZSh3aGljaCBpcyBhcnJheSkgb25seVxuICAgICAgICAgICAgICByZXNwb25zZXMgPSBhcGlSZXNwb25zZTtcbiAgICAgICAgICAgICAgb3B0aW9ucyA9IHJlc3BvbnNlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLm1hcCgob2JqOiBhbnkpID0+ICh7IC4uLm9iaiwgZWRpdDogZmFsc2UgfSkpO1xuICAgICAgICAgICAgdGhpcy5kYXRhID0gb3B0aW9ucztcblxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVkQgTk9WMjMgLSBoYW5kbGUgdGhlIGRlcGVuZGVudCB1cGRhdGUgZm9yIGRyb3Bkb3duXG4gICAgICAgIGxldCBzb3VyY2VJZCA9IGFwaU9iaj8uc291cmNlUXVlc3Rpb25JZDtcbiAgICAgICAgbGV0IGZpZWxkID0gYXBpT2JqPy5maWVsZDsgICAgICAgIC8vIFZEIDEzTUFZMjQgLSBkeW5hbWljIGZpZWxkIGNoYW5nZXNcbiAgICAgICAgaWYgKHNvdXJjZUlkKSB7XG4gICAgICAgICAgLy8gLy8gVkQgMTBNYXkyNCBTdWJzY3JpYmUgZm9yIHRoZSBjaGFuZ2VzXG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY2hhbmdlQW5ub3VuY2VkJC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAoY2hhbmdlVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNoYW5nZVZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VWYWx1ZS52YWx1ZU9iaiAhPSB1bmRlZmluZWQgJiYgY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQgPT0gYXBpT2JqLnNvdXJjZVF1ZXN0aW9uSWQpIHtcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLm1hcCgob2JqOiBhbnkpID0+ICh7IC4uLm9iaiwgZWRpdDogZmFsc2UgfSkpO1xuICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSBjaGFuZ2VWYWx1ZS52YWx1ZU9iajtcbiAgICAgICAgICAgICAgICAgIGxldCB2YWxpZEl0ZW0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgLy8gVkQgMTNNQVkyNCAtIGJpbmQgZHluYW1pYyBmaWVsZFxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFZEIDI2SnVuMjQgLSB0byBoYW5kbGUgbXVsdGlwbGUgb2JqZWN0c1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iakVsZW1lbnRWYWx1ZSA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoZWxlbWVudCwgZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iakl0ZW1WYWx1ZSA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoaXRlbSwgZmllbGQpXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9iakVsZW1lbnRWYWx1ZSA9PSBvYmpJdGVtVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkSXRlbSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvL1JTIDE0RkVCMjAyNVxuICAgICAgICAgICAgICAgICAgLy9VcGRhdGUgUGFnaW5hdGlvbiBiZWZvcmUgZW1pdFxuICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBbLi4udGhpcy5kYXRhLCBpdGVtXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBbLi4udGhpcy5kYXRhXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0VGFibGVEYXRhVmFsdWUodGhpcy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gU0tTMjBNQVIyNSBNYW51YWxseSB0cmlnZ2VyIG5nT25DaGFuZ2VzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdPbkNoYW5nZXMoe30pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVNlcnZpY2UuY29uZmlybUNoYW5nZShhcGlPYmo/LnNvdXJjZVF1ZXN0aW9uSWQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlYXJjaEJhciA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuc2VhcmNoQmFyID09PSB0cnVlID8gdGhpcy5zZWFyY2hCYXIgPSB0cnVlIDogdGhpcy5zZWFyY2hCYXIgPSBmYWxzZTtcbiAgICB0aGlzLndpdGhDaGVja0JveCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMud2l0aENoZWNrQm94ID09PSBmYWxzZSA/IHRoaXMud2l0aENoZWNrQm94ID0gZmFsc2UgOiB0aGlzLndpdGhDaGVja0JveCA9IHRydWU7XG4gICAgdGhpcy5pc0VkaXRSb3cgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzRWRpdFJvdyA9PT0gZmFsc2UgPyB0aGlzLmlzRWRpdFJvdyA9IGZhbHNlIDogdGhpcy5pc0VkaXRSb3cgPSB0cnVlO1xuICAgIHRoaXMuaXNEZWxldGVSb3cgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzRGVsZXRlUm93ID09PSBmYWxzZSA/IHRoaXMuaXNEZWxldGVSb3cgPSBmYWxzZSA6IHRoaXMuaXNEZWxldGVSb3cgPSB0cnVlO1xuICAgIHRoaXMuYWN0aW9uQnV0dG9uID09PSB1bmRlZmluZWQgfHwgdGhpcy5hY3Rpb25CdXR0b24gPT09IGZhbHNlID8gdGhpcy5hY3Rpb25CdXR0b24gPSBmYWxzZSA6IHRoaXMuYWN0aW9uQnV0dG9uID0gdHJ1ZTtcbiAgICB0aGlzLmlzQnV0dG9ucyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaXNCdXR0b25zID09PSBmYWxzZSA/IHRoaXMuaXNCdXR0b25zID0gZmFsc2UgOiB0aGlzLmlzQnV0dG9ucyA9IHRydWU7XG4gICAgdGhpcy5hZGRJbmxpbmVSZWNvcmQgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmFkZElubGluZVJlY29yZCA9PT0gZmFsc2UgPyB0aGlzLmFkZElubGluZVJlY29yZCA9IGZhbHNlIDogdGhpcy5hZGRJbmxpbmVSZWNvcmQgPSB0cnVlO1xuICAgIHRoaXMuaXNQYWdpbmF0aW9uID09PSB1bmRlZmluZWQgfHwgdGhpcy5pc1BhZ2luYXRpb24gPT09IHRydWUgPyB0aGlzLmlzUGFnaW5hdGlvbiA9IHRydWUgOiB0aGlzLmlzUGFnaW5hdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNOb3NJbmRpY2F0b3IgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzTm9zSW5kaWNhdG9yID09PSB0cnVlID8gdGhpcy5pc05vc0luZGljYXRvciA9IHRydWUgOiB0aGlzLmlzTm9zSW5kaWNhdG9yID0gZmFsc2U7XG4gICAgdGhpcy5pc0VkaXRhYmxlID09PSB1bmRlZmluZWQgfHwgdGhpcy5pc0VkaXRhYmxlID09PSBmYWxzZSA/IHRoaXMuaXNFZGl0YWJsZSA9IGZhbHNlIDogdGhpcy5pc0VkaXRhYmxlID0gdHJ1ZVxuXG5cbiAgICB0aGlzLmhlYWRlckxhYmVscyA9IHRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucz8ubWFwKGNvbHVtbiA9PiBjb2x1bW4ubGFiZWwpIDogdGhpcy5oZWFkZXJMYWJlbHM7XG4gICAgdGhpcy5jdXJyZW50SGVhZGVyTGFiZWxzID0gdGhpcy5oZWFkZXJMYWJlbHNcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnM/Lm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSkgOiB0aGlzLmRpc3BsYXllZENvbHVtbnM7XG4gICAgdGhpcy5jdXJyZW50RGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucztcbiAgICBpZiAodGhpcy5zdW1tYXJ5Q29sdW1ucyAmJiB0aGlzLnN1bW1hcnlDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IFsuLi50aGlzLmRpc3BsYXllZENvbHVtbnMsIC4uLnRoaXMuc3VtbWFyeUNvbHVtbnMubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKV07XG4gICAgICB0aGlzLmN1cnJlbnREaXNwbGF5ZWRDb2x1bW5zID0gdGhpcy5kaXNwbGF5ZWRDb2x1bW5zO1xuICAgICAgdGhpcy5oZWFkZXJMYWJlbHMgPSBbLi4udGhpcy5oZWFkZXJMYWJlbHMsIC4uLnRoaXMuc3VtbWFyeUNvbHVtbnMubWFwKGNvbHVtbiA9PiBjb2x1bW4ubGFiZWwpXTtcbiAgICAgIHRoaXMuY3VycmVudEhlYWRlckxhYmVscyA9IHRoaXMuaGVhZGVyTGFiZWxzXG4gICAgfVxuXG4gICAgdGhpcy5maWx0ZXJDb2x1bW5zID10aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmlsdGVyID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5maWx0ZXJDb2x1bW5zO1xuICAgIHRoaXMuc29ydENvbHVtbnMgPXRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5zb3J0ID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5zb3J0Q29sdW1ucztcbiAgICB0aGlzLmh5cGVyTGlua0NvbHVtbnMgPXRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5oeXBlckxpbmsgPT09IHRydWUpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSkgOiB0aGlzLmh5cGVyTGlua0NvbHVtbnM7XG4gICAgdGhpcy5lZGl0Q29sdW1uID0gdGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmVkaXQgPT09IHRydWUpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSkgOiB0aGlzLmVkaXRDb2x1bW47XG4gICAgdGhpcy5kYXRlQ29sdW1ucyA9dGhpcy5mcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnR5cGUgPT09ICdkYXRlJykubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKTogdGhpcy5kYXRlQ29sdW1ucztcbiAgICB0aGlzLnRpbWVDb2x1bW5zID10aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udHlwZSA9PT0gJ3RpbWUnKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy50aW1lQ29sdW1ucztcbiAgICB0aGlzLm9iamVjdENvbHVtbnMgPXRoaXMuZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJyA/IHRoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi50eXBlID09PSAnb2JqZWN0JykubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKSA6IHRoaXMub2JqZWN0Q29sdW1ucztcbiAgICB0aGlzLmZpbGVDb2x1bW5zID10aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udHlwZSA9PT0gJ2ZpbGUnKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5maWxlQ29sdW1ucztcbiAgICB0aGlzLmJvb2xlYW5Db2x1bW5zID10aGlzLmZyb20gIT09ICdmb3JtQnVpbGRlcicgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udHlwZSA9PT0gJ2Jvb2xlYW4nKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpIDogdGhpcy5ib29sZWFuQ29sdW1ucztcblxuICAgIHRoaXMuY3VycmVudEZpbHRlckNvbHVtbnMgPSB0aGlzLmZpbHRlckNvbHVtbnNcbiAgICB0aGlzLmN1cnJlbnRTb3J0Q29sdW1ucyA9IHRoaXMuc29ydENvbHVtbnNcbiAgICB0aGlzLmlubGluZUVsZW1lbnQgPSBPYmplY3QuZnJvbUVudHJpZXModGhpcy5kaXNwbGF5ZWRDb2x1bW5zLm1hcChrZXkgPT4gW2tleSwgXCJcIl0pKTtcblxuICAgIHRoaXMucGFnZVNpemUgPSB0aGlzLnBhZ2luYXRpb24/LnBhZ2VTaXplID8gdGhpcy5wYWdpbmF0aW9uWydwYWdlU2l6ZSddIDogdGhpcy50YWJsZVBhcmFtcz8ucGFnaW5hdGlvbj8ucGFnZVNpemUgfHwxMDtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IHRoaXMucGFnaW5hdGlvbj8ucGFnZUluZGV4ID8gdGhpcy5wYWdpbmF0aW9uWydwYWdlSW5kZXgnXSA6IHRoaXMudGFibGVQYXJhbXM/LnBhZ2luYXRpb24/LnBhZ2VJbmRleCB8fDE7XG4gICAgdGhpcy50b3RhbFJlY29yZHMgPSB0aGlzLnBhZ2luYXRpb24/LnRvdGFsUmVjb3JkcyA/IHRoaXMucGFnaW5hdGlvblsndG90YWxSZWNvcmRzJ10gOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSB0aGlzLnBhZ2luYXRpb24/LnBhZ2VTaXplT3B0aW9ucyA/IHRoaXMucGFnaW5hdGlvblsncGFnZVNpemVPcHRpb25zJ10gOiBbJzUnLCAnMTAnLCAnMjUnLCAnNTAnLCAnMTAwJywgJzIwMCddO1xuICAgIHRoaXMuY29uZmlnUGFnaW5hdGlvbiA9ICEhKHRoaXMucGFnaW5hdGlvbiAmJiBPYmplY3Qua2V5cyh0aGlzLnBhZ2luYXRpb24pLmxlbmd0aCA+IDApO1xuXG4gICAgdGhpcy5kcm9wZG93bkFjdGlvbkJ1dHRvbiA9IHRoaXMuYWN0aW9uQnV0dG9uQXJyYXk/LmJ1dHRvbkFycmF5Py5zbGljZSh0aGlzLmFjdGlvbkJ1dHRvbkFycmF5Py5zaXplKTtcblxuICAgIHRoaXMub3JpZ2luYWxEYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgdGhpcy5zRmlsdGVyRGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5vcmlnaW5hbERhdGE7XG5cbiAgICBpZiAodGhpcy5jb25maWdQYWdpbmF0aW9uID09PSBmYWxzZSAmJiB0aGlzLmRhdGEgJiYgdGhpcy5pc1BhZ2luYXRpb24pIHtcbiAgICAgIGNvbnN0IHBhZ2VJbmRleCA9IE51bWJlcih0aGlzLnBhZ2VJbmRleCkgfHwgMDtcbiAgICAgIGNvbnN0IHBhZ2VTaXplID0gTnVtYmVyKHRoaXMucGFnZVNpemUpIHx8IDEwO1xuICAgICAgY29uc3Qgc3RhcnQgPSAocGFnZUluZGV4IC0gMSkgKiBwYWdlU2l6ZTtcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgcGFnZVNpemU7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YT8uc2xpY2Uoc3RhcnQsIGVuZCkgfHwgW107XG4gICAgfSBlbHNlIGlmICghdGhpcy5pc1BhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhXG4gICAgfVxuICAgIGlmKHRoaXMuY3VycmVudFZpZXdGaWx0ZXIgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmN1cnJlbnRWaWV3RmlsdGVyID09PSBudWxsKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWaWV3RmlsdGVyID0gdGhpcy5saXN0Vmlld3MgJiYgdGhpcy5saXN0Vmlld3MubGVuZ3RoID4gMCA/IHRoaXMubGlzdFZpZXdzWzBdIDogbnVsbDtcbiAgICB9XG4gICAgaWYodGhpcy5jdXJyZW50Vmlld0ZpbHRlciAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY3VycmVudFZpZXdGaWx0ZXIgIT09IG51bGwpe1xuICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSB0aGlzLmN1cnJlbnRWaWV3RmlsdGVyLmZpbHRlck5hbWU7XG4gICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5jdXJyZW50Vmlld0ZpbHRlcj8uY29sdW1ucyB8fCBbXTtcbiAgICAgIGlmKGNvbHVtbnMubGVuZ3RoID4gMCl7XG4gICAgICAgIHRoaXMuY3VycmVudERpc3BsYXllZENvbHVtbnMgPSBjb2x1bW5zLm1hcChjb2wgPT4gY29sLm5hbWUpO1xuICAgICAgICB0aGlzLmN1cnJlbnRIZWFkZXJMYWJlbHMgPSB0aGlzLmN1cnJlbnREaXNwbGF5ZWRDb2x1bW5zLm1hcChuYW1lID0+IHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucy5pbmRleE9mKG5hbWUpO1xuICAgICAgICAgIHJldHVybiBpbmRleCAhPT0gLTEgPyB0aGlzLmhlYWRlckxhYmVsc1tpbmRleF0gOiBuYW1lOyAvLyBmYWxsYmFjayB0byBuYW1lIGlmIG5vIGxhYmVsIGZvdW5kXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJDb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5maWx0ZXJhYmxlID09PSB0cnVlICkubWFwKGNvbCA9PiBjb2wubmFtZSk7XG4gICAgICAgIHRoaXMuY3VycmVudFNvcnRDb2x1bW5zID0gY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5zb3J0YWJsZSA9PT0gdHJ1ZSkubWFwKGNvbCA9PiBjb2wubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXJDb2x1bW5zPy5sZW5ndGggPiAwICYmIHRoaXMuY29uZmlnUGFnaW5hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheSA9IHt9O1xuICAgICAgY29uc3QgZmlsdE9ianM6IGFueSA9IHt9O1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyQ29sdW1ucy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5W2VsZW1lbnRdID0gbnVsbDtcbiAgICAgICAgZmlsdE9ianNbZWxlbWVudF0gPSBbXTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kYXRhLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudEZpbHRlckNvbHVtbnMuZm9yRWFjaCgoa2V5OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoZWxlbWVudCwga2V5KTsgIC8vIDwtIGdldCBuZXN0ZWQgdmFsdWVcbiAgICBcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZmlsdE9ianNba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheVtrZXldID0gbmV3IFNldChmaWx0T2Jqc1trZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXkgPSB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheSA9IHRoaXMubXVsdGlwbGVGaWx0ZXI7XG4gICAgfVxuICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBmaWx0ZXJlZCBhcnJheSB0aGF0IGV4Y2x1ZGVzIGFueSBjb2x1bW4gd2l0aCAnWydcbiAgICBjb25zdCB0ZW1wRmlsdGVyQ29sdW1ucyA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucy5maWx0ZXIoKGtleTogc3RyaW5nKSA9PiAha2V5LmluY2x1ZGVzKCdbJykpO1xuICAgIGlmICh0ZW1wRmlsdGVyQ29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlsdE9ianM6IGFueSA9IHt9O1xuICAgICAgLy8gSW5pdGlhbGl6ZSBlbXB0eSBTZXQgZm9yIGVhY2ggZmlsdGVyZWQgY29sdW1uXG4gICAgICB0ZW1wRmlsdGVyQ29sdW1ucy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBmaWx0T2Jqc1trZXldID0gbmV3IFNldCgpO1xuICAgICAgfSk7XG4gICAgICAvLyBGaWxsIHRoZSBzZXRzIHdpdGggdW5pcXVlIHZhbHVlc1xuICAgICAgdGhpcy50YWJsZUZpbHRlckRhdGE/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICB0ZW1wRmlsdGVyQ29sdW1ucy5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZShlbGVtZW50LCBrZXkpO1xuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmaWx0T2Jqc1trZXldLmFkZCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIFxuICAgICAgLy8gQ29udmVydCBzZXRzIHRvIGFycmF5cyBhbmQgZm9ybWF0IGFzIHJlcXVlc3RlZFxuICAgICAgdGhpcy50YWJsZUZpbHRlckFycmF5ID0gdGVtcEZpbHRlckNvbHVtbnMubWFwKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4geyBba2V5XTogQXJyYXkuZnJvbShmaWx0T2Jqc1trZXldKSB9O1xuICAgICAgfSk7XG4gICAgfSAgICAgICBcbiAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxhbnk+KHRydWUsIFtdKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xuICAgIH0sIDApXG4gICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy50b3RhbFJlY29yZHMgfHwgdGhpcy5kYXRhPy5sZW5ndGhcbiAgICB0aGlzLmZpbHRlclRhYmxlTm9zID0gdGhpcy50b3RhbFJlY29yZHMgfHwgdGhpcy5kYXRhPy5sZW5ndGhcbiAgICBjb25zdCBOeHREYXRhVGFibGUgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdOeHREYXRhVGFibGUnKSk7XG4gICAgdGhpcy5jdXJyZW50U29ydENvbHVtbiA9IE54dERhdGFUYWJsZT8uY3VycmVudFNvcnRDb2x1bW47XG4gICAgdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9IE54dERhdGFUYWJsZT8uY3VycmVudFNvcnREaXJlY3Rpb247XG4gICAgaWYgKE54dERhdGFUYWJsZT8uYWRkUmVjb3JkID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnBhZ2VTaXplID0gTnh0RGF0YVRhYmxlPy5wYWdlU2l6ZVxuICAgICAgdGhpcy5wYWdlSW5kZXggPSBOeHREYXRhVGFibGU/LnBhZ2VJbmRleFxuICAgICAgdmFyIG9iajogYW55ID0ge307XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5pbmxpbmVFbGVtZW50KTtcbiAgICAgIGtleXMuZm9yRWFjaCgoZWxlbWVudEtleTogYW55KSA9PiB7XG4gICAgICAgIG9ialtlbGVtZW50S2V5XSA9ICcnO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmRhdGEucHVzaChvYmopO1xuICAgICAgY29uc3QgZGF0YTogYW55ID0gdGhpcy5kYXRhO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBkYXRhO1xuXG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QodGhpcy5kYXRhW3RoaXMuZGF0YS5sZW5ndGggLSAxXSk7XG4gICAgICB0aGlzLmRhdGFbdGhpcy5kYXRhLmxlbmd0aCAtIDFdLmVkaXRSb3cgPSB0cnVlO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ054dERhdGFUYWJsZScsIEpTT04uc3RyaW5naWZ5KHsgYWRkUmVjb3JkOiBmYWxzZSwgcGFnZVNpemU6IDEwLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LCBjdXJyZW50U29ydENvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgY3VycmVudFNvcnREaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gfSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGlja3lDb2x1bW4gPT09IHRydWUgJiYgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zKSB7XG4gICAgICB0aGlzLnN0aWNreUNvbmRpdGlvbiA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucz8ubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0aWNreUNvbmRpdGlvbiA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucz8ubGVuZ3RoICsgMTtcbiAgICB9XG4gICAgaWYgKHRoaXMud2l0aENoZWNrQm94ICYmIHRoaXMuYWN0aW9uQnV0dG9uKSB7XG4gICAgICB0aGlzLnJlbmRlckNvbHVtbnMgPSAnYm90aCc7XG4gICAgfSBlbHNlIGlmICh0aGlzLndpdGhDaGVja0JveCkge1xuICAgICAgdGhpcy5yZW5kZXJDb2x1bW5zID0gJ3NlbGVjdCc7XG4gICAgfSBlbHNlIGlmICh0aGlzLmFjdGlvbkJ1dHRvbikge1xuICAgICAgdGhpcy5yZW5kZXJDb2x1bW5zID0gJ2FjdGlvbic7XG4gICAgfVxuXG4gICAgLy8gU0tTMTlNQVIyNSBhZGQgZmlyc3QgbGluZSBmb3IgZm9ybWJ1aWxkZXIgdGFibGVcbiAgICBpZiAodGhpcy5pc0VkaXRhYmxlKSB7IHRoaXMuYWRkVGFibGVSZWNvcmQodGhpcy5pbmxpbmVFbGVtZW50KSB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRhYmxlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHRhYmxlQm9keSA9IHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudGFibGUtYm9keScpO1xuICAgICAgICBpZiAodGFibGVCb2R5ICYmIHRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICAgICAgdGhpcy5pc1NoYWRvd0hpZGRlbiA9ICEodGFibGVCb2R5LnNjcm9sbEhlaWdodCA8IDQ1MClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDE1MDApOyAvLyBXYWl0cyAxMDBtcyBmb3IgcmVuZGVyaW5nXG4gICAgLy8gU0tTMTdBUFIyNSB0YWJsZSBwYXJlbXMgZGF0YSB1cGRhdGVcbiAgICBpZiAodGhpcy5zZWFyY2hDb25maWdzPy5zZWFyY2hGaWx0ZXJWYWwpIHtcbiAgICAgIHRoaXMuc2VhcmNoQm94VmFsdWUgPSB0aGlzLnNlYXJjaENvbmZpZ3M/LnNlYXJjaEZpbHRlclZhbDsgLy8gU2hvdyB2YWx1ZSBpbiB0aGUgc2VhcmNoIGJveFxuICAgICAgdGhpcy5wcmV2U2VhcmNoID0gdGhpcy5zZWFyY2hDb25maWdzPy5zZWFyY2hGaWx0ZXJWYWw7XG4gICAgfSBlbHNlIGlmKHRoaXMudGFibGVQYXJhbXM/LnRhYmxlU2VhcmNoKXtcbiAgICAgIHRoaXMuc2VhcmNoQm94VmFsdWUgPSB0aGlzLnRhYmxlUGFyYW1zPy50YWJsZVNlYXJjaDtcbiAgICB9XG4gICAgdGhpcy5zZWFyY2hDb25maWdzICYmIHRoaXMuc2VhcmNoQm94VmFsdWUgPyB0aGlzLmVtcHR5U2VhcmNoKHRoaXMuc2VhcmNoQm94VmFsdWUpIDogJydcbiAgICB0aGlzLmZpbHRlckRhdGFBcnJheSA9IHRoaXMudGFibGVQYXJhbXM/LnNlYXJjaEZpbHRlckRhdGEgPyB0aGlzLnRhYmxlUGFyYW1zPy5zZWFyY2hGaWx0ZXJEYXRhIDoge307XG4gICAgdGhpcy5zb3J0RGF0YSh0aGlzLnRhYmxlUGFyYW1zPy5zb3J0Py5jb2x1bW4sIHRoaXMudGFibGVQYXJhbXM/LnNvcnQ/LmRpcmVjdGlvbix0cnVlKVxuICB9XG5cbiAgLy8gU0tTMjBNQVIyNSBzdW1tYXJ5IGNvbHVtbnMgY2FsY1xuICBjb21wdXRlU3VtbWFyeUNvbHVtbnMoKSB7XG4gICAgaWYgKHRoaXMuc3VtbWFyeUNvbHVtbnMgJiYgdGhpcy5zdW1tYXJ5Q29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEubWFwKHJvdyA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1JvdyA9IHsgLi4ucm93IH07XG4gICAgICAgIHRoaXMuc3VtbWFyeUNvbHVtbnMuZm9yRWFjaChzdW1tYXJ5Q29sID0+IHtcbiAgICAgICAgICBpZiAoc3VtbWFyeUNvbC50eXBlID09PSAnY2FsY3VsYXRpb24nICYmIHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnc3VtJyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzKSB7XG4gICAgICAgICAgICBjb25zdCBzdW0gPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnJlZHVjZSgoYWNjLCBvcGVyYW5kKSA9PiBhY2MgKyAoTnVtYmVyKG5ld1Jvd1tvcGVyYW5kXSkgfHwgMCksIDApO1xuICAgICAgICAgICAgbmV3Um93W3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHN1bTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN1bW1hcnlDb2wudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJyAmJiBzdW1tYXJ5Q29sLm9wZXJhdGlvbiA9PT0gJ3N1YnRyYWN0JyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzKSB7XG4gICAgICAgICAgICBjb25zdCBbZmlyc3RPcGVyYW5kLCAuLi5yZXN0T3BlcmFuZHNdID0gc3VtbWFyeUNvbC5vcGVyYW5kcztcbiAgICAgICAgICAgIGxldCBzdW0gPSBOdW1iZXIobmV3Um93W2ZpcnN0T3BlcmFuZF0pIHx8IDA7IC8vIFN0YXJ0IHdpdGggdGhlIGZpcnN0IG9wZXJhbmRcbiAgICAgICAgICAgIHN1bSA9IHJlc3RPcGVyYW5kcy5yZWR1Y2UoKGFjYywgb3BlcmFuZCkgPT4gYWNjIC0gKE51bWJlcihuZXdSb3dbb3BlcmFuZF0pIHx8IDApLCBzdW0pO1xuICAgICAgICAgICAgbmV3Um93W3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHN1bTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN1bW1hcnlDb2wudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJyAmJiBzdW1tYXJ5Q29sLm9wZXJhdGlvbiA9PT0gJ211bHRpcGx5JyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0ID0gc3VtbWFyeUNvbC5vcGVyYW5kcy5yZWR1Y2UoKGFjYywgb3BlcmFuZCkgPT4gYWNjICogKE51bWJlcihuZXdSb3dbb3BlcmFuZF0pIHx8IDApLCAxKTsgLy8gU3RhcnQgd2l0aCAxXG4gICAgICAgICAgICBuZXdSb3dbc3VtbWFyeUNvbC5maWVsZE5hbWVdID0gcHJvZHVjdDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3Um93O1xuICAgICAgfSk7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YTsgLy8gVXBkYXRlIGRhdGFTb3VyY2VcbiAgICAgIGlmICghdGhpcy50b3RhbFJlY29yZHMgJiYgdGhpcy5kYXRhICYmIHRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IHBhZ2VJbmRleCA9IE51bWJlcih0aGlzLnBhZ2VJbmRleCkgfHwgMDtcbiAgICAgICAgY29uc3QgcGFnZVNpemUgPSBOdW1iZXIodGhpcy5wYWdlU2l6ZSkgfHwgMTA7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gKHBhZ2VJbmRleCAtIDEpICogcGFnZVNpemU7XG4gICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgcGFnZVNpemU7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhPy5zbGljZShzdGFydCwgZW5kKSB8fCBbXTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhXG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIFNLUzIwTUFSMjUgQ29tcHV0ZSB2YWx1ZXMgZm9yIHN1bW1hcnkgcm93c1xuICBjb21wdXRlU3VtbWFyeVZhbHVlcygpIHtcbiAgICB0aGlzLnN1bW1hcnlSb3dzPy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICBpZiAocm93LnR5cGUgPT09ICdjYWxjdWxhdGlvbicpIHtcbiAgICAgICAgaWYgKHJvdy5vcGVyYXRpb24gPT09ICdzdW0nICYmIHJvdy5jb2x1bW4pIHtcbiAgICAgICAgICAvLyBDb3JyZWN0IHN1bSBvcGVyYXRpb25cbiAgICAgICAgICB0aGlzLnN1bW1hcnlWYWx1ZXNbcm93LmZpZWxkTmFtZV0gPSB0aGlzLmRhdGEucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywgZGF0YVJvdykgPT4gYWNjICsgKE51bWJlcihkYXRhUm93W3Jvdy5jb2x1bW5dKSB8fCAwKSxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHJvdy5vcGVyYXRpb24gPT09ICdzdWJ0cmFjdCcgJiYgcm93LmNvbHVtbikge1xuICAgICAgICAgIC8vIFN1YnRyYWN0IHNob3VsZCBzdGFydCB3aXRoIHRoZSBmaXJzdCB2YWx1ZVxuICAgICAgICAgIHRoaXMuc3VtbWFyeVZhbHVlc1tyb3cuZmllbGROYW1lXSA9IHRoaXMuZGF0YS5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCBkYXRhUm93LCBpbmRleCkgPT4gaW5kZXggPT09IDAgPyBOdW1iZXIoZGF0YVJvd1tyb3cuY29sdW1uXSkgfHwgMCA6IGFjYyAtIChOdW1iZXIoZGF0YVJvd1tyb3cuY29sdW1uXSkgfHwgMCksXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChyb3cub3BlcmF0aW9uID09PSAnbXVsdGlwbHknICYmIHJvdy5jb2x1bW4pIHtcbiAgICAgICAgICAvLyBNdWx0aXBseSBzaG91bGQgc3RhcnQgd2l0aCAxXG4gICAgICAgICAgdGhpcy5zdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdID0gdGhpcy5kYXRhLnJlZHVjZShcbiAgICAgICAgICAgIChhY2MsIGRhdGFSb3cpID0+IGFjYyAqIChOdW1iZXIoZGF0YVJvd1tyb3cuY29sdW1uXSkgfHwgMCksIC8vIFVzZSAxIGluc3RlYWQgb2YgMFxuICAgICAgICAgICAgMVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocm93Lm9wZXJhdGlvbiA9PT0gJ3N1YnRyYWN0JyAmJiByb3cub3BlcmFuZHMpIHtcbiAgICAgICAgICAvLyBTdWJ0cmFjdCBiYXNlZCBvbiBvcGVyYW5kc1xuICAgICAgICAgIGNvbnN0IFtvcDEsIG9wMl0gPSByb3cub3BlcmFuZHM7XG4gICAgICAgICAgdGhpcy5zdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdID0gKHRoaXMuc3VtbWFyeVZhbHVlc1tvcDFdIHx8IDApIC0gKHRoaXMuc3VtbWFyeVZhbHVlc1tvcDJdIHx8IDApO1xuICAgICAgICB9IGVsc2UgaWYgKHJvdy5vcGVyYXRpb24gPT09ICdzdW0nICYmIHJvdy5vcGVyYW5kcykge1xuICAgICAgICAgIC8vIFN1bSBiYXNlZCBvbiBvcGVyYW5kc1xuICAgICAgICAgIGNvbnN0IFtvcDEsIG9wMl0gPSByb3cub3BlcmFuZHM7XG4gICAgICAgICAgdGhpcy5zdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdID0gKHRoaXMuc3VtbWFyeVZhbHVlc1tvcDFdIHx8IDApICsgKHRoaXMuc3VtbWFyeVZhbHVlc1tvcDJdIHx8IDApO1xuICAgICAgICB9IGVsc2UgaWYgKHJvdy5vcGVyYXRpb24gPT09ICdtdWx0aXBseScgJiYgcm93Lm9wZXJhbmRzKSB7XG4gICAgICAgICAgLy8gTXVsdGlwbHkgYmFzZWQgb24gb3BlcmFuZHNcbiAgICAgICAgICBjb25zdCBbb3AxLCBvcDJdID0gcm93Lm9wZXJhbmRzO1xuICAgICAgICAgIHRoaXMuc3VtbWFyeVZhbHVlc1tyb3cuZmllbGROYW1lXSA9ICh0aGlzLnN1bW1hcnlWYWx1ZXNbb3AxXSB8fCAwKSAqICh0aGlzLnN1bW1hcnlWYWx1ZXNbb3AyXSB8fCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gU0tTMjBNQVIyNSBIYW5kbGUgbWFudWFsIGlucHV0IGNoYW5nZXMgaW4gc3VtbWFyeSByb3dzIFxuICBvblN1bW1hcnlJbnB1dENoYW5nZSgpIHtcbiAgICB0aGlzLmNvbXB1dGVTdW1tYXJ5VmFsdWVzKCk7XG4gIH1cbiAgLy8gU0tTMTVGRUIyNSBDdXN0b20gc29ydCBmdW5jdGlvblxuICBzb3J0RGF0YShjb2x1bW46IHN0cmluZywgc29ydGluZ1N0YXRlPzogYW55IHwgdW5kZWZpbmVkLCBjdXJyZW50U3RhdGU/OmFueSB8dW5kZWZpbmVkLCBmcm9tPzphbnkpIHtcbiAgICAvLyBEZWZpbmUgc29ydGluZyBzdGF0ZXNcbiAgICBjb25zdCBzb3J0aW5nU3RhdGVzID0gWydhc2MnLCAnZGVzYycsICdub25lJ107XG4gICAgaWYgKHRoaXMuY29uZmlnUGFnaW5hdGlvbiA9PT0gZmFsc2UgfHwgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSB0aGlzLnRvdGFsUmVjb3Jkcykge1xuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjdXJyZW50IHNvcnRpbmcgc3RhdGVcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTb3J0Q29sdW1uID09PSBjb2x1bW4gJiYgIXNvcnRpbmdTdGF0ZSkge1xuICAgICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IHNvcnRpbmcgc3RhdGVcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gc29ydGluZ1N0YXRlcy5pbmRleE9mKHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID0gc29ydGluZ1N0YXRlc1soY3VycmVudEluZGV4ICsgMSkgJSBzb3J0aW5nU3RhdGVzLmxlbmd0aF0gYXMgXCJhc2NcIiB8IFwiZGVzY1wiIHwgXCJub25lXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiBhIG5ldyBjb2x1bW4gaXMgc2VsZWN0ZWQsIHN0YXJ0IHdpdGggYXNjZW5kaW5nIHNvcnRcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydENvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9IHNvcnRpbmdTdGF0ZSB8fCAnYXNjJztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZpbHRlckJveERhdGEgJiYgdGhpcy5maWx0ZXJCb3hEYXRhLmxlbmd0aCA+IDAgPyB0aGlzLmZpbHRlckJveERhdGEgOiB0aGlzLmRhdGFTb3VyY2UuZGF0YTtcbiAgICAgIC8vIE9ubHkgc29ydCBpZiB0aGUgZGlyZWN0aW9uIGlzICdhc2MnIG9yICdkZXNjJ1xuICAgICAgaWYgKHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnIHx8IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdkZXNjJykge1xuICAgICAgICBkYXRhLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBsZXQgdmFsdWVBID0gdGhpcy5nZXRWYWx1ZShhLCBjb2x1bW4pO1xuICAgICAgICAgIGxldCB2YWx1ZUIgPSB0aGlzLmdldFZhbHVlKGIsIGNvbHVtbik7XG4gICAgICAgICAgLy8gSGFuZGxlIHVuZGVmaW5lZCBvciBudWxsIHZhbHVlc1xuICAgICAgICAgIGlmICh2YWx1ZUEgPT0gbnVsbCAmJiB2YWx1ZUIgPT0gbnVsbCkgcmV0dXJuIDA7IC8vIEJvdGggYXJlIG51bGwvdW5kZWZpbmVkXG4gICAgICAgICAgaWYgKHZhbHVlQSA9PSBudWxsKSByZXR1cm4gdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAxIDogLTE7IC8vIHZhbHVlQSBpcyBudWxsXG4gICAgICAgICAgaWYgKHZhbHVlQiA9PSBudWxsKSByZXR1cm4gdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAtMSA6IDE7IC8vIHZhbHVlQiBpcyBudWxsXG4gICAgICAgICAgLy8gSGFuZGxlIGRhdGUgc29ydGluZ1xuICAgICAgICAgIGlmICh0aGlzLmlzRGF0ZUNvbHVtbihjb2x1bW4pKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlQSA9IG5ldyBEYXRlKHZhbHVlQSk7XG4gICAgICAgICAgICBjb25zdCBkYXRlQiA9IG5ldyBEYXRlKHZhbHVlQik7XG4gICAgICAgICAgICB2YWx1ZUEgPSBkYXRlQS5nZXRUaW1lKCk7XG4gICAgICAgICAgICB2YWx1ZUIgPSBkYXRlQi5nZXRUaW1lKCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWVBID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmFsdWVCID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgLy8gSGFuZGxlIG51bWJlciBzb3J0aW5nXG4gICAgICAgICAgICB2YWx1ZUEgPSBOdW1iZXIodmFsdWVBKTtcbiAgICAgICAgICAgIHZhbHVlQiA9IE51bWJlcih2YWx1ZUIpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlQSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlQiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBzdHJpbmcgY29tcGFyaXNvblxuICAgICAgICAgICAgdmFsdWVBID0gdmFsdWVBLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB2YWx1ZUIgPSB2YWx1ZUIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQ29tcGFyZSB2YWx1ZXNcbiAgICAgICAgICBpZiAodmFsdWVBIDwgdmFsdWVCKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAtMSA6IDE7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZUEgPiB2YWx1ZUIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IDEgOiAtMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdmFsdWVzIGFyZSB0aGUgc2FtZSwgcmV0dXJuIDAgdG8gbWFpbnRhaW4gb3JpZ2luYWwgb3JkZXJcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gWy4uLmRhdGFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcGFnZUluZGV4ID0gTnVtYmVyKHRoaXMucGFnZUluZGV4KSB8fCAwO1xuICAgICAgICBjb25zdCBwYWdlU2l6ZSA9IE51bWJlcih0aGlzLnBhZ2VTaXplKSB8fCAxMDtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSAocGFnZUluZGV4IC0gMSkgKiBwYWdlU2l6ZTtcbiAgICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBwYWdlU2l6ZTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmZpbHRlckJveERhdGEgPyB0aGlzLmZpbHRlckJveERhdGE/LnNsaWNlKHN0YXJ0LCBlbmQpIHx8IFtdIDogdGhpcy5kYXRhPy5zbGljZShzdGFydCwgZW5kKSB8fCBbXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjdXJyZW50IHNvcnRpbmcgc3RhdGVcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTb3J0Q29sdW1uID09PSBjb2x1bW4pIHtcbiAgICAgICAgLy8gTW92ZSB0byB0aGUgbmV4dCBzb3J0aW5nIHN0YXRlXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHNvcnRpbmdTdGF0ZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9IHNvcnRpbmdTdGF0ZXNbKGN1cnJlbnRJbmRleCArIDEpICUgc29ydGluZ1N0YXRlcy5sZW5ndGhdIGFzIFwiYXNjXCIgfCBcImRlc2NcIiB8IFwibm9uZVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgYSBuZXcgY29sdW1uIGlzIHNlbGVjdGVkLCBzdGFydCB3aXRoIGFzY2VuZGluZyBzb3J0XG4gICAgICAgIHRoaXMuY3VycmVudFNvcnRDb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPSAnYXNjJztcbiAgICAgIH1cbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdOeHREYXRhVGFibGUnLCBKU09OLnN0cmluZ2lmeSh7IGFkZFJlY29yZDogZmFsc2UsIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LCBjdXJyZW50U29ydENvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgY3VycmVudFNvcnREaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gfSkpO1xuICAgICAgLy8gT25seSBzb3J0IGlmIHRoZSBkaXJlY3Rpb24gaXMgJ2FzYycgb3IgJ2Rlc2MnXG4gICAgICBpZihjdXJyZW50U3RhdGUgIT09IHRydWUgJiYgZnJvbSAhPT0gJ29uQ2hhbmdlJyl0aGlzLk54dFRhYmxlRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCB9LCB0YWJsZVNlYXJjaDogeyBmaWVsZHM6IHRoaXMuZGlzcGxheWVkQ29sdW1ucywgdmFsdWU6IHRoaXMuc2VhcmNoQm94VmFsdWUgfSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24sbGlzdFZpZXc6IHRoaXMuc2VsZWN0ZWRWaWV3fSB9KVxuICAgIH1cbiAgICBpZihmcm9tICE9PSAnb25DaGFuZ2UnKXRoaXMuTnh0VGFibGVQYXJhbXNFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4IH0sdGFibGVTZWFyY2g6IHRoaXMuc2VhcmNoQm94VmFsdWUsIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uICxsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9fSlcbiAgICBpZihmcm9tID09PSAnb25DaGFuZ2UnKSB0aGlzLnBhZ2VQYXJhbXModGhpcy50YWJsZVBhcmFtcz8ucGFnaW5hdGlvbiwnb25DaGFuZ2UnKVxuICB9XG5cbiAgb25TY3JvbGwodGFibGVDb250YWluZXI6IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy5pc1Njcm9sbGVkID0gdGFibGVDb250YWluZXIuc2Nyb2xsVG9wID4gMDtcbiAgICBjb25zdCB0YWJsZUJvZHlIZWlnaHQgPSB0YWJsZUNvbnRhaW5lci5zY3JvbGxIZWlnaHQ7XG4gICAgY29uc3QgaXNBdEJvdHRvbSA9IHRhYmxlQm9keUhlaWdodCAtIHRhYmxlQ29udGFpbmVyLnNjcm9sbFRvcCA8PSB0YWJsZUNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyAxO1xuICAgIC8vU0tTMTVGRUIyNSBFbnN1cmUgc2hhZG93IGlzIGhpZGRlbiBvbmx5IGlmIHRhYmxlIGJvZHkgaGVpZ2h0IGlzIGdyZWF0ZXIgdGhhbiA0MDBweFxuICAgIGlmICh0aGlzLmlzUGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5pc1NoYWRvd0hpZGRlbiA9ICEoaXNBdEJvdHRvbSB8fCB0YWJsZUJvZHlIZWlnaHQgPCA0NTApO1xuICAgIH1cbiAgfVxuXG4gIC8vU0tTMTVGRUIyNSBsb3NpbmcgdGhlIGZpbHRlciBjb21wb25lbnQgd2hlbiB0aGUgbW91c2UgaXMgY2xpY2tlZCBvdXRzaWRlIHRhYmxlXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSkgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNlYXJjaEZpbHRlciA9IGZhbHNlO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyBwcmV2ZW50cyBhbnkgb3RoZXIgZGVmYXVsdCBhY3Rpb25cbiAgfVxuXG4gIC8vU0tTMTVGRUIyNSBmaWx0ZXIgZGF0YSB0aGF0IHRvIGJlIGRpc3BsYXllZCBpbiBoZWFkZXIgZmlsdGVyIGljb24gaXMgcGFzc2VkIGluICdmaWx0ZXJBcnJheScgYXJyYXlcbiAgZmlsdGVyKGRhdGFzOiBhbnkpIHtcbiAgICB0aGlzLmZpbHRlckFycmF5ID0gW107XG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlciA9IGRhdGFzO1xuICAgIHRoaXMuZmlsdGVyQXJyYXkgPSB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXk/LltkYXRhc107XG4gICAgdGhpcy5zZWFyY2hGaWx0ZXIgPSAhdGhpcy5zZWFyY2hGaWx0ZXI7XG4gICAgdGhpcy5pc1Jlc2l6ZWQgPSB0aGlzLmZpbHRlckRhdGFBcnJheVt0aGlzLnNlbGVjdGVkRmlsdGVyXT8ubGVuZ3RoID4gMFxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSAgZW1pdHRpbmcgcGFnciBzaXplIGFuZCBpbmRleCB0byBwYXJlbnQgb24gcGFnaW5hdGluZ1xuICBwYWdlUGFyYW1zKGV2ZW50OiBhbnksIGZyb20/OmFueSkge1xuICAgIHRoaXMucGFnZUluZGV4ID0gZXZlbnQ/LnBhZ2VJbmRleCB8fCB0aGlzLnBhZ2VJbmRleFxuICAgIHRoaXMucGFnZVNpemUgPSBldmVudD8ucGFnZVNpemUgfHwgdGhpcy5wYWdlU2l6ZVxuICAgIHRoaXMuZmlsdGVyVGFibGVOb3MgPSB0aGlzLmZpbHRlckJveERhdGE/Lmxlbmd0aFxuICAgIGlmICh0aGlzLmNvbmZpZ1BhZ2luYXRpb24gPT09IGZhbHNlIHx8IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA9PT0gdGhpcy50b3RhbFJlY29yZHMpIHtcbiAgICAgIGlmKGZyb20gIT09ICdvbkNoYW5nZScpdGhpcy5hcHBseUZpbHRlcih0aGlzLnNlYXJjaEJveFZhbHVlICwgJ3BhZ2VQYXJhbXMnKVxuICAgICAgY29uc3Qgc3RhcnQgPSAoTnVtYmVyKHRoaXMucGFnZUluZGV4KSAtIDEpICogTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBOdW1iZXIodGhpcy5wYWdlU2l6ZSk7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZmlsdGVyQm94RGF0YT8uc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKGZyb20gIT09ICdvbkNoYW5nZScpdGhpcy5OeHRUYWJsZUVtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXggfSwgdGFibGVTZWFyY2g6IHsgZmllbGRzOiB0aGlzLmRpc3BsYXllZENvbHVtbnMsIHZhbHVlOiB0aGlzLnNlYXJjaEJveFZhbHVlIH0sIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uICxsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9IH0pXG4gICAgfVxuICAgIGlmKGZyb20gIT09ICdvbkNoYW5nZScpdGhpcy5OeHRUYWJsZVBhcmFtc0VtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXggfSx0YWJsZVNlYXJjaDogdGhpcy5zZWFyY2hCb3hWYWx1ZSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gLGxpc3RWaWV3OiB0aGlzLnNlbGVjdGVkVmlld319KVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBhcHBseSBzZWFyY2ggYmFyIGZpbHRlciB1c2luZyBtYXRcbiAgYXBwbHlGaWx0ZXIoZXZlbnQ6IGFueSwgZnJvbT86IGFueSkge1xuICAgIGxldCBmaWx0ZXJWYWx1ZSA9IGV2ZW50O1xuICAgIGZpbHRlclZhbHVlID8gZmlsdGVyVmFsdWUgPSBmaWx0ZXJWYWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSA6IGZpbHRlclZhbHVlID0gJyc7XG4gICAgdGhpcy5zZWFyY2hCb3hWYWx1ZSA9IGZpbHRlclZhbHVlXG4gICAgaWYgKCFmaWx0ZXJWYWx1ZSkge1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLm9yaWdpbmFsRGF0YVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMub3JpZ2luYWxEYXRhLmZpbHRlcihpdGVtID0+XG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucy5zb21lKGNvbHVtbiA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW2NvbHVtbl0/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICAgICAgICByZXR1cm4gdmFsdWUuaW5jbHVkZXMoZmlsdGVyVmFsdWUpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYoZnJvbSAhPT0gJ3BhZ2VQYXJhbXMnICYmIGZyb20gIT09ICdvbkNoYW5nZScpIHRoaXMucGFnZUluZGV4ID0gMVxuICAgIHRoaXMuc0ZpbHRlckRhdGEgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YVxuICAgIHRoaXMuZmlsdGVyVGFibGVOb3MgPSB0aGlzLnNGaWx0ZXJEYXRhPy5sZW5ndGhcbiAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLmRhdGEubGVuZ3RoXG4gICAgY29uc3Qgc3RhcnQgPSAoTnVtYmVyKHRoaXMucGFnZUluZGV4KSAtIDEpICogTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhU291cmNlLmRhdGE/LnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIHRoaXMuZmlsdGVyUmV0YWluKGZyb20gPT09ICdvbkNoYW5nZScgPyB0aGlzLnRhYmxlUGFyYW1zPy5zZWFyY2hGaWx0ZXJEYXRhIHx8IHRoaXMuZmlsdGVyRGF0YUFycmF5IDogdGhpcy5maWx0ZXJEYXRhQXJyYXksZnJvbSApXG4gIH1cblxuICAvKiogU0tTMTVGRUIyNSBXaGV0aGVyIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgZWxlbWVudHMgbWF0Y2hlcyB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3MuICovXG4gIGlzQWxsU2VsZWN0ZWQoKSB7XG4gICAgLy8gY2hlY2sgaWYgYWxsIHJvd3MgYXJlIHNlbGVjdGVkXG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7XG4gICAgY29uc3QgbnVtUm93cyA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aDtcbiAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XG4gIH1cblxuICAvKiogU0tTMTVGRUIyNSBTZWxlY3RzIGFsbCByb3dzIGlmIHRoZXkgYXJlIG5vdCBhbGwgc2VsZWN0ZWQ7IG90aGVyd2lzZSBjbGVhciBzZWxlY3Rpb24uICovXG4gIG1hc3RlclRvZ2dsZSgpIHtcbiAgICAvLyBpZiB0aGVyZSBpcyBhIHNlbGVjdGlvbiB0aGVuIGNsZWFyIHRoYXQgc2VsZWN0aW9uXG4gICAgLy8gZW1pdCB0aGUgc2VsZWN0ZWQgdmFsdWUgb25seSB0byBwYXJlbnRcbiAgICBpZiAodGhpcy5pc1NvbWVTZWxlY3RlZCgpKSB7XG4gICAgICAvLyAgIHRvIHJlbW92ZSB0aGUgZWRpdFJvdywgaWYgdGhlIGNoZWNrYm94IGlzIHVuY2hlY2tlZFxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50Py5lZGl0Um93KSBlbGVtZW50LmVkaXRSb3cgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuZW1pdCh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIG5vIGl0ZW1zIGFyZSBzZWxlY3RlZCwgZWl0aGVyIHNlbGVjdCBhbGwgaXRlbXMgb3IgY2xlYXIgdGhlIHNlbGVjdGlvblxuICAgICAgLy8gZW1pdCB0aGUgc2VsZWN0ZWQgdmFsdWVzIHRvIHBhcmVudFxuICAgICAgdGhpcy5pc0FsbFNlbGVjdGVkKCkgPyB0aGlzLnNlbGVjdGlvbi5jbGVhcigpIDogdGhpcy5kYXRhU291cmNlLmRhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHRoaXMuc2VsZWN0aW9uLnNlbGVjdChyb3cpKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuZW1pdCh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gICAgfVxuICB9XG5cblxuXG4gIC8vIFNLUzE1RkVCMjUgQ2hlY2tzIHdoZXRoZXIgYW55IGl0ZW1zIGFyZSBjdXJyZW50bHkgc2VsZWN0ZWQgaW4gdGhlIHRhYmxlLlxuICBpc1NvbWVTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID4gMDtcbiAgfVxuXG5cbiAgLy8gU0tTMTVGRUIyNSBlbWl0IHRoZSBjaGVjayBib3ggdmFsdWVzLCB0aGF0IHNlbGVjdGVkIHNlcGFyYXRlbHlcbiAgc2VwYXJhdGVSb3dTZWxlY3QoZGF0YTogYW55LCBlbGVtZW50OiBhbnkpIHtcbiAgICAvLyAgIHRvIHJlbW92ZSB0aGUgZWRpdFJvdyBpZCBjaGVjayBib3ggaXMgdW5jaGVja2VkIG9uIHNlcGFyYXRlIHJvd1xuICAgIGlmIChkYXRhICYmIGVsZW1lbnQ/LmVkaXRSb3cpIHtcbiAgICAgIGVsZW1lbnQuZWRpdFJvdyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5lbWl0KHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkKVxuICAgIH1cbiAgfVxuXG4gIC8vU0tTMTVGRUIyNSBkYXRhIHRoYXQgdG8gYmUgcGFzc2VkLCB3aGVuIHRhYmxlIHJvdyBpcyBjbGlja2VkXG4gIHRhYmxlQ2xpY2soZGF0YTogYW55KSB7XG4gICAgdGhpcy50YWJsZVJvd0NsaWNrLmVtaXQoZGF0YSk7XG4gIH1cbiAgZ2V0TmVzdGVkVmFsdWUob2JqOiBhbnksIHBhdGg6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKCFvYmogfHwgIXBhdGgpIHJldHVybiB1bmRlZmluZWQ7XG4gIFxuICAgIHJldHVybiBwYXRoXG4gICAgICAucmVwbGFjZSgvXFxbKFxcZCspXFxdL2csICcuJDEnKSAvLyB0dXJucyBcIm1lbWJlcnNbMF1cIiBpbnRvIFwibWVtYmVycy4wXCJcbiAgICAgIC5zcGxpdCgnLicpXG4gICAgICAucmVkdWNlKChhY2MsIHBhcnQpID0+IChhY2MgJiYgYWNjW3BhcnRdICE9PSB1bmRlZmluZWQpID8gYWNjW3BhcnRdIDogdW5kZWZpbmVkLCBvYmopO1xuICB9XG4gIFxuICAvL1NLUzE1RkVCMjUgUmV0YWluIHRoZSBmaWx0ZXJkYXRhXG4gIGZpbHRlclJldGFpbihmaWx0ZXJrZXk6IGFueSwgZnJvbT86YW55KSB7XG4gICAgaWYgKGZpbHRlcmtleSAmJiBPYmplY3Qua2V5cyhmaWx0ZXJrZXkpLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLnNGaWx0ZXJEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgIGxldCBpc0RhdGFDaGVja2VkID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoZmlsdGVya2V5KSkge1xuICAgICAgICBpZiAoZmlsdGVya2V5W2tleV0gJiYgZmlsdGVya2V5W2tleV0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlzRGF0YUNoZWNrZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWlzRGF0YUNoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5zRmlsdGVyRGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhmaWx0ZXJrZXkpKSB7XG4gICAgICAgICAgaWYgKGZpbHRlcmtleVtrZXldKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5zRmlsdGVyRGF0YS5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUoaXRlbSwga2V5KTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmtleVtrZXldLmluY2x1ZGVzKHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgIFxuICAgICAgICAgICAgY29uc3QgZGF0YTEgPSBbLi4udGhpcy5kYXRhLCAuLi5kYXRhXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMucmVtb3ZlRHVwbGljYXRlcyhkYXRhMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmKGZyb20gIT09ICdwYWdlUGFyYW1zJyAmJiBmcm9tICE9PSAnb25DaGFuZ2UnKSB0aGlzLnBhZ2VJbmRleCA9IDFcbiAgICBjb25zdCBzdGFydCA9IChOdW1iZXIodGhpcy5wYWdlSW5kZXgpIC0gMSkgKiBOdW1iZXIodGhpcy5wYWdlU2l6ZSk7XG4gICAgY29uc3QgZW5kID0gc3RhcnQgKyBOdW1iZXIodGhpcy5wYWdlU2l6ZSk7XG4gICAgdGhpcy5maWx0ZXJCb3hEYXRhID0gdGhpcy5kYXRhXG4gICAgdGhpcy5maWx0ZXJUYWJsZU5vcyA9IHRoaXMuZmlsdGVyQm94RGF0YT8ubGVuZ3RoXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGE/LnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIHRoaXMuZGF0YSA9IHRoaXMub3JpZ2luYWxEYXRhXG4gICAgdGhpcy5zb3J0RGF0YSh0aGlzLmN1cnJlbnRTb3J0Q29sdW1uICx0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uLHVuZGVmaW5lZCxmcm9tKVxuICB9XG5cbi8vIFNLUzE1RkVCMjUgdG8gcmVtb3ZlIGR1cGxpY2F0ZSBvYmplY3QgZnJvbSB0d28gYXJyYXlzIChzYWZlIHN0cmluZ2lmeSlcbnJlbW92ZUR1cGxpY2F0ZXMob2JqZWN0czogYW55KSB7XG4gIGNvbnNvbGUubG9nKFwicmVtb3ZlRHVwbGljYXRlc1wiLG9iamVjdHMpXG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgdW5pcXVlT2JqZWN0czogYW55W10gPSBbXTtcblxuICBjb25zdCBzYWZlU3RyaW5naWZ5ID0gKG9iajogYW55KSA9PiB7XG4gICAgY29uc3Qgc2Vlbk9ianMgPSBuZXcgV2Vha1NldCgpO1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIG51bGw7IC8vIHJlcGxhY2UgdW5kZWZpbmVkIHRvIGF2b2lkIGlzc3Vlc1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc2Vlbk9ianMuaGFzKHZhbHVlKSkgcmV0dXJuOyAvLyBza2lwIGNpcmN1bGFyXG4gICAgICAgIHNlZW5PYmpzLmFkZCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG4gIH07XG5cbiAgb2JqZWN0cy5mb3JFYWNoKChvYmo6IGFueSkgPT4ge1xuICAgIGNvbnN0IGtleSA9IHNhZmVTdHJpbmdpZnkob2JqKTtcbiAgICBpZiAoIXNlZW4uaGFzKGtleSkpIHtcbiAgICAgIHNlZW4uYWRkKGtleSk7XG4gICAgICB1bmlxdWVPYmplY3RzLnB1c2gob2JqKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB1bmlxdWVPYmplY3RzO1xufVxuXG4gIC8vIFNLUzE1RkVCMjUgIG9uIGRlbGV0ZSBjbGljayBzYXZlIHRoZSBkYXRhIGluIHZhcmlhYmxlc1xuICBkZWxldGVSZWNvcmQoZGF0YTogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZnJvbSA9PT0gJ2Zvcm1CdWlsZGVyJykge1xuICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSBbLi4udGhpcy5kYXRhU291cmNlLmRhdGFdOyAvLyBDcmVhdGUgYSBuZXcgcmVmZXJlbmNlXG4gICAgICB1cGRhdGVkRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB1cGRhdGVkRGF0YTsgLy8gUmVhc3NpZ24gdG8gdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgICB0aGlzLmRhdGEgPSB1cGRhdGVkRGF0YTsgLy8gU3luYyB0aGlzLmRhdGFcbiAgICAgIHRoaXMuY29tcHV0ZVN1bW1hcnlWYWx1ZXMoKTtcbiAgICAgIHRoaXMuZW1pdFRhYmxlRGF0YVZhbHVlKHRoaXMuZGF0YVNvdXJjZS5kYXRhKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlbGV0ZURhdGEgPSBkYXRhO1xuICAgICAgdGhpcy5kZWxldGVJbmRleCA9IGluZGV4O1xuICAgICAgdGhpcy5kZWxldGVNb2RhbCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSAgYWZ0ZXIgY2xpY2tpbmcgeWVzIGluIGRlbGV0ZSBhbGVydCBtb2RhbCwgZW1pdCB0byBwYXJlbnRcbiAgZGVsZXRlUmVjb3JkRGF0YSgpIHtcbiAgICB0aGlzLm9uRGVsZXRlRGF0YS5lbWl0KHsgZGF0YTogdGhpcy5kZWxldGVEYXRhLCBhbGxEYXRhOiB0aGlzLmRhdGEgfSk7XG4gICAgdGhpcy5kZWxldGVNb2RhbCA9IGZhbHNlO1xuICB9XG5cbiAgLy9TS1MxNUZFQjI1IHRvIHNhdmUgdGhlIGVkaXRlZCBkYXRhIGluIHRhYmxlO1xuICBzYXZlQnV0dG9uKCkge1xuICAgIC8vIGVtaXR0aW5nIGFsbCBkYXRhIHdpdGggc2VsZWN0ZWQgZGF0YVxuICAgIHRoaXMuc2F2ZUJ1dHRvbkRhdGEuZW1pdCh7IHNlbGVjdGVkRGF0YTogdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQsIGFsbERhdGE6IHRoaXMuZGF0YSB9KTtcbiAgfVxuXG4gIC8vU0tTMTVGRUIyNSBwYXNzIHRoZSByZWplY3RlZCByZWFzb25cbiAgb25FZGl0KGRhdGE6IGFueSkge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIGRhdGEuZWRpdFJvdyA9IHRydWU7IC8vIG1hZGUgZWRpdGluZyByb3cgYXMgdHJ1ZSAvLyAgc29sdmUgdW5kZWZpbmVkIGVycm9yIG9uIHN0cmluZ1xuICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdChkYXRhKTtcbiAgICB0aGlzLm9uRWRpdERhdGEuZW1pdCh7IGRhdGE6IGRhdGEsIGFsbERhdGE6IHRoaXMuZGF0YSB9KTtcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgdGFibGUgdG9wIGJ1dHRvbnMgZW1pdFxuICBjb21tb25CdXR0b25DbGljayhidXR0b246IGFueSkge1xuICAgIHRoaXMuYnV0dG9uRW1pdC5lbWl0KGJ1dHRvbik7XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZXRyaWV2ZSBkYXRhIGZyb20gb2JqZWN0cy4gXG4gIC8vIEluICdlbGVtZW50JyB3ZSB3aWxsIHBhc3Mgb2JqZWN0IGFuZCBpbiAnY29sdW1uJyB3ZSB3aWxsIHBhc3MgcGF0aCBhcyBzdHJpbmcgZWcuZW1wbG95ZWUuZmluYW5jZUluZm9bMF0udWFuIHRvIHJldGlldmUgdWFuIHZhbHVlIFxuICBnZXRWYWx1ZShlbGVtZW50OiBhbnksIGNvbHVtbjogc3RyaW5nKSB7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFjb2x1bW4pIHtcbiAgICAgIHJldHVybiAnJzsgLy8gUmV0dXJuIGVtcHR5IHN0cmluZyBvciBudWxsIGlmIGVsZW1lbnQgb3IgY29sdW1uIGlzIGludmFsaWRcbiAgICB9XG4gICAgbGV0IGZsZHMgPSBjb2x1bW4uc3BsaXQoJy4nKTtcbiAgICBsZXQgY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgc3BsaXRGbGRzID0gZmxkc1tpXS5zcGxpdCgnWycpO1xuICAgICAgaWYgKHNwbGl0Rmxkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnRbZmxkc1tpXV0gPz8gJyc7IC8vIFVzZSBudWxsaXNoIGNvYWxlc2NpbmcgdG8gaGFuZGxlIHVuZGVmaW5lZC9udWxsXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgaW5kZXggPSBOdW1iZXIoc3BsaXRGbGRzWzFdLnNwbGl0KCddJylbMF0pO1xuICAgICAgICBjdXJyZW50ID0gY3VycmVudFtzcGxpdEZsZHNbMF1dPy5baW5kZXhdID8/ICcnOyAvLyBTYWZlbHkgYWNjZXNzIGFycmF5IGluZGV4XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG4gIC8vU0tTMTVGRUIyNSBoeXBlcmxpbmwgY29sdW1ucyBvbmx5IGVtaXR0ZWRcbiAgb25DbGlja0h5cGVybGluayhjb2x1bW46IGFueSwgZWxlbWVudDogYW55LCBpc0h5cGVyTGluazogYW55KSB7XG4gICAgaWYgKGlzSHlwZXJMaW5rKSB0aGlzLmh5cGVyTGlua0VtaXQuZW1pdCh7IGNvbHVtbjogY29sdW1uLCBlbGVtZW50OiBlbGVtZW50IH0pO1xuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSB0byBjaGVjayB3aGV0aGVyIHRoZSBoeXBlcmxpbmsgYWN0aW9uIGlzIHByZXNlbnQgaW4gdGhhdCBjb2x1bW5cbiAgY2hlY2tIeXBlcmxpbmtDaGVjayhjb2w6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh5cGVyTGlua0NvbHVtbnM/LmluY2x1ZGVzKGNvbCkgPyB0cnVlIDogZmFsc2U7XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IG9uIGFkZCByZWNvcmQgaW4gdGFibGUsIHRoZSAnaW5saW5lRWxlbWVudCcgdmFsdWVzIHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIHRhYmxlIGRhdGEgXG4gIGFkZFRhYmxlUmVjb3JkKGVsZW1lbnQ6IGFueSxmcm9tPzphbnkpIHtcbiAgICBpZiAodGhpcy5jb25maWdQYWdpbmF0aW9uID09PSBmYWxzZSB8fCB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IHRoaXMudG90YWxSZWNvcmRzKSB7XG4gICAgICB2YXIgb2JqOiBhbnkgPSB7fTtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhlbGVtZW50KTtcbiAgICAgIGtleXMuZm9yRWFjaCgoZWxlbWVudEtleTogYW55KSA9PiB7XG4gICAgICAgIG9ialtlbGVtZW50S2V5XSA9ICcnO1xuICAgICAgfSk7XG4gICAgICAvLyBTS1MyME1BUjI1IENvbXB1dGUgc3VtbWFyeSBjb2x1bW5zIGZvciB0aGUgbmV3IHJvd1xuICAgICAgaWYgKHRoaXMuc3VtbWFyeUNvbHVtbnMgJiYgdGhpcy5zdW1tYXJ5Q29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc3VtbWFyeUNvbHVtbnMuZm9yRWFjaChzdW1tYXJ5Q29sID0+IHtcbiAgICAgICAgICBpZiAoc3VtbWFyeUNvbC50eXBlID09PSAnY2FsY3VsYXRpb24nICYmIHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnc3VtJyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzKSB7XG4gICAgICAgICAgICBjb25zdCBzdW0gPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnJlZHVjZSgoYWNjLCBvcGVyYW5kKSA9PiBhY2MgKyAoTnVtYmVyKG9ialtvcGVyYW5kXSkgfHwgMCksIDApO1xuICAgICAgICAgICAgb2JqW3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHN1bTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN1bW1hcnlDb2wudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJyAmJiBzdW1tYXJ5Q29sLm9wZXJhdGlvbiA9PT0gJ3N1YnRyYWN0JyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzKSB7XG4gICAgICAgICAgICBjb25zdCBzdW0gPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnJlZHVjZSgoYWNjLCBvcGVyYW5kKSA9PiBhY2MgLSAoTnVtYmVyKG9ialtvcGVyYW5kXSkgfHwgMCksIDApO1xuICAgICAgICAgICAgb2JqW3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHN1bTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN1bW1hcnlDb2wudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJyAmJiBzdW1tYXJ5Q29sLm9wZXJhdGlvbiA9PT0gJ211bHRpcGx5JyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzKSB7XG4gICAgICAgICAgICBjb25zdCBzdW0gPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnJlZHVjZSgoYWNjLCBvcGVyYW5kKSA9PiBhY2MgKiAoTnVtYmVyKG9ialtvcGVyYW5kXSkgfHwgMCksIDApO1xuICAgICAgICAgICAgb2JqW3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHN1bTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoc3VtbWFyeUNvbC50eXBlID09PSAnY2FsY3VsYXRpb24nICYmIHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnc3VidHJhY3QnICYmIHN1bW1hcnlDb2wub3BlcmFuZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1bSA9IHN1bW1hcnlDb2wub3BlcmFuZHMuc2xpY2UoMSkucmVkdWNlKFxuICAgICAgICAgICAgICAoYWNjLCBvcGVyYW5kKSA9PiBhY2MgLSAoTnVtYmVyKG9ialtvcGVyYW5kXSkgfHwgMCksXG4gICAgICAgICAgICAgIE51bWJlcihvYmpbc3VtbWFyeUNvbC5vcGVyYW5kc1swXV0pIHx8IDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBvYmpbc3VtbWFyeUNvbC5maWVsZE5hbWVdID0gc3VtO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChzdW1tYXJ5Q29sLnR5cGUgPT09ICdjYWxjdWxhdGlvbicgJiYgc3VtbWFyeUNvbC5vcGVyYXRpb24gPT09ICdtdWx0aXBseScgJiYgc3VtbWFyeUNvbC5vcGVyYW5kcykge1xuICAgICAgICAgICAgY29uc3QgcHJvZHVjdCA9IHN1bW1hcnlDb2wub3BlcmFuZHMucmVkdWNlKFxuICAgICAgICAgICAgICAoYWNjLCBvcGVyYW5kKSA9PiBhY2MgKiAoTnVtYmVyKG9ialtvcGVyYW5kXSkgfHwgMCksXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBvYmpbc3VtbWFyeUNvbC5maWVsZE5hbWVdID0gcHJvZHVjdDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5kYXRhLnB1c2gob2JqKTtcbiAgICAgIGNvbnN0IGRhdGE6IGFueSA9IHRoaXMuZGF0YTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcblxuICAgICAgaWYgKHRoaXMuc3RpY2t5Q29sdW1uID09PSB0cnVlICYmIHRoaXMuZGlzcGxheWVkQ29sdW1ucykge1xuICAgICAgICB0aGlzLnN0aWNreUNvbmRpdGlvbiA9IHRoaXMuZGlzcGxheWVkQ29sdW1ucz8ubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGlja3lDb25kaXRpb24gPSB0aGlzLmRpc3BsYXllZENvbHVtbnM/Lmxlbmd0aCArIDE7XG4gICAgICB9XG4gICAgICB0aGlzLnBhZ2VTaXplID0gMTBcbiAgICAgIHRoaXMudG90YWxDb3VudCA9IHRoaXMuZGF0YS5sZW5ndGhcbiAgICAgIHRoaXMuZmlsdGVyVGFibGVOb3MgKz0gMSBcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gTWF0aC5jZWlsKHRoaXMudG90YWxDb3VudCAvIHRoaXMucGFnZVNpemUpO1xuICAgICAgY29uc3Qgc3RhcnQgPSAoTnVtYmVyKHRoaXMucGFnZUluZGV4KSAtIDEpICogTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBOdW1iZXIodGhpcy5wYWdlU2l6ZSk7XG4gICAgICBpZiAoIXRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YT8uc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QodGhpcy5kYXRhW3RoaXMuZGF0YS5sZW5ndGggLSAxXSk7XG4gICAgICB0aGlzLmRhdGFbdGhpcy5kYXRhLmxlbmd0aCAtIDFdLmVkaXRSb3cgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwYWdlSW5kZXggPSBNYXRoLmNlaWwodGhpcy50b3RhbFJlY29yZHMgLyAxMCk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnTnh0RGF0YVRhYmxlJywgSlNPTi5zdHJpbmdpZnkoeyBhZGRSZWNvcmQ6IHRydWUsIHBhZ2VTaXplOiAxMCwgcGFnZUluZGV4OiBwYWdlSW5kZXgsIGN1cnJlbnRTb3J0Q29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBjdXJyZW50U29ydERpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiB9KSk7XG4gICAgICBpZihmcm9tICE9PSAnb25DaGFuZ2UnKXRoaXMuTnh0VGFibGVFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiAxMCwgcGFnZUluZGV4OiBwYWdlSW5kZXggfSwgdGFibGVTZWFyY2g6IHsgZmllbGRzOiB0aGlzLmRpc3BsYXllZENvbHVtbnMsIHZhbHVlOiB0aGlzLnNlYXJjaEJveFZhbHVlIH0sIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uICxsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9IH0pXG4gICAgfVxuICAgIGlmICh0aGlzLmZyb20gPT09ICdmb3JtQnVpbGRlcicpIHtcbiAgICAgIHRoaXMuZW1pdFRhYmxlRGF0YVZhbHVlKHRoaXMuZGF0YVNvdXJjZS5kYXRhKTtcbiAgICB9XG4gICAgdGhpcy5jb21wdXRlU3VtbWFyeVZhbHVlcygpO1xuICAgIGlmKGZyb20gIT09ICdvbkNoYW5nZScpdGhpcy5OeHRUYWJsZVBhcmFtc0VtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXggfSx0YWJsZVNlYXJjaDogdGhpcy5zZWFyY2hCb3hWYWx1ZSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gLGxpc3RWaWV3OiB0aGlzLnNlbGVjdGVkVmlld319KVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBBY3Rpb24gYnV0dG9uIGNvbmRpdGlvbmFsbHkgZGlzcGxheWVkIGZ1bmN0aW9uXG4gIGlzQ29uZGl0aW9uTWV0KGVsZW1lbnQ6IGFueSwgY29uZGl0aW9uczogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKGNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgeyBhbmRDb25kaXRpb25MaXN0LCBvckNvbmRpdGlvbkxpc3QgfSA9IGNvbmRpdGlvbnM7XG4gICAgICAvLyAgSWYgYW5kQ29uZGl0aW9uTGlzdCBleGlzdHMsIGNoZWNrIHRoYXQgYWxsIGNvbmRpdGlvbnMgYXJlIG1ldFxuICAgICAgY29uc3QgaXNBbmRDb25kaXRpb25NZXQgPSBhbmRDb25kaXRpb25MaXN0ID8gYW5kQ29uZGl0aW9uTGlzdC5ldmVyeSgoY29uZDogeyBjb25kaXRpb246IHN0cmluZyB8IGFueVtdOyBjb2x1bW46IHN0cmluZyB8IG51bWJlcjsgfSkgPT5cbiAgICAgICAgY29uZC5jb25kaXRpb24uaW5jbHVkZXMoZWxlbWVudFtjb25kLmNvbHVtbl0pXG4gICAgICApIDogdHJ1ZTsgLy8gIElmIG5vIGFuZENvbmRpdGlvbkxpc3QsIGNvbnNpZGVyIGl0IGFzIGFsd2F5cyBtZXRcbiAgICAgIC8vICBJZiBvckNvbmRpdGlvbkxpc3QgZXhpc3RzLCBjaGVjayBpZiBhdCBsZWFzdCBvbmUgY29uZGl0aW9uIGlzIG1ldFxuICAgICAgY29uc3QgaXNPckNvbmRpdGlvbk1ldCA9IG9yQ29uZGl0aW9uTGlzdCA/IG9yQ29uZGl0aW9uTGlzdC5zb21lKChjb25kOiB7IGNvbmRpdGlvbjogc3RyaW5nIHwgYW55W107IGNvbHVtbjogc3RyaW5nIHwgbnVtYmVyOyB9KSA9PlxuICAgICAgICBjb25kLmNvbmRpdGlvbi5pbmNsdWRlcyhlbGVtZW50W2NvbmQuY29sdW1uXSlcbiAgICAgICkgOiB0cnVlOyAvLyAgSWYgbm8gb3JDb25kaXRpb25MaXN0LCBjb25zaWRlciBpdCBhcyBhbHdheXMgbWV0XG4gICAgICAvLyAgUmV0dXJuIHRydWUgaWYgdGhlIEFORCBjb25kaXRpb24gaXMgbWV0IGFuZCB0aGUgT1IgY29uZGl0aW9uIGlzIG1ldFxuICAgICAgcmV0dXJuIGlzQW5kQ29uZGl0aW9uTWV0ICYmIGlzT3JDb25kaXRpb25NZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgQ2hlY2sgaWYgdGhlIGNvbHVtbiBpcyBhIGRhdGUgY29sdW1uXG4gIGlzRGF0ZUNvbHVtbihjb2x1bW46IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGVDb2x1bW5zPy5pbmNsdWRlcyhjb2x1bW4pID8/IGZhbHNlO1xuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBDaGVjayBpZiB0aGUgY29sdW1uIGlzIGEgdGltZSBjb2x1bW5cbiAgaXNUaW1lQ29sdW1uKGNvbHVtbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGltZUNvbHVtbnM/LmluY2x1ZGVzKGNvbHVtbikgPz8gZmFsc2U7XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IGNvbmZpZyBzZWFyY2ggZmlsdGVyIGJveCBmdW5jdGlvblxuICBvblNlYXJjaChldmVudDogYW55LGZyb20/OmFueSkge1xuICAgIHRoaXMuc2VhcmNoQm94VmFsdWUgPSBldmVudDsgLy8gVXBkYXRlIHRoZSBkaXNwbGF5ZWQgdmFsdWUgaW4gdGhlIHNlYXJjaCBib3hcbiAgICBpZiAodGhpcy5zZWFyY2hDb25maWdzIHx8IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA9PT0gdGhpcy50b3RhbFJlY29yZHMpIHtcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gMVxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IDEwXG4gICAgICBpZihmcm9tICE9PSAnb25DaGFuZ2UnKXRoaXMuTnh0VGFibGVFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IE51bWJlcih0aGlzLnBhZ2VJbmRleCkgfSwgdGFibGVTZWFyY2g6IHsgZmllbGRzOiB0aGlzLmRpc3BsYXllZENvbHVtbnMsIHZhbHVlOiB0aGlzLnNlYXJjaEJveFZhbHVlIH0sIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uICxsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9IH0pXG4gICAgfVxuICAgIGlmKGZyb20gIT09ICdvbkNoYW5nZScpdGhpcy5OeHRUYWJsZVBhcmFtc0VtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXggfSx0YWJsZVNlYXJjaDogdGhpcy5zZWFyY2hCb3hWYWx1ZSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gLGxpc3RWaWV3OiB0aGlzLnNlbGVjdGVkVmlld319KVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBJZiB0aGUgdmFsdWUgaW4gdGhlIHNlYXJjaCBib3ggaXMgZW1wdHksIGNhbGwgdGhlIG9uU2VhcmNoIGZ1bmN0aW9uIGF1dG9tYXRpY2FsbHlcbiAgZW1wdHlTZWFyY2goZXZlbnQ6IGFueSkge1xuICAgIGlmICghZXZlbnQudHJpbSgpICYmICh0aGlzLnByZXZTZWFyY2ggIT0gZXZlbnQudHJpbSgpKSkge1xuICAgICAgdGhpcy5vblNlYXJjaChldmVudClcbiAgICB9XG4gICAgdGhpcy5wcmV2U2VhcmNoID0gZXZlbnQudHJpbSgpXG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IGluZm9TaWRlc2NyZWVuIGVtaXQgXG4gIG9uU2lkZU5hdkluZm9DbGljayhkYXRhOiBhbnksIGNvbDogYW55KSB7XG4gICAgdGhpcy5zaWRlTmF2RW1pdC5lbWl0KHtcbiAgICAgIGRhdGEsIGNvbCxcbiAgICAgIGNvbmZpZzogdW5kZWZpbmVkXG4gICAgfSlcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgZm9yIGFjdGl2ZSBjb2x1bW4gc2VsZWN0XG4gIG9uQ29sdW1uQ2xpY2soY29sdW1uOiBzdHJpbmcpIHtcbiAgICB0aGlzLmFjdGl2ZUNvbHVtbiA9IGNvbHVtbjtcbiAgICBpZiAoIXRoaXMuaXNFZGl0YWJsZSkge1xuICAgICAgLy8gRXhpc3Rpbmcgc29ydC9maWx0ZXIgbG9naWNcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbiA9PT0gY29sdW1uKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uID0gbnVsbDtcbiAgICAgIHRoaXMuY29sdW1uU2VsZWN0ZWQuZW1pdChudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbiA9IGNvbHVtbjtcbiAgICAgIGNvbnN0IGNvbHVtbkRhdGEgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5tYXAocm93ID0+ICh7XG4gICAgICAgIHZhbHVlOiByb3dbY29sdW1uXSxcbiAgICAgICAgaWQ6IHJvdy5pZCAvLyBvciB1bmlxdWUgaWRlbnRpZmllclxuICAgICAgfSkpO1xuICAgICAgdGhpcy5jb2x1bW5TZWxlY3RlZC5lbWl0KHsgY29sdW1uLCBkYXRhOiBjb2x1bW5EYXRhIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgZm9yIGNsb3NlIHNlYXJjaCBmaWx0ZXIgYm94XG4gIGNsb3NlZmlsdGVyKGZyb20/OmFueSkge1xuICAgIHRoaXMucGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplIHx8IDEwXG4gICAgdGhpcy5wYWdlSW5kZXggPSAxXG4gICAgdGhpcy5maWx0ZXJEYXRhQXJyYXlbdGhpcy5zZWxlY3RlZEZpbHRlcl0gPSBbXVxuICAgIHRoaXMuaXNSZXNpemVkID0gZmFsc2VcbiAgICBpZiAodGhpcy5jb25maWdQYWdpbmF0aW9uID09PSBmYWxzZSB8fCB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IHRoaXMudG90YWxSZWNvcmRzKSB7XG4gICAgICB0aGlzLmZpbHRlclJldGFpbih0aGlzLmZpbHRlckRhdGFBcnJheSlcbiAgICB9IGVsc2Uge1xuICAgICAgaWYoZnJvbSAhPT0gJ29uQ2hhbmdlJyl0aGlzLk54dFRhYmxlRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogMTAsIHBhZ2VJbmRleDogMSB9LCB0YWJsZVNlYXJjaDogeyBmaWVsZHM6IHRoaXMuZGlzcGxheWVkQ29sdW1ucywgdmFsdWU6IHRoaXMuc2VhcmNoQm94VmFsdWUgfSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gLGxpc3RWaWV3OiB0aGlzLnNlbGVjdGVkVmlld30gfSlcbiAgICB9XG4gICAgaWYoZnJvbSAhPT0gJ29uQ2hhbmdlJyl0aGlzLk54dFRhYmxlUGFyYW1zRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCB9LHRhYmxlU2VhcmNoOiB0aGlzLnNlYXJjaEJveFZhbHVlLCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiAsbGlzdFZpZXc6IHRoaXMuc2VsZWN0ZWRWaWV3fX0pXG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IHNlYXJjaCBmaWx0ZXIgYm94IGNoZWNrYm94IHJldGFpblxuICBpc1NlbGVjdGVkKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5maWx0ZXJEYXRhQXJyYXlbdGhpcy5zZWxlY3RlZEZpbHRlcl0gJiYgdGhpcy5maWx0ZXJEYXRhQXJyYXlbdGhpcy5zZWxlY3RlZEZpbHRlcl0uaW5jbHVkZXMoZXZlbnQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IHNlYXJjaCBmaWx0ZXIgYm94IGNoZWNrYm94IHNlbGVjdFxuICBjaGVja2VkRGF0YShldmVudDogYW55LGZyb20/OmFueSkge1xuICAgIGNvbnNvbGUubG9nKFwiY2hlY2tlZERhdGFcIixldmVudClcbiAgICBsZXQgc2VsZWN0ZWRBcnJheSA9IFtdXG4gICAgc2VsZWN0ZWRBcnJheSA9IHRoaXMuZmlsdGVyRGF0YUFycmF5W3RoaXMuc2VsZWN0ZWRGaWx0ZXJdID8gdGhpcy5maWx0ZXJEYXRhQXJyYXlbdGhpcy5zZWxlY3RlZEZpbHRlcl0gOiBbXVxuICAgIGlmIChzZWxlY3RlZEFycmF5ICYmIHNlbGVjdGVkQXJyYXkuaW5jbHVkZXMoZXZlbnQpKSB7XG4gICAgICBzZWxlY3RlZEFycmF5ID0gc2VsZWN0ZWRBcnJheS5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbSAhPT0gZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3RlZEFycmF5LnB1c2goZXZlbnQpO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlckRhdGFBcnJheVt0aGlzLnNlbGVjdGVkRmlsdGVyXSA9IHNlbGVjdGVkQXJyYXlcbiAgICB0aGlzLmlzUmVzaXplZCA9IHNlbGVjdGVkQXJyYXk/Lmxlbmd0aCA+IDBcbiAgICBpZiAodGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoICE9PSB0aGlzLnRvdGFsUmVjb3JkcyAmJiB0aGlzLmNvbmZpZ1BhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gMVxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IDEwXG4gICAgICBpZihmcm9tICE9PSAnb25DaGFuZ2UnKXRoaXMuTnh0VGFibGVFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IE51bWJlcih0aGlzLnBhZ2VJbmRleCkgfSwgdGFibGVTZWFyY2g6IHsgZmllbGRzOiB0aGlzLmRpc3BsYXllZENvbHVtbnMsIHZhbHVlOiB0aGlzLnNlYXJjaEJveFZhbHVlIH0sIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uICxsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9IH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyUmV0YWluKHRoaXMuZmlsdGVyRGF0YUFycmF5KVxuICAgIH1cbiAgICBpZihmcm9tICE9PSAnb25DaGFuZ2UnKXRoaXMuTnh0VGFibGVQYXJhbXNFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4IH0sdGFibGVTZWFyY2g6IHRoaXMuc2VhcmNoQm94VmFsdWUsIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uICxsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9fSlcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgIGFjdGlvbiBjb2x1bW4gZHJvcGRvd24gYnV0dG9ucyBjbG9zZVxuICBwcml2YXRlIGFkZENsaWNrT3V0c2lkZUxpc3RlbmVyKCkge1xuICAgIGlmICghdGhpcy5jbGlja0xpc3RlbmVyKSB7XG4gICAgICB0aGlzLmNsaWNrTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFldmVudC50YXJnZXQuY2xvc2VzdCgnLmRyb3Bkb3duJykpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRPcGVuSW5kZXggPSBudWxsO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgaWYgY2xvc2UgdGhlIGRyb3Bkb3duIG1lbnUgc3RvcCB0aGUgY2xpY2sgbGlzdGVuZXJcbiAgcHJpdmF0ZSByZW1vdmVDbGlja0xpc3RlbmVyKCkge1xuICAgIGlmICh0aGlzLmNsaWNrTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuY2xpY2tMaXN0ZW5lcigpO1xuICAgICAgdGhpcy5jbGlja0xpc3RlbmVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1ICBhY3Rpb24gY29sdW1uIGRyb3Bkb3duIGJ1dHRvbnMgb3BlbiAvIGM7b3NlXG4gIHRvZ2dsZURyb3Bkb3duKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmN1cnJlbnRPcGVuSW5kZXggPSB0aGlzLmN1cnJlbnRPcGVuSW5kZXggPT09IGluZGV4ID8gbnVsbCA6IGluZGV4O1xuICAgIHRoaXMuYWRkQ2xpY2tPdXRzaWRlTGlzdGVuZXIoKTtcbiAgfVxuXG4gIC8vU0tTMTVGRUIyNSBhY3Rpb24gYnV0dG9uIGV2bnQgZW1pdFxuICBhY3Rpb25CdXR0b25DbGlja2VkKGV2ZW50OiBhbnksIGRhdGE6IGFueSkge1xuICAgIHRoaXMuYWN0aW9uQnV0dG9uRW1pdC5lbWl0KHsgZXZlbnQsIGRhdGEgfSlcbiAgfVxuXG4gIHJlbW92ZUNvbChjb2x1bW46IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW4gPSBudWxsO1xuICAgIC8vIEVtaXQgZGVzZWxlY3Rpb25cbiAgICBpZiAoIXRoaXMuaXNFZGl0YWJsZSkge1xuICAgICAgLy8gRXhpc3Rpbmcgc29ydC9maWx0ZXIgbG9naWNcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW5EYXRhID0gdGhpcy5kYXRhU291cmNlLmRhdGEubWFwKHJvdyA9PiAoe1xuICAgICAgdmFsdWU6IHJvd1tjb2x1bW5dLFxuICAgICAgaWQ6IHJvdy5pZCAvLyBvciB1bmlxdWUgaWRlbnRpZmllclxuICAgIH0pKTtcbiAgICB0aGlzLnJlbW92ZUNvbHVtbi5lbWl0KHsgY29sdW1uLCBkYXRhOiBjb2x1bW5EYXRhIH0pO1xuXG4gIH1cbiAgZW1pdFRhYmxlRGF0YVZhbHVlKHVwZGF0ZWRUYWJsZURhdGE6IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHVwZGF0ZWRUYWJsZURhdGEpO1xuICB9XG5cbiAgdXBkYXRlRWRpdChpbmRleDogbnVtYmVyLCB2YWx1ZTogYW55LCBlbGVtZW50OiBhbnksIGNvbHVtbjogYW55KTogdm9pZCB7XG4gICAgY29uc3QgdXBkYXRlZEVsZW1lbnQgPSB0aGlzLnVwZGF0ZVZhbHVlKGVsZW1lbnQsIGNvbHVtbiwgdmFsdWUpO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhW2luZGV4XSA9IHVwZGF0ZWRFbGVtZW50O1xuXG4gICAgLy8gU0tTMjBNQVIyNSBFbnN1cmUgdGhpcy5kYXRhIGlzIHVwZGF0ZWQgc2luY2Ugc3VtbWFyeSB1c2VzIHRoZSBmdWxsIGRhdGFzZXRcbiAgICBjb25zdCBkYXRhSW5kZXggPSB0aGlzLmRhdGEuZmluZEluZGV4KChpdGVtOiBhbnkpID0+IGl0ZW0gPT09IGVsZW1lbnQpO1xuICAgIGlmIChkYXRhSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmRhdGFbZGF0YUluZGV4XSA9IHVwZGF0ZWRFbGVtZW50O1xuICAgIH1cbiAgICAvLyBSZWNvbXB1dGUgc3VtbWFyeSBjb2x1bW5zIGZvciB0aGUgdXBkYXRlZCByb3dcbiAgICBpZiAodGhpcy5zdW1tYXJ5Q29sdW1ucyAmJiB0aGlzLnN1bW1hcnlDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc3VtbWFyeUNvbHVtbnMuZm9yRWFjaChzdW1tYXJ5Q29sID0+IHtcbiAgICAgICAgaWYgKHN1bW1hcnlDb2wudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzICYmIHN1bW1hcnlDb2wub3BlcmFuZHMubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnc3VtJykge1xuICAgICAgICAgICAgdXBkYXRlZEVsZW1lbnRbc3VtbWFyeUNvbC5maWVsZE5hbWVdID0gc3VtbWFyeUNvbC5vcGVyYW5kcy5yZWR1Y2UoXG4gICAgICAgICAgICAgIChhY2MsIG9wZXJhbmQpID0+IGFjYyArIChOdW1iZXIodXBkYXRlZEVsZW1lbnRbb3BlcmFuZF0pIHx8IDApLFxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3VtbWFyeUNvbC5vcGVyYXRpb24gPT09ICdtdWx0aXBseScpIHtcbiAgICAgICAgICAgIHVwZGF0ZWRFbGVtZW50W3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHN1bW1hcnlDb2wub3BlcmFuZHMucmVkdWNlKFxuICAgICAgICAgICAgICAoYWNjLCBvcGVyYW5kKSA9PiBhY2MgKiAoTnVtYmVyKHVwZGF0ZWRFbGVtZW50W29wZXJhbmRdKSB8fCAwKSwgIC8vIFN0YXJ0IHdpdGggMSBpbnN0ZWFkIG9mIDBcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnc3VidHJhY3QnKSB7XG4gICAgICAgICAgICB1cGRhdGVkRWxlbWVudFtzdW1tYXJ5Q29sLmZpZWxkTmFtZV0gPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnNsaWNlKDEpLnJlZHVjZShcbiAgICAgICAgICAgICAgKGFjYywgb3BlcmFuZCkgPT4gYWNjIC0gKE51bWJlcih1cGRhdGVkRWxlbWVudFtvcGVyYW5kXSkgfHwgMCksXG4gICAgICAgICAgICAgIE51bWJlcih1cGRhdGVkRWxlbWVudFtzdW1tYXJ5Q29sLm9wZXJhbmRzWzBdXSkgfHwgMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGFbaW5kZXhdID0gdXBkYXRlZEVsZW1lbnQ7XG4gICAgICBpZiAoZGF0YUluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLmRhdGFbZGF0YUluZGV4XSA9IHVwZGF0ZWRFbGVtZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5mcm9tID09PSAnZm9ybUJ1aWxkZXInKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YVtpbmRleF0gPSB0aGlzLnVwZGF0ZVZhbHVlKGVsZW1lbnQsIGNvbHVtbiwgdmFsdWUpO1xuICAgICAgdGhpcy5lbWl0VGFibGVEYXRhVmFsdWUodGhpcy5kYXRhU291cmNlLmRhdGEpXG4gICAgfVxuICAgIHRoaXMuY29tcHV0ZVN1bW1hcnlWYWx1ZXMoKTtcbiAgfVxuICAvLyBTS1MxOE1BUjI1IHVwZGF0ZSBlbGVtZW50XG4gIHVwZGF0ZVZhbHVlKGVsZW1lbnQ6IGFueSwgY29sdW1uOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBsZXQgZmxkcyA9IGNvbHVtbj8uc3BsaXQoJy4nKTtcbiAgICBsZXQgb2JqID0gZWxlbWVudDsgLy8gS2VlcCByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIG9iamVjdFxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmbGRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgbGV0IHNwbGl0RmxkcyA9IGZsZHNbaV0uc3BsaXQoJ1snKTtcbiAgICAgIGlmIChzcGxpdEZsZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIG9iaiA9IG9ialtmbGRzW2ldXSB8fCAob2JqW2ZsZHNbaV1dID0ge30pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGluZGV4ID0gTnVtYmVyKHNwbGl0Rmxkc1sxXS5zcGxpdCgnXScpWzBdKTtcbiAgICAgICAgb2JqID0gb2JqW3NwbGl0Rmxkc1swXV0gfHwgKG9ialtzcGxpdEZsZHNbMF1dID0gW10pO1xuICAgICAgICBvYmogPSBvYmpbaW5kZXhdIHx8IChvYmpbaW5kZXhdID0ge30pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0aGUgZmluYWwgcHJvcGVydHlcbiAgICBsZXQgbGFzdEtleSA9IGZsZHNbZmxkcy5sZW5ndGggLSAxXTtcbiAgICBsZXQgc3BsaXRMYXN0S2V5ID0gbGFzdEtleS5zcGxpdCgnWycpO1xuICAgIGlmIChzcGxpdExhc3RLZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICBvYmpbbGFzdEtleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGluZGV4ID0gTnVtYmVyKHNwbGl0TGFzdEtleVsxXS5zcGxpdCgnXScpWzBdKTtcbiAgICAgIG9ialtzcGxpdExhc3RLZXlbMF1dW2luZGV4XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgZXhwZW5zZUF0dGFjaG1lbnQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZmlsZUVtaXQuZW1pdChldmVudClcbiAgfVxuICBsaXN0Vmlld0VtaXQoZXZlbnQpe1xuICAgIGlmKGV2ZW50LmFjdGlvbiA9PT0gJ2ZpbHRlckdldCcpe1xuICAgICAgZXZlbnRbJ2RhdGEnXT0gdGhpcy5maWx0ZXJDb2x1bW5zXG4gICAgICBpZighdGhpcy50YWJsZUZpbHRlckRhdGEgfHwgdGhpcy50YWJsZUZpbHRlckRhdGEubGVuZ3RoID09PSAwKXtcbiAgICAgICAgdGhpcy5OeHRUYWJsZUZpbHRlckVtaXQuZW1pdChldmVudClcbiAgICAgIH1cbiAgICB9IGVsc2V7IFxuICAgICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ3NlbGVjdCcgfHwgZXZlbnQuYWN0aW9uID09PSAnc2F2ZScpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSBldmVudC5kYXRhLmZpbHRlck5hbWU7XG4gICAgICAgIHRoaXMuY3VycmVudFZpZXdGaWx0ZXIgPSBldmVudC5kYXRhO1xuICAgICAgICB0aGlzLm5nT25DaGFuZ2VzKHt9KVxuICAgICAgfVxuICAgICAgdGhpcy5OeHRUYWJsZUZpbHRlckVtaXQuZW1pdChldmVudClcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YWJsZS1sYXlvdXRcIiBbaWRdPVwidGFibGVJZFwiIFtuZ1N0eWxlXT1cInsncGFkZGluZy10b3AnOiAnMXB4JywgJ3dpZHRoJzogdGFibGVXaWR0aH1cIiBbZGlyXT1cImRpcmVjdGlvblwiPlxuICAgIDxkaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJ0aXRsZVwiIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgdGFibGUtdGl0bGUgYWxpZ24tdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIHt7dGl0bGV9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImlzTm9zSW5kaWNhdG9yIHx8IHNlYXJjaEJhciB8fCBpc0J1dHRvbnNcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIiBzdHlsZT1cInBhZGRpbmctYm90dG9tOiAyMHB4O1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgICAgICA8IS0tIFNLUzI2QVBSMjUgTGlzdCBWaWV3IEZpbHRlciAtLT5cbiAgICAgICAgICAgICAgICA8YXBwLWxpc3Qtdmlldy1maWx0ZXIgKm5nSWY9XCJsaXN0Vmlld3MgJiYgbGlzdFZpZXdzLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgICAgICBbbGlzdFZpZXdzXT1cImxpc3RWaWV3c1wiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZpZXddPVwic2VsZWN0ZWRWaWV3XCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXllZENvbHVtbnNdID0gJ2Rpc3BsYXllZENvbHVtbnMnXG4gICAgICAgICAgICAgICAgICAgIFt0YWJsZUZpbHRlckFycmF5XT1cInRhYmxlRmlsdGVyQXJyYXlcIlxuICAgICAgICAgICAgICAgICAgICAobGlzdFZpZXdFbWl0KT1cImxpc3RWaWV3RW1pdCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtbGlzdC12aWV3LWZpbHRlcj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiKCFsaXN0Vmlld3MgfHwgbGlzdFZpZXdzLmxlbmd0aCA9PT0gMCkgJiYgaXNOb3NJbmRpY2F0b3JcIiBjbGFzcz1cIm5vT2ZSZWNcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9XCJmb250LXdlaWdodDogNTAwOyBtYXJnaW4tcmlnaHQ6IDVweDsgbWFyZ2luLWJvdHRvbTogMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgTm9zIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImNvbG9yOiByZ2IoNDMsIDg3LCAyNDkpO1wiPnt7dG90YWxSZWNvcmRzIHx8IHRvdGFsQ291bnR9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hCYXJcIiBjbGFzcz1cInNlYXJjaFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBzZWFyY2gtYmFyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjY0MTMgMTkuMjVDMTYuNjMyMiAxOS4yNSAyMC42NzgxIDE1LjM1MTEgMjAuNjc4MSAxMC41NDE3QzIwLjY3ODEgNS43MzIxOCAxNi42MzIyIDEuODMzMzMgMTEuNjQxMyAxLjgzMzMzQzYuNjUwNCAxLjgzMzMzIDIuNjA0NDkgNS43MzIxOCAyLjYwNDQ5IDEwLjU0MTdDMi42MDQ0OSAxNS4zNTExIDYuNjUwNCAxOS4yNSAxMS42NDEzIDE5LjI1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM3ODc0ODZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjEuNjI5NSAyMC4xNjY3TDE5LjcyNzEgMTguMzMzM1wiIHN0cm9rZT1cIiM3ODc0ODZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cInNlYXJjaENvbmZpZ3MgPyBlbXB0eVNlYXJjaCgkZXZlbnQudGFyZ2V0LnZhbHVlKSA6IGFwcGx5RmlsdGVyKCRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic2VhcmNoQm94VmFsdWUgfHwgJydcIiAjaW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwic2VhcmNoQ29uZmlncyAmJiBzZWFyY2hCYXJcIiBjbGFzcz1cImNvbmZpZ1NlYXJjaFwiIChjbGljayk9XCJvblNlYXJjaChpbnB1dC52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDVIMjBcIiBzdHJva2U9XCIjZmZmZmZmXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDhIMTdcIiBzdHJva2U9XCIjZmZmZmZmXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIxIDExLjVDMjEgMTYuNzUgMTYuNzUgMjEgMTEuNSAyMUM2LjI1IDIxIDIgMTYuNzUgMiAxMS41QzIgNi4yNSA2LjI1IDIgMTEuNSAyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI2ZmZmZmZlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMiAyMkwyMCAyMFwiIHN0cm9rZT1cIiNmZmZmZmZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIiAqbmdJZj1cImlzQnV0dG9uc1wiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA3cHg7IGdhcDogN3B4O1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiICpuZ0Zvcj1cImxldCBidXR0b24gb2YgYnV0dG9uQXJyYXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxueHQtYnV0dG9uIGNsYXNzPVwiZGF0YS10YWJsZS1mc2J0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1dHRvbkNsaWNrRW1pdCk9XCIoYnV0dG9uLnR5cGUgPT09ICdncm91cCcgfHwgYnV0dG9uLnR5cGUgPT09ICdkcm9wZG93bicpID8gY29tbW9uQnV0dG9uQ2xpY2soJGV2ZW50KSA6IGNvbW1vbkJ1dHRvbkNsaWNrKGJ1dHRvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtidXR0b25UeXBlXT1cImJ1dHRvbi5jbGFzc1wiIFtidXR0b25WYWx1ZV09XCJidXR0b24ubmFtZVwiIFtidXR0b25Db25maWddPVwiYnV0dG9uLmJ1dHRvbkNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiYnV0dG9uLnR5cGVcIiBjbGFzcz1cIm1zLTIgbWUtMlwiIFtmY0J0bkljb25MZWZ0U3JjXT1cImJ1dHRvbi5mY0J0bkljb25MZWZ0U3JjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNJbWFnZVN2Z109XCJidXR0b24uaXNJbWFnZVN2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9ueHQtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtbWFyZ2luXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyXCIgW25nU3R5bGVdPVwieyBoZWlnaHQ6IGlzUGFnaW5hdGlvbiA/ICc0NTBweCcgOiAnYXV0bycgfVwiICN0YWJsZUNvbnRhaW5lclxuICAgICAgICAgICAgICAgIChzY3JvbGwpPVwib25TY3JvbGwodGFibGVDb250YWluZXIpXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS10YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgVGFibGUgSGVhZGVyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRlclwiIFtuZ0NsYXNzXT1cInsgJ3NoYWRvdyc6IGlzU2Nyb2xsZWQgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgQ2hlY2tib3ggQ29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwid2l0aENoZWNrQm94XCIgY2xhc3M9XCJ0YWJsZS1jZWxsIHN0aWNreS1jb2x1bW4gaGVhZC1jb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoY2hhbmdlKT1cIm1hc3RlclRvZ2dsZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3Rpb24/Lmhhc1ZhbHVlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdGlvbj8uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBEYXRhIENvbHVtbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjdXJyZW50RGlzcGxheWVkQ29sdW1uczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYmxlLWNlbGwgdGFibGVIZWFkZXIgaGVhZC1jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc3RpY2t5LWNvbHVtbl09XCJpID09PSAoc3RpY2t5Q29uZGl0aW9uIC0gMSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZS1jb2x1bW5dPVwiYWN0aXZlQ29sdW1uID09PSBjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkLWNvbHVtbl09XCJpc0VkaXRhYmxlICYmIHNlbGVjdGVkQ29sdW1uID09PSBjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25Db2x1bW5DbGljayhjb2x1bW4pOyBjdXJyZW50U29ydENvbHVtbnMuaW5jbHVkZXMoY29sdW1uKSA/IHNvcnREYXRhKGNvbHVtbikgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJob3ZlcmVkQ29sdW1uID0gY29sdW1uXCIgKG1vdXNlbGVhdmUpPVwiaG92ZXJlZENvbHVtbiA9IG51bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5EaXZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFkZCBjbG9zZSBidXR0b24gZm9yIHNlbGVjdGVkIGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRWRpdGFibGUgJiYgc2VsZWN0ZWRDb2x1bW4gPT09IGNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNsb3NlLWNvbHVtbi1idG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgcmVtb3ZlQ29sKGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKclVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVsbGlwc2lzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjdXJyZW50SGVhZGVyTGFiZWxzW2N1cnJlbnREaXNwbGF5ZWRDb2x1bW5zLmluZGV4T2YoY29sdW1uKV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRIZWFkZXJMYWJlbHNbY3VycmVudERpc3BsYXllZENvbHVtbnMuaW5kZXhPZihjb2x1bW4pXSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiY3VycmVudEZpbHRlckNvbHVtbnMuaW5jbHVkZXMoY29sdW1uKVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGZpbHRlcihjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDJweDtcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTIgMTFcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwLjc1IDEuMjVIMC43NUw0Ljc1IDUuNzE3MjJWOC44MDU1Nkw2Ljc1IDkuNzVWNS43MTcyMkwxMC43NSAxLjI1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMyNDI1MzNcIiBzdHJva2Utd2lkdGg9XCIxLjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IFJlZCBkb3QgZm9yIGFjdGl2ZSBmaWx0ZXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlckRhdGFBcnJheSAmJiBmaWx0ZXJEYXRhQXJyYXlbY29sdW1uXT8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN4PVwiOVwiIGN5PVwiMlwiIHI9XCIyLjVcIiBmaWxsPVwicmVkXCI+PC9jaXJjbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50U29ydENvbHVtbnMuaW5jbHVkZXMoY29sdW1uKVwiIGNsYXNzPVwic29ydC1pbmRpY2F0b3JzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjdXJyZW50U29ydENvbHVtbiA9PT0gY29sdW1uXCIgY2xhc3M9XCJzb3J0LWRpcmVjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAn4oaRJyA6IGN1cnJlbnRTb3J0RGlyZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PSAnZGVzYycgPyAn4oaTJyA6ICcnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaG92ZXJlZENvbHVtbiA9PT0gY29sdW1uICYmIGN1cnJlbnRTb3J0Q29sdW1uICE9PSBjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNvcnQtZGlyZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKGkVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaEZpbHRlciAmJiBjb2x1bW4gPT09IHNlbGVjdGVkRmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1jb21wb25lbnQgcG9zaXRpb24tYWJzb2x1dGVcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmc2VhcmNoXCIgW2NsYXNzLnJlc2l6ZWRdPVwiaXNSZXNpemVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmc2VhcmNoLWJhclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInNlYXJjaFN2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIyMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyMlwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMS42NDEzIDE5LjI1QzE2LjYzMjIgMTkuMjUgMjAuNjc4MSAxNS4zNTExIDIwLjY3ODEgMTAuNTQxN0MyMC42NzgxIDUuNzMyMTggMTYuNjMyMiAxLjgzMzMzIDExLjY0MTMgMS44MzMzM0M2LjY1MDQgMS44MzMzMyAyLjYwNDQ5IDUuNzMyMTggMi42MDQ0OSAxMC41NDE3QzIuNjA0NDkgMTUuMzUxMSA2LjY1MDQgMTkuMjUgMTEuNjQxMyAxOS4yNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNzg3NDg2XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIxLjYyOTUgMjAuMTY2N0wxOS43MjcxIDE4LjMzMzNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNzg3NDg2XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwid2lkdGgtMTAwXCIgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImlzUmVzaXplZFwiIChjbGljayk9XCJjbG9zZWZpbHRlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjbG9zZS1pY29uXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkuMTY5OTggMTQuODNMMTQuODMgOS4xNzAwMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQuODMgMTQuODNMOS4xNjk5OCA5LjE3MDAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOSAyMkgxNUMyMCAyMiAyMiAyMCAyMiAxNVY5QzIyIDQgMjAgMiAxNSAySDlDNCAyIDIgNCAyIDlWMTVDMiAyMCA0IDIyIDkgMjJaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1jb250ZW50XCIgW3N0eWxlXT1cIidvdmVyZmxvdy15OiBhdXRvJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGEgb2YgZmlsdGVyQXJyYXkgfCBzZWFyY2hGaWx0ZXIgOiBzZWFyY2hUZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIG1iLTMgY2hlY2tib3hkaXZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJnYXA6IDVweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0ZWQoZGF0YSlcIiBbdmFsdWVdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImRhdGFcIiAoY2hhbmdlKT1cImNoZWNrZWREYXRhKGRhdGEpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXMtMiBsYWJlbC1kYXRhXCI+e3tkYXRhfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc2l6ZS1oYW5kbGVcIj48L2Rpdj4gPCEtLVNLUzE1RkVCMjUgYXBwUm93UmVzaXplciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBBY3Rpb24gQ29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aW9uQnV0dG9uIHx8IGlzRGVsZXRlUm93IHx8IGlzRWRpdFJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYmxlLWNlbGwgaGVhZC1jb2xvciBhY3Rpb25Db2wgc3RpY2t5LWNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDEycHggIWltcG9ydGFudDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YWN0aW9uQ29sdW1IZWFkZXJ9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBUYWJsZSBCb2R5IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWJvZHlcIiAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIGRhdGFTb3VyY2UuZGF0YTsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwidGFibGUtcm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRhYmxlQ2xpY2soZWxlbWVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgQ2hlY2tib3ggQ2VsbCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndpdGhDaGVja0JveFwiIGNsYXNzPVwidGFibGUtY2VsbCBzdGlja3ktY29sdW1uIGJvZHktY29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImN1c3RvbS1jaGVja2JveFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VwYXJhdGVSb3dTZWxlY3Qoc2VsZWN0aW9uLnRvZ2dsZShlbGVtZW50KSwgZWxlbWVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvbi5pc1NlbGVjdGVkKGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiKGVsZW1lbnQuaXNQYXlQcm9jZXNzZWQgPT09IHRydWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IERhdGEgQ2VsbHMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjdXJyZW50RGlzcGxheWVkQ29sdW1uczsgbGV0IGxhc3QgPSBsYXN0OyBlbGxpcHNpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYmxlLWNlbGwgYm9keS1jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWQtY2VsbF09XCJpc0VkaXRhYmxlICYmIHNlbGVjdGVkQ29sdW1uID09PSBjb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImh5cGVyTGlua0NvbHVtbnM/LmluY2x1ZGVzKGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGF0ZUNvbHVtbihjb2x1bW4pOyBlbHNlIGNoZWNrVGltZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwib25DbGlja0h5cGVybGluayhjb2x1bW4sZWxlbWVudCwgY2hlY2tIeXBlcmxpbmtDaGVjayhjb2x1bW4pKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2NoZWNrSHlwZXJsaW5rQ2hlY2soY29sdW1uKSA/ICcgaHlwZXItbGluayBjbGlja2FibGUgJyA6ICcnfX0gZWxsaXBzaXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7e3Jvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCd9fTsgY29sb3I6IHt7cm93VGV4dENvbG9yID8gcm93VGV4dENvbG9yIDogJyMyYzMxMzcnfX07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgKCctJyB8IGdldFZhbHVlOiBlbGVtZW50IDogY29sdW1uKSB8IGRhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjaGVja1RpbWU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNUaW1lQ29sdW1uKGNvbHVtbik7IGVsc2UgZGVmYXVsdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIm9uQ2xpY2tIeXBlcmxpbmsoY29sdW1uLGVsZW1lbnQsIGNoZWNrSHlwZXJsaW5rQ2hlY2soY29sdW1uKSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7Y2hlY2tIeXBlcmxpbmtDaGVjayhjb2x1bW4pID8gJyBoeXBlci1saW5rIGNsaWNrYWJsZSAnIDogJyd9fSBlbGxpcHNpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7e3Jvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCd9fTsgY29sb3I6IHt7cm93VGV4dENvbG9yID8gcm93VGV4dENvbG9yIDogJyMyYzMxMzcnfX07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICgnLScgfCBnZXRWYWx1ZTogZWxlbWVudCA6IGNvbHVtbikgfCB0aW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwib25DbGlja0h5cGVybGluayhjb2x1bW4sZWxlbWVudCwgY2hlY2tIeXBlcmxpbmtDaGVjayhjb2x1bW4pKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2NoZWNrSHlwZXJsaW5rQ2hlY2soY29sdW1uKSA/ICcgaHlwZXItbGluayBjbGlja2FibGUgJyA6ICcnfX0gZWxsaXBzaXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7e3Jvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCd9fTsgY29sb3I6IHt7cm93VGV4dENvbG9yID8gcm93VGV4dENvbG9yIDogJyMyYzMxMzcnfX07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJy0nIHwgZ2V0VmFsdWU6IGVsZW1lbnQgOiBjb2x1bW4gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSByaWdodG5hdiBjb2x1bW4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvYmplY3RDb2x1bW5zPy5pbmNsdWRlcyhjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibXMtMlwiIChjbGljayk9XCJvblNpZGVOYXZJbmZvQ2xpY2soZWxlbWVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjAwMDMzIDExLjgzMzRDMi43Nzg2NiAxMS44MzM0IDAuMTY2OTkyIDkuMjIxNzEgMC4xNjY5OTIgNi4wMDAwOEMwLjE2Njk5MiAyLjc3ODQyIDIuNzc4NjYgMC4xNjY3NDggNi4wMDAzMyAwLjE2Njc0OEM5LjIyMTk2IDAuMTY2NzQ4IDExLjgzMzcgMi43Nzg0MiAxMS44MzM3IDYuMDAwMDhDMTEuODMzNyA5LjIyMTcxIDkuMjIxOTYgMTEuODMzNCA2LjAwMDMzIDExLjgzMzRaTTUuNDE2OTkgNS40MTY3NVY4LjkxNjc1SDYuNTgzNjZWNS40MTY3NUg1LjQxNjk5Wk01LjQxNjk5IDMuMDgzNDFWNC4yNTAwOEg2LjU4MzY2VjMuMDgzNDFINS40MTY5OVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzQzNDU1NVwiIGZpbGwtb3BhY2l0eT1cIjAuNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWVkaXRDb2x1bW4/LmluY2x1ZGVzKGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFjaGVja0h5cGVybGlua0NoZWNrKGNvbHVtbikgJiYgIWZpbGVDb2x1bW5zPy5pbmNsdWRlcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7e3Jvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCd9fTsgY29sb3I6IHt7cm93VGV4dENvbG9yID8gcm93VGV4dENvbG9yIDogJyMyYzMxMzcnfX07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNEYXRlQ29sdW1uKGNvbHVtbik7IGVsc2UgY2hlY2tUaW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRWYWx1ZShlbGVtZW50LGNvbHVtbikgfCBkYXRlIH19IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICgnLScgfCBnZXRWYWx1ZTogZWxlbWVudCA6IGNvbHVtbikgfCBkYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2hlY2tUaW1lPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1RpbWVDb2x1bW4oY29sdW1uKTsgZWxzZSBkZWZhdWx0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ge3sgZ2V0VmFsdWUoZWxlbWVudCxjb2x1bW4pIHwgdGltZSB9fSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgKCctJyB8IGdldFZhbHVlOiBlbGVtZW50IDogY29sdW1uKSB8IHRpbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7eyBnZXRWYWx1ZShlbGVtZW50LGNvbHVtbil9fSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnLScgfCBnZXRWYWx1ZTogZWxlbWVudCA6IGNvbHVtbiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IHJpZ2h0bmF2IGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvYmplY3RDb2x1bW5zPy5pbmNsdWRlcyhjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cIm1zLTJcIiAoY2xpY2spPVwib25TaWRlTmF2SW5mb0NsaWNrKGVsZW1lbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuMDAwMzMgMTEuODMzNEMyLjc3ODY2IDExLjgzMzQgMC4xNjY5OTIgOS4yMjE3MSAwLjE2Njk5MiA2LjAwMDA4QzAuMTY2OTkyIDIuNzc4NDIgMi43Nzg2NiAwLjE2Njc0OCA2LjAwMDMzIDAuMTY2NzQ4QzkuMjIxOTYgMC4xNjY3NDggMTEuODMzNyAyLjc3ODQyIDExLjgzMzcgNi4wMDAwOEMxMS44MzM3IDkuMjIxNzEgOS4yMjE5NiAxMS44MzM0IDYuMDAwMzMgMTEuODMzNFpNNS40MTY5OSA1LjQxNjc1VjguOTE2NzVINi41ODM2NlY1LjQxNjc1SDUuNDE2OTlaTTUuNDE2OTkgMy4wODM0MVY0LjI1MDA4SDYuNTgzNjZWMy4wODM0MUg1LjQxNjk5WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzQzNDU1NVwiIGZpbGwtb3BhY2l0eT1cIjAuNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0tTMThNQVIyNSBmaWxlIGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZpbGVDb2x1bW5zPy5pbmNsdWRlcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7eyByb3dUZXh0U2l6ZSA/IHJvd1RleHRTaXplIDogJzEzcHgnIH19OyBjb2xvcjoge3tyb3dUZXh0Q29sb3IgPyByb3dUZXh0Q29sb3IgOiAnIzJjMzEzNyd9fTtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwb3BvdmVyLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUcmlnZ2VyIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdmVyLWJhc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTQgMTZcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTMgNy43ODUyNUw3LjA0ODU5IDEzLjc2MDJDNi44MTc2NyAxMy45OTQ1IDYuNTQyMTcgMTQuMTgwNSA2LjIzODE5IDE0LjMwNzZDNS45MzQyIDE0LjQzNDYgNS42MDc4NCAxNC41IDUuMjc4MTcgMTQuNUM0Ljk0ODQ5IDE0LjUgNC42MjIxMyAxNC40MzQ2IDQuMzE4MTQgMTQuMzA3NkM0LjAxNDE2IDE0LjE4MDUgMy43Mzg2NiAxMy45OTQ1IDMuNTA3NzQgMTMuNzYwMkwxLjcyNzMyIDExLjk1NzhDMS4yNjEyNCAxMS40ODY0IDEgMTAuODUxNiAxIDEwLjE5MDJDMSA5LjUyODc2IDEuMjYxMjQgOC44OTM4OCAxLjcyNzMyIDguNDIyNTdMOC4wNjg4MyAyLjA4OTEzQzguMjU0OCAxLjkwMjQ1IDguNDc2MDUgMS43NTQyOSA4LjcxOTgzIDEuNjUzMTdDOC45NjM2MSAxLjU1MjA2IDkuMjI1MDggMS41IDkuNDg5MTcgMS41QzkuNzUzMjUgMS41IDEwLjAxNDcgMS41NTIwNiAxMC4yNTg1IDEuNjUzMTdDMTAuNTAyMyAxLjc1NDI5IDEwLjcyMzUgMS45MDI0NSAxMC45MDk1IDIuMDg5MTNMMTEuNjE5NyAyLjc5NjE2QzExLjgwNzIgMi45ODEzMSAxMS45NTYgMy4yMDE1OSAxMi4wNTc2IDMuNDQ0MjlDMTIuMTU5MSAzLjY4Njk5IDEyLjIxMTQgMy45NDczMSAxMi4yMTE0IDQuMjEwMjNDMTIuMjExNCA0LjQ3MzE2IDEyLjE1OTEgNC43MzM0OCAxMi4wNTc2IDQuOTc2MThDMTEuOTU2IDUuMjE4ODggMTEuODA3MiA1LjQzOTE2IDExLjYxOTcgNS42MjQzMUw1Ljk5ODM0IDExLjI0MDhDNS45MDUzNSAxMS4zMzQxIDUuNzk0NzIgMTEuNDA4MiA1LjY3Mjg0IDExLjQ1ODdDNS41NTA5NSAxMS41MDkzIDUuNDIwMjEgMTEuNTM1MyA1LjI4ODE3IDExLjUzNTNDNS4xNTYxMiAxMS41MzUzIDUuMDI1MzkgMTEuNTA5MyA0LjkwMzUgMTEuNDU4N0M0Ljc4MTYxIDExLjQwODIgNC42NzA5OCAxMS4zMzQxIDQuNTc4IDExLjI0MDhMNC4yMjc5MSAxMC44ODIzQzQuMTM0MTYgMTAuNzg5NyA0LjA1OTc1IDEwLjY3OTUgNC4wMDg5NyAxMC41NTgyQzMuOTU4MTkgMTAuNDM2OCAzLjkzMjA1IDEwLjMwNjcgMy45MzIwNSAxMC4xNzUyQzMuOTMyMDUgMTAuMDQzOCAzLjk1ODE5IDkuOTEzNjEgNC4wMDg5NyA5Ljc5MjI2QzQuMDU5NzUgOS42NzA5MSA0LjEzNDE2IDkuNTYwNzcgNC4yMjc5MSA5LjQ2ODE5TDcuOTk4ODEgNS43NDM4MVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNDM0NTU1XCIgc3Ryb2tlLXdpZHRoPVwiMS4zXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQb3BvdmVyIENvbnRlbnQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG92ZXItY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJleHBlbnNlQ29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRhdGEgb2YgZWxlbWVudFtjb2x1bW5dXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZXhwZW5zZS1maWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwZW5zZUF0dGFjaG1lbnQoZGF0YT8uZmlsZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhPy5maWxlTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgYWRkZWQgaW5wdXQgYm94IGZvciBpbmxpbmUgZWRpdCBpbnB1dC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJlZGl0Q29sdW1uICYmIGVkaXRDb2x1bW4ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiICgnLScgfCBlZGl0Q29sdW1uQ2hlY2s6IGNvbHVtbiA6IGVkaXRDb2x1bW4pID09PSAoJ3N0cmluZycpIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm9uLWVkaXQgZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgI2VkaXRDb2xFbGVtZW50IGNsYXNzPVwibnh0LWxvcC1pbnB1dCB0YWJsZS13aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IHt7IHJvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCcgfX07IGNvbG9yOiB7e3Jvd1RleHRDb2xvciA/IHJvd1RleHRDb2xvciA6ICcjMmMzMTM3J319O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImVsZW1lbnQuZWRpdFJvdyA/ICdpbnB1dC1ib3gnIDogJycgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJlbGVtZW50LmVkaXRSb3cgPyAnRW50ZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldFZhbHVlKGVsZW1lbnQsY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlRWRpdChpLCRldmVudCwgZWxlbWVudCxjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiZWxlbWVudC5lZGl0Um93ID8gZmFsc2UgOiB0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBJbiB0YWJsZSwgbGlrZSB0ZXh0IGlucHV0LCBhZGRlZCBkcm9wIGRvd24gYW5kIHRpbWUgaW5wdXRzIGFzIHdlbGwgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIgKCctJyB8IGVkaXRDb2x1bW5DaGVjazogY29sdW1uIDogZWRpdENvbHVtbikgPT09ICgnb2JqZWN0JykgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwib24tZWRpdCBkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiICgnLScgfCBlZGl0Q29sdW1uVHlwZTogY29sdW1uIDogZWRpdENvbHVtbikgPT09ICgndGV4dCcpIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2VkaXRDb2xFbGVtZW50IGNsYXNzPVwibnh0LWxvcC1pbnB1dCB0YWJsZS13aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IHt7IHJvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCcgfX07IGNvbG9yOiB7e3Jvd1RleHRDb2xvciA/IHJvd1RleHRDb2xvciA6ICcjMmMzMTM3J319O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImVsZW1lbnQuZWRpdFJvdyA/ICdpbnB1dC1ib3gnIDogJycgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJlbGVtZW50LmVkaXRSb3cgPyAnRW50ZXInIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldFZhbHVlKGVsZW1lbnQsY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlRWRpdChpLCRldmVudCxlbGVtZW50LGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJlbGVtZW50LmVkaXRSb3cgPyBmYWxzZSA6IHRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiICgnLScgfCBlZGl0Q29sdW1uVHlwZTogY29sdW1uIDogZWRpdENvbHVtbikgPT09ICgndGltZScpIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRpbWVcIiBjbGFzcz1cIm54dC1sb3AtaW5wdXQgdGFibGUtd2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7eyByb3dUZXh0U2l6ZSA/IHJvd1RleHRTaXplIDogJzEzcHgnIH19OyBjb2xvcjoge3tyb3dUZXh0Q29sb3IgPyByb3dUZXh0Q29sb3IgOiAnIzJjMzEzNyd9fTtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldFZhbHVlKGVsZW1lbnQsY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImVsZW1lbnQuZWRpdFJvdyA/ICdpbnB1dC1ib3gnIDogJycgXCIgcGxhY2Vob2xkZXI9XCJISDptbTpzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlRWRpdChpLCRldmVudCxlbGVtZW50LGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJlbGVtZW50LmVkaXRSb3cgPyBmYWxzZSA6IHRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiICgnLScgfCBlZGl0Q29sdW1uVHlwZTogY29sdW1uIDogZWRpdENvbHVtbikgPT09ICgnZHJvcGRvd24nKSBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IHR5cGU9XCJkcm9wZG93blwiICpuZ0lmPVwiZWxlbWVudC5lZGl0Um93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJueHQtbG9wLWlucHV0IHRhYmxlLXdpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IHt7IHJvd1RleHRTaXplID8gcm93VGV4dFNpemUgOiAnMTNweCcgfX07IGNvbG9yOiB7e3Jvd1RleHRDb2xvciA/IHJvd1RleHRDb2xvciA6ICcjMmMzMTM3J319O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJlbGVtZW50LmVkaXRSb3cgPyAnaW5wdXQtYm94JyA6ICcnIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUVkaXQoaSwkZXZlbnQsZWxlbWVudCxjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW2Rpc2FibGVkXT1cImVsZW1lbnQuZWRpdFJvdyA/IGZhbHNlIDogdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBbXSB8IGVkaXRDb2x1bW5Ecm9wZG93bjogY29sdW1uIDogZWRpdENvbHVtbiBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZGF0YS52YWx1ZSB8fCBkYXRhLm5hbWVcIj57e2RhdGEubmFtZX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiIWVsZW1lbnQuZWRpdFJvd1wiICNlZGl0Q29sRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm54dC1sb3AtaW5wdXQgdGFibGUtd2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZToge3sgcm93VGV4dFNpemUgPyByb3dUZXh0U2l6ZSA6ICcxM3B4JyB9fTsgY29sb3I6IHt7cm93VGV4dENvbG9yID8gcm93VGV4dENvbG9yIDogJyMyYzMxMzcnfX07XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImVsZW1lbnQuZWRpdFJvdyA/ICdpbnB1dC1ib3gnIDogJycgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwiZWxlbWVudC5lZGl0Um93ID8gJ0VudGVyJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0VmFsdWUoZWxlbWVudCxjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlRWRpdChpLCRldmVudCxlbGVtZW50LGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgQWN0aW9uIEJ1dHRvbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25CdXR0b24gfHwgaXNEZWxldGVSb3cgfHwgaXNFZGl0Um93XCIgY2xhc3M9XCJ0YWJsZS1jZWxsIGFjdGlvbkNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbkJ1dHRvblwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IEVkaXQgQnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0VkaXRSb3dcIiBjbGFzcz1cImVpY29uLWNvbnRhaW5lclwiIG1hdFRvb2x0aXA9XCJFZGl0IFJlY29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMnB4OyBib3JkZXI6IDFweCBzb2xpZCAjZGNkY2RjOyBib3JkZXItcmFkaXVzOiA1cHg7IG1hcmdpbi1sZWZ0OiAzcHg7IG1hcmdpbi1yaWdodDogM3B4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIGVkaXQtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDJweCA0cHg7IGJvcmRlci1yYWRpdXM6IDVweDsgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cIm9uRWRpdChlbGVtZW50KVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEuMTA2NyA2LjA3MTc0TDkuOTI4MzMgNC44OTM0TDIuMTY2NjcgMTIuNjU1MVYxMy44MzM0SDMuMzQ1TDExLjEwNjcgNi4wNzE3NFpNMTIuMjg1IDQuODkzNEwxMy40NjMzIDMuNzE1MDdMMTIuMjg1IDIuNTM2NzRMMTEuMTA2NyAzLjcxNTA3TDEyLjI4NSA0Ljg5MzRaTTQuMDM1IDE1LjUwMDFIMC41VjExLjk2NDJMMTEuNjk1OCAwLjc2ODQwM0MxMS44NTIxIDAuNjEyMTc3IDEyLjA2NCAwLjUyNDQxNCAxMi4yODUgMC41MjQ0MTRDMTIuNTA2IDAuNTI0NDE0IDEyLjcxNzkgMC42MTIxNzcgMTIuODc0MiAwLjc2ODQwM0wxNS4yMzE3IDMuMTI1OUMxNS4zODc5IDMuMjgyMTggMTUuNDc1NyAzLjQ5NDEgMTUuNDc1NyAzLjcxNTA3QzE1LjQ3NTcgMy45MzYwNCAxNS4zODc5IDQuMTQ3OTYgMTUuMjMxNyA0LjMwNDI0TDQuMDM1ODMgMTUuNTAwMUg0LjAzNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzZDNzU3RFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IERlbGV0ZSBCdXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRGVsZXRlUm93XCIgY2xhc3M9XCJkaWNvbi1jb250YWluZXJcIiBtYXRUb29sdGlwPVwiRGVsZXRlIFJlY29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMnB4OyBib3JkZXI6IDFweCBzb2xpZCAjZmZiNWI1OyBib3JkZXItcmFkaXVzOiA1cHg7IG1hcmdpbi1sZWZ0OiAzcHg7IG1hcmdpbi1yaWdodDogM3B4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVsZXRlLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAycHggNHB4OyBib3JkZXItcmFkaXVzOiA1cHg7IGJhY2tncm91bmQtY29sb3I6ICNmZWVlZWQ7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIChjbGljayk9XCJkZWxldGVSZWNvcmQoZWxlbWVudCxpKVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQgMy45ODcyNkMxMS43OCAzLjc2NzI2IDkuNTQ2NjcgMy42NTM5MyA3LjMyIDMuNjUzOTNDNiAzLjY1MzkzIDQuNjggMy43MjA2IDMuMzYgMy44NTM5M0wyIDMuOTg3MjZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTUuNjY2NSAzLjMxMzYyTDUuODEzMTcgMi40NDAyOEM1LjkxOTg0IDEuODA2OTUgNS45OTk4NCAxLjMzMzYyIDcuMTI2NSAxLjMzMzYySDguODczMTdDOS45OTk4NCAxLjMzMzYyIDEwLjA4NjUgMS44MzM2MiAxMC4xODY1IDIuNDQ2OTVMMTAuMzMzMiAzLjMxMzYyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMi41NjY3IDYuMDkzNzVMMTIuMTMzNCAxMi44MDcxQzEyLjA2IDEzLjg1MzcgMTIgMTQuNjY3MSAxMC4xNCAxNC42NjcxSDUuODYwMDJDNC4wMDAwMiAxNC42NjcxIDMuOTQwMDIgMTMuODUzNyAzLjg2NjY4IDEyLjgwNzFMMy40MzMzNSA2LjA5Mzc1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02Ljg4NjQ3IDExLjAwMDRIOS4xMDY0N1wiIHN0cm9rZT1cIiNGRjJDMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4zMzM1IDguMzMzMjVIOS42NjY4M1wiIHN0cm9rZT1cIiNGRjJDMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgUmVuZGVyIGlubGluZSBidXR0b25zIHVwIHRvIFNpemUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGFjdGlvbkJ1dHRvbkFycmF5Py5idXR0b25BcnJheTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaSA8IGFjdGlvbkJ1dHRvbkFycmF5Py5zaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiIG1hcmdpbi1sZWZ0OiAzcHg7IG1hcmdpbi1yaWdodDogM3B4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ29uZGl0aW9uTWV0KGVsZW1lbnQsIGJ1dHRvbi5jb25kaXRpb25zKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPWJ1dHRvbi50b29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbkJ1dHRvbkNsaWNrZWQoYnV0dG9uLGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCIkZXZlbnQudGFyZ2V0LnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgJyArIGJ1dHRvbi5ob3ZlckJvcmRlckNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCIkZXZlbnQudGFyZ2V0LnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgJyArIGJ1dHRvbi5ib3JkZXJDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAycHg7IGJvcmRlci1yYWRpdXM6IHt7YnV0dG9uLmJvcmRlclJhZGl1c319cHg7ICBib3JkZXI6IDFweCBzb2xpZCB7e2J1dHRvbi5ib3JkZXJDb2xvcn19O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKG1vdXNlZW50ZXIpPVwiJGV2ZW50LnRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBidXR0b24uaG92ZXJCYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCIkZXZlbnQudGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGJ1dHRvbi5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IHt7YnV0dG9uLnBhZGRpbmd9fXB4IHt7YnV0dG9uLnBhZGRpbmcgKyAyfX1weDsgYm9yZGVyLXJhZGl1czoge3tidXR0b24uYm9yZGVyUmFkaXVzfX1weDsgYmFja2dyb3VuZC1jb2xvcjoge3tidXR0b24uYmFja2dyb3VuZENvbG9yfX07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJidXR0b24uaWNvblNyY1wiICNpbWdFbGVtZW50IFtzcmNdPVwiYnV0dG9uLmljb25TcmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaW1nRWxlbWVudC5zcmMgPSBidXR0b24uaG92ZXJJY29uU3JjIHx8IGJ1dHRvbi5pY29uU3JjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImltZ0VsZW1lbnQuc3JjID0gYnV0dG9uLmljb25TcmNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZHJvcGRvd25BY3Rpb25CdXR0b24gJiYgZHJvcGRvd25BY3Rpb25CdXR0b24ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsaWNrYWJsZS1pbWdcIiAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCIgbWFyZ2luLWxlZnQ6IDNweDsgbWFyZ2luLXJpZ2h0OiAzcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1OyBwYWRkaW5nOiAycHggNHB4OyBib3JkZXItcmFkaXVzOiA1cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7IGJvcmRlci1yYWRpdXM6IDVweDsgYm9yZGVyOiAxcHggc29saWQgIzZjNzU3ZDtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE5Ljk5OTkgMjUuNjY2N0MyMy42ODE4IDI1LjY2NjcgMjYuNjY2NiAyMi42ODE5IDI2LjY2NjYgMTlDMjYuNjY2NiAxNS4zMTgxIDIzLjY4MTggMTIuMzMzNCAxOS45OTk5IDEyLjMzMzRDMTYuMzE4IDEyLjMzMzQgMTMuMzMzMyAxNS4zMTgxIDEzLjMzMzMgMTlDMTMuMzMzMyAyMi42ODE5IDE2LjMxOCAyNS42NjY3IDE5Ljk5OTkgMjUuNjY2N1pcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiMyOTJEMzJcIiBzdHJva2U9XCIjMjkyRDMyXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1taXRlcmxpbWl0PVwiMTBcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy42NDY3IDE4LjE2TDIwLjAwMDEgMjAuNTA2N0wyMi4zNTM0IDE4LjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnJpZ2h0XT1cIigoYWN0aW9uQnV0dG9uQXJyYXk/LnNpemUgPz8gMCkgLSAoYWN0aW9uQnV0dG9uQXJyYXk/LmJ1dHRvbkFycmF5Py5zaXplID8/IDApICsgKGlzRWRpdFJvdyA/IDEgOiAwKSArIChpc0RlbGV0ZVJvdyA/IDEgOiAwKSArIChkcm9wZG93bkFjdGlvbkJ1dHRvbj8ubGVuZ3RoID4gMCA/IDEgOiAwKSkgKiAxMDAgKyAnJSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjdXJyZW50T3BlbkluZGV4ID09PSBpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBidG4gb2YgZHJvcGRvd25BY3Rpb25CdXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNDb25kaXRpb25NZXQoZWxlbWVudCwgYnRuLmNvbmRpdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1pZF09XCJlbGVtZW50LmlkXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4taWNvbiB7e2J0bi5idXR0b25UeXBlfX0gdG9vbHRpcC1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09YnRuLnRvb2x0aXAgW2Rpc2FibGVkXT1cImJ0bi5idXR0b25EaXNhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbkJ1dHRvbkNsaWNrZWQoYnRuLGVsZW1lbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJidG4uaWNvblNyY1wiIFtzcmNdPVwiYnRuLmljb25TcmNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZjLWJ0bi10ZXh0XCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDEwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2J0bi5uYW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzIwTUFSMjUgU3VtbWFyeSBSb3dzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3VtbWFyeVJvd3MgJiYgc3VtbWFyeVJvd3MubGVuZ3RoID4gMCAmJiBpc1N1bW1hcnlDb2x1bW4gJiYgZGF0YVNvdXJjZS5kYXRhICYmIGRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCA+IDAgJiYgIWlzTG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBzdW1tYXJ5Um93c1wiIGNsYXNzPVwidGFibGUtcm93IHN1bW1hcnktcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTGFiZWwgaW4gdGhlIGZpcnN0IGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndpdGhDaGVja0JveFwiIGNsYXNzPVwibm9uLXN1bW1hcnktdGFibGUtY2VsbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEVtcHR5IGNlbGxzIHRvIGFsaWduIHdpdGggZGF0YSBjb2x1bW5zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2wgb2YgaXNTdW1tYXJ5U3RhcnRDb2x1bW47IGxldCBsYXN0ID0gbGFzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5vbi1zdW1tYXJ5LXRhYmxlLWNlbGxcIiBbY2xhc3MubGFzdC1jZWxsXT1cImxhc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IDwhLS0gVmFsdWUgb3IgaW5wdXQgaW4gdGhlIGxhc3QgY29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VtbWFyeS10YWJsZS1jZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZC1jZWxsXT1cImlzRWRpdGFibGUgJiYgc2VsZWN0ZWRDb2x1bW4gPT09IHJvdy5maWVsZE5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25Db2x1bW5DbGljayhyb3cuZmllbGROYW1lKVwiPnt7IHJvdy5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnktdGFibGUtY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWQtY2VsbF09XCJpc0VkaXRhYmxlICYmIHNlbGVjdGVkQ29sdW1uID09PSByb3cuZmllbGROYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LnR5cGUgPT09ICdjYWxjdWxhdGlvbidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFkZCBjbG9zZSBidXR0b24gZm9yIHNlbGVjdGVkIGNvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNFZGl0YWJsZSAmJiBzZWxlY3RlZENvbHVtbiA9PT0gcm93LmZpZWxkTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2xvc2UtY29sdW1uLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHJlbW92ZUNvbChyb3cuZmllbGROYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDinJVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdIHwgbnVtYmVyIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cudHlwZSA9PT0gJ2lucHV0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgWyhuZ01vZGVsKV09XCJzdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TdW1tYXJ5SW5wdXRDaGFuZ2UoKVwiIGNsYXNzPVwibnh0LWxvcC1pbnB1dCB0YWJsZS13aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC1zaXplOiB7eyByb3dUZXh0U2l6ZSA/IHJvd1RleHRTaXplIDogJzEzcHgnIH19OyBjb2xvcjoge3tyb3dUZXh0Q29sb3IgPyByb3dUZXh0Q29sb3IgOiAnIzJjMzEzNyd9fTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTS1MyME1BUjI1IEVtcHR5IGNlbGxzIHRvIGFsaWduIHdpdGggZGF0YSBjb2x1bW5zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2wgb2YgaXNTdW1tYXJ5RW5kQ29sdW1uOyBsZXQgbGFzdCA9IGxhc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJub24tc3VtbWFyeS10YWJsZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aW9uQnV0dG9uIHx8IGlzRGVsZXRlUm93IHx8IGlzRWRpdFJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5vbi1zdW1tYXJ5LXRhYmxlLWNlbGwgYWN0aW9uQ29sIHN0aWNreS1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzI4TUFSMjUgSW4gdGhlIExvYWRpbmcgc2VjdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5XCIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJlcGVhdCBmb3IgNSBza2VsZXRvbiByb3dzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IF8gb2YgWzEsMiwzLDQsNV1cIiBjbGFzcz1cInRhYmxlLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENoZWNrYm94IENvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndpdGhDaGVja0JveFwiIGNsYXNzPVwic2tlbGV0b24tY2VsbCBzdGlja3ktY29sdW1uXCI+PC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEYXRhIENvbHVtbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbCBvZiBjdXJyZW50RGlzcGxheWVkQ29sdW1uc1wiIGNsYXNzPVwic2tlbGV0b24tY2VsbCBcIj48L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFjdGlvbiBDb2x1bW4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25CdXR0b24gfHwgaXNEZWxldGVSb3cgfHwgaXNFZGl0Um93XCIgY2xhc3M9XCJza2VsZXRvbi1jZWxsIGFjdGlvbkNvbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBObyBEYXRhIFJvdyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkYXRhU291cmNlLmRhdGEgJiYgZGF0YVNvdXJjZT8uZGF0YT8ubGVuZ3RoID09PSAwICYmICFpc0xvYWRpbmcgJiYgZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJ1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gcmVjb3Jkcy9kYXRhIGZvdW5kLlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJkYXRhU291cmNlLmRhdGEgJiYgZGF0YVNvdXJjZT8uZGF0YT8ubGVuZ3RoID09PSAwICYmICFpc0xvYWRpbmcgJiYgZnJvbSA9PT0gJ2Zvcm1CdWlsZGVyJ1wiIGNsYXNzPVwiZm9ybS1idWlsZGVyLXRhYmxlLWJveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCAgLyBkcmFncyBmaWVsZHMgZnJvbSBlbGVtZW50cyBzZWN0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgUGFnaW5hdGlvbiAtLT5cbiAgICAgICAgICAgIDxkaXYgW2NsYXNzLnNoYWRvdy1oaWRkZW5dPVwiaXNTaGFkb3dIaWRkZW5cIj5cbiAgICAgICAgICAgICAgICA8IS0tIHRhYmxlIGlucHV0IHNhdmUgYnV0dG9uIGNoYW5nZXMgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBpbmxpbmVBZGQganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhZGRJY29uQm9yIGN1cnNvci1wb2ludGVyXCIgKm5nSWY9XCJhZGRJbmxpbmVSZWNvcmQgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRUYWJsZVJlY29yZChpbmxpbmVFbGVtZW50KVwiIG1hdFRvb2x0aXA9XCJBZGQgUmVjb3JkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRkSWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJuYXYtaWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiMjRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNDQwLTI4MGg4MHYtMTYwaDE2MHYtODBINTIwdi0xNjBoLTgwdjE2MEgyODB2ODBoMTYwdjE2MFptNDAgMjAwcS04MyAwLTE1Ni0zMS41VDE5Ny0xOTdxLTU0LTU0LTg1LjUtMTI3VDgwLTQ4MHEwLTgzIDMxLjUtMTU2VDE5Ny03NjNxNTQtNTQgMTI3LTg1LjVUNDgwLTg4MHE4MyAwIDE1NiAzMS41VDc2My03NjNxNTQgNTQgODUuNSAxMjdUODgwLTQ4MHEwIDgzLTMxLjUgMTU2VDc2My0xOTdxLTU0IDU0LTEyNyA4NS41VDQ4MC04MFptMC04MHExMzQgMCAyMjctOTN0OTMtMjI3cTAtMTM0LTkzLTIyN3QtMjI3LTkzcS0xMzQgMC0yMjcgOTN0LTkzIDIyN3EwIDEzNCA5MyAyMjd0MjI3IDkzWm0wLTMyMFpcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSByZW1vdmVkIGJ1dHRvbiBkaXNhYmxlIGxvZ2ljLCBhZGRlZCBhbm90aGVyIGNvbmRpdGlvbiBmb3IgYnV0dG9uIHNob3dpbmctLT5cbiAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgU1IwNkpBTjIwMjUgYnV0dG9uIGRpc2FibGUgbG9naWMgZm9yIG5vdCBzZWxlY3QgYW55IGVtcGxveWVlLS0+XG4gICAgICAgICAgICAgICAgICAgIDxueHQtYnV0dG9uICpuZ0lmPVwiKGVkaXRDb2x1bW4/Lmxlbmd0aCA+IDAgIHx8IHRhYmxlU2F2ZUJ1dHRvbikgJiYgZnJvbSAhPSAnZm9ybUJ1aWxkZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvblR5cGU9XCJidG4gYnRuLXByaW1hcnlcIiBbYnV0dG9uRGlzYWJsZV09XCJzZWxlY3Rpb24/LnNlbGVjdGVkPy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGJ1dHRvbkNsaWNrRW1pdCk9XCJzYXZlQnV0dG9uKClcIiBidXR0b25WYWx1ZT1cIlNhdmVcIj48L254dC1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG54dC1wYWdpbmF0aW9uICpuZ0lmPVwiaXNQYWdpbmF0aW9uXCIgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIiBbY29sbGVjdGlvblNpemVdPVwiY29uZmlnUGFnaW5hdGlvbiA/IHRvdGFsUmVjb3JkcyB8fCB0b3RhbENvdW50IDogZmlsdGVyVGFibGVOb3NcIlxuICAgICAgICAgICAgICAgICAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIiBbY3VycmVudFBhZ2VdPVwicGFnZUluZGV4XCIgW2ZpcnN0TGFzdEJ1dHRvbnNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChldmVudCk9XCJwYWdlUGFyYW1zKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8L254dC1wYWdpbmF0aW9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS1TS1MxNUZFQjI1IGFsZXJ0IG9uIGRlbGV0aW5nIHJlY29yZCAtLT5cbjxkaXYgKm5nSWY9XCJkZWxldGVNb2RhbFwiIGNsYXNzPVwibW9kYWwgbW9kYWwtYmFja2Ryb3Agc2hvdyAgZC1ibG9ja1wiIGlkPVwiZGVsZXRlUmVjb3JkXCIgdGFiaW5kZXg9XCItMVwiXG4gICAgYXJpYS1sYWJlbGxlZGJ5PVwiZGVsZXRlUmVjb3JkTGFiZWxcIiBbYXR0ci5hcmlhLWhpZGRlbl09XCIhZGVsZXRlTW9kYWxcIj5cbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGIgY2xhc3M9XCJtb2RhbC10aXRsZSBmcy01XCIgaWQ9XCJkZWxldGVSZWNvcmRMYWJlbFwiPkRlbGV0ZSBSZWNvcmQ8L2I+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVNb2RhbCA9IGZhbHNlXCI+PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgQXJlIHlvdSBzdXJlIHdhbnQgdG8gZGVsZXRlIHRoZSByZWNvcmQgP1xuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZU1vZGFsID0gZmFsc2VcIj5ObzwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlUmVjb3JkRGF0YSgpXCI+WWVzPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=
|