@rangertechnologies/ngnxt 2.1.253 → 2.1.254
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/custom-dropdown/custom-dropdown.component.mjs +3 -3
- package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +5 -3
- package/esm2022/lib/components/datatable/datatable.component.mjs +3 -16
- package/esm2022/lib/components/icon-selector/icon-selector.component.mjs +4 -3
- package/esm2022/lib/model/bookletWrapper.mjs +1 -3
- package/esm2022/lib/pages/booklet/booklet.component.mjs +8 -50
- package/esm2022/lib/pages/builder/element/element.component.mjs +6 -31
- package/esm2022/lib/pages/builder/properties/common-fields.constants.mjs +9 -9
- package/esm2022/lib/pages/builder/properties/properties.component.mjs +52 -20
- package/esm2022/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.mjs +3 -45
- package/esm2022/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.mjs +11 -15
- package/esm2022/lib/pages/questionbook/questionbook.component.mjs +5 -22
- package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +1 -14
- package/esm2022/lib/pipe/custom-translate.pipe.mjs +6 -5
- package/esm2022/lib/pipe/svg/svg.pipe.mjs +26 -0
- package/esm2022/lib/services/form-builder/form-builder.service.mjs +12 -38
- package/esm2022/lib/services/pdf-designer/pdf-designer.service.mjs +1 -4
- package/esm2022/lib/services/template/template.service.mjs +1 -17
- package/esm2022/lib/services/translation/translation.service.mjs +4 -4
- package/fesm2022/rangertechnologies-ngnxt.mjs +139 -283
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/lib/components/datatable/datatable.component.d.ts +0 -1
- package/lib/model/bookletWrapper.d.ts +0 -1
- package/lib/pages/booklet/booklet.component.d.ts +0 -2
- package/lib/pages/builder/element/element.component.d.ts +0 -3
- package/lib/pages/builder/properties/properties.component.d.ts +6 -2
- package/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.d.ts +0 -3
- package/lib/pages/questionbook/questionbook.component.d.ts +0 -1
- package/lib/pages/questionnaire/questionnaire.component.d.ts +0 -1
- package/lib/pipe/custom-translate.pipe.d.ts +1 -1
- package/lib/pipe/svg/svg.pipe.d.ts +10 -0
- package/lib/services/form-builder/form-builder.service.d.ts +1 -0
- package/lib/services/translation/translation.service.d.ts +1 -1
- package/package.json +1 -1
- package/rangertechnologies-ngnxt-2.1.254.tgz +0 -0
- package/rangertechnologies-ngnxt-2.1.253.tgz +0 -0
|
@@ -1587,24 +1587,11 @@ export class NxtDatatable {
|
|
|
1587
1587
|
reader.readAsDataURL(file);
|
|
1588
1588
|
});
|
|
1589
1589
|
}
|
|
1590
|
-
// SKS28MAR25 for nested book read
|
|
1591
|
-
readQuestions(qbId, ques) {
|
|
1592
|
-
let questions = [];
|
|
1593
|
-
// SKS22JUL25 Added ternary to avoid undefined
|
|
1594
|
-
for (var sq in ques.bookQuestionsMap[qbId].subQuestions) {
|
|
1595
|
-
let q = ques.bookQuestionsMap[qbId].subQuestions[sq];
|
|
1596
|
-
// if question is there process
|
|
1597
|
-
if (q) {
|
|
1598
|
-
questions.push(q);
|
|
1599
|
-
}
|
|
1600
|
-
}
|
|
1601
|
-
return questions;
|
|
1602
|
-
}
|
|
1603
1590
|
getDropDown(event) {
|
|
1604
1591
|
this.hadleDropDownDependent.emit(event);
|
|
1605
1592
|
}
|
|
1606
1593
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtDatatable, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TranslationService }, { token: i0.Renderer2 }, { token: i2.DataService }, { token: i3.ChangeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1607
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.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", mode: "mode", languageCode: "languageCode", selectedColumn: "selectedColumn", allIcons: "allIcons" }, 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", hadleDropDownDependent: "hadleDropDownDependent", 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\"\n style=\"padding-bottom: 20px;\">\n <div class=\"flex\">\n <!-- SKS26APR25 List View Filter -->\n <app-list-view-filter *ngIf=\"listViews && listViews.length > 0\" [listViews]=\"listViews\"\n [selectedView]=\"selectedView\" [displayedColumns]='columns' [tableFilterArray]=\"tableFilterArray\"\n (listViewEmit)=\"listViewEmit($event)\">\n </app-list-view-filter>\n <div *ngIf=\"(!listViews || listViews.length === 0) && isNosIndicator\" class=\"noOfRec\"\n style=\"display: flex; align-items: flex-end;\">\n <p style=\"font-weight: 500; margin-right: 5px; margin-bottom: 0px;\">\n {{ 'NOS' | nxtCustomTranslate : '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' | nxtCustomTranslate : '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\"\n [buttonValue]=\"button.labelPath || button.label || button.name | nxtCustomTranslate : button.label || button.name \"\n [buttonConfig]=\"button.buttonConfig\" [type]=\"button.type\" class=\"ms-2 me-2\"\n [btnIconLeftSrc]=\"button.btnIconLeftSrc\" [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\"\n [ngClass]=\"{ 'resizing': isResizing }\"\n [ngStyle]=\"{ maxHeight: isPagination ? '450px' : 'auto', minHeight: dataSource.data && dataSource?.data?.length === 0 && !isLoading && from !== 'formBuilder' ? '0px' : '100px' }\"\n #tableContainer (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\" [style.width]=\"'50px'\">\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 <ng-container *ngFor=\"let column of currentColumns; let i = index\">\n <div *ngIf=\"column.summaryColumn !== true && column.summaryRow !== true && column.isHide !== true\"\n class=\"table-cell tableHeader head-color\"\n [class.sticky-column]=\"i === (stickyCondition - 1)\"\n [class.active-column]=\"activeColumn === column.uniqueIdentifier\"\n [class.selected-column]=\"mode === 'edit' && isEditable && selectedColumn === column.uniqueIdentifier\"\n (click)=\"$event.stopPropagation(); onColumnClick(column.uniqueIdentifier); column.sort ? sortData(column.fieldName) : ''\"\n (mouseenter)=\"hoveredColumn = column.fieldName\" (mouseleave)=\"hoveredColumn = null\"\n [style.width]=\"column.width || '100px'\"\n [style.flex]=\"'0 0 ' + (column.width || '100px')\"\n [style.min-width]=\"'50px'\">\n <div class=\"columnDiv\">\n <div class=\"column-header\" [style.width]=\"column.width || '100px'\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"mode === 'edit' && isEditable && selectedColumn === column.uniqueIdentifier\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(column.uniqueIdentifier)\">\n \u2715\n </div>\n <div class=\"ellipsis\" style=\"flex: 1;\" [title]=\"column.label\">\n @if(column.labelPath){\n {{ column.labelPath | nxtCustomTranslate : column.label }}\n }\n @else {\n {{ (column.uniqueIdentifier+'.label') | nxtCustomTranslate : column.label }}\n }\n </div>\n <div>\n <svg *ngIf=\"column.filter\"\n (click)=\"$event.stopPropagation(); filter(column.fieldName)\"\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.fieldName]?.length > 0\"\n cx=\"9\" cy=\"2\" r=\"2.5\" fill=\"red\"></circle>\n </svg>\n <div *ngIf=\"column.sort\"\n class=\"sort-indicators\">\n <span *ngIf=\"currentSortColumn === column.fieldName\" class=\"sort-direction\">\n {{ currentSortDirection === 'asc' ? '\u2191' : currentSortDirection\n === 'desc' ? '\u2193' : '' }}\n </span>\n <span\n *ngIf=\"hoveredColumn === column.fieldName && currentSortColumn !== column.fieldName\"\n class=\"sort-direction\">\n \u2191\n </span>\n </div>\n <div *ngIf=\"searchFilter && column.fieldName === selectedFilter\"\n class=\"search-component position-absolute\"\n (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' | nxtCustomTranslate : '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 *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 <!-- Enhanced resize handle -->\n <div class=\"resize-handle\" \n (mousedown)=\"onResizeStart($event)\"\n title=\"Drag to resize column\"></div>\n </div>\n </div>\n </ng-container>\n\n <!--SKS15FEB25 Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"table-cell head-color actionCol sticky-column\"\n [style.width]=\"'150px'\"\n style=\"padding: 12px !important;\">\n {{ actionColumHeader | nxtCustomTranslate : 'Action'}}\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-col-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 <ng-container *ngFor=\"let column of currentColumns; let last = last; ellipsis\">\n <div *ngIf=\"column.summaryColumn !== true && column.summaryRow !== true && column.isHide !== true\"\n class=\"table-col-cell body-color\"\n [class.selected-cell]=\"mode === 'edit' && isEditable && selectedColumn === column.uniqueIdentifier\"\n [style.width]=\"column.width || '100px'\"\n [style.flex]=\"'0 0 ' + (column.width || '100px')\"\n [style.min-width]=\"'50px'\"\n [style.max-width]=\"column.width || '100px'\">\n <div>\n <div>\n <!-- SKS22JUL25 calendar -->\n <div *ngIf=\"column.type === 'calendar'\">\n <!-- <app-custom-calendar [question]=\"column | questionByRow:element:i\" (eventSelected)=\"getCalendarEvent($event)\"\n (dateSelected)=\"getCurrentCalendar($event)\" (openModal)=\"openCalendarModal($event)\"\n (closeModal)=\"closeCalendarModal($event)\"></app-custom-calendar>\n <app-custom-model *ngIf=\"isCalendarModalOpen\" [modalTitle]=\"calendarModalTitle\"\n [isModalOpen]=\"isCalendarModalOpen\" [modalSize]=\"calendarModalSize\"\n [saveButtonValue]=\"calendarSaveButtonValue\" [modalFooter]=\"modalCalendarModalFooter\"\n (saveButtonEmit)=\"onCalendarModalSave()\" (cancelButtonEmit)=\"closeCalendarModal($event)\">\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\"\n (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\n </app-custom-model> -->\n </div>\n\n <!-- SKS22JUL25 for pick location -->\n <app-pick-location *ngIf=\"column.type === 'location'\" [apiKey]=\"column['apiKey']\" [address]=\"question.selectedValue\" [question]=\"column | questionByRow:element:i\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n (locationSelected)=\"updateEdit(i,$event,element,column.fieldName)\">\n </app-pick-location>\n\n <!-- SKS22JUL25 Image -->\n <div *ngIf=\"column.type === 'image'\" (mouseenter)=\"isImageHover = true;\"\n (mouseleave)=\"isImageHover = false;\">\n <!-- <div *ngIf=\"isImageHover\" style=\"display: flex; justify-content: end;\">\n <svg *ngIf=\"!column.question?.isReadOnly\" (click)=\"onImageEdit(column.question)\" 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 <svg *ngIf=\"!column.question?.isReadOnly\" (click)=\"onImageDelete(column.question)\" 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\" 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\" 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\" stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div> -->\n <img *ngIf=\"column.question?.isReadOnly\" [src]=\"column.question?.imageData\" />\n <!-- <div *ngIf=\"!column.question?.isReadOnly\" class=\"logo-container\">\n Logo preview area\n <div class=\"logo-preview\" *ngIf=\"column.question?.input\">\n <img [src]=\"column.question?.imageData\" />\n </div>\n\n Upload button\n <div *ngIf=\"!column.question?.imageData\" class=\"logo-upload-placeholder\">\n <label for=\"logo-upload-{{i}}\" class=\"logo-upload-label\">\n <img src=\"../assets/icons/Image.svg\" alt=\"Upload\" />\n <span>Upload Image</span>\n </label>\n <input type=\"file\" id=\"logo-upload-{{i}}\" accept=\"image/*\"\n (change)=\"fileChangeEvent(column.question, $event)\" style=\"display: none;\" />\n </div>\n </div> -->\n </div>\n <!-- SKS22JUL25 icon-selector -->\n <nxt-icon-selector [allIcons]=\"allIcons\" *ngIf=\"column.type === 'icon'\" [required]=\"column.question?.isOptional\" [mode]=\"mode\" [question]=\"column | questionByRow:element:i\" [labelFont]=\"column.question?.font\"\n [label]=\"column.question?.questionText ? ((column?.question?.id+'.questionText') | nxtCustomTranslate : column?.question?.questionText) : ''\"\n [labelColor]=\"column.question?.fontColor\"\n [labelSize]=\"column.question?.fontSize\" [labelWeight]=\"column.question?.fontWeight\" [showLabel]=\"column.question?.style?.showLabel\" (iconSelected)=\"updateEdit(i,$event,element,column.fieldName)\"></nxt-icon-selector>\n\n <!-- SKS22JUL25 line -->\n <hr *ngIf=\"column.type === 'line'\" class=\"custom-line\" style=\"display: inline-flex\" />\n <!-- SKS22JUL25 data table -->\n <nxt-datatable *ngIf=\"column.type === 'table'\" isEditRow isDeleteRow actionButton isButtons [question]=\"column | questionByRow:element:i\" from=\"formBuilder\"\n (valueChange)=\"updateEdit(i,$event.data,element,column.fieldName)\" [apiMeta]=\"column.question?.subText\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\"\n [tableConfig]=\"column.question?.tableConfig\" tableId=\"\" direction=\"ltr\" tableWidth=\"auto\">\n </nxt-datatable>\n <!-- SKS22JUL25 list -->\n <nxt-search-box *ngIf=\"column.type === 'list'\" [question]=\"column | questionByRow:element:i\" [readOnly]=\"column.question?.isReadOnly\" [apiMeta]=\"column.question?.subText\"\n [id]=\"column.question?.id\" [placeHolderText]=\"column.question?.question || ''\" \n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view': element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n (searchValueChange)=\"updateEdit(i,$event.value,element,column.fieldName,column.type)\">\n </nxt-search-box>\n\n <!-- SKS22JUL25 Dropdown -->\n <app-custom-dropdown *ngIf=\"column?.type === 'dropdown' && column.question?.options\" [options]=\"column.question?.options\" [apiMeta]=\"column.question?.subText\"\n [id]=\"column.question?.id\" [selectedValue]=\"column.isShengel ? column.question?.input : column.question?.selectedValue\"\n placeholder=\"\"\n [errorMessage]=\"column.question?.errorMessage\" [error]=\"column.question?.error\" [referenceField]=\"column.question?.referenceField\"\n [readOnly]=\"column.question?.isReadOnly\" [question]=\"column | questionByRow:element:i\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n (valueChange)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\">\n </app-custom-dropdown>\n <!-- SKS22JUL25 custom-radio component -->\n <div *ngIf=\"column.type === 'radio' && column.question?.options\" class=\"\">\n <app-custom-radio [options]=\"column.question?.options\" [question]=\"column | questionByRow:element:i\" [apiMeta]=\"column.question?.subText\" [id]=\"column.question?.id\"\n [selectedValue]=\"column.question?.selectedValue\" [errorMessage]=\"column.question?.errorMessage\" [error]=\"column.question?.error\"\n [referenceField]=\"column.question?.referenceField\" [readOnly]=\"column.question?.isReadOnly\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\"\n (valueChange)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\">\n </app-custom-radio>\n </div>\n\n <!-- SKS22JUL25 Attachment / Files -->\n <app-file-upload *ngIf=\"column.type === 'file'\" [limitFileUploading]=\"5\" [error]=\"column.question?.error\" [question]=\"column | questionByRow:element:i\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n [allFiles]=\"column.question?.input\" (selectedFileData)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\"\n >\n </app-file-upload>\n <!-- SKS22JUL25 Button -->\n <nxt-button\n *ngIf=\"column.type === 'button'\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\"\n [btnHeight]=\"'50px'\" [btnWidth]=\"'150px'\" [buttonValue]=\"column.question?.question\"\n (buttonClickEmit)=\"updateEdit(i,$event,element,column.fieldName)\"\n >\n </nxt-button>\n <!-- SKS22JUL25 book type -->\n <!-- <lib-questionbook *ngIf=\"column.type === 'book'\" [qbItem]=\"column.question?.qbItem\"\n [questions]=\"readQuestions(column.question?.qbReference, column.question?.qbReferenceQuestions)\"\n (handleDropDown)=\"getDropDown($event)\">\n </lib-questionbook> -->\n <!-- SKS22JUL25 Text, Email, label, number, Boolean, rich text editor, DateTime, Date, Time-->\n <nxt-input *ngIf=\"column.type === undefined || column.type === 'text' || column.type === 'email' || column.type === 'number' || column.type === 'label' || column.type === 'boolean' || column.type === 'richtextarea' || column.type === 'datetime' || column.type === 'date' || column.type === 'time' || column.type === 'textarea'\"\n [type]=\"column.type === 'boolean' ? 'checkbox' : column.type === 'richtextarea' ? 'richtext' : column.type === undefined ? 'text' : column.type \"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n [value]=\"element | getValue: column.fieldName \"\n [hyperLink]=\"column.hyperLink\"\n (hyperlinkEmit)=\"onClickHyperlink(column.fieldName,element, column.hyperLink)\"\n [question]=\"column | questionByRow:element:i\"\n [labelFont]=\"column.question?.font\"\n [label]=\"column.question?.questionText ? ((column.question?.id+'.questionText') | nxtCustomTranslate : column.question?.questionText): ''\"\n [labelColor]=\"column.question?.fontColor\"\n [labelSize]=\"column.question?.fontSize\"\n [inputValueSize]=\"column.question?.fontSize\"\n [labelWeight]=\"column.question?.fontWeight\"\n [inputWeight]=\"column.question?.fontWeight\"\n [showLabel]=\"column.question?.style?.showLabel\"\n inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n [placeholder]=\"column.question?.question\"\n [required]=\"column.question?.isOptional\" inputBgColor=\"#FAFAFA\"\n [inputId]=\"column.question?.trackingId\"\n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"column.question?.iconLeftSrc\" \n [minDate]=\"column.question?.minDate\"\n [rows]=\"3\"\n (inputValue)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\"\n >\n </nxt-input>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!--SKS15FEB25 Action Buttons -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"table-col-cell actionCol\">\n <div class=\"actionButton\" style=\"display: flex; align-items: center;\">\n\n <!--SKS15FEB25 Edit Button -->\n <div *ngIf=\"isEditRow\" class=\"eicon-container\"\n matTooltip=\"{{ 'EDIT_RECORD' | nxtCustomTranslate : '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\"\n [matTooltip]=\"'DELETE_RECORD' | nxtCustomTranslate : '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.tooltipPath || button.tooltip | nxtCustomTranslate : 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.tooltipPath || btn.tooltip | nxtCustomTranslate : btn.tooltip\"\n [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 && dataSource.data && dataSource?.data?.length > 0 && !isLoading\">\n <ng-container *ngIf=\"!isFullTableSummaryRow && isSummaryColumn\">\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]=\"mode === 'edit' && isEditable && selectedColumn === row.uniqueIdentifier\"\n (click)=\"$event.stopPropagation(); onColumnClick(row.uniqueIdentifier)\">{{ (row.id+'.label') | nxtCustomTranslate : row?.label }}\n </div>\n <div class=\"summary-table-cell\"\n [class.selected-cell]=\"mode === 'edit' && isEditable && selectedColumn === row.uniqueIdentifier\">\n <ng-container *ngIf=\"row.type === 'calculation'\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"mode === 'edit' && isEditable && selectedColumn === row.uniqueIdentifier\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(row.uniqueIdentifier)\">\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()\"\n 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 <!-- SKS13JUN25 full table summary row -->\n <ng-container *ngIf=\"isFullTableSummaryRow\">\n <div *ngFor=\"let row of summaryRows\" class=\"table-row summary-row\">\n <!-- SKS13JUN25 Checkbox column (if enabled) -->\n <div *ngIf=\"withCheckBox\" class=\"horizontal-summary-table-cell\">\n {{ row.labelPath || row.label | nxtCustomTranslate : row.label }}\n </div>\n\n <!-- SKS13JUN25 summary cell -->\n <div *ngFor=\"let col of currentColumns; let last = last\"\n class=\"horizontal-summary-table-cell\" style=\"text-align: left;\">\n @if (row?.columns?.includes(col.fieldName)) {\n {{ summaryValues[col.fieldName] | number }}\n }\n </div>\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"horizontal-summary-table-cell actionCol sticky-column\">\n </div>\n </div>\n </ng-container>\n </ng-container>\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 currentColumns\" class=\"skeleton-cell \"></div>\n\n <!-- Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"skeleton-cell actionCol\">\n </div>\n </div>\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 No Data Row -->\n <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from !== 'formBuilder'\"\n class=\"no-data\">\n {{'NO_RECORDS_OR_DATA_FOUND' | nxtCustomTranslate : 'No records/data found.'}}\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)\"\n matTooltip=\"{{ 'ADD_RECORD'| nxtCustomTranslate : '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=\"(tableSaveButton || isEditRow || addInlineRecord) && from != 'formBuilder'\"\n buttonType=\"btn btn-primary\" [buttonDisable]=\"selection?.selected?.length === 0\"\n (buttonClickEmit)=\"saveButton()\"\n buttonValue=\"{{ 'SAVE' | nxtCustomTranslate : 'Save' }}\"></nxt-button>\n </div>\n <nxt-pagination *ngIf=\"isPagination\" [pageSizeOptions]=\"pageSizeOptions\"\n [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'| nxtCustomTranslate : '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_YOU_WANT_TO_DELETE_THE_REC'| nxtCustomTranslate : 'Are you sure you want to delete the record'}} ?\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\" (click)=\"deleteModal = false\">{{\n 'NO'| nxtCustomTranslate : 'No'}}</button>\n <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\n (click)=\"deleteRecordData()\">{{ 'YES'| nxtCustomTranslate : 'Yes'}}</button>\n </div>\n </div>\n </div>\n</div>", styles: [".custom-table{display:table;width:100%;border-collapse:collapse;table-layout:fixed;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;min-height:40px}.table-cell{position:relative;min-width:50px;padding:12px 0 12px 12px;border-bottom:solid 1px var(--border-color);max-width:none;box-sizing:border-box;overflow:visible;white-space:nowrap;text-overflow:ellipsis;display:table-cell}.table-col-cell{position:relative;min-width:50px;padding:2.5px 0 2.5px 12px;border-bottom:solid 1px var(--border-color);max-width:none;box-sizing:border-box;overflow:visible;white-space:nowrap;text-overflow:ellipsis;display:table-cell}.table-container.resizing{-webkit-user-select:none;user-select:none;pointer-events:none}.table-container.resizing .resize-handle{pointer-events:auto}.sticky-column{position:sticky;background:inherit;z-index:5}.sticky-column .resize-handle{z-index:15}.actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;right:0;background:var(--header-bg)}.actionCol{min-width:100px!important;width:100px!important;max-width:100px!important}.actionCol .resize-handle{display:none}.table-container{width:100%;overflow-x:auto;overflow-y:auto;border-top:1px solid #e0e0e0;scrollbar-width:none}.table-container::-webkit-scrollbar{display:none}.column-header{display:flex;align-items:center;flex:1;min-width:0;overflow:hidden;padding-right:8px}.ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0}.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:absolute;right:-1px;top:0;bottom:0;width:1px;cursor:col-resize;background:#ccc;z-index:10;transition:background-color .2s ease}.resize-handle:hover{background:#ccc;opacity:.7}.resize-handle:active{background:#ccc;opacity:.9}.columnDiv{position:relative;display:flex;align-items:center;width:100%;height:100%}.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}[dir=rtl] .search-component{left:unset!important}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;left:0!important;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:3px;right:3px;width:12px;height:12px;border:solid black .5px;color:#000;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:9px;cursor:pointer;z-index:2}.close-column-btn:hover{background:#f32121!important;border:solid #f32121 .5px!important;color:#fff!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}.horizontal-summary-table-cell{display:table-cell;max-width:none;box-sizing:border-box;overflow:visible;white-space:nowrap;padding:12px;text-overflow:ellipsis;position:relative;color:var(--text-color);border:solid 1px white!important;border-top:solid 1px var(--border-color)!important;border-bottom:1px solid 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}.no-data{display:flex;align-items:anchor-center;height:60px;justify-content:center}.custom-line{width:100%;border:1px solid #000}\n"], dependencies: [{ kind: "component", type: NxtDatatable, selector: "nxt-datatable", inputs: ["data", "tableFilterData", "columns", "withCheckBox", "searchBar", "tableSaveButton", "stickyColumn", "tableWidth", "actionColumHeader", "actionButton", "title", "isButtons", "buttonArray", "tableId", "isEditRow", "isDeleteRow", "addInlineRecord", "searchConfigs", "direction", "pagination", "actionButtonArray", "multipleFilter", "isPagination", "isNosIndicator", "isEditable", "from", "question", "rowTextSize", "rowTextColor", "apiMeta", "summaryRows", "summaryColumns", "isLoading", "tableConfig", "tableParams", "listViews", "mode", "languageCode", "selectedColumn", "allIcons"], outputs: ["tableRowClick", "onEditData", "saveButtonData", "onDeleteData", "buttonEmit", "hyperLinkEmit", "sideNavEmit", "actionButtonEmit", "columnSelected", "removeColumn", "valueChange", "selectedValues", "fileEmit", "NxtTableParamsEmit", "NxtTableFilterEmit", "hadleDropDownDependent", "NxtTableEmit"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i4.DecimalPipe, name: "number" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.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: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.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", "btnBgColor", "btnBorder", "btnTextColor", "btnHeight", "btnWidth", "btnIconLeftSrc", "btnIconRightSrc", "btnHoverBgColor", "btnHoverTextColor", "btnId", "dataDismiss", "buttonBorder", "modalToTrigger", "isImageSvg", "tabIndex", "buttonConfig", "mode", "languageCode"], outputs: ["buttonClickEmit"] }, { kind: "component", type: NxtPagination, selector: "nxt-pagination", inputs: ["pageSizeOptions", "collectionSize", "pageSize", "currentPage", "maxSize", "firstLastButtons", "nextPreviousButtons", "small"], outputs: ["event"] }, { kind: "pipe", type: NxtSearchFilterPipe, name: "searchFilter" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i7.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "pipe", type: NxtGetValuePipe, name: "getValue" }, { kind: "component", type: PickLocationComponent, selector: "app-pick-location", inputs: ["address", "from", "question", "mode", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: IconSelectorComponent, selector: "nxt-icon-selector", inputs: ["allIcons", "themeColor", "height", "tooltipPosition", "selectedIcon", "cdnIconURL", "label", "labelFont", "labelWeight", "inputWeight", "labelSize", "labelColor", "showLabel", "required", "mode", "question", "options"], outputs: ["iconSelected"] }, { kind: "component", type: NxtSearchBox, selector: "nxt-search-box", inputs: ["placeHolderText", "question", "apiMeta", "id", "readOnly", "mode", "from"], outputs: ["searchValueChange"] }, { kind: "component", type: CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "question", "referenceField", "token", "mode", "from"], outputs: ["valueChange"] }, { kind: "component", type: CustomRadioComponent, selector: "app-custom-radio", inputs: ["options", "question", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token", "mode"], outputs: ["valueChange"] }, { kind: "component", type: NxtFileUploadComponent, selector: "app-file-upload", inputs: ["allFiles", "limitFileUploading", "mode", "isShowNoFileIcon", "question", "error", "from"], outputs: ["selectedFileData", "deletedFileData"] }, { kind: "component", type: NxtInput, selector: "nxt-input", inputs: ["label", "labelFont", "labelWeight", "inputWeight", "labelSize", "inputValueSize", "labelColor", "showLabel", "svgHeight", "svgWidth", "type", "inputIconRightSrc", "inputIconLeftSrc", "required", "minLength", "pattern", "errorMessages", "maxLength", "placeholder", "inputBgColor", "inputBorder", "placeholderColor", "placeholderFont", "placeholderWeight", "placeholderSize", "inputTextColor", "inputHeight", "inputWidth", "inputId", "inputBorderSize", "inputConfig", "confPassVal", "confPass", "mode", "value", "question", "showSuggestion", "ariaOwns", "ariaHasPopup", "isLoading", "options", "minDate", "maxDate", "rows", "from", "hyperLink", "size"], outputs: ["valueChange", "inputValue", "onBlur", "onFocus", "toggleEmit", "nativeInputRef", "removeValueEmit", "hyperlinkEmit"] }, { kind: "component", type: ListViewFilterComponent, selector: "app-list-view-filter", inputs: ["listViews", "tableFilterArray", "selectedView", "displayedColumns", "availableOperators"], outputs: ["listViewEmit"] }, { kind: "pipe", type: NxtCustomTranslatePipe, name: "nxtCustomTranslate" }, { kind: "pipe", type: QuestionByRowPipe, name: "questionByRow" }] });
|
|
1594
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.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", mode: "mode", languageCode: "languageCode", selectedColumn: "selectedColumn", allIcons: "allIcons" }, 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", hadleDropDownDependent: "hadleDropDownDependent", 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\"\n style=\"padding-bottom: 20px;\">\n <div class=\"flex\">\n <!-- SKS26APR25 List View Filter -->\n <app-list-view-filter *ngIf=\"listViews && listViews.length > 0\" [listViews]=\"listViews\"\n [selectedView]=\"selectedView\" [displayedColumns]='columns' [tableFilterArray]=\"tableFilterArray\"\n (listViewEmit)=\"listViewEmit($event)\">\n </app-list-view-filter>\n <div *ngIf=\"(!listViews || listViews.length === 0) && isNosIndicator\" class=\"noOfRec\"\n style=\"display: flex; align-items: flex-end;\">\n <p style=\"font-weight: 500; margin-right: 5px; margin-bottom: 0px;\">\n {{ 'NOS' | nxtCustomTranslate : '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' | nxtCustomTranslate : '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\"\n [buttonValue]=\"button.labelPath || button.label || button.name | nxtCustomTranslate : button.label || button.name \"\n [buttonConfig]=\"button.buttonConfig\" [type]=\"button.type\" class=\"ms-2 me-2\"\n [btnIconLeftSrc]=\"button.btnIconLeftSrc\" [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\"\n [ngClass]=\"{ 'resizing': isResizing }\"\n [ngStyle]=\"{ maxHeight: isPagination ? '450px' : 'auto', minHeight: dataSource.data && dataSource?.data?.length === 0 && !isLoading && from !== 'formBuilder' ? '0px' : '100px' }\"\n #tableContainer (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\" [style.width]=\"'50px'\">\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 <ng-container *ngFor=\"let column of currentColumns; let i = index\">\n <div *ngIf=\"column.summaryColumn !== true && column.summaryRow !== true && column.isHide !== true\"\n class=\"table-cell tableHeader head-color\"\n [class.sticky-column]=\"i === (stickyCondition - 1)\"\n [class.active-column]=\"activeColumn === column.uniqueIdentifier\"\n [class.selected-column]=\"mode === 'edit' && isEditable && selectedColumn === column.uniqueIdentifier\"\n (click)=\"$event.stopPropagation(); onColumnClick(column.uniqueIdentifier); column.sort ? sortData(column.fieldName) : ''\"\n (mouseenter)=\"hoveredColumn = column.fieldName\" (mouseleave)=\"hoveredColumn = null\"\n [style.width]=\"column.width || '100px'\"\n [style.flex]=\"'0 0 ' + (column.width || '100px')\"\n [style.min-width]=\"'50px'\">\n <div class=\"columnDiv\">\n <div class=\"column-header\" [style.width]=\"column.width || '100px'\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"mode === 'edit' && isEditable && selectedColumn === column.uniqueIdentifier\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(column.uniqueIdentifier)\">\n \u2715\n </div>\n <div class=\"ellipsis\" style=\"flex: 1;\" [title]=\"column.label\">\n @if(column.labelPath){\n {{ column.labelPath | nxtCustomTranslate : column.label }}\n }\n @else if(from !== 'formBuilder') {\n {{ (column.uniqueIdentifier+'.label') | nxtCustomTranslate : column.label }}\n }\n @else {\n {{ column.label }}\n }\n </div>\n <div>\n <svg *ngIf=\"column.filter\"\n (click)=\"$event.stopPropagation(); filter(column.fieldName)\"\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.fieldName]?.length > 0\"\n cx=\"9\" cy=\"2\" r=\"2.5\" fill=\"red\"></circle>\n </svg>\n <div *ngIf=\"column.sort\"\n class=\"sort-indicators\">\n <span *ngIf=\"currentSortColumn === column.fieldName\" class=\"sort-direction\">\n {{ currentSortDirection === 'asc' ? '\u2191' : currentSortDirection\n === 'desc' ? '\u2193' : '' }}\n </span>\n <span\n *ngIf=\"hoveredColumn === column.fieldName && currentSortColumn !== column.fieldName\"\n class=\"sort-direction\">\n \u2191\n </span>\n </div>\n <div *ngIf=\"searchFilter && column.fieldName === selectedFilter\"\n class=\"search-component position-absolute\"\n (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' | nxtCustomTranslate : '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 *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 <!-- Enhanced resize handle -->\n <div class=\"resize-handle\" \n (mousedown)=\"onResizeStart($event)\"\n title=\"Drag to resize column\"></div>\n </div>\n </div>\n </ng-container>\n\n <!--SKS15FEB25 Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"table-cell head-color actionCol sticky-column\"\n [style.width]=\"'150px'\"\n style=\"padding: 12px !important;\">\n {{ actionColumHeader | nxtCustomTranslate : 'Action'}}\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-col-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 <ng-container *ngFor=\"let column of currentColumns; let last = last; ellipsis\">\n <div *ngIf=\"column.summaryColumn !== true && column.summaryRow !== true && column.isHide !== true\"\n class=\"table-col-cell body-color\"\n [class.selected-cell]=\"mode === 'edit' && isEditable && selectedColumn === column.uniqueIdentifier\"\n [style.width]=\"column.width || '100px'\"\n [style.flex]=\"'0 0 ' + (column.width || '100px')\"\n [style.min-width]=\"'50px'\"\n [style.max-width]=\"column.width || '100px'\">\n <div>\n <div>\n <!-- SKS22JUL25 calendar -->\n <div *ngIf=\"column.type === 'calendar'\">\n <!-- <app-custom-calendar [question]=\"column | questionByRow:element:i\" (eventSelected)=\"getCalendarEvent($event)\"\n (dateSelected)=\"getCurrentCalendar($event)\" (openModal)=\"openCalendarModal($event)\"\n (closeModal)=\"closeCalendarModal($event)\"></app-custom-calendar>\n <app-custom-model *ngIf=\"isCalendarModalOpen\" [modalTitle]=\"calendarModalTitle\"\n [isModalOpen]=\"isCalendarModalOpen\" [modalSize]=\"calendarModalSize\"\n [saveButtonValue]=\"calendarSaveButtonValue\" [modalFooter]=\"modalCalendarModalFooter\"\n (saveButtonEmit)=\"onCalendarModalSave()\" (cancelButtonEmit)=\"closeCalendarModal($event)\">\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\"\n (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\n </app-custom-model> -->\n </div>\n\n <!-- SKS22JUL25 for pick location -->\n <app-pick-location *ngIf=\"column.type === 'location'\" [apiKey]=\"column['apiKey']\" [address]=\"question.selectedValue\" [question]=\"column | questionByRow:element:i\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n (locationSelected)=\"updateEdit(i,$event,element,column.fieldName)\">\n </app-pick-location>\n\n <!-- SKS22JUL25 Image -->\n <div *ngIf=\"column.type === 'image'\" (mouseenter)=\"isImageHover = true;\"\n (mouseleave)=\"isImageHover = false;\">\n <!-- <div *ngIf=\"isImageHover\" style=\"display: flex; justify-content: end;\">\n <svg *ngIf=\"!column.question?.isReadOnly\" (click)=\"onImageEdit(column.question)\" 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 <svg *ngIf=\"!column.question?.isReadOnly\" (click)=\"onImageDelete(column.question)\" 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\" 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\" 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\" stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div> -->\n <img *ngIf=\"column.question?.isReadOnly\" [src]=\"column.question?.imageData\" />\n <!-- <div *ngIf=\"!column.question?.isReadOnly\" class=\"logo-container\">\n Logo preview area\n <div class=\"logo-preview\" *ngIf=\"column.question?.input\">\n <img [src]=\"column.question?.imageData\" />\n </div>\n\n Upload button\n <div *ngIf=\"!column.question?.imageData\" class=\"logo-upload-placeholder\">\n <label for=\"logo-upload-{{i}}\" class=\"logo-upload-label\">\n <img src=\"../assets/icons/Image.svg\" alt=\"Upload\" />\n <span>Upload Image</span>\n </label>\n <input type=\"file\" id=\"logo-upload-{{i}}\" accept=\"image/*\"\n (change)=\"fileChangeEvent(column.question, $event)\" style=\"display: none;\" />\n </div>\n </div> -->\n </div>\n <!-- SKS22JUL25 icon-selector -->\n <nxt-icon-selector [allIcons]=\"allIcons\" *ngIf=\"column.type === 'icon'\" [required]=\"column.question?.isOptional\" [mode]=\"mode\" [question]=\"column | questionByRow:element:i\" [labelFont]=\"column.question?.font\"\n [label]=\"column.question?.questionText ? ((column?.question?.id+'.questionText') | nxtCustomTranslate : column?.question?.questionText) : ''\"\n [labelColor]=\"column.question?.fontColor\"\n [labelSize]=\"column.question?.fontSize\" [labelWeight]=\"column.question?.fontWeight\" [showLabel]=\"column.question?.style?.showLabel\" (iconSelected)=\"updateEdit(i,$event,element,column.fieldName)\"></nxt-icon-selector>\n\n <!-- SKS22JUL25 line -->\n <hr *ngIf=\"column.type === 'line'\" class=\"custom-line\" style=\"display: inline-flex\" />\n <!-- SKS22JUL25 data table -->\n <nxt-datatable *ngIf=\"column.type === 'table'\" isEditRow isDeleteRow actionButton isButtons [question]=\"column | questionByRow:element:i\" from=\"formBuilder\"\n (valueChange)=\"updateEdit(i,$event.data,element,column.fieldName)\" [apiMeta]=\"column.question?.subText\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\"\n [tableConfig]=\"column.question?.tableConfig\" tableId=\"\" direction=\"ltr\" tableWidth=\"auto\">\n </nxt-datatable>\n <!-- SKS22JUL25 list -->\n <nxt-search-box *ngIf=\"column.type === 'list'\" [question]=\"column | questionByRow:element:i\" [readOnly]=\"column.question?.isReadOnly\" [apiMeta]=\"column.question?.subText\"\n [id]=\"column.question?.id\" [placeHolderText]=\"column.question?.question || ''\" \n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view': element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n (searchValueChange)=\"updateEdit(i,$event.value,element,column.fieldName,column.type)\">\n </nxt-search-box>\n\n <!-- SKS22JUL25 Dropdown -->\n <app-custom-dropdown *ngIf=\"column?.type === 'dropdown' && column.question?.options\" [options]=\"column.question?.options\" [apiMeta]=\"column.question?.subText\"\n [id]=\"column.question?.id\" [selectedValue]=\"column.isShengel ? column.question?.input : column.question?.selectedValue\"\n placeholder=\"\"\n [errorMessage]=\"column.question?.errorMessage\" [error]=\"column.question?.error\" [referenceField]=\"column.question?.referenceField\"\n [readOnly]=\"column.question?.isReadOnly\" [question]=\"column | questionByRow:element:i\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n (valueChange)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\">\n </app-custom-dropdown>\n <!-- SKS22JUL25 custom-radio component -->\n <div *ngIf=\"column.type === 'radio' && column.question?.options\" class=\"\">\n <app-custom-radio [options]=\"column.question?.options\" [question]=\"column | questionByRow:element:i\" [apiMeta]=\"column.question?.subText\" [id]=\"column.question?.id\"\n [selectedValue]=\"column.question?.selectedValue\" [errorMessage]=\"column.question?.errorMessage\" [error]=\"column.question?.error\"\n [referenceField]=\"column.question?.referenceField\" [readOnly]=\"column.question?.isReadOnly\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\"\n (valueChange)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\">\n </app-custom-radio>\n </div>\n\n <!-- SKS22JUL25 Attachment / Files -->\n <app-file-upload *ngIf=\"column.type === 'file'\" [limitFileUploading]=\"5\" [error]=\"column.question?.error\" [question]=\"column | questionByRow:element:i\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n [allFiles]=\"column.question?.input\" (selectedFileData)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\"\n >\n </app-file-upload>\n <!-- SKS22JUL25 Button -->\n <nxt-button\n *ngIf=\"column.type === 'button'\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\"\n [btnHeight]=\"'50px'\" [btnWidth]=\"'150px'\" [buttonValue]=\"column.question?.question\"\n (buttonClickEmit)=\"updateEdit(i,$event,element,column.fieldName)\"\n >\n </nxt-button>\n <!-- SKS22JUL25 book type -->\n <!-- <lib-questionbook *ngIf=\"column.type === 'book'\" [qbItem]=\"column.question?.qbItem\"\n [questions]=\"readQuestions(column.question?.qbReference, column.question?.qbReferenceQuestions)\"\n (handleDropDown)=\"getDropDown($event)\">\n </lib-questionbook> -->\n <!-- SKS22JUL25 Text, Email, label, number, Boolean, rich text editor, DateTime, Date, Time-->\n <nxt-input *ngIf=\"column.type === undefined || column.type === 'text' || column.type === 'email' || column.type === 'number' || column.type === 'label' || column.type === 'boolean' || column.type === 'richtextarea' || column.type === 'datetime' || column.type === 'date' || column.type === 'time' || column.type === 'textarea'\"\n [type]=\"column.type === 'boolean' ? 'checkbox' : column.type === 'richtextarea' ? 'richtext' : column.type === undefined ? 'text' : column.type \"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n [value]=\"element | getValue: column.fieldName \"\n [hyperLink]=\"column.hyperLink\"\n (hyperlinkEmit)=\"onClickHyperlink(column.fieldName,element, column.hyperLink)\"\n [question]=\"column | questionByRow:element:i\"\n [labelFont]=\"column.question?.font\"\n [label]=\"column.question?.questionText ? ((column.question?.id+'.questionText') | nxtCustomTranslate : column.question?.questionText): ''\"\n [labelColor]=\"column.question?.fontColor\"\n [labelSize]=\"column.question?.fontSize\"\n [inputValueSize]=\"column.question?.fontSize\"\n [labelWeight]=\"column.question?.fontWeight\"\n [inputWeight]=\"column.question?.fontWeight\"\n [showLabel]=\"column.question?.style?.showLabel\"\n inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n [placeholder]=\"column.question?.question\"\n [required]=\"column.question?.isOptional\" inputBgColor=\"#FAFAFA\"\n [inputId]=\"column.question?.trackingId\"\n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"column.question?.iconLeftSrc\" \n [minDate]=\"column.question?.minDate\"\n [rows]=\"3\"\n (inputValue)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\"\n >\n </nxt-input>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!--SKS15FEB25 Action Buttons -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"table-col-cell actionCol\">\n <div class=\"actionButton\" style=\"display: flex; align-items: center;\">\n\n <!--SKS15FEB25 Edit Button -->\n <div *ngIf=\"isEditRow\" class=\"eicon-container\"\n matTooltip=\"{{ 'EDIT_RECORD' | nxtCustomTranslate : '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\"\n [matTooltip]=\"'DELETE_RECORD' | nxtCustomTranslate : '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.tooltipPath || button.tooltip | nxtCustomTranslate : 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.tooltipPath || btn.tooltip | nxtCustomTranslate : btn.tooltip\"\n [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 && dataSource.data && dataSource?.data?.length > 0 && !isLoading\">\n <ng-container *ngIf=\"!isFullTableSummaryRow && isSummaryColumn\">\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]=\"mode === 'edit' && isEditable && selectedColumn === row.uniqueIdentifier\"\n (click)=\"$event.stopPropagation(); onColumnClick(row.uniqueIdentifier)\">{{ (row.id+'.label') | nxtCustomTranslate : row?.label }}\n </div>\n <div class=\"summary-table-cell\"\n [class.selected-cell]=\"mode === 'edit' && isEditable && selectedColumn === row.uniqueIdentifier\">\n <ng-container *ngIf=\"row.type === 'calculation'\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"mode === 'edit' && isEditable && selectedColumn === row.uniqueIdentifier\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(row.uniqueIdentifier)\">\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()\"\n 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 <!-- SKS13JUN25 full table summary row -->\n <ng-container *ngIf=\"isFullTableSummaryRow\">\n <div *ngFor=\"let row of summaryRows\" class=\"table-row summary-row\">\n <!-- SKS13JUN25 Checkbox column (if enabled) -->\n <div *ngIf=\"withCheckBox\" class=\"horizontal-summary-table-cell\">\n {{ row.labelPath || row.label | nxtCustomTranslate : row.label }}\n </div>\n\n <!-- SKS13JUN25 summary cell -->\n <div *ngFor=\"let col of currentColumns; let last = last\"\n class=\"horizontal-summary-table-cell\" style=\"text-align: left;\">\n @if (row?.columns?.includes(col.fieldName)) {\n {{ summaryValues[col.fieldName] | number }}\n }\n </div>\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"horizontal-summary-table-cell actionCol sticky-column\">\n </div>\n </div>\n </ng-container>\n </ng-container>\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 currentColumns\" class=\"skeleton-cell \"></div>\n\n <!-- Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"skeleton-cell actionCol\">\n </div>\n </div>\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 No Data Row -->\n <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from !== 'formBuilder'\"\n class=\"no-data\">\n {{'NO_RECORDS_OR_DATA_FOUND' | nxtCustomTranslate : 'No records/data found.'}}\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)\"\n matTooltip=\"{{ 'ADD_RECORD'| nxtCustomTranslate : '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=\"(tableSaveButton || isEditRow || addInlineRecord) && from != 'formBuilder'\"\n buttonType=\"btn btn-primary\" [buttonDisable]=\"selection?.selected?.length === 0\"\n (buttonClickEmit)=\"saveButton()\"\n buttonValue=\"{{ 'SAVE' | nxtCustomTranslate : 'Save' }}\"></nxt-button>\n </div>\n <nxt-pagination *ngIf=\"isPagination\" [pageSizeOptions]=\"pageSizeOptions\"\n [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'| nxtCustomTranslate : '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_YOU_WANT_TO_DELETE_THE_REC'| nxtCustomTranslate : 'Are you sure you want to delete the record'}} ?\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\" (click)=\"deleteModal = false\">{{\n 'NO'| nxtCustomTranslate : 'No'}}</button>\n <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\n (click)=\"deleteRecordData()\">{{ 'YES'| nxtCustomTranslate : 'Yes'}}</button>\n </div>\n </div>\n </div>\n</div>", styles: [".custom-table{display:table;width:100%;border-collapse:collapse;table-layout:fixed;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;min-height:40px}.table-cell{position:relative;min-width:50px;padding:12px 0 12px 12px;border-bottom:solid 1px var(--border-color);max-width:none;box-sizing:border-box;overflow:visible;white-space:nowrap;text-overflow:ellipsis;display:table-cell}.table-col-cell{position:relative;min-width:50px;padding:10px 0 10px 12px;border-bottom:solid 1px var(--border-color);max-width:none;box-sizing:border-box;overflow:visible;white-space:nowrap;text-overflow:ellipsis;display:table-cell}.table-container.resizing{-webkit-user-select:none;user-select:none;pointer-events:none}.table-container.resizing .resize-handle{pointer-events:auto}.sticky-column{position:sticky;background:inherit;z-index:5}.sticky-column .resize-handle{z-index:15}.actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;right:0;background:var(--header-bg)}.actionCol{min-width:100px!important;width:100px!important;max-width:100px!important}.actionCol .resize-handle{display:none}.table-container{width:100%;overflow-x:auto;overflow-y:auto;border-top:1px solid #e0e0e0;scrollbar-width:none}.table-container::-webkit-scrollbar{display:none}.column-header{display:flex;align-items:center;flex:1;min-width:0;overflow:hidden;padding-right:8px}.ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0}.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:absolute;right:-1px;top:0;bottom:0;width:1px;cursor:col-resize;background:#ccc;z-index:10;transition:background-color .2s ease}.resize-handle:hover{background:#ccc;opacity:.7}.resize-handle:active{background:#ccc;opacity:.9}.columnDiv{position:relative;display:flex;align-items:center;width:100%;height:100%}.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}[dir=rtl] .search-component{left:unset!important}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;left:0!important;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:3px;right:3px;width:12px;height:12px;border:solid black .5px;color:#000;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:9px;cursor:pointer;z-index:2}.close-column-btn:hover{background:#f32121!important;border:solid #f32121 .5px!important;color:#fff!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}.horizontal-summary-table-cell{display:table-cell;max-width:none;box-sizing:border-box;overflow:visible;white-space:nowrap;padding:12px;text-overflow:ellipsis;position:relative;color:var(--text-color);border:solid 1px white!important;border-top:solid 1px var(--border-color)!important;border-bottom:1px solid 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}.no-data{display:flex;align-items:anchor-center;height:60px;justify-content:center}.custom-line{width:100%;border:1px solid #000}\n"], dependencies: [{ kind: "component", type: NxtDatatable, selector: "nxt-datatable", inputs: ["data", "tableFilterData", "columns", "withCheckBox", "searchBar", "tableSaveButton", "stickyColumn", "tableWidth", "actionColumHeader", "actionButton", "title", "isButtons", "buttonArray", "tableId", "isEditRow", "isDeleteRow", "addInlineRecord", "searchConfigs", "direction", "pagination", "actionButtonArray", "multipleFilter", "isPagination", "isNosIndicator", "isEditable", "from", "question", "rowTextSize", "rowTextColor", "apiMeta", "summaryRows", "summaryColumns", "isLoading", "tableConfig", "tableParams", "listViews", "mode", "languageCode", "selectedColumn", "allIcons"], outputs: ["tableRowClick", "onEditData", "saveButtonData", "onDeleteData", "buttonEmit", "hyperLinkEmit", "sideNavEmit", "actionButtonEmit", "columnSelected", "removeColumn", "valueChange", "selectedValues", "fileEmit", "NxtTableParamsEmit", "NxtTableFilterEmit", "hadleDropDownDependent", "NxtTableEmit"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i4.DecimalPipe, name: "number" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.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: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.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", "btnBgColor", "btnBorder", "btnTextColor", "btnHeight", "btnWidth", "btnIconLeftSrc", "btnIconRightSrc", "btnHoverBgColor", "btnHoverTextColor", "btnId", "dataDismiss", "buttonBorder", "modalToTrigger", "isImageSvg", "tabIndex", "buttonConfig", "mode", "languageCode"], outputs: ["buttonClickEmit"] }, { kind: "component", type: NxtPagination, selector: "nxt-pagination", inputs: ["pageSizeOptions", "collectionSize", "pageSize", "currentPage", "maxSize", "firstLastButtons", "nextPreviousButtons", "small"], outputs: ["event"] }, { kind: "pipe", type: NxtSearchFilterPipe, name: "searchFilter" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: i7.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "pipe", type: NxtGetValuePipe, name: "getValue" }, { kind: "component", type: PickLocationComponent, selector: "app-pick-location", inputs: ["address", "from", "question", "mode", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: IconSelectorComponent, selector: "nxt-icon-selector", inputs: ["allIcons", "themeColor", "height", "tooltipPosition", "selectedIcon", "cdnIconURL", "label", "labelFont", "labelWeight", "inputWeight", "labelSize", "labelColor", "showLabel", "required", "mode", "question", "options"], outputs: ["iconSelected"] }, { kind: "component", type: NxtSearchBox, selector: "nxt-search-box", inputs: ["placeHolderText", "question", "apiMeta", "id", "readOnly", "mode", "from"], outputs: ["searchValueChange"] }, { kind: "component", type: CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "question", "referenceField", "token", "mode", "from"], outputs: ["valueChange"] }, { kind: "component", type: CustomRadioComponent, selector: "app-custom-radio", inputs: ["options", "question", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token", "mode"], outputs: ["valueChange"] }, { kind: "component", type: NxtFileUploadComponent, selector: "app-file-upload", inputs: ["allFiles", "limitFileUploading", "mode", "isShowNoFileIcon", "question", "error", "from"], outputs: ["selectedFileData", "deletedFileData"] }, { kind: "component", type: NxtInput, selector: "nxt-input", inputs: ["label", "labelFont", "labelWeight", "inputWeight", "labelSize", "inputValueSize", "labelColor", "showLabel", "svgHeight", "svgWidth", "type", "inputIconRightSrc", "inputIconLeftSrc", "required", "minLength", "pattern", "errorMessages", "maxLength", "placeholder", "inputBgColor", "inputBorder", "placeholderColor", "placeholderFont", "placeholderWeight", "placeholderSize", "inputTextColor", "inputHeight", "inputWidth", "inputId", "inputBorderSize", "inputConfig", "confPassVal", "confPass", "mode", "value", "question", "showSuggestion", "ariaOwns", "ariaHasPopup", "isLoading", "options", "minDate", "maxDate", "rows", "from", "hyperLink", "size"], outputs: ["valueChange", "inputValue", "onBlur", "onFocus", "toggleEmit", "nativeInputRef", "removeValueEmit", "hyperlinkEmit"] }, { kind: "component", type: ListViewFilterComponent, selector: "app-list-view-filter", inputs: ["listViews", "tableFilterArray", "selectedView", "displayedColumns", "availableOperators"], outputs: ["listViewEmit"] }, { kind: "pipe", type: NxtCustomTranslatePipe, name: "nxtCustomTranslate" }, { kind: "pipe", type: QuestionByRowPipe, name: "questionByRow" }] });
|
|
1608
1595
|
}
|
|
1609
1596
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtDatatable, decorators: [{
|
|
1610
1597
|
type: Component,
|
|
@@ -1629,7 +1616,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1629
1616
|
NxtCustomTranslatePipe,
|
|
1630
1617
|
QuestionByRowPipe
|
|
1631
1618
|
// RowResizerDirective
|
|
1632
|
-
], 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\"\n style=\"padding-bottom: 20px;\">\n <div class=\"flex\">\n <!-- SKS26APR25 List View Filter -->\n <app-list-view-filter *ngIf=\"listViews && listViews.length > 0\" [listViews]=\"listViews\"\n [selectedView]=\"selectedView\" [displayedColumns]='columns' [tableFilterArray]=\"tableFilterArray\"\n (listViewEmit)=\"listViewEmit($event)\">\n </app-list-view-filter>\n <div *ngIf=\"(!listViews || listViews.length === 0) && isNosIndicator\" class=\"noOfRec\"\n style=\"display: flex; align-items: flex-end;\">\n <p style=\"font-weight: 500; margin-right: 5px; margin-bottom: 0px;\">\n {{ 'NOS' | nxtCustomTranslate : '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' | nxtCustomTranslate : '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\"\n [buttonValue]=\"button.labelPath || button.label || button.name | nxtCustomTranslate : button.label || button.name \"\n [buttonConfig]=\"button.buttonConfig\" [type]=\"button.type\" class=\"ms-2 me-2\"\n [btnIconLeftSrc]=\"button.btnIconLeftSrc\" [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\"\n [ngClass]=\"{ 'resizing': isResizing }\"\n [ngStyle]=\"{ maxHeight: isPagination ? '450px' : 'auto', minHeight: dataSource.data && dataSource?.data?.length === 0 && !isLoading && from !== 'formBuilder' ? '0px' : '100px' }\"\n #tableContainer (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\" [style.width]=\"'50px'\">\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 <ng-container *ngFor=\"let column of currentColumns; let i = index\">\n <div *ngIf=\"column.summaryColumn !== true && column.summaryRow !== true && column.isHide !== true\"\n class=\"table-cell tableHeader head-color\"\n [class.sticky-column]=\"i === (stickyCondition - 1)\"\n [class.active-column]=\"activeColumn === column.uniqueIdentifier\"\n [class.selected-column]=\"mode === 'edit' && isEditable && selectedColumn === column.uniqueIdentifier\"\n (click)=\"$event.stopPropagation(); onColumnClick(column.uniqueIdentifier); column.sort ? sortData(column.fieldName) : ''\"\n (mouseenter)=\"hoveredColumn = column.fieldName\" (mouseleave)=\"hoveredColumn = null\"\n [style.width]=\"column.width || '100px'\"\n [style.flex]=\"'0 0 ' + (column.width || '100px')\"\n [style.min-width]=\"'50px'\">\n <div class=\"columnDiv\">\n <div class=\"column-header\" [style.width]=\"column.width || '100px'\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"mode === 'edit' && isEditable && selectedColumn === column.uniqueIdentifier\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(column.uniqueIdentifier)\">\n \u2715\n </div>\n <div class=\"ellipsis\" style=\"flex: 1;\" [title]=\"column.label\">\n @if(column.labelPath){\n {{ column.labelPath | nxtCustomTranslate : column.label }}\n }\n @else {\n {{ (column.uniqueIdentifier+'.label') | nxtCustomTranslate : column.label }}\n }\n </div>\n <div>\n <svg *ngIf=\"column.filter\"\n (click)=\"$event.stopPropagation(); filter(column.fieldName)\"\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.fieldName]?.length > 0\"\n cx=\"9\" cy=\"2\" r=\"2.5\" fill=\"red\"></circle>\n </svg>\n <div *ngIf=\"column.sort\"\n class=\"sort-indicators\">\n <span *ngIf=\"currentSortColumn === column.fieldName\" class=\"sort-direction\">\n {{ currentSortDirection === 'asc' ? '\u2191' : currentSortDirection\n === 'desc' ? '\u2193' : '' }}\n </span>\n <span\n *ngIf=\"hoveredColumn === column.fieldName && currentSortColumn !== column.fieldName\"\n class=\"sort-direction\">\n \u2191\n </span>\n </div>\n <div *ngIf=\"searchFilter && column.fieldName === selectedFilter\"\n class=\"search-component position-absolute\"\n (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' | nxtCustomTranslate : '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 *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 <!-- Enhanced resize handle -->\n <div class=\"resize-handle\" \n (mousedown)=\"onResizeStart($event)\"\n title=\"Drag to resize column\"></div>\n </div>\n </div>\n </ng-container>\n\n <!--SKS15FEB25 Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"table-cell head-color actionCol sticky-column\"\n [style.width]=\"'150px'\"\n style=\"padding: 12px !important;\">\n {{ actionColumHeader | nxtCustomTranslate : 'Action'}}\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-col-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 <ng-container *ngFor=\"let column of currentColumns; let last = last; ellipsis\">\n <div *ngIf=\"column.summaryColumn !== true && column.summaryRow !== true && column.isHide !== true\"\n class=\"table-col-cell body-color\"\n [class.selected-cell]=\"mode === 'edit' && isEditable && selectedColumn === column.uniqueIdentifier\"\n [style.width]=\"column.width || '100px'\"\n [style.flex]=\"'0 0 ' + (column.width || '100px')\"\n [style.min-width]=\"'50px'\"\n [style.max-width]=\"column.width || '100px'\">\n <div>\n <div>\n <!-- SKS22JUL25 calendar -->\n <div *ngIf=\"column.type === 'calendar'\">\n <!-- <app-custom-calendar [question]=\"column | questionByRow:element:i\" (eventSelected)=\"getCalendarEvent($event)\"\n (dateSelected)=\"getCurrentCalendar($event)\" (openModal)=\"openCalendarModal($event)\"\n (closeModal)=\"closeCalendarModal($event)\"></app-custom-calendar>\n <app-custom-model *ngIf=\"isCalendarModalOpen\" [modalTitle]=\"calendarModalTitle\"\n [isModalOpen]=\"isCalendarModalOpen\" [modalSize]=\"calendarModalSize\"\n [saveButtonValue]=\"calendarSaveButtonValue\" [modalFooter]=\"modalCalendarModalFooter\"\n (saveButtonEmit)=\"onCalendarModalSave()\" (cancelButtonEmit)=\"closeCalendarModal($event)\">\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\"\n (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\n </app-custom-model> -->\n </div>\n\n <!-- SKS22JUL25 for pick location -->\n <app-pick-location *ngIf=\"column.type === 'location'\" [apiKey]=\"column['apiKey']\" [address]=\"question.selectedValue\" [question]=\"column | questionByRow:element:i\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n (locationSelected)=\"updateEdit(i,$event,element,column.fieldName)\">\n </app-pick-location>\n\n <!-- SKS22JUL25 Image -->\n <div *ngIf=\"column.type === 'image'\" (mouseenter)=\"isImageHover = true;\"\n (mouseleave)=\"isImageHover = false;\">\n <!-- <div *ngIf=\"isImageHover\" style=\"display: flex; justify-content: end;\">\n <svg *ngIf=\"!column.question?.isReadOnly\" (click)=\"onImageEdit(column.question)\" 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 <svg *ngIf=\"!column.question?.isReadOnly\" (click)=\"onImageDelete(column.question)\" 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\" 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\" 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\" stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div> -->\n <img *ngIf=\"column.question?.isReadOnly\" [src]=\"column.question?.imageData\" />\n <!-- <div *ngIf=\"!column.question?.isReadOnly\" class=\"logo-container\">\n Logo preview area\n <div class=\"logo-preview\" *ngIf=\"column.question?.input\">\n <img [src]=\"column.question?.imageData\" />\n </div>\n\n Upload button\n <div *ngIf=\"!column.question?.imageData\" class=\"logo-upload-placeholder\">\n <label for=\"logo-upload-{{i}}\" class=\"logo-upload-label\">\n <img src=\"../assets/icons/Image.svg\" alt=\"Upload\" />\n <span>Upload Image</span>\n </label>\n <input type=\"file\" id=\"logo-upload-{{i}}\" accept=\"image/*\"\n (change)=\"fileChangeEvent(column.question, $event)\" style=\"display: none;\" />\n </div>\n </div> -->\n </div>\n <!-- SKS22JUL25 icon-selector -->\n <nxt-icon-selector [allIcons]=\"allIcons\" *ngIf=\"column.type === 'icon'\" [required]=\"column.question?.isOptional\" [mode]=\"mode\" [question]=\"column | questionByRow:element:i\" [labelFont]=\"column.question?.font\"\n [label]=\"column.question?.questionText ? ((column?.question?.id+'.questionText') | nxtCustomTranslate : column?.question?.questionText) : ''\"\n [labelColor]=\"column.question?.fontColor\"\n [labelSize]=\"column.question?.fontSize\" [labelWeight]=\"column.question?.fontWeight\" [showLabel]=\"column.question?.style?.showLabel\" (iconSelected)=\"updateEdit(i,$event,element,column.fieldName)\"></nxt-icon-selector>\n\n <!-- SKS22JUL25 line -->\n <hr *ngIf=\"column.type === 'line'\" class=\"custom-line\" style=\"display: inline-flex\" />\n <!-- SKS22JUL25 data table -->\n <nxt-datatable *ngIf=\"column.type === 'table'\" isEditRow isDeleteRow actionButton isButtons [question]=\"column | questionByRow:element:i\" from=\"formBuilder\"\n (valueChange)=\"updateEdit(i,$event.data,element,column.fieldName)\" [apiMeta]=\"column.question?.subText\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\"\n [tableConfig]=\"column.question?.tableConfig\" tableId=\"\" direction=\"ltr\" tableWidth=\"auto\">\n </nxt-datatable>\n <!-- SKS22JUL25 list -->\n <nxt-search-box *ngIf=\"column.type === 'list'\" [question]=\"column | questionByRow:element:i\" [readOnly]=\"column.question?.isReadOnly\" [apiMeta]=\"column.question?.subText\"\n [id]=\"column.question?.id\" [placeHolderText]=\"column.question?.question || ''\" \n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view': element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n (searchValueChange)=\"updateEdit(i,$event.value,element,column.fieldName,column.type)\">\n </nxt-search-box>\n\n <!-- SKS22JUL25 Dropdown -->\n <app-custom-dropdown *ngIf=\"column?.type === 'dropdown' && column.question?.options\" [options]=\"column.question?.options\" [apiMeta]=\"column.question?.subText\"\n [id]=\"column.question?.id\" [selectedValue]=\"column.isShengel ? column.question?.input : column.question?.selectedValue\"\n placeholder=\"\"\n [errorMessage]=\"column.question?.errorMessage\" [error]=\"column.question?.error\" [referenceField]=\"column.question?.referenceField\"\n [readOnly]=\"column.question?.isReadOnly\" [question]=\"column | questionByRow:element:i\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n (valueChange)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\">\n </app-custom-dropdown>\n <!-- SKS22JUL25 custom-radio component -->\n <div *ngIf=\"column.type === 'radio' && column.question?.options\" class=\"\">\n <app-custom-radio [options]=\"column.question?.options\" [question]=\"column | questionByRow:element:i\" [apiMeta]=\"column.question?.subText\" [id]=\"column.question?.id\"\n [selectedValue]=\"column.question?.selectedValue\" [errorMessage]=\"column.question?.errorMessage\" [error]=\"column.question?.error\"\n [referenceField]=\"column.question?.referenceField\" [readOnly]=\"column.question?.isReadOnly\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\"\n (valueChange)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\">\n </app-custom-radio>\n </div>\n\n <!-- SKS22JUL25 Attachment / Files -->\n <app-file-upload *ngIf=\"column.type === 'file'\" [limitFileUploading]=\"5\" [error]=\"column.question?.error\" [question]=\"column | questionByRow:element:i\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n [allFiles]=\"column.question?.input\" (selectedFileData)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\"\n >\n </app-file-upload>\n <!-- SKS22JUL25 Button -->\n <nxt-button\n *ngIf=\"column.type === 'button'\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\"\n [btnHeight]=\"'50px'\" [btnWidth]=\"'150px'\" [buttonValue]=\"column.question?.question\"\n (buttonClickEmit)=\"updateEdit(i,$event,element,column.fieldName)\"\n >\n </nxt-button>\n <!-- SKS22JUL25 book type -->\n <!-- <lib-questionbook *ngIf=\"column.type === 'book'\" [qbItem]=\"column.question?.qbItem\"\n [questions]=\"readQuestions(column.question?.qbReference, column.question?.qbReferenceQuestions)\"\n (handleDropDown)=\"getDropDown($event)\">\n </lib-questionbook> -->\n <!-- SKS22JUL25 Text, Email, label, number, Boolean, rich text editor, DateTime, Date, Time-->\n <nxt-input *ngIf=\"column.type === undefined || column.type === 'text' || column.type === 'email' || column.type === 'number' || column.type === 'label' || column.type === 'boolean' || column.type === 'richtextarea' || column.type === 'datetime' || column.type === 'date' || column.type === 'time' || column.type === 'textarea'\"\n [type]=\"column.type === 'boolean' ? 'checkbox' : column.type === 'richtextarea' ? 'richtext' : column.type === undefined ? 'text' : column.type \"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n [value]=\"element | getValue: column.fieldName \"\n [hyperLink]=\"column.hyperLink\"\n (hyperlinkEmit)=\"onClickHyperlink(column.fieldName,element, column.hyperLink)\"\n [question]=\"column | questionByRow:element:i\"\n [labelFont]=\"column.question?.font\"\n [label]=\"column.question?.questionText ? ((column.question?.id+'.questionText') | nxtCustomTranslate : column.question?.questionText): ''\"\n [labelColor]=\"column.question?.fontColor\"\n [labelSize]=\"column.question?.fontSize\"\n [inputValueSize]=\"column.question?.fontSize\"\n [labelWeight]=\"column.question?.fontWeight\"\n [inputWeight]=\"column.question?.fontWeight\"\n [showLabel]=\"column.question?.style?.showLabel\"\n inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n [placeholder]=\"column.question?.question\"\n [required]=\"column.question?.isOptional\" inputBgColor=\"#FAFAFA\"\n [inputId]=\"column.question?.trackingId\"\n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"column.question?.iconLeftSrc\" \n [minDate]=\"column.question?.minDate\"\n [rows]=\"3\"\n (inputValue)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\"\n >\n </nxt-input>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!--SKS15FEB25 Action Buttons -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"table-col-cell actionCol\">\n <div class=\"actionButton\" style=\"display: flex; align-items: center;\">\n\n <!--SKS15FEB25 Edit Button -->\n <div *ngIf=\"isEditRow\" class=\"eicon-container\"\n matTooltip=\"{{ 'EDIT_RECORD' | nxtCustomTranslate : '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\"\n [matTooltip]=\"'DELETE_RECORD' | nxtCustomTranslate : '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.tooltipPath || button.tooltip | nxtCustomTranslate : 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.tooltipPath || btn.tooltip | nxtCustomTranslate : btn.tooltip\"\n [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 && dataSource.data && dataSource?.data?.length > 0 && !isLoading\">\n <ng-container *ngIf=\"!isFullTableSummaryRow && isSummaryColumn\">\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]=\"mode === 'edit' && isEditable && selectedColumn === row.uniqueIdentifier\"\n (click)=\"$event.stopPropagation(); onColumnClick(row.uniqueIdentifier)\">{{ (row.id+'.label') | nxtCustomTranslate : row?.label }}\n </div>\n <div class=\"summary-table-cell\"\n [class.selected-cell]=\"mode === 'edit' && isEditable && selectedColumn === row.uniqueIdentifier\">\n <ng-container *ngIf=\"row.type === 'calculation'\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"mode === 'edit' && isEditable && selectedColumn === row.uniqueIdentifier\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(row.uniqueIdentifier)\">\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()\"\n 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 <!-- SKS13JUN25 full table summary row -->\n <ng-container *ngIf=\"isFullTableSummaryRow\">\n <div *ngFor=\"let row of summaryRows\" class=\"table-row summary-row\">\n <!-- SKS13JUN25 Checkbox column (if enabled) -->\n <div *ngIf=\"withCheckBox\" class=\"horizontal-summary-table-cell\">\n {{ row.labelPath || row.label | nxtCustomTranslate : row.label }}\n </div>\n\n <!-- SKS13JUN25 summary cell -->\n <div *ngFor=\"let col of currentColumns; let last = last\"\n class=\"horizontal-summary-table-cell\" style=\"text-align: left;\">\n @if (row?.columns?.includes(col.fieldName)) {\n {{ summaryValues[col.fieldName] | number }}\n }\n </div>\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"horizontal-summary-table-cell actionCol sticky-column\">\n </div>\n </div>\n </ng-container>\n </ng-container>\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 currentColumns\" class=\"skeleton-cell \"></div>\n\n <!-- Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"skeleton-cell actionCol\">\n </div>\n </div>\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 No Data Row -->\n <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from !== 'formBuilder'\"\n class=\"no-data\">\n {{'NO_RECORDS_OR_DATA_FOUND' | nxtCustomTranslate : 'No records/data found.'}}\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)\"\n matTooltip=\"{{ 'ADD_RECORD'| nxtCustomTranslate : '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=\"(tableSaveButton || isEditRow || addInlineRecord) && from != 'formBuilder'\"\n buttonType=\"btn btn-primary\" [buttonDisable]=\"selection?.selected?.length === 0\"\n (buttonClickEmit)=\"saveButton()\"\n buttonValue=\"{{ 'SAVE' | nxtCustomTranslate : 'Save' }}\"></nxt-button>\n </div>\n <nxt-pagination *ngIf=\"isPagination\" [pageSizeOptions]=\"pageSizeOptions\"\n [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'| nxtCustomTranslate : '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_YOU_WANT_TO_DELETE_THE_REC'| nxtCustomTranslate : 'Are you sure you want to delete the record'}} ?\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\" (click)=\"deleteModal = false\">{{\n 'NO'| nxtCustomTranslate : 'No'}}</button>\n <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\n (click)=\"deleteRecordData()\">{{ 'YES'| nxtCustomTranslate : 'Yes'}}</button>\n </div>\n </div>\n </div>\n</div>", styles: [".custom-table{display:table;width:100%;border-collapse:collapse;table-layout:fixed;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;min-height:40px}.table-cell{position:relative;min-width:50px;padding:12px 0 12px 12px;border-bottom:solid 1px var(--border-color);max-width:none;box-sizing:border-box;overflow:visible;white-space:nowrap;text-overflow:ellipsis;display:table-cell}.table-col-cell{position:relative;min-width:50px;padding:2.5px 0 2.5px 12px;border-bottom:solid 1px var(--border-color);max-width:none;box-sizing:border-box;overflow:visible;white-space:nowrap;text-overflow:ellipsis;display:table-cell}.table-container.resizing{-webkit-user-select:none;user-select:none;pointer-events:none}.table-container.resizing .resize-handle{pointer-events:auto}.sticky-column{position:sticky;background:inherit;z-index:5}.sticky-column .resize-handle{z-index:15}.actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;right:0;background:var(--header-bg)}.actionCol{min-width:100px!important;width:100px!important;max-width:100px!important}.actionCol .resize-handle{display:none}.table-container{width:100%;overflow-x:auto;overflow-y:auto;border-top:1px solid #e0e0e0;scrollbar-width:none}.table-container::-webkit-scrollbar{display:none}.column-header{display:flex;align-items:center;flex:1;min-width:0;overflow:hidden;padding-right:8px}.ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0}.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:absolute;right:-1px;top:0;bottom:0;width:1px;cursor:col-resize;background:#ccc;z-index:10;transition:background-color .2s ease}.resize-handle:hover{background:#ccc;opacity:.7}.resize-handle:active{background:#ccc;opacity:.9}.columnDiv{position:relative;display:flex;align-items:center;width:100%;height:100%}.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}[dir=rtl] .search-component{left:unset!important}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;left:0!important;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:3px;right:3px;width:12px;height:12px;border:solid black .5px;color:#000;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:9px;cursor:pointer;z-index:2}.close-column-btn:hover{background:#f32121!important;border:solid #f32121 .5px!important;color:#fff!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}.horizontal-summary-table-cell{display:table-cell;max-width:none;box-sizing:border-box;overflow:visible;white-space:nowrap;padding:12px;text-overflow:ellipsis;position:relative;color:var(--text-color);border:solid 1px white!important;border-top:solid 1px var(--border-color)!important;border-bottom:1px solid 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}.no-data{display:flex;align-items:anchor-center;height:60px;justify-content:center}.custom-line{width:100%;border:1px solid #000}\n"] }]
|
|
1619
|
+
], 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\"\n style=\"padding-bottom: 20px;\">\n <div class=\"flex\">\n <!-- SKS26APR25 List View Filter -->\n <app-list-view-filter *ngIf=\"listViews && listViews.length > 0\" [listViews]=\"listViews\"\n [selectedView]=\"selectedView\" [displayedColumns]='columns' [tableFilterArray]=\"tableFilterArray\"\n (listViewEmit)=\"listViewEmit($event)\">\n </app-list-view-filter>\n <div *ngIf=\"(!listViews || listViews.length === 0) && isNosIndicator\" class=\"noOfRec\"\n style=\"display: flex; align-items: flex-end;\">\n <p style=\"font-weight: 500; margin-right: 5px; margin-bottom: 0px;\">\n {{ 'NOS' | nxtCustomTranslate : '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' | nxtCustomTranslate : '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\"\n [buttonValue]=\"button.labelPath || button.label || button.name | nxtCustomTranslate : button.label || button.name \"\n [buttonConfig]=\"button.buttonConfig\" [type]=\"button.type\" class=\"ms-2 me-2\"\n [btnIconLeftSrc]=\"button.btnIconLeftSrc\" [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\"\n [ngClass]=\"{ 'resizing': isResizing }\"\n [ngStyle]=\"{ maxHeight: isPagination ? '450px' : 'auto', minHeight: dataSource.data && dataSource?.data?.length === 0 && !isLoading && from !== 'formBuilder' ? '0px' : '100px' }\"\n #tableContainer (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\" [style.width]=\"'50px'\">\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 <ng-container *ngFor=\"let column of currentColumns; let i = index\">\n <div *ngIf=\"column.summaryColumn !== true && column.summaryRow !== true && column.isHide !== true\"\n class=\"table-cell tableHeader head-color\"\n [class.sticky-column]=\"i === (stickyCondition - 1)\"\n [class.active-column]=\"activeColumn === column.uniqueIdentifier\"\n [class.selected-column]=\"mode === 'edit' && isEditable && selectedColumn === column.uniqueIdentifier\"\n (click)=\"$event.stopPropagation(); onColumnClick(column.uniqueIdentifier); column.sort ? sortData(column.fieldName) : ''\"\n (mouseenter)=\"hoveredColumn = column.fieldName\" (mouseleave)=\"hoveredColumn = null\"\n [style.width]=\"column.width || '100px'\"\n [style.flex]=\"'0 0 ' + (column.width || '100px')\"\n [style.min-width]=\"'50px'\">\n <div class=\"columnDiv\">\n <div class=\"column-header\" [style.width]=\"column.width || '100px'\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"mode === 'edit' && isEditable && selectedColumn === column.uniqueIdentifier\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(column.uniqueIdentifier)\">\n \u2715\n </div>\n <div class=\"ellipsis\" style=\"flex: 1;\" [title]=\"column.label\">\n @if(column.labelPath){\n {{ column.labelPath | nxtCustomTranslate : column.label }}\n }\n @else if(from !== 'formBuilder') {\n {{ (column.uniqueIdentifier+'.label') | nxtCustomTranslate : column.label }}\n }\n @else {\n {{ column.label }}\n }\n </div>\n <div>\n <svg *ngIf=\"column.filter\"\n (click)=\"$event.stopPropagation(); filter(column.fieldName)\"\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.fieldName]?.length > 0\"\n cx=\"9\" cy=\"2\" r=\"2.5\" fill=\"red\"></circle>\n </svg>\n <div *ngIf=\"column.sort\"\n class=\"sort-indicators\">\n <span *ngIf=\"currentSortColumn === column.fieldName\" class=\"sort-direction\">\n {{ currentSortDirection === 'asc' ? '\u2191' : currentSortDirection\n === 'desc' ? '\u2193' : '' }}\n </span>\n <span\n *ngIf=\"hoveredColumn === column.fieldName && currentSortColumn !== column.fieldName\"\n class=\"sort-direction\">\n \u2191\n </span>\n </div>\n <div *ngIf=\"searchFilter && column.fieldName === selectedFilter\"\n class=\"search-component position-absolute\"\n (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' | nxtCustomTranslate : '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 *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 <!-- Enhanced resize handle -->\n <div class=\"resize-handle\" \n (mousedown)=\"onResizeStart($event)\"\n title=\"Drag to resize column\"></div>\n </div>\n </div>\n </ng-container>\n\n <!--SKS15FEB25 Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"table-cell head-color actionCol sticky-column\"\n [style.width]=\"'150px'\"\n style=\"padding: 12px !important;\">\n {{ actionColumHeader | nxtCustomTranslate : 'Action'}}\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-col-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 <ng-container *ngFor=\"let column of currentColumns; let last = last; ellipsis\">\n <div *ngIf=\"column.summaryColumn !== true && column.summaryRow !== true && column.isHide !== true\"\n class=\"table-col-cell body-color\"\n [class.selected-cell]=\"mode === 'edit' && isEditable && selectedColumn === column.uniqueIdentifier\"\n [style.width]=\"column.width || '100px'\"\n [style.flex]=\"'0 0 ' + (column.width || '100px')\"\n [style.min-width]=\"'50px'\"\n [style.max-width]=\"column.width || '100px'\">\n <div>\n <div>\n <!-- SKS22JUL25 calendar -->\n <div *ngIf=\"column.type === 'calendar'\">\n <!-- <app-custom-calendar [question]=\"column | questionByRow:element:i\" (eventSelected)=\"getCalendarEvent($event)\"\n (dateSelected)=\"getCurrentCalendar($event)\" (openModal)=\"openCalendarModal($event)\"\n (closeModal)=\"closeCalendarModal($event)\"></app-custom-calendar>\n <app-custom-model *ngIf=\"isCalendarModalOpen\" [modalTitle]=\"calendarModalTitle\"\n [isModalOpen]=\"isCalendarModalOpen\" [modalSize]=\"calendarModalSize\"\n [saveButtonValue]=\"calendarSaveButtonValue\" [modalFooter]=\"modalCalendarModalFooter\"\n (saveButtonEmit)=\"onCalendarModalSave()\" (cancelButtonEmit)=\"closeCalendarModal($event)\">\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\"\n (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\n </app-custom-model> -->\n </div>\n\n <!-- SKS22JUL25 for pick location -->\n <app-pick-location *ngIf=\"column.type === 'location'\" [apiKey]=\"column['apiKey']\" [address]=\"question.selectedValue\" [question]=\"column | questionByRow:element:i\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n (locationSelected)=\"updateEdit(i,$event,element,column.fieldName)\">\n </app-pick-location>\n\n <!-- SKS22JUL25 Image -->\n <div *ngIf=\"column.type === 'image'\" (mouseenter)=\"isImageHover = true;\"\n (mouseleave)=\"isImageHover = false;\">\n <!-- <div *ngIf=\"isImageHover\" style=\"display: flex; justify-content: end;\">\n <svg *ngIf=\"!column.question?.isReadOnly\" (click)=\"onImageEdit(column.question)\" 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 <svg *ngIf=\"!column.question?.isReadOnly\" (click)=\"onImageDelete(column.question)\" 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\" 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\" 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\" stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div> -->\n <img *ngIf=\"column.question?.isReadOnly\" [src]=\"column.question?.imageData\" />\n <!-- <div *ngIf=\"!column.question?.isReadOnly\" class=\"logo-container\">\n Logo preview area\n <div class=\"logo-preview\" *ngIf=\"column.question?.input\">\n <img [src]=\"column.question?.imageData\" />\n </div>\n\n Upload button\n <div *ngIf=\"!column.question?.imageData\" class=\"logo-upload-placeholder\">\n <label for=\"logo-upload-{{i}}\" class=\"logo-upload-label\">\n <img src=\"../assets/icons/Image.svg\" alt=\"Upload\" />\n <span>Upload Image</span>\n </label>\n <input type=\"file\" id=\"logo-upload-{{i}}\" accept=\"image/*\"\n (change)=\"fileChangeEvent(column.question, $event)\" style=\"display: none;\" />\n </div>\n </div> -->\n </div>\n <!-- SKS22JUL25 icon-selector -->\n <nxt-icon-selector [allIcons]=\"allIcons\" *ngIf=\"column.type === 'icon'\" [required]=\"column.question?.isOptional\" [mode]=\"mode\" [question]=\"column | questionByRow:element:i\" [labelFont]=\"column.question?.font\"\n [label]=\"column.question?.questionText ? ((column?.question?.id+'.questionText') | nxtCustomTranslate : column?.question?.questionText) : ''\"\n [labelColor]=\"column.question?.fontColor\"\n [labelSize]=\"column.question?.fontSize\" [labelWeight]=\"column.question?.fontWeight\" [showLabel]=\"column.question?.style?.showLabel\" (iconSelected)=\"updateEdit(i,$event,element,column.fieldName)\"></nxt-icon-selector>\n\n <!-- SKS22JUL25 line -->\n <hr *ngIf=\"column.type === 'line'\" class=\"custom-line\" style=\"display: inline-flex\" />\n <!-- SKS22JUL25 data table -->\n <nxt-datatable *ngIf=\"column.type === 'table'\" isEditRow isDeleteRow actionButton isButtons [question]=\"column | questionByRow:element:i\" from=\"formBuilder\"\n (valueChange)=\"updateEdit(i,$event.data,element,column.fieldName)\" [apiMeta]=\"column.question?.subText\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\"\n [tableConfig]=\"column.question?.tableConfig\" tableId=\"\" direction=\"ltr\" tableWidth=\"auto\">\n </nxt-datatable>\n <!-- SKS22JUL25 list -->\n <nxt-search-box *ngIf=\"column.type === 'list'\" [question]=\"column | questionByRow:element:i\" [readOnly]=\"column.question?.isReadOnly\" [apiMeta]=\"column.question?.subText\"\n [id]=\"column.question?.id\" [placeHolderText]=\"column.question?.question || ''\" \n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view': element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n (searchValueChange)=\"updateEdit(i,$event.value,element,column.fieldName,column.type)\">\n </nxt-search-box>\n\n <!-- SKS22JUL25 Dropdown -->\n <app-custom-dropdown *ngIf=\"column?.type === 'dropdown' && column.question?.options\" [options]=\"column.question?.options\" [apiMeta]=\"column.question?.subText\"\n [id]=\"column.question?.id\" [selectedValue]=\"column.isShengel ? column.question?.input : column.question?.selectedValue\"\n placeholder=\"\"\n [errorMessage]=\"column.question?.errorMessage\" [error]=\"column.question?.error\" [referenceField]=\"column.question?.referenceField\"\n [readOnly]=\"column.question?.isReadOnly\" [question]=\"column | questionByRow:element:i\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n (valueChange)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\">\n </app-custom-dropdown>\n <!-- SKS22JUL25 custom-radio component -->\n <div *ngIf=\"column.type === 'radio' && column.question?.options\" class=\"\">\n <app-custom-radio [options]=\"column.question?.options\" [question]=\"column | questionByRow:element:i\" [apiMeta]=\"column.question?.subText\" [id]=\"column.question?.id\"\n [selectedValue]=\"column.question?.selectedValue\" [errorMessage]=\"column.question?.errorMessage\" [error]=\"column.question?.error\"\n [referenceField]=\"column.question?.referenceField\" [readOnly]=\"column.question?.isReadOnly\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\"\n (valueChange)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\">\n </app-custom-radio>\n </div>\n\n <!-- SKS22JUL25 Attachment / Files -->\n <app-file-upload *ngIf=\"column.type === 'file'\" [limitFileUploading]=\"5\" [error]=\"column.question?.error\" [question]=\"column | questionByRow:element:i\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n [allFiles]=\"column.question?.input\" (selectedFileData)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\"\n >\n </app-file-upload>\n <!-- SKS22JUL25 Button -->\n <nxt-button\n *ngIf=\"column.type === 'button'\"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\"\n [btnHeight]=\"'50px'\" [btnWidth]=\"'150px'\" [buttonValue]=\"column.question?.question\"\n (buttonClickEmit)=\"updateEdit(i,$event,element,column.fieldName)\"\n >\n </nxt-button>\n <!-- SKS22JUL25 book type -->\n <!-- <lib-questionbook *ngIf=\"column.type === 'book'\" [qbItem]=\"column.question?.qbItem\"\n [questions]=\"readQuestions(column.question?.qbReference, column.question?.qbReferenceQuestions)\"\n (handleDropDown)=\"getDropDown($event)\">\n </lib-questionbook> -->\n <!-- SKS22JUL25 Text, Email, label, number, Boolean, rich text editor, DateTime, Date, Time-->\n <nxt-input *ngIf=\"column.type === undefined || column.type === 'text' || column.type === 'email' || column.type === 'number' || column.type === 'label' || column.type === 'boolean' || column.type === 'richtextarea' || column.type === 'datetime' || column.type === 'date' || column.type === 'time' || column.type === 'textarea'\"\n [type]=\"column.type === 'boolean' ? 'checkbox' : column.type === 'richtextarea' ? 'richtext' : column.type === undefined ? 'text' : column.type \"\n [mode]=\"from === 'formBuilder' ? element?.editRow && !column.question?.isReadOnly ? 'edit' : 'view' : element?.editRow && (isEditRow || addInlineRecord) ? 'edit' : 'view'\" [from]=\"'nxtTable'\"\n [value]=\"element | getValue: column.fieldName \"\n [hyperLink]=\"column.hyperLink\"\n (hyperlinkEmit)=\"onClickHyperlink(column.fieldName,element, column.hyperLink)\"\n [question]=\"column | questionByRow:element:i\"\n [labelFont]=\"column.question?.font\"\n [label]=\"column.question?.questionText ? ((column.question?.id+'.questionText') | nxtCustomTranslate : column.question?.questionText): ''\"\n [labelColor]=\"column.question?.fontColor\"\n [labelSize]=\"column.question?.fontSize\"\n [inputValueSize]=\"column.question?.fontSize\"\n [labelWeight]=\"column.question?.fontWeight\"\n [inputWeight]=\"column.question?.fontWeight\"\n [showLabel]=\"column.question?.style?.showLabel\"\n inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n [placeholder]=\"column.question?.question\"\n [required]=\"column.question?.isOptional\" inputBgColor=\"#FAFAFA\"\n [inputId]=\"column.question?.trackingId\"\n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"column.question?.iconLeftSrc\" \n [minDate]=\"column.question?.minDate\"\n [rows]=\"3\"\n (inputValue)=\"updateEdit(i,$event.value.valueObj,element,column.fieldName)\"\n >\n </nxt-input>\n </div>\n </div>\n </div>\n </ng-container>\n\n <!--SKS15FEB25 Action Buttons -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"table-col-cell actionCol\">\n <div class=\"actionButton\" style=\"display: flex; align-items: center;\">\n\n <!--SKS15FEB25 Edit Button -->\n <div *ngIf=\"isEditRow\" class=\"eicon-container\"\n matTooltip=\"{{ 'EDIT_RECORD' | nxtCustomTranslate : '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\"\n [matTooltip]=\"'DELETE_RECORD' | nxtCustomTranslate : '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.tooltipPath || button.tooltip | nxtCustomTranslate : 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.tooltipPath || btn.tooltip | nxtCustomTranslate : btn.tooltip\"\n [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 && dataSource.data && dataSource?.data?.length > 0 && !isLoading\">\n <ng-container *ngIf=\"!isFullTableSummaryRow && isSummaryColumn\">\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]=\"mode === 'edit' && isEditable && selectedColumn === row.uniqueIdentifier\"\n (click)=\"$event.stopPropagation(); onColumnClick(row.uniqueIdentifier)\">{{ (row.id+'.label') | nxtCustomTranslate : row?.label }}\n </div>\n <div class=\"summary-table-cell\"\n [class.selected-cell]=\"mode === 'edit' && isEditable && selectedColumn === row.uniqueIdentifier\">\n <ng-container *ngIf=\"row.type === 'calculation'\">\n <!-- Add close button for selected column -->\n <div *ngIf=\"mode === 'edit' && isEditable && selectedColumn === row.uniqueIdentifier\"\n class=\"close-column-btn\"\n (click)=\"$event.stopPropagation(); removeCol(row.uniqueIdentifier)\">\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()\"\n 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 <!-- SKS13JUN25 full table summary row -->\n <ng-container *ngIf=\"isFullTableSummaryRow\">\n <div *ngFor=\"let row of summaryRows\" class=\"table-row summary-row\">\n <!-- SKS13JUN25 Checkbox column (if enabled) -->\n <div *ngIf=\"withCheckBox\" class=\"horizontal-summary-table-cell\">\n {{ row.labelPath || row.label | nxtCustomTranslate : row.label }}\n </div>\n\n <!-- SKS13JUN25 summary cell -->\n <div *ngFor=\"let col of currentColumns; let last = last\"\n class=\"horizontal-summary-table-cell\" style=\"text-align: left;\">\n @if (row?.columns?.includes(col.fieldName)) {\n {{ summaryValues[col.fieldName] | number }}\n }\n </div>\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\"\n class=\"horizontal-summary-table-cell actionCol sticky-column\">\n </div>\n </div>\n </ng-container>\n </ng-container>\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 currentColumns\" class=\"skeleton-cell \"></div>\n\n <!-- Action Column -->\n <div *ngIf=\"actionButton || isDeleteRow || isEditRow\" class=\"skeleton-cell actionCol\">\n </div>\n </div>\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 No Data Row -->\n <div *ngIf=\"dataSource.data && dataSource?.data?.length === 0 && !isLoading && from !== 'formBuilder'\"\n class=\"no-data\">\n {{'NO_RECORDS_OR_DATA_FOUND' | nxtCustomTranslate : 'No records/data found.'}}\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)\"\n matTooltip=\"{{ 'ADD_RECORD'| nxtCustomTranslate : '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=\"(tableSaveButton || isEditRow || addInlineRecord) && from != 'formBuilder'\"\n buttonType=\"btn btn-primary\" [buttonDisable]=\"selection?.selected?.length === 0\"\n (buttonClickEmit)=\"saveButton()\"\n buttonValue=\"{{ 'SAVE' | nxtCustomTranslate : 'Save' }}\"></nxt-button>\n </div>\n <nxt-pagination *ngIf=\"isPagination\" [pageSizeOptions]=\"pageSizeOptions\"\n [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'| nxtCustomTranslate : '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_YOU_WANT_TO_DELETE_THE_REC'| nxtCustomTranslate : 'Are you sure you want to delete the record'}} ?\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\" (click)=\"deleteModal = false\">{{\n 'NO'| nxtCustomTranslate : 'No'}}</button>\n <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\" aria-label=\"Close\"\n (click)=\"deleteRecordData()\">{{ 'YES'| nxtCustomTranslate : 'Yes'}}</button>\n </div>\n </div>\n </div>\n</div>", styles: [".custom-table{display:table;width:100%;border-collapse:collapse;table-layout:fixed;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;min-height:40px}.table-cell{position:relative;min-width:50px;padding:12px 0 12px 12px;border-bottom:solid 1px var(--border-color);max-width:none;box-sizing:border-box;overflow:visible;white-space:nowrap;text-overflow:ellipsis;display:table-cell}.table-col-cell{position:relative;min-width:50px;padding:10px 0 10px 12px;border-bottom:solid 1px var(--border-color);max-width:none;box-sizing:border-box;overflow:visible;white-space:nowrap;text-overflow:ellipsis;display:table-cell}.table-container.resizing{-webkit-user-select:none;user-select:none;pointer-events:none}.table-container.resizing .resize-handle{pointer-events:auto}.sticky-column{position:sticky;background:inherit;z-index:5}.sticky-column .resize-handle{z-index:15}.actionCol{position:sticky;padding:unset!important;align-items:center;z-index:11;right:0;background:var(--header-bg)}.actionCol{min-width:100px!important;width:100px!important;max-width:100px!important}.actionCol .resize-handle{display:none}.table-container{width:100%;overflow-x:auto;overflow-y:auto;border-top:1px solid #e0e0e0;scrollbar-width:none}.table-container::-webkit-scrollbar{display:none}.column-header{display:flex;align-items:center;flex:1;min-width:0;overflow:hidden;padding-right:8px}.ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0}.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:absolute;right:-1px;top:0;bottom:0;width:1px;cursor:col-resize;background:#ccc;z-index:10;transition:background-color .2s ease}.resize-handle:hover{background:#ccc;opacity:.7}.resize-handle:active{background:#ccc;opacity:.9}.columnDiv{position:relative;display:flex;align-items:center;width:100%;height:100%}.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}[dir=rtl] .search-component{left:unset!important}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;left:0!important;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:3px;right:3px;width:12px;height:12px;border:solid black .5px;color:#000;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:9px;cursor:pointer;z-index:2}.close-column-btn:hover{background:#f32121!important;border:solid #f32121 .5px!important;color:#fff!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}.horizontal-summary-table-cell{display:table-cell;max-width:none;box-sizing:border-box;overflow:visible;white-space:nowrap;padding:12px;text-overflow:ellipsis;position:relative;color:var(--text-color);border:solid 1px white!important;border-top:solid 1px var(--border-color)!important;border-bottom:1px solid 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}.no-data{display:flex;align-items:anchor-center;height:60px;justify-content:center}.custom-line{width:100%;border:1px solid #000}\n"] }]
|
|
1633
1620
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.TranslationService }, { type: i0.Renderer2 }, { type: i2.DataService }, { type: i3.ChangeService }], propDecorators: { data: [{
|
|
1634
1621
|
type: Input
|
|
1635
1622
|
}], tableFilterData: [{
|
|
@@ -1754,4 +1741,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1754
1741
|
type: HostListener,
|
|
1755
1742
|
args: ['document:click', ['$event']]
|
|
1756
1743
|
}] } });
|
|
1757
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBYyxZQUFZLEVBQStDLE1BQU0sZUFBZSxDQUFDO0FBQ3pKLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7OztBQWlDcEUsTUFBTSxPQUFPLFlBQVk7SUFnSkg7SUFBa0M7SUFBK0M7SUFBNkI7SUFBa0M7SUEvSTNKLElBQUksR0FBVSxFQUFFLENBQUMsQ0FBRSw0Q0FBNEM7SUFDL0QsZUFBZSxHQUFVLEVBQUUsQ0FBQztJQUM1QixPQUFPLEdBQWUsRUFBRSxDQUFDLENBQUMsMkRBQTJEO0lBQ3JGLFlBQVksQ0FBVSxDQUFFLDJDQUEyQztJQUNuRSxTQUFTLENBQVUsQ0FBQywyREFBMkQ7SUFDL0UsZUFBZSxHQUFHLEtBQUssQ0FBQyxDQUFDLDZFQUE2RTtJQUN0RyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsMEVBQTBFO0lBQ2hHLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxvRUFBb0U7SUFDekYsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLENBQUUseUNBQXlDO0lBQ3hFLFlBQVksQ0FBVSxDQUFFLGdDQUFnQztJQUN4RCxLQUFLLENBQU0sQ0FBQSwyQkFBMkI7SUFDdEMsU0FBUyxDQUFVLENBQUEsOEJBQThCO0lBQ2pELFdBQVcsQ0FBTSxDQUFBLDJCQUEyQjtJQUM1QyxPQUFPLEdBQVEsSUFBSSxDQUFDLENBQUMsY0FBYztJQUNuQyxTQUFTLENBQVUsQ0FBQyx1Q0FBdUM7SUFDM0QsV0FBVyxDQUFVLENBQUMsd0NBQXdDO0lBQzlELGVBQWUsQ0FBVSxDQUFDLDZDQUE2QztJQUN2RSxhQUFhLENBQU0sQ0FBQyx3QkFBd0I7SUFDNUMsU0FBUyxHQUFrQixLQUFLLENBQUMsQ0FBQyxxQkFBcUI7SUFDdkQsVUFBVSxDQUFNLENBQUMsNEJBQTRCO0lBQzdDLGlCQUFpQixDQUFNLENBQUMsK0JBQStCO0lBQ3ZELGNBQWMsQ0FBTSxDQUFDLDRDQUE0QztJQUNqRSxZQUFZLENBQU0sQ0FBQyxvRUFBb0U7SUFDdkYsY0FBYyxDQUFNLENBQUMsK0NBQStDO0lBQ3BFLFVBQVUsQ0FBTSxDQUFDLHNDQUFzQztJQUN2RCxJQUFJLENBQU0sQ0FBQyxnRUFBZ0U7SUFDM0UsUUFBUSxDQUFNLENBQUMsc0RBQXNEO0lBQ3JFLFdBQVcsQ0FBTSxDQUFDLG1CQUFtQjtJQUNyQyxZQUFZLENBQU0sQ0FBQyxvQkFBb0I7SUFDdkMsT0FBTyxDQUFTLENBQUMsc0RBQXNEO0lBQ3ZFLFdBQVcsQ0FBTSxDQUFDLHNDQUFzQztJQUN4RCxjQUFjLENBQU0sQ0FBQyxtQ0FBbUM7SUFDeEQsU0FBUyxDQUFNLENBQUMsd0NBQXdDO0lBQ3hELFdBQVcsQ0FBTSxDQUFDLDBDQUEwQztJQUM1RCxXQUFXLENBQU0sQ0FBQyxtRUFBbUU7SUFDckYsU0FBUyxHQUFVLEVBQUUsQ0FBQyxDQUFDLGtDQUFrQztJQUN6RCxJQUFJLEdBQThCLE1BQU0sQ0FBQyxDQUFDLDRCQUE0QjtJQUN0RSxZQUFZLENBQVMsQ0FBQyw0QkFBNEI7SUFDbEQsY0FBYyxHQUFrQixJQUFJLENBQUMsQ0FBQyx3Q0FBd0M7SUFDOUUsUUFBUSxHQUFVLEVBQUUsQ0FBQyxDQUFDLDJDQUEyQztJQUVoRSxhQUFhLEdBQUcsSUFBSSxZQUFpQixDQUFDLENBQUMsK0NBQStDO0lBQ3RGLFVBQVUsR0FBRyxJQUFJLFlBQWlCLENBQUMsQ0FBQyxpRUFBaUU7SUFDckcsY0FBYyxHQUFHLElBQUksWUFBaUIsQ0FBQyxDQUFDLGtDQUFrQztJQUMxRSxZQUFZLEdBQUcsSUFBSSxZQUFpQixDQUFDLENBQUUsMkNBQTJDO0lBQ2xGLFVBQVUsR0FBRyxJQUFJLFlBQWlCLENBQUMsQ0FBQyxnREFBZ0Q7SUFDcEYsYUFBYSxHQUFHLElBQUksWUFBaUIsQ0FBQyxDQUFDLHlCQUF5QjtJQUNoRSxXQUFXLEdBQUcsSUFBSSxZQUFrRCxDQUFDLENBQUMsdUJBQXVCO0lBQzdGLGdCQUFnQixHQUFHLElBQUksWUFBaUIsQ0FBQyxDQUFDLDZEQUE2RDtJQUN2RyxjQUFjLEdBQUcsSUFBSSxZQUFZLEVBQTZDLENBQUM7SUFDL0UsWUFBWSxHQUFHLElBQUksWUFBWSxFQUE2QyxDQUFDO0lBQzdFLFdBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUN6RCxjQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVMsQ0FBQyxDQUFDLHVDQUF1QztJQUNuRixRQUFRLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQyxDQUFDLG1CQUFtQjtJQUN2RCxrQkFBa0IsR0FBRyxJQUFJLFlBQWlCLENBQUMsQ0FBQyxnREFBZ0Q7SUFDNUYsa0JBQWtCLEdBQUcsSUFBSSxZQUFpQixDQUFDLENBQUMsdUNBQXVDO0lBQ25GLHNCQUFzQixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBQy9ELFlBQVksR0FBRyxJQUFJLFlBQWlCLENBQUM7SUFDL0MsSUFBSTtJQUNKLCtCQUErQjtJQUMvQix3QkFBd0I7SUFDeEIsd0JBQXdCO0lBQ3hCLE9BQU87SUFDUCwrQkFBK0I7SUFDL0IscUJBQXFCO0lBQ3JCLHlCQUF5QjtJQUN6QixzQkFBc0I7SUFDdEIscUJBQXFCO0lBQ3JCLFlBQVk7SUFDWiwwQkFBMEI7SUFDMUIsU0FBUztJQUNULGdDQUFnQztJQUNoQyx1QkFBdUI7SUFDdkIsa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixVQUFVO0lBQ1YsT0FBTztJQUNQLGdDQUFnQztJQUNoQywrQkFBK0I7SUFDL0IsMkJBQTJCO0lBQzNCLE1BQU07SUFDTixJQUFJO0lBRWdCLElBQUksQ0FBVztJQUNOLGNBQWMsQ0FBMkI7SUFFdEUsU0FBUyxDQUFNLENBQUMsMEJBQTBCO0lBQzFDLGVBQWUsQ0FBVSxDQUFDLGlDQUFpQztJQUMzRCxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsMkJBQTJCO0lBQ2pELFdBQVcsR0FBZSxFQUFFLENBQUMsQ0FBQywwQkFBMEI7SUFDeEQsY0FBYyxDQUFNLENBQUMsNkJBQTZCO0lBQ2xELGVBQWUsQ0FBWSxDQUFFLDJDQUEyQztJQUN4RSxVQUFVLENBQU0sQ0FBRSx3QkFBd0I7SUFDMUMsVUFBVSxDQUFTLENBQUMseUJBQXlCO0lBQzdDLGNBQWMsQ0FBTSxDQUFDLDhCQUE4QjtJQUNuRCxVQUFVLENBQU0sQ0FBQyxtQ0FBbUM7SUFDcEQsWUFBWSxHQUFrQixJQUFJLENBQUMsQ0FBQywwQkFBMEI7SUFDOUQsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLHFDQUFxQztJQUN6RCxjQUFjLEdBQUcsS0FBSyxDQUFDLENBQUMscUNBQXFDO0lBQzdELGlCQUFpQixHQUFXLEVBQUUsQ0FBQyxDQUFDLGlDQUFpQztJQUNqRSxvQkFBb0IsR0FBNEIsTUFBTSxDQUFDLENBQUMsb0NBQW9DO0lBQzVGLFlBQVksQ0FBTSxDQUFDLGtDQUFrQztJQUNyRCxhQUFhLEdBQWtCLElBQUksQ0FBQyxDQUFDLDJCQUEyQjtJQUNoRSxVQUFVLENBQU0sQ0FBQyx5QkFBeUI7SUFDMUMsbUJBQW1CLENBQU0sQ0FBQyxtQ0FBbUM7SUFDN0QsZ0JBQWdCLENBQU0sQ0FBQyxnQ0FBZ0M7SUFDdkQsZUFBZSxHQUFRLEVBQUUsQ0FBQSxDQUFDLCtCQUErQjtJQUN6RCxTQUFTLEdBQVksS0FBSyxDQUFDLENBQUMsMEJBQTBCO0lBQ3RELFdBQVcsQ0FBTSxDQUFDLGdDQUFnQztJQUNsRCxjQUFjLEdBQWUsRUFBRSxDQUFDO0lBQ2hDLGFBQWEsQ0FBSyxDQUFDLDZCQUE2QjtJQUNoRCxRQUFRLENBQUssQ0FBRSxtQ0FBbUM7SUFDbEQsU0FBUyxDQUFLLENBQUMsb0NBQW9DO0lBQ25ELFlBQVksQ0FBUyxDQUFDLHVDQUF1QztJQUM3RCxnQkFBZ0IsR0FBWSxLQUFLLENBQUMsQ0FBQyw2QkFBNkI7SUFDaEUsVUFBVSxDQUFNLENBQUMsd0JBQXdCO0lBQ3pDLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyx5QkFBeUI7SUFDOUMsb0JBQW9CLENBQU0sQ0FBQyxvQ0FBb0M7SUFDL0QsZ0JBQWdCLEdBQWtCLElBQUksQ0FBQyxDQUFDLG9EQUFvRDtJQUM1RixhQUFhLENBQU0sQ0FBQywyRUFBMkU7SUFDL0YsWUFBWSxDQUFlLENBQUUsOEJBQThCO0lBQzNELFdBQVcsQ0FBUyxDQUFDLDBCQUEwQjtJQUMvQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQ25CLGFBQWEsR0FBZ0MsRUFBRSxDQUFDLENBQUMsZ0RBQWdEO0lBQ2pHLGVBQWUsR0FBWSxLQUFLLENBQUMsQ0FBQyx1RUFBdUU7SUFDekcsb0JBQW9CLENBQVE7SUFDNUIsa0JBQWtCLENBQVE7SUFDMUIsYUFBYSxDQUFNO0lBQ25CLGNBQWMsQ0FBTTtJQUNwQixZQUFZLEdBQVEsRUFBRSxDQUFDLENBQVMsMEJBQTBCO0lBQzFELGNBQWMsR0FBWSxLQUFLLENBQUMsQ0FBQyw2QkFBNkI7SUFDOUQsaUJBQWlCLENBQUs7SUFDdEIscUJBQXFCLEdBQVksS0FBSyxDQUFDLENBQUMsNkRBQTZEO0lBQ3JHLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDckIsV0FBVyxHQUFZLEtBQUssQ0FBQztJQUM3QixvQkFBb0IsQ0FBTTtJQUNsQixjQUFjLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7SUFDckQsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNYLGFBQWEsR0FBUSxJQUFJLENBQUM7SUFDMUIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNYLFVBQVUsR0FBRyxDQUFDLENBQUM7SUFDZixhQUFhLEdBQWtCLElBQUksQ0FBQztJQUU1QyxZQUFvQixLQUF3QixFQUFVLGtCQUFzQyxFQUFTLFFBQW1CLEVBQVUsV0FBd0IsRUFBVSxhQUE0QjtRQUE1SyxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUFVLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFBUyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUFJLENBQUM7SUFFck0sV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxpQ0FBaUM7UUFDakUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFBO1FBQ2xDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxhQUFhLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1lBQ3BGLElBQUksVUFBVSxHQUFHLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyTCxJQUFLLFVBQVUsS0FBSyxJQUFJLElBQUssVUFBVSxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxFQUFFLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDaEgsK0NBQStDO2dCQUMvQyxPQUFPO1lBQ1QsQ0FBQztZQUNELHNDQUFzQztZQUN0QyxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN4QyxNQUFNLE9BQU8sR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7Z0JBQzVCLDhCQUE4QjtnQkFDOUIsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUNsQyxPQUFPLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7b0JBQ3BDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQztnQkFDekIsQ0FBQztnQkFDRCxxREFBcUQ7Z0JBQ3JELElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDbEMsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUM3QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7Z0JBQ3pCLENBQUM7Z0JBQ0QsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7WUFDSCxVQUFVLEdBQUcsV0FBVyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFBO1lBQ2pDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNyQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sRUFBRSxjQUFjLEtBQUssS0FBSyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLEtBQUssS0FBSyxDQUFDO2dCQUN4RCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLEtBQUssS0FBSyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLEtBQUssS0FBSyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEtBQUssS0FBSyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDO2dCQUM1QyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDO2dCQUM1QyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsZUFBZTtnQkFDNUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQztZQUMzQyxDQUFDO1lBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVO2lCQUM3QixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQztpQkFDL0MsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZDLFNBQVMsRUFBRSxPQUFPO2dCQUNsQixJQUFJLEVBQUUsT0FBTztnQkFDYixHQUFHLElBQUk7YUFDUixDQUFDLENBQUMsQ0FBQztZQUNOLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVTtpQkFDMUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUM7aUJBQzVDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN2QyxTQUFTLEVBQUUsT0FBTztnQkFDbEIsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsR0FBRyxJQUFJO2FBQ1IsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDO1FBQ0QsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM1QyxPQUFPLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBRSxpREFBaUQ7UUFDcEUsQ0FBQztRQUNELCtDQUErQztRQUMvQyxzREFBc0Q7UUFDdEQsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDekMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsMkJBQTJCO1FBQ3BFLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDOUYsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7UUFDakcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2hHLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2RixJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JILElBQUksQ0FBQyxjQUFjLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDN0gsSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQTtRQUc3RywrREFBK0Q7UUFDL0QsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2RixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDOUgsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25HLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUN4RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNqQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDcEUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDakUsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRW5GLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXJNLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ25DLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUNQLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQTtRQUN4RCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUE7UUFDNUQsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQztRQUNyRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsZUFBZSxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDLCtCQUErQjtZQUMxRixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsZUFBZSxDQUFDO1FBQ3hELENBQUM7UUFDRCxJQUFHLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLElBQUksRUFBRSxDQUFDO1lBQzNFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2xHLENBQUM7UUFDRCxJQUFHLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLElBQUksRUFBQyxDQUFDO1lBQzFFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztZQUN0RCxJQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUMsQ0FBQztnQkFDdkYsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFBO1lBQ3BDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztnQkFDdEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDL0MsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ25FLE9BQU87d0JBQ0wsR0FBRyxNQUFNO3dCQUNULE1BQU0sRUFBRSxDQUFDLEtBQUs7d0JBQ2QsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVTt3QkFDM0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsUUFBUTtxQkFDeEIsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQTtZQUN6QyxDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUMxSCxJQUFJLG9CQUFvQixFQUFFLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3hFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7WUFDOUIsTUFBTSxRQUFRLEdBQVEsRUFBRSxDQUFDO1lBQ3pCLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO2dCQUM1QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUN6QyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzFCLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUN4QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFFLHNCQUFzQjtvQkFFckUsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7d0JBQ3hCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzFCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDekQsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUN0RCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ2pELENBQUM7UUFDRCxzRUFBc0U7UUFDdEUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUUzRixJQUFJLGlCQUFpQixFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxNQUFNLFFBQVEsR0FBUSxFQUFFLENBQUM7WUFFekIsc0VBQXNFO1lBQ3RFLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNyQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7WUFFSCx3REFBd0Q7WUFDeEQsSUFBSSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtnQkFDN0MsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ3JDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDdkQsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7d0JBQ3hCLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNyQyxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCwyRkFBMkY7WUFDM0YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQy9ELEdBQUcsR0FBRztvQkFDTixLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUMzQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUNELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsYUFBYSxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDakYsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxDQUFBO2dCQUN2RCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLDRCQUE0QjtRQUN0Qyx3RUFBd0U7UUFDeEUsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDM0UsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyx3Q0FBd0M7WUFDdEUsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzlCLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQzVFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtnQkFDbkUsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFDLFVBQVUsQ0FBQyxDQUFBLENBQUMscUNBQXFDO1FBQ3BMLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDNUIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pELENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGNBQWMsQ0FBTSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDcEYsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDN0MsTUFBTSxLQUFLLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO1lBQ3pDLE1BQU0sR0FBRyxHQUFHLEtBQUssR0FBRyxRQUFRLENBQUM7WUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1RCxDQUFDO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFBO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxpQ0FBaUM7UUFDakUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFBO1FBQ2xDLHdEQUF3RDtRQUN4RCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQzVELENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ2QsSUFBSSxXQUFXLElBQUksVUFBVSxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3ZCLENBQUM7WUFDSCxDQUFDLENBQ0YsQ0FBQztZQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDcEYsSUFBSSxVQUFVLEdBQUcsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BMLElBQUssVUFBVSxLQUFLLElBQUksSUFBSyxVQUFVLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLEVBQUUsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNoSCw4Q0FBOEM7Z0JBQzlDLE9BQU87WUFDVCxDQUFDO1lBQ0Qsc0NBQXNDO1lBQ3RDLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hDLE1BQU0sT0FBTyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztnQkFDNUIsOEJBQThCO2dCQUM5QixJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ2xDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztvQkFDcEMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDO2dCQUN6QixDQUFDO2dCQUNELHFEQUFxRDtnQkFDckQsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUNsQyxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQzdDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQztnQkFDekIsQ0FBQztnQkFDRCxPQUFPLE9BQU8sQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztZQUNILFVBQVUsR0FBRyxXQUFXLENBQUM7WUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUE7WUFDakMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxFQUFFLGNBQWMsS0FBSyxLQUFLLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsS0FBSyxLQUFLLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksS0FBSyxLQUFLLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsS0FBSyxLQUFLLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUM7WUFDM0MsQ0FBQztZQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVTtpQkFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLGFBQWEsS0FBSyxJQUFJLENBQUM7aUJBQy9DLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN2QyxTQUFTLEVBQUUsT0FBTztnQkFDbEIsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsR0FBRyxJQUFJO2FBQ1IsQ0FBQyxDQUFDLENBQUM7WUFDTixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVU7aUJBQzFCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDO2lCQUM1QyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDdkMsU0FBUyxFQUFFLE9BQU87Z0JBQ2xCLElBQUksRUFBRSxPQUFPO2dCQUNiLEdBQUcsSUFBSTthQUNSLENBQUMsQ0FBQyxDQUFDO1lBQ0osSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMvQixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLDZEQUE2RDtnQkFDOUQsOEZBQThGO2dCQUM3RixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMxRixJQUFJLE1BQU0sR0FBUSxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUMvQixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTt3QkFDdkUsSUFBSSxTQUFTLENBQUM7d0JBQ2QsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7NEJBQ3BCLCtDQUErQzs0QkFDL0MsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7NEJBQ3BFLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQzs0QkFDakIsaURBQWlEOzRCQUNqRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dDQUMzQyxJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQ3JCLENBQUM7NEJBQ0QsT0FBTyxHQUFHLE9BQU8sQ0FBQzt3QkFDcEIsQ0FBQzs2QkFBTSxDQUFDLENBQUUsMERBQTBEOzRCQUNsRSxTQUFTLEdBQUcsV0FBVyxDQUFDOzRCQUN4QixPQUFPLEdBQUcsU0FBUyxDQUFDO3dCQUN0QixDQUFDO3dCQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDL0QsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7b0JBRXRCLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsc0RBQXNEO2dCQUN0RCxJQUFJLFFBQVEsR0FBRyxNQUFNLEVBQUUsZ0JBQWdCLENBQUM7Z0JBQ3hDLElBQUksS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBUSxxQ0FBcUM7Z0JBQ3ZFLElBQUksUUFBUSxFQUFFLENBQUM7b0JBQ2IsMENBQTBDO29CQUMxQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUMvRCxDQUFDLFdBQVcsRUFBRSxFQUFFO3dCQUNkLElBQUksV0FBVyxJQUFJLFNBQVMsRUFBRSxDQUFDOzRCQUM3QixJQUFJLFdBQVcsQ0FBQyxjQUFjLElBQUksV0FBVyxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUksQ0FBRSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLGNBQWMsS0FBSyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO2dDQUN6TyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0NBQy9ELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztnQ0FDckIsSUFBSSxrQkFBa0IsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFBO2dDQUM3QyxJQUFJLFdBQVcsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBQyxDQUFDO29DQUM3QyxrQkFBa0IsR0FBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtnQ0FDeEYsQ0FBQztnQ0FDRCxJQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFBQyxDQUFDO29DQUNwQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFBO29DQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxrQkFBa0IsQ0FBQTtnQ0FDMUMsQ0FBQztxQ0FBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUUsa0NBQWtDO29DQUNwRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTt3Q0FDMUIsMENBQTBDO3dDQUMxQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7d0NBQ2xFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFBO3dDQUN6RSxJQUFJLGVBQWUsSUFBSSxZQUFZLEVBQUUsQ0FBQzs0Q0FDcEMsU0FBUyxHQUFHLEtBQUssQ0FBQzt3Q0FDcEIsQ0FBQztvQ0FDSCxDQUFDLENBQUMsQ0FBQztvQ0FDSCxJQUFJLFNBQVMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLENBQUMsK0JBQStCO3dDQUNwRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDOzRDQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLENBQUM7d0NBQ2pELENBQUM7NkNBQU0sQ0FBQzs0Q0FDTixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO3dDQUNyQyxDQUFDO29DQUNILENBQUM7Z0NBQ0gsQ0FBQztxQ0FBTSxJQUFHLGtCQUFrQixFQUFFLENBQUM7b0NBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7Z0NBQ3JDLENBQUM7Z0NBQ0QsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dDQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0NBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQ0FDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztnQ0FDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztnQ0FDeEMsMENBQTBDO2dDQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dDQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7NEJBQy9ELENBQUM7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDLENBQ0YsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3pHLElBQUksQ0FBQyxZQUFZLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDdEgsSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUMxRyxJQUFJLENBQUMsV0FBVyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ2xILElBQUksQ0FBQyxZQUFZLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDdEgsSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUMxRyxJQUFJLENBQUMsZUFBZSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ2xJLElBQUksQ0FBQyxZQUFZLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDckgsSUFBSSxDQUFDLGNBQWMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM3SCxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFBO1FBRTdHLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVuRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLElBQUcsRUFBRSxDQUFDO1FBQ3RILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLFNBQVMsSUFBRyxDQUFDLENBQUM7UUFDekgsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2hHLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV2RixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXJHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUV6QywrREFBK0Q7UUFDL0QsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2RixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDOUgsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25HLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUN4RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNqQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDcEUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDakUsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBRyxJQUFJLENBQUMsaUJBQWlCLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMzRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNsRyxDQUFDO1FBQ0QsSUFBRyxJQUFJLENBQUMsaUJBQWlCLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLEVBQUMsQ0FBQztZQUMxRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUM7WUFDdEQsSUFBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFDLENBQUM7Z0JBQ3ZGLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQTtZQUNwQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7Z0JBQ3RELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQy9DLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUNuRSxPQUFPO3dCQUNMLEdBQUcsTUFBTTt3QkFDVCxNQUFNLEVBQUUsQ0FBQyxLQUFLO3dCQUNkLE1BQU0sRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVU7d0JBQzNCLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVE7cUJBQ3hCLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUE7WUFDekMsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDMUgsSUFBSSxvQkFBb0IsRUFBRSxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN4RSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1lBQzlCLE1BQU0sUUFBUSxHQUFRLEVBQUUsQ0FBQztZQUN6QixvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDekMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMxQixvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBRSxzQkFBc0I7b0JBRXJFLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUN4QixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUMxQixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQ3pELENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDdEQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNqRCxDQUFDO1FBQ0Qsc0VBQXNFO1FBQ3RFLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFcEYsSUFBSSxpQkFBaUIsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsTUFBTSxRQUFRLEdBQVEsRUFBRSxDQUFDO1lBRXpCLHNFQUFzRTtZQUN0RSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDckMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUFDO1lBRUgsd0RBQXdEO1lBQ3hELElBQUksQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7Z0JBQzdDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUNyQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ3ZELElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUN4QixRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDckMsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsMkZBQTJGO1lBQzNGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUMvRCxHQUFHLEdBQUc7b0JBQ04sS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDM0MsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksY0FBYyxDQUFNLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUNuQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDTCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUE7UUFDeEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFBO1FBQzVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxZQUFZLEVBQUUsaUJBQWlCLENBQUM7UUFDekQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFlBQVksRUFBRSxvQkFBb0IsQ0FBQztRQUMvRCxJQUFJLFlBQVksRUFBRSxTQUFTLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxZQUFZLEVBQUUsUUFBUSxDQUFBO1lBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsWUFBWSxFQUFFLFNBQVMsQ0FBQTtZQUN4QyxJQUFJLEdBQUcsR0FBUSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQWUsRUFBRSxFQUFFO2dCQUMvQixHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEIsTUFBTSxJQUFJLEdBQVEsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFFNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNqRCxDQUFDO1lBQ0QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xOLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDO1FBQ3JELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELGtEQUFrRDtRQUNsRCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFBQyxJQUFJLENBQUMsY0FBYyxDQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFBQyxDQUFDO1FBRXJHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsYUFBYSxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDakYsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxDQUFBO2dCQUN2RCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLDRCQUE0QjtRQUN0QyxzQ0FBc0M7UUFDdEMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLGVBQWUsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQywrQkFBK0I7WUFDMUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQztRQUN4RCxDQUFDO2FBQU0sSUFBRyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUM7UUFDdEQsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUN0RixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUMsSUFBSSxDQUFDLENBQUE7UUFDckYsSUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUMzQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6RCxDQUFDO2FBQU0sSUFBRyxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFBO1FBQzFCLENBQUM7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN6RCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsMkJBQTJCO1FBQ3pELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RFLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdDLE1BQU0sS0FBSyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUN6QyxNQUFNLEdBQUcsR0FBRyxLQUFLLEdBQUcsUUFBUSxDQUFDO1lBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUQsQ0FBQzthQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQTtRQUNsQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQyxDQUFDLHdDQUF3QztJQUNwSCxDQUFDO0lBQ0QsZUFBZTtRQUNiLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFDTyx3QkFBd0I7UUFDOUIsb0RBQW9EO1FBQ3BELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUVsRSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBbUIsRUFBRSxFQUFFO2dCQUM1QyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdEUsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBQ0QsYUFBYSxDQUFDLEtBQWlCO1FBQzdCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBRTVCLHFFQUFxRTtRQUNyRSxNQUFNLFlBQVksR0FBSSxLQUFLLENBQUMsTUFBc0IsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUUsSUFBSSxZQUFZLElBQUksWUFBWSxZQUFZLFdBQVcsSUFBSSxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbkYsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDO1lBRTNDLG1DQUFtQztZQUNuQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNuRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFFeEUsSUFBSSxhQUFhLElBQUksQ0FBQyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNyRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDMUQsQ0FBQztRQUNILENBQUM7UUFFRCxzQ0FBc0M7UUFDdEMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQztRQUMxQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBRXZCLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzFELFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTyxZQUFZLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7UUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU87UUFDcEQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLHFCQUFxQixDQUFDLEdBQUcsRUFBRTtZQUM5QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQztZQUN4RCxxQ0FBcUM7WUFDckMsSUFBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUs7Z0JBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQztZQUN4RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUNNLFdBQVcsR0FBRyxDQUFDLE1BQWtCLEVBQUUsRUFBRTtRQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBRTFCLDJDQUEyQztRQUMzQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFFcEMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0QsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDNUQsQ0FBQyxDQUFDO0lBRU0saUJBQWlCLENBQUMsTUFBVyxFQUFFLFFBQWdCO1FBQ3JELCtEQUErRDtRQUMvRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsS0FBSyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMzRyxJQUFJLFdBQVcsS0FBSyxDQUFDLENBQUM7WUFBRSxPQUFPO1FBRS9CLG9EQUFvRDtRQUNwRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFFeEUscUJBQXFCO1FBQ3JCLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsa0RBQWtELGFBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xILElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBRUQsa0RBQWtEO1FBQ2xELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbkQsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNqQixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBZ0IsQ0FBQztnQkFDeEQsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQztnQkFDekQsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0QsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNPLFVBQVUsQ0FBQyxHQUFRO1FBQ3pCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3hELEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLG1DQUFtQztZQUNyRyxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUE0QixDQUFDLENBQUM7UUFDakMsT0FBTyxFQUFFLEdBQUcsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFDRCxrQ0FBa0M7SUFDbEMscUJBQXFCO1FBQ25CLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM5QixNQUFNLE1BQU0sR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUN2QyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssYUFBYSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEtBQUssS0FBSyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDL0YsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ2xHLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO29CQUNyQyxDQUFDO3lCQUFNLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxhQUFhLElBQUksVUFBVSxDQUFDLFNBQVMsS0FBSyxVQUFVLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUMzRyxNQUFNLENBQUMsWUFBWSxFQUFFLEdBQUcsWUFBWSxDQUFDLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQzt3QkFDNUQsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLCtCQUErQjt3QkFDNUUsR0FBRyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQ3ZGLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO29CQUNyQyxDQUFDO3lCQUFNLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxhQUFhLElBQUksVUFBVSxDQUFDLFNBQVMsS0FBSyxVQUFVLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUMzRyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWU7d0JBQ3RILE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFDO29CQUN6QyxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLG9CQUFvQjtZQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDekQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUM3QyxNQUFNLEtBQUssR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7Z0JBQ3pDLE1BQU0sR0FBRyxHQUFHLEtBQUssR0FBRyxRQUFRLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUQsQ0FBQztpQkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFBO1lBQ2xDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELDZDQUE2QztJQUM3QyxvQkFBb0IsQ0FBQyxJQUFLO1FBQ3hCLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzlCLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxhQUFhLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxHQUFHLENBQUMsU0FBUyxLQUFLLEtBQUssSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQzFDLHdCQUF3QjtvQkFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUM3RCxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQzFELENBQUMsQ0FDRixDQUFDO2dCQUNKLENBQUM7cUJBQU0sSUFBSSxHQUFHLENBQUMsU0FBUyxLQUFLLFVBQVUsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3RELDZDQUE2QztvQkFDN0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUM3RCxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDbEgsQ0FBQyxDQUNGLENBQUM7Z0JBQ0osQ0FBQztxQkFBTSxJQUFJLEdBQUcsQ0FBQyxTQUFTLEtBQUssVUFBVSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDdEQsK0JBQStCO29CQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQzdELENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxxQkFBcUI7b0JBQ2pGLENBQUMsQ0FDRixDQUFDO2dCQUNKLENBQUM7cUJBQU0sSUFBSSxHQUFHLENBQUMsU0FBUyxLQUFLLFVBQVUsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3hELDZCQUE2QjtvQkFDN0IsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDO29CQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN0RyxDQUFDO3FCQUFNLElBQUksR0FBRyxDQUFDLFNBQVMsS0FBSyxLQUFLLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNuRCx3QkFBd0I7b0JBQ3hCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztvQkFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDdEcsQ0FBQztxQkFBTSxJQUFJLEdBQUcsQ0FBQyxTQUFTLEtBQUssVUFBVSxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDeEQsNkJBQTZCO29CQUM3QixNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ3RHLENBQUM7WUFDSCxDQUFDO1lBQ0Qsd0NBQXdDO1lBQ3hDLElBQUcsR0FBRyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUMsQ0FBQztnQkFDbkQsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUN2RCxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDdkQsQ0FBQyxDQUNGLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLElBQUksS0FBSyxVQUFVLElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsRUFBRSxDQUFDO1lBQzVFLElBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxhQUFhO2dCQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUEsQ0FBQSxnRUFBZ0U7WUFDaE0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUMsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7SUFDSCxDQUFDO0lBRUQsMERBQTBEO0lBQzFELG9CQUFvQjtRQUNsQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBQ0Qsa0NBQWtDO0lBQ2xDLFFBQVEsQ0FBQyxNQUFjLEVBQUUsWUFBOEIsRUFBRSxZQUE0QixFQUFFLElBQVM7UUFDOUYsd0JBQXdCO1FBQ3hCLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM5QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6RixzQ0FBc0M7WUFDdEMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3ZELGlDQUFpQztnQkFDakMsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDdEUsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGFBQWEsQ0FBQyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUE0QixDQUFDO1lBQ2xILENBQUM7aUJBQU0sQ0FBQztnQkFDTix5REFBeUQ7Z0JBQ3pELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxZQUFZLElBQUksS0FBSyxDQUFDO1lBQ3BELENBQUM7WUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDN0csZ0RBQWdEO1lBQ2hELElBQUksSUFBSSxDQUFDLG9CQUFvQixLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsb0JBQW9CLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ2hGLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ2pCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUN6QyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDekMsa0NBQWtDO29CQUNsQyxJQUFJLE1BQU0sSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLElBQUk7d0JBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQywwQkFBMEI7b0JBQzFFLElBQUksTUFBTSxJQUFJLElBQUk7d0JBQUUsT0FBTyxJQUFJLENBQUMsb0JBQW9CLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCO29CQUMxRixJQUFJLE1BQU0sSUFBSSxJQUFJO3dCQUFFLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQjtvQkFDMUYsc0JBQXNCO29CQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsS0FBSyxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUMvRSxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDL0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQy9CLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ3pCLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzNCLENBQUM7eUJBQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7d0JBQ3BFLHdCQUF3Qjt3QkFDeEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDeEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDMUIsQ0FBQzt5QkFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQzt3QkFDcEUsMkJBQTJCO3dCQUMzQixNQUFNLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUM5QixNQUFNLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNoQyxDQUFDO29CQUNELGlCQUFpQjtvQkFDakIsSUFBSSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUM7d0JBQ3BCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEQsQ0FBQzt5QkFBTSxJQUFJLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQzt3QkFDM0IsT0FBTyxJQUFJLENBQUMsb0JBQW9CLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN0RCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sOERBQThEO3dCQUM5RCxPQUFPLENBQUMsQ0FBQztvQkFDWCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUNuQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUM3QyxNQUFNLEtBQUssR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7Z0JBQ3pDLE1BQU0sR0FBRyxHQUFHLEtBQUssR0FBRyxRQUFRLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDL0gsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sc0NBQXNDO1lBQ3RDLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUN0QyxpQ0FBaUM7Z0JBQ2pDLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQ3RFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxhQUFhLENBQUMsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBNEIsQ0FBQztZQUNsSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04seURBQXlEO2dCQUN6RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1lBQ3BDLENBQUM7WUFDRCxZQUFZLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNOLGdEQUFnRDtZQUNoRCxJQUFHLFlBQVksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLFVBQVU7Z0JBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUMsRUFBRSxDQUFDLENBQUE7UUFDN1csQ0FBQztRQUNELElBQUcsSUFBSSxLQUFLLFVBQVU7WUFBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBQyxFQUFDLENBQUMsQ0FBQTtRQUMvUyxJQUFHLElBQUksS0FBSyxVQUFVO1lBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBQyxVQUFVLENBQUMsQ0FBQTtRQUNoRixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtJQUM3QixDQUFDO0lBRUQsUUFBUSxDQUFDLGNBQTJCO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsY0FBYyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDL0MsTUFBTSxlQUFlLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQztRQUNwRCxNQUFNLFVBQVUsR0FBRyxlQUFlLEdBQUcsY0FBYyxDQUFDLFNBQVMsSUFBSSxjQUFjLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUNqRyxvRkFBb0Y7UUFDcEYsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLGVBQWUsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUMvRCxDQUFDO0lBQ0gsQ0FBQztJQUVELGdGQUFnRjtJQUNwQyxlQUFlLENBQUMsS0FBVTtRQUNwRSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxvQ0FBb0M7SUFDL0QsQ0FBQztJQUVELG9HQUFvRztJQUNwRyxNQUFNLENBQUMsS0FBVTtRQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFBO0lBQ3hFLENBQUM7SUFFRCxtRUFBbUU7SUFDbkUsVUFBVSxDQUFDLEtBQVUsRUFBRSxJQUFTO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFBO1FBQ25ELElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFBO1FBQ2hELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUE7UUFDaEQsSUFBRyxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWE7WUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUE7UUFDckYsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekYsSUFBRyxJQUFJLEtBQUssVUFBVTtnQkFBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUcsWUFBWSxDQUFDLENBQUE7WUFDM0UsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkUsTUFBTSxHQUFHLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO1FBQzdCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBRyxJQUFJLEtBQUssVUFBVTtnQkFBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBQyxFQUFFLENBQUMsQ0FBQTtRQUNyVixDQUFDO1FBQ0QsSUFBRyxJQUFJLEtBQUssVUFBVTtZQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFDLEVBQUMsQ0FBQyxDQUFBO0lBQ2pULENBQUM7SUFFRCwrQ0FBK0M7SUFDL0MsV0FBVyxDQUFDLEtBQVUsRUFBRSxJQUFVO1FBQ2hDLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN4QixXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDaEYsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUE7UUFDakMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUE7UUFDMUMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNyRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDaEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDdEYsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBRyxJQUFJLEtBQUssWUFBWSxJQUFJLElBQUksS0FBSyxVQUFVO1lBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUE7UUFDbkUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQTtRQUN2QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFBO1FBQzlDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUE7UUFDbEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkUsTUFBTSxHQUFHLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBQyxJQUFJLENBQUUsQ0FBQTtJQUNsSSxDQUFDO0lBRUQsMkZBQTJGO0lBQzNGLGFBQWE7UUFDWCxpQ0FBaUM7UUFDakMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUM1QyxPQUFPLFdBQVcsS0FBSyxPQUFPLENBQUM7SUFDakMsQ0FBQztJQUVELDJGQUEyRjtJQUMzRixZQUFZO1FBQ1Ysb0RBQW9EO1FBQ3BELHlDQUF5QztRQUN6QyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO1lBQzFCLHdEQUF3RDtZQUN4RCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtnQkFDL0MsSUFBSSxPQUFPLEVBQUUsT0FBTztvQkFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ25ELENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELENBQUM7YUFBTSxDQUFDO1lBQ04sMkVBQTJFO1lBQzNFLHFDQUFxQztZQUNyQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN2SCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELGlFQUFpRTtJQUNqRSxpQkFBaUIsQ0FBQyxJQUFTLEVBQUUsT0FBWTtRQUN2QyxvRUFBb0U7UUFDcEUsSUFBSSxJQUFJLElBQUksT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDN0IsQ0FBQztRQUNELElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ25ELENBQUM7SUFDSCxDQUFDO0lBRUQsOERBQThEO0lBQzlELFVBQVUsQ0FBQyxJQUFTO1FBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxjQUFjLENBQUMsR0FBUSxFQUFFLElBQVk7UUFDbkMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUVwQyxPQUFPLElBQUk7YUFDUixPQUFPLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDLHNDQUFzQzthQUNuRSxLQUFLLENBQUMsR0FBRyxDQUFDO2FBQ1YsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLFlBQVksQ0FBQyxTQUFjLEVBQUUsSUFBUztRQUNwQyxJQUFJLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNwRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDL0IsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNmLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMxQixLQUFLLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDaEQsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDdkIsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUMvQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sS0FBSyxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7b0JBQ3ZDLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQ25CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7NEJBQ2pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDOzRCQUM3QyxPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ3hDLENBQUMsQ0FBQyxDQUFDO3dCQUVILE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7d0JBQ3RDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUMzQyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUcsSUFBSSxLQUFLLFlBQVksSUFBSSxJQUFJLEtBQUssVUFBVTtZQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFBO1FBQ25FLE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sR0FBRyxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQTtRQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFBO1FBQ2hELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUE7UUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFDLFNBQVMsRUFBQyxJQUFJLENBQUMsQ0FBQTtJQUNqRixDQUFDO0lBRUgseUVBQXlFO0lBQ3pFLGdCQUFnQixDQUFDLE9BQVk7UUFDM0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUMvQixNQUFNLGFBQWEsR0FBVSxFQUFFLENBQUM7UUFFaEMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNqQyxNQUFNLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQy9CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3hDLElBQUksS0FBSyxLQUFLLFNBQVM7b0JBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyxvQ0FBb0M7Z0JBQzFFLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDaEQsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQzt3QkFBRSxPQUFPLENBQUMsZ0JBQWdCO29CQUNqRCxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN0QixDQUFDO2dCQUNELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFRixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDM0IsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2QsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRUMseURBQXlEO0lBQ3pELFlBQVksQ0FBQyxJQUFTLEVBQUUsS0FBYTtRQUNuQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFLENBQUM7WUFDaEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyx5QkFBeUI7WUFDeEUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsdUNBQXVDO1lBQzNFLElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsaUJBQWlCO1lBQzFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzlCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVELDhDQUE4QztJQUM5QyxVQUFVO1FBQ1IsdUNBQXVDO1FBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRUQscUNBQXFDO0lBQ3JDLE1BQU0sQ0FBQyxJQUFTO1FBQ2QsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1lBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLCtEQUErRDtRQUNySCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsaUJBQWlCLENBQUMsTUFBVztRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsbUVBQW1FO0lBQ25FLG9JQUFvSTtJQUNwSSxXQUFXLENBQUMsT0FBWSxFQUFFLE1BQWM7UUFDdEMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hCLE9BQU8sRUFBRSxDQUFDLENBQUMsOERBQThEO1FBQzNFLENBQUM7UUFDRCxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3JDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMzQixPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLGtEQUFrRDtZQUN0RixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0MsT0FBTyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLDRCQUE0QjtZQUM5RSxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFDRCwyQ0FBMkM7SUFDM0MsZ0JBQWdCLENBQUMsTUFBVyxFQUFFLE9BQVksRUFBRSxXQUFnQjtRQUMxRCxJQUFJLFdBQVc7WUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVELG9HQUFvRztJQUNwRyxjQUFjLENBQUMsT0FBWSxFQUFDLElBQVM7UUFDbkMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekYsSUFBSSxHQUFHLEdBQVEsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQWUsRUFBRSxFQUFFO2dCQUMvQixHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxDQUFDO1lBQ0gscURBQXFEO1lBQ3JELElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDMUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7b0JBQ3ZDLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxhQUFhLElBQUksVUFBVSxDQUFDLFNBQVMsS0FBSyxLQUFLLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUMvRixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDL0YsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7b0JBQ2xDLENBQUM7eUJBQU0sSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLGFBQWEsSUFBSSxVQUFVLENBQUMsU0FBUyxLQUFLLFVBQVUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQzNHLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUMvRixHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztvQkFDbEMsQ0FBQzt5QkFBTSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssYUFBYSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEtBQUssVUFBVSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDM0csTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQy9GLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO29CQUNsQyxDQUFDO3lCQUNJLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxhQUFhLElBQUksVUFBVSxDQUFDLFNBQVMsS0FBSyxVQUFVLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUN6RyxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQzdDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUNuRCxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FDekMsQ0FBQzt3QkFDRixHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztvQkFDbEMsQ0FBQzt5QkFDSSxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssYUFBYSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEtBQUssVUFBVSxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDekcsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQ3hDLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUNuRCxDQUFDLENBQ0YsQ0FBQzt3QkFDRixHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztvQkFDdEMsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUksSUFBSSxDQUFDLElBQUksQ0FBQztZQUUvQixJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQztZQUNyRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDekQsQ0FBQztZQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFBO1lBQ2xCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUE7WUFDbEMsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUE7WUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVELE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25FLE1BQU0sR0FBRyxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUE7WUFDbEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN0RCxDQUFDO1lBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNqRCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDcEQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMU0sSUFBRyxJQUFJLEtBQUssVUFBVTtnQkFBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUMsRUFBRSxDQUFDLENBQUE7UUFDclUsQ0FBQztRQUNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFHLElBQUksS0FBSyxVQUFVO1lBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUMsRUFBQyxDQUFDLENBQUE7SUFDalQsQ0FBQztJQUVELDREQUE0RDtJQUM1RCxjQUFjLENBQUMsT0FBWSxFQUFFLFVBQWU7UUFDMUMsSUFBSSxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDN0IsTUFBTSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxHQUFHLFVBQVUsQ0FBQztZQUN6RCxpRUFBaUU7WUFDakUsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBNkQsRUFBRSxFQUFFLENBQ3BJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDOUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMscURBQXFEO1lBQy9ELHFFQUFxRTtZQUNyRSxNQUFNLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQTZELEVBQUUsRUFBRSxDQUNoSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQzlDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLG9EQUFvRDtZQUM5RCx1RUFBdUU7WUFDdkUsT0FBTyxpQkFBaUIsSUFBSSxnQkFBZ0IsQ0FBQztRQUMvQyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCwrQ0FBK0M7SUFDL0MsUUFBUSxDQUFDLEtBQVUsRUFBQyxJQUFTO1FBQzNCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLENBQUMsK0NBQStDO1FBQzVFLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzVFLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFBO1lBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFBO1lBQ2xCLElBQUcsSUFBSSxLQUFLLFVBQVU7Z0JBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUMsRUFBRSxDQUFDLENBQUE7UUFDN1YsQ0FBQztRQUNELElBQUcsSUFBSSxLQUFLLFVBQVU7WUFBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBQyxFQUFDLENBQUMsQ0FBQTtJQUNqVCxDQUFDO0lBRUQsK0ZBQStGO0lBQy9GLFdBQVcsQ0FBQyxLQUFVO1FBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN0QixDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDaEMsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxrQkFBa0IsQ0FBQyxJQUFTLEVBQUUsR0FBUTtRQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNwQixJQUFJLEVBQUUsR0FBRztZQUNULE1BQU0sRUFBRSxTQUFTO1NBQ2xCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsYUFBYSxDQUFDLGdCQUF3QjtRQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLGdCQUFnQixDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsNkJBQTZCO1lBQzdCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLGdCQUFnQixFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsY0FBYyxHQUFHLGdCQUFnQixDQUFDO1lBQ3ZDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xELEtBQUssRUFBRSxHQUFHLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzVCLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLHVCQUF1QjthQUNuQyxDQUFDLENBQUMsQ0FBQztZQUNKLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDbkUsQ0FBQztJQUNILENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsV0FBVyxDQUFDLElBQVM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQTtRQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQTtRQUNsQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDOUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUE7UUFDdEIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekYsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDekMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFHLElBQUksS0FBSyxVQUFVO2dCQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBQyxFQUFFLENBQUMsQ0FBQTtRQUM3VCxDQUFDO1FBQ0QsSUFBRyxJQUFJLEtBQUssVUFBVTtZQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFDLEVBQUMsQ0FBQyxDQUFBO0lBQ2pULENBQUM7SUFFRCwrQ0FBK0M7SUFDL0MsVUFBVSxDQUFDLEtBQVU7UUFDbkIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzRyxPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxLQUFLLENBQUE7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELCtDQUErQztJQUMvQyxXQUFXLENBQUMsS0FBVSxFQUFDLElBQVM7UUFDOUIsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFBO1FBQ3RCLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUMxRyxJQUFJLGFBQWEsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkQsYUFBYSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztRQUN0RSxDQUFDO2FBQU0sQ0FBQztZQUNOLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLGFBQWEsQ0FBQTtRQUN6RCxJQUFJLENBQUMsU0FBUyxHQUFHLGFBQWEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFBO1FBQzFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDL0UsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUE7WUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUE7WUFDbEIsSUFBRyxJQUFJLEtBQUssVUFBVTtnQkFBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBQyxFQUFFLENBQUMsQ0FBQTtRQUM3VixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQ3pDLENBQUM7UUFDRCxJQUFHLElBQUksS0FBSyxVQUFVO1lBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUMsRUFBQyxDQUFDLENBQUE7SUFDalQsQ0FBQztJQUVELG1EQUFtRDtJQUMzQyx1QkFBdUI7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDdkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7b0JBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7b0JBQzdCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUM3QixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELCtEQUErRDtJQUN2RCxtQkFBbUI7UUFDekIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQsMERBQTBEO0lBQzFELGNBQWMsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN2RSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLG1CQUFtQixDQUFDLEtBQVUsRUFBRSxJQUFTO1FBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUM3QyxDQUFDO0lBRUQsU0FBUyxDQUFDLGdCQUF3QjtRQUNoQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixtQkFBbUI7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQiw2QkFBNkI7WUFDN0IsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xELEtBQUssRUFBRSxHQUFHLENBQUMsZ0JBQWdCLENBQUM7WUFDNUIsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsdUJBQXVCO1NBQ25DLENBQUMsQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUVqRSxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsZ0JBQXFCO1FBQ3RDLElBQUksTUFBTSxHQUFPLEVBQUUsQ0FBQztRQUNwQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUM1QyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7UUFDdEMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUM7UUFDeEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFhLEVBQUUsS0FBVSxFQUFFLE9BQVksRUFBRSxNQUFXLEVBQUMsSUFBUztRQUN2RSxJQUFHLElBQUksS0FBSyxNQUFNLEVBQUMsQ0FBQztZQUNsQixLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLE9BQU8sS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUMvSyxDQUFDO1FBQ0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLGNBQWMsQ0FBQztRQUM3QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFBO1FBQ2hDLHNEQUFzRDtRQUN0RCxNQUFNLEtBQUssR0FBRyxPQUFPLEVBQUUsRUFBRSxJQUFJLEtBQUssQ0FBQztRQUNuQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEtBQUssSUFBSSxNQUFNLElBQUksU0FBUyxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsNkVBQTZFO1FBQzdFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUM7UUFDdkUsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLGNBQWMsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsZ0RBQWdEO1FBQ2hELElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDdkMsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLGFBQWEsSUFBSSxVQUFVLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQzNGLElBQUksVUFBVSxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUUsQ0FBQzt3QkFDbkMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDL0QsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQzlELENBQUMsQ0FDRixDQUFDO29CQUNKLENBQUM7eUJBQU0sSUFBSSxVQUFVLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO3dCQUMvQyxjQUFjLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUMvRCxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRyw0QkFBNEI7d0JBQzdGLENBQUMsQ0FDRixDQUFDO29CQUNKLENBQUM7eUJBQU0sSUFBSSxVQUFVLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO3dCQUMvQyxjQUFjLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FDeEUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQzlELE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUNwRCxDQUFDO29CQUNKLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsY0FBYyxDQUFDO1lBQzdDLElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsY0FBYyxDQUFDO1lBQ3hDLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGFBQWEsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFBO1FBQ2xDLENBQUM7UUFDRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBQ0QsNEJBQTRCO0lBQzVCLFdBQVcsQ0FBQyxPQUFZLEVBQUUsTUFBYyxFQUFFLEtBQVU7UUFDbEQsSUFBSSxJQUFJLEdBQUcsTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQyx3Q0FBd0M7UUFFM0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDNUMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9DLEdBQUcsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ3BELEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDeEMsQ0FBQztRQUNILENBQUM7UUFFRCw0QkFBNEI7UUFDNUIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDcEMsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUN2QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEQsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUN0QyxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQVU7UUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDM0IsQ0FBQztJQUNELFlBQVksQ0FBQyxLQUFLO1FBQ2hCLElBQUcsS0FBSyxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUMsQ0FBQztZQUMvQixLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUNyRyxJQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNyQyxDQUFDO1FBQ0gsQ0FBQzthQUFLLENBQUM7WUFDTCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQ3RCLENBQUM7WUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBQ0QsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFTO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQUNELEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBUztRQUMzQixJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN2QixxREFBcUQ7WUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQy9DLENBQUM7WUFDRCxzREFBc0Q7UUFDeEQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlDLENBQUM7SUFDSCxDQUFDO0lBQ0EsdUJBQXVCO0lBQ3ZCLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBUyxFQUFFLEtBQVU7UUFDMUMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQztnQkFDSCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDckQsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO2dCQUM5QiwwQ0FBMEM7Z0JBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDL0MsQ0FBQztnQkFFRCxpREFBaUQ7WUFDbkQsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxJQUFVO1FBQ2xDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNoQyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBZ0IsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELGtDQUFrQztJQUNsQyxhQUFhLENBQUMsSUFBUyxFQUFFLElBQVE7UUFDL0IsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLDhDQUE4QztRQUM5QyxLQUFLLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsR0FBUSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFELCtCQUErQjtZQUMvQixJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNKLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsV0FBVyxDQUFDLEtBQVU7UUFDcEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO3dHQTNrRFUsWUFBWTs0RkFBWixZQUFZLDR6REFvRlosT0FBTyx3S0N6SXBCLGk1M0RBd29CTSxtbVpEbmxCTyxZQUFZLDg3QkF4QnJCLFlBQVksMGVBQ1osbUJBQW1CLHdqQkFDbkIsV0FBVyx1UEFDWCxrQkFBa0Isa2FBQ2xCLGFBQWEsbU5BQ2IsbUJBQW1CLG9EQUNuQixnQkFBZ0IsNGFBQ2hCLGVBQWUsaURBQ2YscUJBQXFCLHdKQUVyQixxQkFBcUIsK1RBQ3JCLFlBQVksaUxBQ1osdUJBQXVCLDBSQUN2QixvQkFBb0IsZ1FBQ3BCLHNCQUFzQixtTkFDdEIsUUFBUSw2MEJBQ1IsdUJBQXVCLDRMQUN2QixzQkFBc0Isc0RBQ3RCLGlCQUFpQjs7NEZBTVIsWUFBWTtrQkE1QnhCLFNBQVM7K0JBQ0UsZUFBZSxjQUNiLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsV0FBVzt3QkFDWCxrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YscUJBQXFCOzt3QkFFckIscUJBQXFCO3dCQUNyQixZQUFZO3dCQUNaLHVCQUF1Qjt3QkFDdkIsb0JBQW9CO3dCQUNwQixzQkFBc0I7d0JBQ3RCLFFBQVE7d0JBQ1IsdUJBQXVCO3dCQUN2QixzQkFBc0I7d0JBQ3RCLGlCQUFpQjt3QkFDakIsc0JBQXNCO3FCQUN2QjtxTUFLUSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQTBCYSxJQUFJO3NCQUF2QixTQUFTO3VCQUFDLE9BQU87Z0JBQ1csY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBNjNCaUIsZUFBZTtzQkFBMUQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0NoaWxkLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgUmVuZGVyZXIyLCBTaW1wbGVDaGFuZ2VzLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0U29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTnh0QnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vYnV0dG9uL254dC1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IE54dFBhZ2luYXRpb24gfSBmcm9tICcuLi9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IE54dFNlYXJjaEZpbHRlclBpcGUgfSBmcm9tICcuLi8uLi9waXBlL3NlYXJjaC1maWx0ZXIvc2VhcmNoLWZpbHRlci5waXBlJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTnh0R2V0VmFsdWVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZS9nZXQtdmFsdWUucGlwZSc7XG5pbXBvcnQgeyBMaXN0Vmlld0ZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4uL2xpc3Qtdmlldy1maWx0ZXIvbGlzdC12aWV3LWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnh0Q3VzdG9tVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uL3BpcGUvY3VzdG9tLXRyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IFBpY2tMb2NhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL3BpY2stbG9jYXRpb24vcGljay1sb2NhdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWNvblNlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi1zZWxlY3Rvci9pY29uLXNlbGVjdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOeHRTZWFyY2hCb3ggfSBmcm9tICcuLi9zZWFyY2gtYm94L3NlYXJjaC1ib3guY29tcG9uZW50JztcbmltcG9ydCB7IEN1c3RvbURyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vY3VzdG9tLWRyb3Bkb3duL2N1c3RvbS1kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tUmFkaW9Db21wb25lbnQgfSBmcm9tICcuLi9jdXN0b20tcmFkaW8vY3VzdG9tLXJhZGlvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOeHRGaWxlVXBsb2FkQ29tcG9uZW50IH0gZnJvbSAnLi4vZmlsZS11cGxvYWQvZmlsZS11cGxvYWQuY29tcG9uZW50JztcbmltcG9ydCB7IE54dElucHV0IH0gZnJvbSAnLi4vbnh0LWlucHV0L254dC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUXVlc3Rpb25CeVJvd1BpcGUgfSBmcm9tICcuLi8uLi9waXBlL3F1ZXN0aW9uLWJ5LXJvdy5waXBlJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhL2RhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlL2NoYW5nZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbnh0LWRhdGF0YWJsZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBOeHRCdXR0b25Db21wb25lbnQsXG4gICAgTnh0UGFnaW5hdGlvbixcbiAgICBOeHRTZWFyY2hGaWx0ZXJQaXBlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgTnh0R2V0VmFsdWVQaXBlLFxuICAgIFBpY2tMb2NhdGlvbkNvbXBvbmVudCxcbiAgICBOeHREYXRhdGFibGUsXG4gICAgSWNvblNlbGVjdG9yQ29tcG9uZW50LFxuICAgIE54dFNlYXJjaEJveCxcbiAgICBDdXN0b21Ecm9wZG93bkNvbXBvbmVudCxcbiAgICBDdXN0b21SYWRpb0NvbXBvbmVudCxcbiAgICBOeHRGaWxlVXBsb2FkQ29tcG9uZW50LFxuICAgIE54dElucHV0LFxuICAgIExpc3RWaWV3RmlsdGVyQ29tcG9uZW50LFxuICAgIE54dEN1c3RvbVRyYW5zbGF0ZVBpcGUsXG4gICAgUXVlc3Rpb25CeVJvd1BpcGVcbiAgICAvLyBSb3dSZXNpemVyRGlyZWN0aXZlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZGF0YXRhYmxlLmNvbXBvbmVudC5jc3MnXG59KVxuZXhwb3J0IGNsYXNzIE54dERhdGF0YWJsZSB7XG4gIEBJbnB1dCgpIGRhdGE6IGFueVtdID0gW107ICAvLyAgZ2V0IGRhdGEgdGhhdCB0byBiZSBkaXNwbGF5ZWQgaW4gYSBhcnJheVxuICBASW5wdXQoKSB0YWJsZUZpbHRlckRhdGE6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGNvbHVtbnM6IEFycmF5PGFueT4gPSBbXTsgLy8gQ29sdW1ucyBoYXZlIGEgbGFiZWwsIGEgY29sdW1uIHR5cGUsIGFuZCBmaWx0ZXIgZGV0YWlscy5cbiAgQElucHV0KCkgd2l0aENoZWNrQm94OiBib29sZWFuOyAgLy8gZ2V0IGlmIHdpdGggb3Igd2l0aG91dCBjaGVja2JveCBpbiB0YWJsZVxuICBASW5wdXQoKSBzZWFyY2hCYXI6IGJvb2xlYW47IC8vIGlmIGl0IGlzIHRydWUsIHRoZSBzZWFyY2ggYmFyIHdpbGwgYmUgZGlzcGxheWVkIG9uIHRhYmxlXG4gIEBJbnB1dCgpIHRhYmxlU2F2ZUJ1dHRvbiA9IGZhbHNlOyAvLyBzYXZlIGJ1dHRvbiBmb3IgZWRpdGluZyBMT1AgaW4gcGF5cm9sbCB0YWJsZSwgIGNoYW5nZWQgbmFtZSBmcm9tICdzYXZlTE9QJ1xuICBASW5wdXQoKSBzdGlja3lDb2x1bW4gPSBmYWxzZTsgLy8gaWYgdGhlIGxhc3QgY29sdW1uIHNob3VsZCBiZSBzdGlja3ksIGl0IHNob3VsZCBiZSBzZW50IGFzIGJvb2xlYW4gdmFsdWVcbiAgQElucHV0KCkgdGFibGVXaWR0aCA9ICcxMDAlJzsgLy8gd2lkdGggb2YgdGFibGUgY2FuIGJlIGFkanVzdGVkIGZyb20gcGFyZW50LCBieSBkZWZhdWx0IGl0IGlzIDEwMCVcbiAgQElucHV0KCkgYWN0aW9uQ29sdW1IZWFkZXIgPSAnQUNUSU9OJzsgIC8vIHRvIGNoYW5nZSB0aGUgaGVhZGVyIGZvciBhY3Rpb24gY29sdW1uXG4gIEBJbnB1dCgpIGFjdGlvbkJ1dHRvbjogYm9vbGVhbjsgIC8vdG8gc2hvdyBidXR0b24gY29sdW0gYXMgYWN0aW9uXG4gIEBJbnB1dCgpIHRpdGxlOiBhbnk7Ly8gdGhlIHRpdGxlIGZvciB0aGUgdGFibGU7XG4gIEBJbnB1dCgpIGlzQnV0dG9uczogYm9vbGVhbjsvLyBpcyBidXR0b24gcHJlc2VudCBpbiB0YWJsZTtcbiAgQElucHV0KCkgYnV0dG9uQXJyYXk6IGFueTsvLyBidXR0b25zIHRvIGJlIGRpc3BsYXllZDtcbiAgQElucHV0KCkgdGFibGVJZDogYW55ID0gJ2lkJzsgLy8gaWQgb2YgdGFibGVcbiAgQElucHV0KCkgaXNFZGl0Um93OiBib29sZWFuOyAvLyBpZiBpdCBpcyB0cnVlLCB0aGUgcm93IGNhbiBiZSBlZGl0ZWRcbiAgQElucHV0KCkgaXNEZWxldGVSb3c6IGJvb2xlYW47IC8vIGlmIGl0IGlzIHRydWUsIHRoZSByb3cgY2FuIGJlIGRlbGV0ZWRcbiAgQElucHV0KCkgYWRkSW5saW5lUmVjb3JkOiBib29sZWFuOyAvLyBpZiBpdCBpcyB0cnVlLCB0aGUgcm93IGNhbiBiZSBhZGRlZCBpbmxpbmVcbiAgQElucHV0KCkgc2VhcmNoQ29uZmlnczogYW55OyAvLyBzZWFyY2ggY29uZmlndXJhdGlvbnNcbiAgQElucHV0KCkgZGlyZWN0aW9uOiAncnRsJyB8ICdsdHInID0gJ2x0cic7IC8vIGRpcmVjdGlvbiBvZiB0YWJsZVxuICBASW5wdXQoKSBwYWdpbmF0aW9uOiBhbnk7IC8vIHBhZ2luYXRpb24gY29uZmlndXJhdGlvbnNcbiAgQElucHV0KCkgYWN0aW9uQnV0dG9uQXJyYXk6IGFueTsgLy8gYWN0aW9uIGJ1dHRvbiBjb25maWd1cmF0aW9uc1xuICBASW5wdXQoKSBtdWx0aXBsZUZpbHRlcjogYW55OyAvLyBpZiBwYWdpbmF0aW9uIHRydWUgdGhlbiB0aGlzIHdpbGwgYmUgdXNlZFxuICBASW5wdXQoKSBpc1BhZ2luYXRpb246IGFueTsgLy8gcGFnaW5hdGlvbiBjb25maWd1cmF0aW9ucyBpZiB0cnVlIHRoZW4gcGFnaW5hdGlvbiB3aWxsIGJlIGVuYWJsZWRcbiAgQElucHV0KCkgaXNOb3NJbmRpY2F0b3I6IGFueTsgLy8gaWYgdHJ1ZSB0aGVuIG5vIGRhdGEgaW5kaWNhdG9yIHdpbGwgYmUgc2hvd25cbiAgQElucHV0KCkgaXNFZGl0YWJsZTogYW55OyAvLyBpZiB0cnVlIHRoZW4gdGFibGUgd2lsbCBiZSBlZGl0YWJsZVxuICBASW5wdXQoKSBmcm9tOiBhbnk7IC8vIGZyb20gZGF0ZSBwYWx0Zm9ybSBiYXNlZCBpbml0aWFsaXplIGlucHV0cyBleDotICdmb3JtQnVpbGRlcidcbiAgQElucHV0KCkgcXVlc3Rpb246IGFueTsgLy8gcXVlc3Rpb24gaXMgdXNlZCBmb3Igbnh0IGZvcm0gYnVpbGRlciB0YWJsZSBwcmV2aWV3XG4gIEBJbnB1dCgpIHJvd1RleHRTaXplOiBhbnk7IC8vIHNpemUgb2Ygcm93IHRleHRcbiAgQElucHV0KCkgcm93VGV4dENvbG9yOiBhbnk7IC8vIGNvbG9yIG9mIHJvdyB0ZXh0XG4gIEBJbnB1dCgpIGFwaU1ldGE6IHN0cmluZzsgLy8gYXBpIG1ldGEgaXMgdXNlZCBmb3Igbnh0IGZvcm0gYnVpbGRlciB0YWJsZSBwcmV2aWV3XG4gIEBJbnB1dCgpIHN1bW1hcnlSb3dzOiBhbnk7IC8vIElucHV0IGZvciBjb25maWd1cmFibGUgc3VtbWFyeSByb3dzXG4gIEBJbnB1dCgpIHN1bW1hcnlDb2x1bW5zOiBhbnk7IC8vIElucHV0IGZvciBzdW1tYXJ5IGNvbHVtbnMgY29uZmlnXG4gIEBJbnB1dCgpIGlzTG9hZGluZzogYW55OyAvL1NLUzI4TUFSMjUgSW5wdXQgZm9yIGxvYWRpbmcgaW5kaWNhdG9yXG4gIEBJbnB1dCgpIHRhYmxlQ29uZmlnOiBhbnk7IC8vIHRhYmxlIGNvbmZpZyBmb3Igbnh0IGZvcm0gYnVpbGRlciB0YWJsZVxuICBASW5wdXQoKSB0YWJsZVBhcmFtczogYW55OyAvL1NLUzE3QVBSMjUgUmVjZWl2ZXMgdGFibGVQYXJhbXMgaW5mb3JtYXRpb24gZnJvbSBwYXJlbnQgY29tcG9uZW50XG4gIEBJbnB1dCgpIGxpc3RWaWV3czogYW55W10gPSBbXTsgLy9TS1MyNkFQUjI1IFByZWRlZmluZWQgbGlzdCB2aWV3c1xuICBASW5wdXQoKSBtb2RlOiAndmlldycgfCAnZWRpdCcgfCAncHJpbnQnID0gJ2VkaXQnOyAvLyBTS1MxMUpVTjI1IE5ldyBtb2RlIGlucHV0XG4gIEBJbnB1dCgpIGxhbmd1YWdlQ29kZTogc3RyaW5nOyAvL1NLUzI4SlVOMjUgZm9yIHRyYW5zbGF0aW9uXG4gIEBJbnB1dCgpIHNlbGVjdGVkQ29sdW1uOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gU0tTMjJKVUwyNSB0byBnZXQgdGhlIHNlbGVjdGVkIGNvbHVtblxuICBASW5wdXQoKSBhbGxJY29uczogYW55W10gPSBbXTsgLy8gU0tTMjJKVUwyNSBpY29uIHNlbGVjdG9yIGNvbXBvbmVudCBpbnB1dFxuXG4gIEBPdXRwdXQoKSB0YWJsZVJvd0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAvLyBkYXRhcyB0byBiZSBwYXNzZWQgd2hlbiB0YWJsZSByb3cgaXMgY2xpY2tlZFxuICBAT3V0cHV0KCkgb25FZGl0RGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PjsgLy8gaWYgZWRpdCBidXR0b24gaXMgY2xpY2tlZCwgdGhlIGRhdGEgb2YgdGhhdCByb3cgd2lsbCBiZSBwYXNzZWRcbiAgQE91dHB1dCgpIHNhdmVCdXR0b25EYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAvLyBlZGl0ZWQgcm93cyBkYXRhIHdpbGwgYmUgcGFzc2VkXG4gIEBPdXRwdXQoKSBvbkRlbGV0ZURhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47ICAvLyB3aGVuIGRlbGV0ZSBidXR0b24gY2xpY2tlZCBwYXNzIHRoZSBkYXRhXG4gIEBPdXRwdXQoKSBidXR0b25FbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAvLyB0aGlzIHdpbGwgZW1pdCBhIHRhYmxlIHRvcCBidXR0b24gY2xpY2sgZXZlbnRcbiAgQE91dHB1dCgpIGh5cGVyTGlua0VtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47IC8vIGh5cGVyIGxpbmsgY2xpY2sgZXZlbnRcbiAgQE91dHB1dCgpIHNpZGVOYXZFbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGRhdGE6IGFueSwgY29sOiBhbnksIGNvbmZpZzogYW55IH0+OyAvLyByaWdodG5hdiBjb2x1bW4gZW1pdFxuICBAT3V0cHV0KCkgYWN0aW9uQnV0dG9uRW1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PjsgLy8gZGF0YXMgdG8gYmUgcGFzc2VkIHdoZW4gdGFibGUgcm93IGFjdGl2ZSBidXR0b24gaXMgY2xpY2tlZFxuICBAT3V0cHV0KCkgY29sdW1uU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdW5pcXVlSWRlbnRpZmllcjogc3RyaW5nLCBkYXRhOiBhbnlbXSB9PigpO1xuICBAT3V0cHV0KCkgcmVtb3ZlQ29sdW1uID0gbmV3IEV2ZW50RW1pdHRlcjx7IHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZywgZGF0YTogYW55W10gfT4oKTtcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRWYWx1ZXMgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpOyAvLyB0byBwYXNzIHRoZSBzZWxlY3RlZCBjaGVja2JveCB2YWx1ZXNcbiAgQE91dHB1dCgpIGZpbGVFbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7IC8vIHRvIHBhc3MgdGhlIGZpbGVcbiAgQE91dHB1dCgpIE54dFRhYmxlUGFyYW1zRW1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PjsgLy9TS1MxN0FQUjI1IHRvIHBhc3MgdGhlIHRhYmxlUGFyYW1zIGluZm9ybWF0aW9uXG4gIEBPdXRwdXQoKSBOeHRUYWJsZUZpbHRlckVtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47IC8vU0tTM01BWTI1IGZpbHRlciBjb2x1bW4gdmFsIGdldCBlbWl0IFxuICBAT3V0cHV0KCkgaGFkbGVEcm9wRG93bkRlcGVuZGVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBOeHRUYWJsZUVtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47XG4gIC8vIHtcbiAgLy8gICBcInBhZ2luYXRpb25cIjogeyAgICAgICAvLyA0XG4gIC8vICAgICAgIFwicGFnZVNpemVcIjogMTAsXG4gIC8vICAgICAgIFwicGFnZUluZGV4XCI6IDEwXG4gIC8vICAgfSxcbiAgLy8gICBcInRhYmxlU2VhcmNoXCI6IHsgICAgICAvLyAxXG4gIC8vICAgICAgIFwiZmllbGRzXCIgOiBbXG4gIC8vICAgICAgICAgICBcImxpZ2h0VHlwZVwiLFxuICAvLyAgICAgICAgICAgXCJzeXN0ZW1cIixcbiAgLy8gICAgICAgICAgIFwic3RhdHVzXCJcbiAgLy8gICAgICAgXSAsXG4gIC8vICAgICAgIFwidmFsdWVcIjogJ3ItMDAxJyBcbiAgLy8gICB9LCAgXG4gIC8vICAgXCJzZWFyY2hGaWx0ZXJEYXRhXCI6IHsgIC8vIDJcbiAgLy8gICAgICAgXCJsaWdodFR5cGVcIjogW1xuICAvLyAgICAgICAgICAgXCJBQVwiLFxuICAvLyAgICAgICAgICAgXCJCQlwiIFxuICAvLyAgICAgICBdXG4gIC8vICAgfSxcbiAgLy8gICBcInNvcnRcIjogeyAgICAgICAgICAgICAgLy8gM1xuICAvLyAgICAgICBcImNvbHVtblwiOiBcImFzc2V0Q29kZVwiLFxuICAvLyAgICAgICBcImRpcmVjdGlvblwiOiBcImFzY1wiXG4gIC8vICAgfVxuICAvLyB9XG5cbiAgQFZpZXdDaGlsZChNYXRTb3J0KSBzb3J0ITogTWF0U29ydDtcbiAgQFZpZXdDaGlsZCgndGFibGVDb250YWluZXInKSB0YWJsZUNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIHNlbGVjdGlvbjogYW55OyAvLyB0byBnZXQgdGhlIHNlbGVjdGVkIHJvd1xuICBzdGlja3lDb25kaXRpb24hOiBudW1iZXI7IC8vIHRvIGdldCB0aGUgc3RpY2t5IGNvbHVtbiBpbmRleFxuICBzZWFyY2hGaWx0ZXIgPSBmYWxzZTsgLy8gdG8gZ2V0IHRoZSBzZWFyY2ggZmlsdGVyXG4gIGZpbHRlckFycmF5OiBBcnJheTxhbnk+ID0gW107IC8vIHRvIGdldCB0aGUgZmlsdGVyIGFycmF5XG4gIHNlbGVjdGVkRmlsdGVyOiBhbnk7IC8vIHRvIGdldCB0aGUgc2VsZWN0ZWQgZmlsdGVyXG4gIHBhZ2VTaXplT3B0aW9uczogQXJyYXk8YW55PiAgLy8gZm9yIHBhZ2luYXRpb24gZ2V0IHRoZSBwYWdlIHNpemUgb3B0aW9uc1xuICBkYXRhU291cmNlOiBhbnk7ICAvLyBmb3IgdGFibGUgZGF0YSBzb3VyY2VcbiAgdG90YWxDb3VudCE6IG51bWJlciAvLyBjb3VudCBvZiB0b3RhbCByZWNvcmRzXG4gIHNlYXJjaEJveFZhbHVlOiBhbnk7IC8vIHRvIGdldCB0aGUgc2VhcmNoIGJveCB2YWx1ZVxuICBwcmV2U2VhcmNoOiBhbnk7IC8vIHRvIGdldCB0aGUgcHJldmlvdXMgc2VhcmNoIHZhbHVlXG4gIGFjdGl2ZUNvbHVtbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vIFRyYWNrIHRoZSBhY3RpdmUgY29sdW1uXG4gIGlzU2Nyb2xsZWQgPSBmYWxzZTsgLy8gQm9vbGVhbiBmbGFnIHRvIHRyYWNrIHNjcm9sbCBzdGF0ZVxuICBpc1NoYWRvd0hpZGRlbiA9IGZhbHNlOyAvLyBCb29sZWFuIGZsYWcgdG8gdHJhY2sgc2hhZG93IHN0YXRlXG4gIGN1cnJlbnRTb3J0Q29sdW1uOiBzdHJpbmcgPSAnJzsgLy8gdG8gZ2V0IHRoZSBjdXJyZW50IHNvcnQgY29sdW1uXG4gIGN1cnJlbnRTb3J0RGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyB8ICdub25lJyA9ICdub25lJzsgLy8gdG8gZ2V0IHRoZSBjdXJyZW50IHNvcnQgZGlyZWN0aW9uXG4gIG9yaWdpbmFsRGF0YTogYW55OyAvLyBTdG9yZSBvcmlnaW5hbCBkYXRhIGZvciBzb3J0aW5nXG4gIGhvdmVyZWRDb2x1bW46IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyBUcmFjayB0aGUgaG92ZXJlZCBjb2x1bW5cbiAgc2VhcmNoVGV4dDogYW55OyAvLyB0byBnZXQgdGhlIHNlYXJjaCB0ZXh0XG4gIG11bHRpcGxlRmlsdGVyQXJyYXk6IGFueTsgLy8gdG8gZ2V0IHRoZSBtdWx0aXBsZSBmaWx0ZXIgYXJyYXlcbiAgdGFibGVGaWx0ZXJBcnJheTogYW55OyAvLyB0byBnZXQgdGhlIHRhYmxlIGZpbHRlciBhcnJheVxuICBmaWx0ZXJEYXRhQXJyYXk6IGFueSA9IHt9IC8vIHRvIGdldCB0aGUgZmlsdGVyIGRhdGEgYXJyYXlcbiAgaXNSZXNpemVkOiBib29sZWFuID0gZmFsc2U7IC8vIGZvciB0YWJsZSBjb2x1bW4gcmVzaXplXG4gIHNGaWx0ZXJEYXRhOiBhbnk7IC8vIHRvIGdldCB0aGUgc2VhcmNoIGZpbHRlciBkYXRhXG4gIGN1cnJlbnRDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107XG4gIGlubGluZUVsZW1lbnQ6IGFueSAvLyBmb3IgYWRkIGEgbmV3IHJvdyBvbiB0YWJsZVxuICBwYWdlU2l6ZTogYW55ICAvLyBmb3IgcGFnaW5hdGlvbiBnZXQgdGhlIHBhZ2Ugc2l6ZVxuICBwYWdlSW5kZXg6IGFueSAvLyBmb3IgcGFnaW5hdGlvbiBnZXQgdGhlIHBhZ2UgaW5kZXhcbiAgdG90YWxSZWNvcmRzOiBudW1iZXI7IC8vIGZvciBwYWdpbmF0aW9uIGdldCB0aGUgdG90YWwgcmVjb3Jkc1xuICBjb25maWdQYWdpbmF0aW9uOiBib29sZWFuID0gZmFsc2U7IC8vIGZsYWcgZm9yIGNvbmZpZyBwYWdpbmF0aW9uXG4gIGRlbGV0ZURhdGE6IGFueTsgLy8gdG8gZ2V0IHRoZSBkZWxldGUgcm93XG4gIGRlbGV0ZU1vZGFsID0gZmFsc2U7IC8vIGZvciBjb25mb3JtYXRpb24gcG9wdXBcbiAgZHJvcGRvd25BY3Rpb25CdXR0b246IGFueTsgLy8gZm9yIGFjdGlvbiBjb2x1bW4gZHJvcGRvd24gYnV0dG9uXG4gIGN1cnJlbnRPcGVuSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsOyAvLyB0cmFjayB0aGUgY3VycmVudCBvcGVuIGFjdGlvbiBkcm9wZG93biBpY29uIGluZGV4XG4gIGNsaWNrTGlzdGVuZXI6IGFueTsgLy8gYWN0aW9uIGNvbHVtbiBkcm9wZG93biBidXR0b24gY2xpY2sgbGlzdGVuZXIgZm9yIGNsb3NlIGEgZHJvcGRvd24gYnV0dG9uXG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uOyAgLy8gZm9yIHRhYmxlIGRhdGEgc3Vic2NyaXB0aW9uXG4gIGRlbGV0ZUluZGV4OiBudW1iZXI7IC8vIHRvIGdldCB0aGUgZGVsZXRlIGluZGV4XG4gIHNob3dQb3BvdmVyID0gdHJ1ZTtcbiAgc3VtbWFyeVZhbHVlczogeyBbbGFiZWw6IHN0cmluZ106IG51bWJlciB9ID0ge307IC8vIFNLUzIwTUFSMjUgT2JqZWN0IHRvIHN0b3JlIHN1bW1hcnkgcm93IHZhbHVlc1xuICBpc1N1bW1hcnlDb2x1bW46IGJvb2xlYW4gPSBmYWxzZTsgLy8gU0tTMjBNQVIyNSBGbGFnIHRvIGNoZWNrIGlmIHRoZSBjb2x1bW4gaXMgaW4gdGhlIGRpc3BseWNvbHVtbnMgYXJyYXlcbiAgaXNTdW1tYXJ5U3RhcnRDb2x1bW46IGFueVtdO1xuICBpc1N1bW1hcnlFbmRDb2x1bW46IGFueVtdO1xuICBmaWx0ZXJCb3hEYXRhOiBhbnk7XG4gIGZpbHRlclRhYmxlTm9zOiBhbnk7XG4gIHNlbGVjdGVkVmlldzogYW55ID0gJyc7ICAgICAgICAgLy8gU2VsZWN0ZWQgbGlzdCB2aWV3IG5hbWVcbiAgaXNEcm9wZG93bk9wZW46IGJvb2xlYW4gPSBmYWxzZTsgLy8gVHJhY2tzIGRyb3Bkb3duIHZpc2liaWxpdHlcbiAgY3VycmVudFZpZXdGaWx0ZXI6IGFueVxuICBpc0Z1bGxUYWJsZVN1bW1hcnlSb3c6IGJvb2xlYW4gPSBmYWxzZTsgLy8gU0tTMTNKVU4yNSBGbGFnIHRvIGNoZWNrIGlmIHRoZSB0YWJsZSBoYXMgZnVsbCBzdW1tYXJ5IHJvd1xuICBpc0ltYWdlSG92ZXIgPSBmYWxzZTtcbiAgaXNJbWFnZUVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VsZWN0ZWRJbWFnZUVsZW1lbnQ6IGFueTtcbiAgcHJpdmF0ZSBxdWVzdGlvbnNDYWNoZTogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcbiAgaXNSZXNpemluZyA9IGZhbHNlO1xuICBwcml2YXRlIGN1cnJlbnRDb2x1bW46IGFueSA9IG51bGw7XG4gIHByaXZhdGUgc3RhcnRYID0gMDtcbiAgcHJpdmF0ZSBzdGFydFdpZHRoID0gMDtcbiAgcHJpdmF0ZSByZXNpemVGcmFtZUlkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSxwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLCBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UpIHsgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddIHx8IGNoYW5nZXNbJ2NvbHVtbnMnXSkge1xuICAgICAgdGhpcy5xdWVzdGlvbnNDYWNoZS5jbGVhcigpO1xuICAgIH1cbiAgICB0aGlzLmRhdGFTb3VyY2UgPSB7IGRhdGE6IFtdIH07IC8vIG9yIHVzZSBhIHByb3BlciBkYXRhIHN0cnVjdHVyZVxuICAgIHRoaXMuY3VycmVudENvbHVtbnMgPSB0aGlzLmNvbHVtbnNcbiAgICBpZiAodGhpcy5mcm9tID09PSAnZm9ybUJ1aWxkZXInKSB7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLnF1ZXN0aW9uPy5pbnB1dCA/IHRoaXMucXVlc3Rpb24/LmlucHV0IDogdGhpcy5kYXRhID8gdGhpcy5kYXRhIDogW11cbiAgICAgIGxldCBwYXJzZWRNZXRhID0gdHlwZW9mIHRoaXMucXVlc3Rpb24/LlsnZmllbGRzTWV0YSddID09PSAnb2JqZWN0JyA/IHRoaXMucXVlc3Rpb24/LlsnZmllbGRzTWV0YSddIDogdGhpcy5xdWVzdGlvbj8uWydmaWVsZHNNZXRhJ10gID8gSlNPTi5wYXJzZSh0aGlzLnF1ZXN0aW9uPy5bJ2ZpZWxkc01ldGEnXSkgOiBbXTtcbiAgICAgIGlmICggcGFyc2VkTWV0YSA9PT0gbnVsbCB8fCAgcGFyc2VkTWV0YSA9PT0gdW5kZWZpbmVkIHx8ICFBcnJheS5pc0FycmF5KHBhcnNlZE1ldGEpIHx8IHBhcnNlZE1ldGE/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBjb25zb2xlLndhcm4oJ05vIHZhbGlkIG1ldGFkYXRhIHByb3ZpZGVkJyk7IFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBTS1MyMkpVTDI1IFRyYW5zZm9ybSB0aGUgcGFyc2VkTWV0YVxuICAgICAgY29uc3QgdXBkYXRlZE1ldGEgPSBwYXJzZWRNZXRhLm1hcChpdGVtID0+IHtcbiAgICAgICAgY29uc3QgbmV3SXRlbSA9IHsgLi4uaXRlbSB9O1xuICAgICAgICAvLyBSZW5hbWUgYXBpTmFtZSB0byBmaWVsZE5hbWVcbiAgICAgICAgaWYgKG5ld0l0ZW0uYXBpTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbmV3SXRlbS5maWVsZE5hbWUgPSBuZXdJdGVtLmFwaU5hbWU7XG4gICAgICAgICAgZGVsZXRlIG5ld0l0ZW0uYXBpTmFtZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTS1MyMkpVTDI1IFJlbmFtZSBmbGRUeXBlIHRvIHR5cGUgYW5kIGxvd2VyY2FzZSBpdFxuICAgICAgICBpZiAobmV3SXRlbS5mbGRUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBuZXdJdGVtLnR5cGUgPSBuZXdJdGVtLmZsZFR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBkZWxldGUgbmV3SXRlbS5mbGRUeXBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdJdGVtO1xuICAgICAgfSk7XG4gICAgICBwYXJzZWRNZXRhID0gdXBkYXRlZE1ldGE7XG4gICAgICB0aGlzLmN1cnJlbnRDb2x1bW5zID0gdXBkYXRlZE1ldGFcbiAgICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMudGFibGVDb25maWc7XG4gICAgICAgIHRoaXMuaXNOb3NJbmRpY2F0b3IgPSBjb25maWc/LmlzTm9zSW5kaWNhdG9yICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5hZGRJbmxpbmVSZWNvcmQgPSBjb25maWcuYWRkSW5saW5lUmVjb3JkICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc1BhZ2luYXRpb24gPSBjb25maWcuaXNQYWdpbmF0aW9uICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5hY3Rpb25CdXR0b24gPSBjb25maWcuYWN0aW9uQnV0dG9uICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0RlbGV0ZVJvdyA9IGNvbmZpZy5pc0RlbGV0ZVJvdyAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNFZGl0Um93ID0gY29uZmlnLmlzRWRpdFJvdyAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VhcmNoQmFyID0gY29uZmlnLnNlYXJjaEJhciAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNCdXR0b25zID0gY29uZmlnLmlzQnV0dG9ucyAhPT0gZmFsc2U7IC8vc3VtbWFyeUNvbHVtblxuICAgICAgICB0aGlzLnBhZ2VTaXplID0gY29uZmlnLml0ZW1zUGVyUGFnZSB8fCA1O1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN1bW1hcnlDb2x1bW5zID0gcGFyc2VkTWV0YVxuICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uc3VtbWFyeUNvbHVtbiA9PT0gdHJ1ZSlcbiAgICAgICAgLm1hcCgoeyBhcGlOYW1lLCBmbGRUeXBlLCAuLi5yZXN0IH0pID0+ICh7XG4gICAgICAgICAgZmllbGROYW1lOiBhcGlOYW1lLFxuICAgICAgICAgIHR5cGU6IGZsZFR5cGUsXG4gICAgICAgICAgLi4ucmVzdFxuICAgICAgICB9KSk7XG4gICAgICB0aGlzLnN1bW1hcnlSb3dzID0gcGFyc2VkTWV0YVxuICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uc3VtbWFyeVJvdyA9PT0gdHJ1ZSlcbiAgICAgICAgLm1hcCgoeyBhcGlOYW1lLCBmbGRUeXBlLCAuLi5yZXN0IH0pID0+ICh7XG4gICAgICAgICAgZmllbGROYW1lOiBhcGlOYW1lLFxuICAgICAgICAgIHR5cGU6IGZsZFR5cGUsXG4gICAgICAgICAgLi4ucmVzdFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIC8vIEVuc3VyZSBgdGhpcy5kYXRhYCBpcyBhbiBhcnJheVxuICAgIGlmICghdGhpcy5kYXRhIHx8ICFBcnJheS5pc0FycmF5KHRoaXMuZGF0YSkpIHtcbiAgICAgIGNvbnNvbGUud2FybignRGF0YSBpcyBub3QgaW5pdGlhbGl6ZWQgb3IgaXMgbm90IGFuIGFycmF5Jyk7XG4gICAgICB0aGlzLmRhdGEgPSBbXTsgIC8vIEluaXRpYWxpemUgYXMgYW4gZW1wdHkgYXJyYXkgaWYgaXQncyBub3QgdmFsaWRcbiAgICB9XG4gICAgLy8gRW5zdXJlIGB0aGlzLmRhdGFTb3VyY2UuZGF0YWAgaXMgaW5pdGlhbGl6ZWRcbiAgICAvL1NLUzE1RkVCMjUgSW5pdGlhbGl6ZSB0aGlzIGluIHlvdXIgZGF0YSBmZXRjaCBtZXRob2RcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddKSB7XG4gICAgICB0aGlzLm9yaWdpbmFsRGF0YSA9IHRoaXMuZGF0YS5tYXAocm93ID0+IHRoaXMuZmxhdHRlblJvdyhyb3cpKTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5vcmlnaW5hbERhdGE7XG4gICAgICB0aGlzLmNvbXB1dGVTdW1tYXJ5VmFsdWVzKCdvbkNoYW5nZScpOyAvLyBJZiB5b3UgaGF2ZSBzdW1tYXJ5IHJvd3NcbiAgICB9XG4gICAgdGhpcy5vcmlnaW5hbERhdGEgPSBbLi4udGhpcy5kYXRhXTtcbiAgICB0aGlzLnNGaWx0ZXJEYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLm9yaWdpbmFsRGF0YTtcbiAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5wYWdpbmF0aW9uPy5wYWdlU2l6ZSA/IHRoaXMucGFnaW5hdGlvblsncGFnZVNpemUnXSA6IHRoaXMucGFnZVNpemUgfHwgMTA7XG4gICAgdGhpcy5wYWdlSW5kZXggPSB0aGlzLnBhZ2luYXRpb24/LnBhZ2VJbmRleCA/IHRoaXMucGFnaW5hdGlvblsncGFnZUluZGV4J10gOiB0aGlzLnBhZ2VJbmRleCB8fCAxO1xuICAgIHRoaXMudG90YWxSZWNvcmRzID0gdGhpcy5wYWdpbmF0aW9uPy50b3RhbFJlY29yZHMgPyB0aGlzLnBhZ2luYXRpb25bJ3RvdGFsUmVjb3JkcyddIDogdW5kZWZpbmVkO1xuICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gdGhpcy5wYWdpbmF0aW9uPy5wYWdlU2l6ZU9wdGlvbnMgPyB0aGlzLnBhZ2luYXRpb25bJ3BhZ2VTaXplT3B0aW9ucyddIDogWyc1JywgJzEwJywgJzI1JywgJzUwJywgJzEwMCcsICcyMDAnXTtcbiAgICB0aGlzLmNvbmZpZ1BhZ2luYXRpb24gPSAhISh0aGlzLnBhZ2luYXRpb24gJiYgT2JqZWN0LmtleXModGhpcy5wYWdpbmF0aW9uKS5sZW5ndGggPiAwKTtcbiAgICB0aGlzLmlzUGFnaW5hdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaXNQYWdpbmF0aW9uID09PSB0cnVlID8gdGhpcy5pc1BhZ2luYXRpb24gPSB0cnVlIDogdGhpcy5pc1BhZ2luYXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLmlzTm9zSW5kaWNhdG9yID09PSB1bmRlZmluZWQgfHwgdGhpcy5pc05vc0luZGljYXRvciA9PT0gdHJ1ZSA/IHRoaXMuaXNOb3NJbmRpY2F0b3IgPSB0cnVlIDogdGhpcy5pc05vc0luZGljYXRvciA9IGZhbHNlO1xuICAgIHRoaXMuaXNFZGl0YWJsZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaXNFZGl0YWJsZSA9PT0gZmFsc2UgPyB0aGlzLmlzRWRpdGFibGUgPSBmYWxzZSA6IHRoaXMuaXNFZGl0YWJsZSA9IHRydWVcblxuXG4gICAgLy8gU0tTMjBNQVIyNSBDaGVjayBpZiB0aGUgZGlzcGx5Y29sdW1uJ3MgaGF2ZSBhIHN1bW1hcnkgY29sdW1uXG4gICAgaWYgKHRoaXMuc3VtbWFyeVJvd3MgJiYgdGhpcy5zdW1tYXJ5Um93cz8ubGVuZ3RoID4gMCAmJiB0aGlzLmN1cnJlbnRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaXNGdWxsVGFibGVTdW1tYXJ5Um93ID0gdGhpcy5zdW1tYXJ5Um93c1swXS50eXBlID09PSAnZnVsbFJvdycgfHwgIHRoaXMuc3VtbWFyeVJvd3NbMF0udHlwZSA9PT0gJ2Z1bGxyb3cnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgdGhpcy5pc1N1bW1hcnlDb2x1bW4gPSB0aGlzLmN1cnJlbnRDb2x1bW5zLnNvbWUoZWxlbWVudCA9PiBlbGVtZW50ID09PSB0aGlzLnN1bW1hcnlSb3dzWzBdLmNvbHVtbik7XG4gICAgICBpZiAodGhpcy5pc1N1bW1hcnlDb2x1bW4gJiYgIXRoaXMuaXNGdWxsVGFibGVTdW1tYXJ5Um93KSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jdXJyZW50Q29sdW1ucy5pbmRleE9mKHRoaXMuc3VtbWFyeVJvd3NbMF0uY29sdW1uKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHRoaXMuaXNTdW1tYXJ5U3RhcnRDb2x1bW4gPSB0aGlzLmN1cnJlbnRDb2x1bW5zLnNsaWNlKDAsIGluZGV4IC0gMSk7XG4gICAgICAgICAgdGhpcy5pc1N1bW1hcnlFbmRDb2x1bW4gPSB0aGlzLmN1cnJlbnRDb2x1bW5zLnNsaWNlKGluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdGhpcy5pbmxpbmVFbGVtZW50ID0gT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuY3VycmVudENvbHVtbnMubWFwKGtleSA9PiBba2V5LCBcIlwiXSkpO1xuXG4gICAgdGhpcy5kcm9wZG93bkFjdGlvbkJ1dHRvbiA9ICh0aGlzLmFjdGlvbkJ1dHRvbkFycmF5Py5idXR0b25BcnJheSAmJiB0aGlzLmFjdGlvbkJ1dHRvbkFycmF5Py5idXR0b25BcnJheT8ubGVuZ3RoID4gMCkgPyB0aGlzLmFjdGlvbkJ1dHRvbkFycmF5Py5idXR0b25BcnJheT8uc2xpY2UodGhpcy5hY3Rpb25CdXR0b25BcnJheT8uc2l6ZSkgOiBbXTtcbiAgICBcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xuICAgIH0sIDEwMClcbiAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLnRvdGFsUmVjb3JkcyB8fCB0aGlzLmRhdGE/Lmxlbmd0aFxuICAgIHRoaXMuZmlsdGVyVGFibGVOb3MgPSB0aGlzLnRvdGFsUmVjb3JkcyB8fCB0aGlzLmRhdGE/Lmxlbmd0aFxuICAgIGlmICh0aGlzLnN0aWNreUNvbHVtbiA9PT0gdHJ1ZSAmJiB0aGlzLmN1cnJlbnRDb2x1bW5zKSB7XG4gICAgICB0aGlzLnN0aWNreUNvbmRpdGlvbiA9IHRoaXMuY3VycmVudENvbHVtbnM/Lmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGlja3lDb25kaXRpb24gPSB0aGlzLmN1cnJlbnRDb2x1bW5zPy5sZW5ndGggKyAxO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWFyY2hDb25maWdzPy5zZWFyY2hGaWx0ZXJWYWwpIHtcbiAgICAgIHRoaXMuc2VhcmNoQm94VmFsdWUgPSB0aGlzLnNlYXJjaENvbmZpZ3M/LnNlYXJjaEZpbHRlclZhbDsgLy8gU2hvdyB2YWx1ZSBpbiB0aGUgc2VhcmNoIGJveFxuICAgICAgdGhpcy5wcmV2U2VhcmNoID0gdGhpcy5zZWFyY2hDb25maWdzPy5zZWFyY2hGaWx0ZXJWYWw7XG4gICAgfVxuICAgIGlmKHRoaXMuY3VycmVudFZpZXdGaWx0ZXIgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmN1cnJlbnRWaWV3RmlsdGVyID09PSBudWxsKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWaWV3RmlsdGVyID0gdGhpcy5saXN0Vmlld3MgJiYgdGhpcy5saXN0Vmlld3MubGVuZ3RoID4gMCA/IHRoaXMubGlzdFZpZXdzWzBdIDogbnVsbDtcbiAgICB9XG4gICAgaWYodGhpcy5jdXJyZW50Vmlld0ZpbHRlciAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY3VycmVudFZpZXdGaWx0ZXIgIT09IG51bGwpe1xuICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSB0aGlzLmN1cnJlbnRWaWV3RmlsdGVyLmZpbHRlck5hbWU7XG4gICAgICBpZih0aGlzLmN1cnJlbnRWaWV3RmlsdGVyLmlzRGVmYXVsdCB8fCB0aGlzLmN1cnJlbnRWaWV3RmlsdGVyLmZpbHRlck5hbWUgPT09IFwiQWxsIERhdGFcIil7XG4gICAgICAgIHRoaXMuY3VycmVudENvbHVtbnMgPSB0aGlzLmNvbHVtbnNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmN1cnJlbnRWaWV3RmlsdGVyPy5jb2x1bW5zIHx8IFtdO1xuICAgICAgICBjb25zdCB1cGRhdGVDb2x1bW4gPSB0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBjb25zdCBtYXRjaCA9IGNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wubmFtZSA9PT0gY29sdW1uLmZpZWxkTmFtZSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgIGlzSGlkZTogIW1hdGNoLFxuICAgICAgICAgICAgZmlsdGVyOiAhIW1hdGNoPy5maWx0ZXJhYmxlLFxuICAgICAgICAgICAgc29ydDogISFtYXRjaD8uc29ydGFibGVcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jdXJyZW50Q29sdW1ucyA9IFsuLi51cGRhdGVDb2x1bW5dXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRGaWx0ZXJDb2x1bW5zID0gdGhpcy5jdXJyZW50Q29sdW1ucz8uZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmlsdGVyID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpXG4gICAgaWYgKGN1cnJlbnRGaWx0ZXJDb2x1bW5zPy5sZW5ndGggPiAwICYmIHRoaXMuY29uZmlnUGFnaW5hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheSA9IHt9O1xuICAgICAgY29uc3QgZmlsdE9ianM6IGFueSA9IHt9O1xuICAgICAgY3VycmVudEZpbHRlckNvbHVtbnMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheVtlbGVtZW50XSA9IG51bGw7XG4gICAgICAgIGZpbHRPYmpzW2VsZW1lbnRdID0gW107XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBjdXJyZW50RmlsdGVyQ29sdW1ucy5mb3JFYWNoKChrZXk6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRPYmpWYWx1ZShlbGVtZW50LCBrZXkpOyAgLy8gPC0gZ2V0IG5lc3RlZCB2YWx1ZVxuICAgIFxuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmaWx0T2Jqc1trZXldLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5W2tleV0gPSBuZXcgU2V0KGZpbHRPYmpzW2tleV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheSA9IHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5ID0gdGhpcy5tdWx0aXBsZUZpbHRlcjtcbiAgICB9XG4gICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGZpbHRlcmVkIGFycmF5IHRoYXQgZXhjbHVkZXMgYW55IGNvbHVtbiB3aXRoICdbJ1xuICAgIGNvbnN0IHRlbXBGaWx0ZXJDb2x1bW5zID0gdGhpcy5jdXJyZW50Q29sdW1ucz8uZmlsdGVyKGNvbCA9PiAhY29sLmZpZWxkTmFtZS5pbmNsdWRlcygnWycpKTtcbiAgICBcbiAgICBpZiAodGVtcEZpbHRlckNvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpbHRPYmpzOiBhbnkgPSB7fTtcbiAgICBcbiAgICAgIC8vIFNLUzI2TUFZMjUgSW5pdGlhbGl6ZSBzZXRzIHRvIGNvbGxlY3QgdW5pcXVlIHZhbHVlcyBmb3IgZWFjaCBjb2x1bW5cbiAgICAgIHRlbXBGaWx0ZXJDb2x1bW5zLmZvckVhY2goKGNvbDogYW55KSA9PiB7XG4gICAgICAgIGZpbHRPYmpzW2NvbC5maWVsZE5hbWVdID0gbmV3IFNldCgpO1xuICAgICAgfSk7XG4gICAgXG4gICAgICAvLyBTS1MyNk1BWTI1IENvbGxlY3QgdW5pcXVlIHZhbHVlcyBmcm9tIHRhYmxlRmlsdGVyRGF0YVxuICAgICAgdGhpcy50YWJsZUZpbHRlckRhdGE/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICB0ZW1wRmlsdGVyQ29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRPYmpWYWx1ZShlbGVtZW50LCBjb2wuZmllbGROYW1lKTtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZmlsdE9ianNbY29sLmZpZWxkTmFtZV0uYWRkKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgXG4gICAgICAvLyBTS1MyNk1BWTI1IEFwcGVuZCBcInZhbHVlXCIgcHJvcGVydHkgdG8gZWFjaCBjb2x1bW4gb2JqZWN0IHdpdGggdGhlIGFycmF5IG9mIHVuaXF1ZSB2YWx1ZXNcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJBcnJheSA9IFsuLi50ZW1wRmlsdGVyQ29sdW1ucy5tYXAoKGNvbDogYW55KSA9PiAoe1xuICAgICAgICAuLi5jb2wsXG4gICAgICAgIHZhbHVlOiBBcnJheS5mcm9tKGZpbHRPYmpzW2NvbC5maWVsZE5hbWVdKVxuICAgICAgfSkpXTtcbiAgICB9ICAgIFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudGFibGVDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgdGFibGVCb2R5ID0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50YWJsZS1ib2R5Jyk7XG4gICAgICAgIGlmICh0YWJsZUJvZHkgJiYgdGhpcy5pc1BhZ2luYXRpb24pIHtcbiAgICAgICAgICB0aGlzLmlzU2hhZG93SGlkZGVuID0gISh0YWJsZUJvZHkuc2Nyb2xsSGVpZ2h0IDwgNDUwKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMTUwMCk7IC8vIFdhaXRzIDEwMG1zIGZvciByZW5kZXJpbmdcbiAgICAvLyBTS1MyME1BUjI1IEluaXRpYWxpemUgc3VtbWFyeVZhbHVlcyBmb3IgaW5wdXQgcm93cyBhbmQgY29tcHV0ZSB2YWx1ZXNcbiAgICBpZiAoY2hhbmdlc1snc3VtbWFyeVJvd3MnXSB8fCBjaGFuZ2VzWydzdW1tYXJ5Q29sdW1ucyddIHx8IGNoYW5nZXNbJ2RhdGEnXSkge1xuICAgICAgdGhpcy5jb21wdXRlU3VtbWFyeUNvbHVtbnMoKTsgLy8gQ29tcHV0ZSBwZXItcm93IHN1bW1hcnkgY29sdW1ucyBmaXJzdFxuICAgICAgdGhpcy5zdW1tYXJ5Um93cz8uZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICBpZiAocm93LnR5cGUgPT09ICdpbnB1dCcgJiYgdGhpcy5zdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnN1bW1hcnlWYWx1ZXNbcm93LmZpZWxkTmFtZV0gPSAwOyAvLyBEZWZhdWx0IHRvIDAgZm9yIGlucHV0c1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29tcHV0ZVN1bW1hcnlWYWx1ZXMoJ29uQ2hhbmdlJyk7XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoQ29uZmlncyAmJiB0aGlzLnNlYXJjaEJveFZhbHVlID8gdGhpcy5lbXB0eVNlYXJjaCh0aGlzLnNlYXJjaEJveFZhbHVlKSA6IHRoaXMuYXBwbHlGaWx0ZXIodGhpcy50YWJsZVBhcmFtcz8udGFibGVTZWFyY2gsJ29uQ2hhbmdlJykgLy8gU0tTMTdBUFIyNSB1cGRhdGUgc2VhcmNoIGJveCB2YWx1ZVxuICAgIGlmIChjaGFuZ2VzWydsYW5ndWFnZUNvZGUnXSkge1xuICAgICAgaWYgKHRoaXMubGFuZ3VhZ2VDb2RlKSB7XG4gICAgICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnNldExhbmd1YWdlKHRoaXMubGFuZ3VhZ2VDb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0cnVlLCBbXSk7XG4gICAgaWYgKCF0aGlzLnRvdGFsUmVjb3JkcyAmJiB0aGlzLmRhdGEgJiYgdGhpcy5pc1BhZ2luYXRpb24gJiYgIWNoYW5nZXNbJ3RhYmxlUGFyYW1zJ10pIHtcbiAgICAgIGNvbnN0IHBhZ2VJbmRleCA9IE51bWJlcih0aGlzLnBhZ2VJbmRleCkgfHwgMDtcbiAgICAgIGNvbnN0IHBhZ2VTaXplID0gTnVtYmVyKHRoaXMucGFnZVNpemUpIHx8IDEwO1xuICAgICAgY29uc3Qgc3RhcnQgPSAocGFnZUluZGV4IC0gMSkgKiBwYWdlU2l6ZTtcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgcGFnZVNpemU7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YT8uc2xpY2Uoc3RhcnQsIGVuZCkgfHwgW107XG4gICAgfSBlbHNlIGlmICghdGhpcy5pc1BhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhXG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU291cmNlID0geyBkYXRhOiBbXSB9OyAvLyBvciB1c2UgYSBwcm9wZXIgZGF0YSBzdHJ1Y3R1cmVcbiAgICB0aGlzLmN1cnJlbnRDb2x1bW5zID0gdGhpcy5jb2x1bW5zXG4gICAgLy8gU0tTMTNNQVIyNSBnZXQgZGF0YSBmcm9tIHF1ZXN0aW9uIGlmIGZyb20gZm9ybUJ1aWxkZXJcbiAgICBpZiAodGhpcy5mcm9tID09PSAnZm9ybUJ1aWxkZXInKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuY2hhbmdlU2VydmljZS5jdXN0b21DaGFuZ2UkLnN1YnNjcmliZShcbiAgICAgICAgKGNoYW5nZVZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKGNoYW5nZVZhbHVlID09ICdkYXRhQmluZCcpIHtcbiAgICAgICAgICAgIHRoaXMubmdPbkNoYW5nZXMoe30pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMucXVlc3Rpb24/LmlucHV0ID8gdGhpcy5xdWVzdGlvbj8uaW5wdXQgOiB0aGlzLmRhdGEgPyB0aGlzLmRhdGEgOiBbXVxuICAgICAgbGV0IHBhcnNlZE1ldGEgPSB0eXBlb2YgdGhpcy5xdWVzdGlvbj8uWydmaWVsZHNNZXRhJ10gPT09ICdvYmplY3QnID8gdGhpcy5xdWVzdGlvbj8uWydmaWVsZHNNZXRhJ10gOiB0aGlzLnF1ZXN0aW9uPy5bJ2ZpZWxkc01ldGEnXSA/IEpTT04ucGFyc2UodGhpcy5xdWVzdGlvbj8uWydmaWVsZHNNZXRhJ10pIDogW107XG4gICAgICBpZiAoIHBhcnNlZE1ldGEgPT09IG51bGwgfHwgIHBhcnNlZE1ldGEgPT09IHVuZGVmaW5lZCB8fCAhQXJyYXkuaXNBcnJheShwYXJzZWRNZXRhKSB8fCBwYXJzZWRNZXRhPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gY29uc29sZS53YXJuKCdObyB2YWxpZCBtZXRhZGF0YSBwcm92aWRlZCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBTS1MyMkpVTDI1IFRyYW5zZm9ybSB0aGUgcGFyc2VkTWV0YVxuICAgICAgY29uc3QgdXBkYXRlZE1ldGEgPSBwYXJzZWRNZXRhLm1hcChpdGVtID0+IHtcbiAgICAgICAgY29uc3QgbmV3SXRlbSA9IHsgLi4uaXRlbSB9O1xuICAgICAgICAvLyBSZW5hbWUgYXBpTmFtZSB0byBmaWVsZE5hbWVcbiAgICAgICAgaWYgKG5ld0l0ZW0uYXBpTmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbmV3SXRlbS5maWVsZE5hbWUgPSBuZXdJdGVtLmFwaU5hbWU7XG4gICAgICAgICAgZGVsZXRlIG5ld0l0ZW0uYXBpTmFtZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTS1MyMkpVTDI1IFJlbmFtZSBmbGRUeXBlIHRvIHR5cGUgYW5kIGxvd2VyY2FzZSBpdFxuICAgICAgICBpZiAobmV3SXRlbS5mbGRUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBuZXdJdGVtLnR5cGUgPSBuZXdJdGVtLmZsZFR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBkZWxldGUgbmV3SXRlbS5mbGRUeXBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdJdGVtO1xuICAgICAgfSk7XG4gICAgICBwYXJzZWRNZXRhID0gdXBkYXRlZE1ldGE7XG4gICAgICB0aGlzLmN1cnJlbnRDb2x1bW5zID0gdXBkYXRlZE1ldGFcbiAgICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMudGFibGVDb25maWc7XG4gICAgICAgIHRoaXMuaXNOb3NJbmRpY2F0b3IgPSBjb25maWc/LmlzTm9zSW5kaWNhdG9yICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5hZGRJbmxpbmVSZWNvcmQgPSBjb25maWcuYWRkSW5saW5lUmVjb3JkICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc1BhZ2luYXRpb24gPSBjb25maWcuaXNQYWdpbmF0aW9uICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5hY3Rpb25CdXR0b24gPSBjb25maWcuYWN0aW9uQnV0dG9uICE9PSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0RlbGV0ZVJvdyA9IGNvbmZpZy5pc0RlbGV0ZVJvdyAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNFZGl0Um93ID0gY29uZmlnLmlzRWRpdFJvdyAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VhcmNoQmFyID0gY29uZmlnLnNlYXJjaEJhciAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNCdXR0b25zID0gY29uZmlnLmlzQnV0dG9ucyAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBjb25maWcuaXRlbXNQZXJQYWdlIHx8IDU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3VtbWFyeUNvbHVtbnMgPSBwYXJzZWRNZXRhXG4gICAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5zdW1tYXJ5Q29sdW1uID09PSB0cnVlKVxuICAgICAgICAubWFwKCh7IGFwaU5hbWUsIGZsZFR5cGUsIC4uLnJlc3QgfSkgPT4gKHtcbiAgICAgICAgICBmaWVsZE5hbWU6IGFwaU5hbWUsXG4gICAgICAgICAgdHlwZTogZmxkVHlwZSxcbiAgICAgICAgICAuLi5yZXN0XG4gICAgICAgIH0pKTtcbiAgICAgIHRoaXMuc3VtbWFyeVJvd3MgPSBwYXJzZWRNZXRhXG4gICAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5zdW1tYXJ5Um93ID09PSB0cnVlKVxuICAgICAgICAubWFwKCh7IGFwaU5hbWUsIGZsZFR5cGUsIC4uLnJlc3QgfSkgPT4gKHtcbiAgICAgICAgICBmaWVsZE5hbWU6IGFwaU5hbWUsXG4gICAgICAgICAgdHlwZTogZmxkVHlwZSxcbiAgICAgICAgICAuLi5yZXN0XG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKHRoaXMuYXBpTWV0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGV0IG9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAvLyBBUC0yNk1BUjI1IEVuc3VyZSB0aGF0IHRoaXMuYXBpTWV0YSBpcyBhbHdheXMgYW4gb2JqZWN0LiAgXG4gICAgICAgICAvL0FQLTI2TUFSMjUgSWYgaXQncyBhbHJlYWR5IGFuIG9iamVjdCwga2VlcCBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwYXJzZSBpdCBmcm9tIGEgSlNPTiBzdHJpbmcuXG4gICAgICAgICAgdGhpcy5hcGlNZXRhID0gdHlwZW9mIHRoaXMuYXBpTWV0YSA9PT0gJ29iamVjdCcgPyB0aGlzLmFwaU1ldGEgOiBKU09OLnBhcnNlKHRoaXMuYXBpTWV0YSk7XG4gICAgICAgICAgbGV0IGFwaU9iajogYW55ID0gdGhpcy5hcGlNZXRhO1xuICAgICAgICAgIGlmIChhcGlPYmogJiYgYXBpT2JqLmVuZHBvaW50KSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmFwaVJlc3BvbnNlKGFwaU9iai5lbmRwb2ludCk/LnN1YnNjcmliZSgoYXBpUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlcztcbiAgICAgICAgICAgICAgaWYgKGFwaU9iai52YXJpYWJsZSkge1xuICAgICAgICAgICAgICAgIC8vIFZEIDIyTWF5MjQgLSBoYW5kbGluZyBtdWx0aXBsZSBjaGlsZCBvYmplY3RzXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VzID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShhcGlSZXNwb25zZSwgYXBpT2JqLnZhcmlhYmxlKTtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgICAgIC8vIEhBIDE5SkFOMjQgVG8gYXZvaWQgdW5kZWZpbmVkIGVycm9yIGluIGNvbnNvbGVcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3BvbnNlcz8ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgIHZhciByZXNwID0gcmVzcG9uc2VzW2ldO1xuICAgICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvcHRpb25zID0gcmVzdWx0cztcbiAgICAgICAgICAgICAgfSBlbHNlIHsgIC8vIFZEIDE5SkFOMjQgLSBpZiByZXNwb25zZSBoYXMgdmFsdWUod2hpY2ggaXMgYXJyYXkpIG9ubHlcbiAgICAgICAgICAgICAgICByZXNwb25zZXMgPSBhcGlSZXNwb25zZTtcbiAgICAgICAgICAgICAgICBvcHRpb25zID0gcmVzcG9uc2VzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLm1hcCgob2JqOiBhbnkpID0+ICh7IC4uLm9iaiwgZWRpdDogZmFsc2UgfSkpO1xuICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBvcHRpb25zO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBWRCBOT1YyMyAtIGhhbmRsZSB0aGUgZGVwZW5kZW50IHVwZGF0ZSBmb3IgZHJvcGRvd25cbiAgICAgICAgICBsZXQgc291cmNlSWQgPSBhcGlPYmo/LnNvdXJjZVF1ZXN0aW9uSWQ7XG4gICAgICAgICAgbGV0IGZpZWxkID0gYXBpT2JqPy5maWVsZDsgICAgICAgIC8vIFZEIDEzTUFZMjQgLSBkeW5hbWljIGZpZWxkIGNoYW5nZXNcbiAgICAgICAgICBpZiAoc291cmNlSWQpIHtcbiAgICAgICAgICAgIC8vIC8vIFZEIDEwTWF5MjQgU3Vic2NyaWJlIGZvciB0aGUgY2hhbmdlc1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY2hhbmdlQW5ub3VuY2VkJC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIChjaGFuZ2VWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VWYWx1ZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VWYWx1ZS5mcm9tUXVlc3Rpb25JZCAmJiBjaGFuZ2VWYWx1ZS52YWx1ZU9iaiAhPT0gdW5kZWZpbmVkICYmICggQXJyYXkuaXNBcnJheShhcGlPYmouc291cmNlUXVlc3Rpb25JZCk/IGFwaU9iai5zb3VyY2VRdWVzdGlvbklkLmluY2x1ZGVzKGNoYW5nZVZhbHVlLmZyb21RdWVzdGlvbklkKSA6IGNoYW5nZVZhbHVlLmZyb21RdWVzdGlvbklkID09PSBhcGlPYmouc291cmNlUXVlc3Rpb25JZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMubWFwKChvYmo6IGFueSkgPT4gKHsgLi4ub2JqLCBlZGl0OiBmYWxzZSB9KSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWxpZEl0ZW0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YUZyb21Tb3Vyc2VRdWVzID0gY2hhbmdlVmFsdWUudmFsdWVPYmpcbiAgICAgICAgICAgICAgICAgICAgaWYoIGNoYW5nZVZhbHVlLnZhbHVlT2JqICYmIGFwaU9iai52YWx1ZUZpZWxkKXtcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhRnJvbVNvdXJzZVF1ZXMgPXRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoY2hhbmdlVmFsdWUudmFsdWVPYmosIGFwaU9iai52YWx1ZUZpZWxkKVxuICAgICAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KGRhdGFGcm9tU291cnNlUXVlcykpe1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IFsuLi5kYXRhRnJvbVNvdXJzZVF1ZXNdXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5pbnB1dCA9IGRhdGFGcm9tU291cnNlUXVlc1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7ICAvLyBWRCAxM01BWTI0IC0gYmluZCBkeW5hbWljIGZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBWRCAyNkp1bjI0IC0gdG8gaGFuZGxlIG11bHRpcGxlIG9iamVjdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iakVsZW1lbnRWYWx1ZSA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoZWxlbWVudCwgZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JqSXRlbVZhbHVlID0gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShkYXRhRnJvbVNvdXJzZVF1ZXMsIGZpZWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iakVsZW1lbnRWYWx1ZSA9PSBvYmpJdGVtVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRJdGVtID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkSXRlbSAmJiBkYXRhRnJvbVNvdXJzZVF1ZXMpIHsgLy9VcGRhdGUgUGFnaW5hdGlvbiBiZWZvcmUgZW1pdFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IFsuLi50aGlzLmRhdGEsIGRhdGFGcm9tU291cnNlUXVlc107XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEucHVzaChkYXRhRnJvbVNvdXJzZVF1ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKGRhdGFGcm9tU291cnNlUXVlcykge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKGRhdGFGcm9tU291cnNlUXVlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxEYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc0ZpbHRlckRhdGEgPSBbLi4udGhpcy5kYXRhXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLm9yaWdpbmFsRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbi5pbnB1dCA9IHRoaXMub3JpZ2luYWxEYXRhO1xuICAgICAgICAgICAgICAgICAgICAvLyBTS1MyME1BUjI1IE1hbnVhbGx5IHRyaWdnZXIgbmdPbkNoYW5nZXNcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ09uQ2hhbmdlcyh7fSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlU2VydmljZS5jb25maXJtQ2hhbmdlKGNoYW5nZVZhbHVlLmZyb21RdWVzdGlvbklkKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoQmFyID09PSB1bmRlZmluZWQgfHwgdGhpcy5zZWFyY2hCYXIgPT09IHRydWUgPyB0aGlzLnNlYXJjaEJhciA9IHRydWUgOiB0aGlzLnNlYXJjaEJhciA9IGZhbHNlO1xuICAgIHRoaXMud2l0aENoZWNrQm94ID09PSB1bmRlZmluZWQgfHwgdGhpcy53aXRoQ2hlY2tCb3ggPT09IGZhbHNlID8gdGhpcy53aXRoQ2hlY2tCb3ggPSBmYWxzZSA6IHRoaXMud2l0aENoZWNrQm94ID0gdHJ1ZTtcbiAgICB0aGlzLmlzRWRpdFJvdyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaXNFZGl0Um93ID09PSBmYWxzZSA/IHRoaXMuaXNFZGl0Um93ID0gZmFsc2UgOiB0aGlzLmlzRWRpdFJvdyA9IHRydWU7XG4gICAgdGhpcy5pc0RlbGV0ZVJvdyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaXNEZWxldGVSb3cgPT09IGZhbHNlID8gdGhpcy5pc0RlbGV0ZVJvdyA9IGZhbHNlIDogdGhpcy5pc0RlbGV0ZVJvdyA9IHRydWU7XG4gICAgdGhpcy5hY3Rpb25CdXR0b24gPT09IHVuZGVmaW5lZCB8fCB0aGlzLmFjdGlvbkJ1dHRvbiA9PT0gZmFsc2UgPyB0aGlzLmFjdGlvbkJ1dHRvbiA9IGZhbHNlIDogdGhpcy5hY3Rpb25CdXR0b24gPSB0cnVlO1xuICAgIHRoaXMuaXNCdXR0b25zID09PSB1bmRlZmluZWQgfHwgdGhpcy5pc0J1dHRvbnMgPT09IGZhbHNlID8gdGhpcy5pc0J1dHRvbnMgPSBmYWxzZSA6IHRoaXMuaXNCdXR0b25zID0gdHJ1ZTtcbiAgICB0aGlzLmFkZElubGluZVJlY29yZCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuYWRkSW5saW5lUmVjb3JkID09PSBmYWxzZSA/IHRoaXMuYWRkSW5saW5lUmVjb3JkID0gZmFsc2UgOiB0aGlzLmFkZElubGluZVJlY29yZCA9IHRydWU7XG4gICAgdGhpcy5pc1BhZ2luYXRpb24gPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzUGFnaW5hdGlvbiA9PT0gdHJ1ZSA/IHRoaXMuaXNQYWdpbmF0aW9uID0gdHJ1ZSA6IHRoaXMuaXNQYWdpbmF0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5pc05vc0luZGljYXRvciA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaXNOb3NJbmRpY2F0b3IgPT09IHRydWUgPyB0aGlzLmlzTm9zSW5kaWNhdG9yID0gdHJ1ZSA6IHRoaXMuaXNOb3NJbmRpY2F0b3IgPSBmYWxzZTtcbiAgICB0aGlzLmlzRWRpdGFibGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzRWRpdGFibGUgPT09IGZhbHNlID8gdGhpcy5pc0VkaXRhYmxlID0gZmFsc2UgOiB0aGlzLmlzRWRpdGFibGUgPSB0cnVlXG5cbiAgICB0aGlzLmlubGluZUVsZW1lbnQgPSBPYmplY3QuZnJvbUVudHJpZXModGhpcy5jdXJyZW50Q29sdW1ucy5tYXAoa2V5ID0+IFtrZXksIFwiXCJdKSk7XG5cbiAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5wYWdpbmF0aW9uPy5wYWdlU2l6ZSA/IHRoaXMucGFnaW5hdGlvblsncGFnZVNpemUnXSA6IHRoaXMudGFibGVQYXJhbXM/LnBhZ2luYXRpb24/LnBhZ2VTaXplIHx8MTA7XG4gICAgdGhpcy5wYWdlSW5kZXggPSB0aGlzLnBhZ2luYXRpb24/LnBhZ2VJbmRleCA/IHRoaXMucGFnaW5hdGlvblsncGFnZUluZGV4J10gOiB0aGlzLnRhYmxlUGFyYW1zPy5wYWdpbmF0aW9uPy5wYWdlSW5kZXggfHwxO1xuICAgIHRoaXMudG90YWxSZWNvcmRzID0gdGhpcy5wYWdpbmF0aW9uPy50b3RhbFJlY29yZHMgPyB0aGlzLnBhZ2luYXRpb25bJ3RvdGFsUmVjb3JkcyddIDogdW5kZWZpbmVkO1xuICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gdGhpcy5wYWdpbmF0aW9uPy5wYWdlU2l6ZU9wdGlvbnMgPyB0aGlzLnBhZ2luYXRpb25bJ3BhZ2VTaXplT3B0aW9ucyddIDogWyc1JywgJzEwJywgJzI1JywgJzUwJywgJzEwMCcsICcyMDAnXTtcbiAgICB0aGlzLmNvbmZpZ1BhZ2luYXRpb24gPSAhISh0aGlzLnBhZ2luYXRpb24gJiYgT2JqZWN0LmtleXModGhpcy5wYWdpbmF0aW9uKS5sZW5ndGggPiAwKTtcblxuICAgIHRoaXMuZHJvcGRvd25BY3Rpb25CdXR0b24gPSB0aGlzLmFjdGlvbkJ1dHRvbkFycmF5Py5idXR0b25BcnJheT8uc2xpY2UodGhpcy5hY3Rpb25CdXR0b25BcnJheT8uc2l6ZSk7XG5cbiAgICB0aGlzLm9yaWdpbmFsRGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuICAgIHRoaXMuc0ZpbHRlckRhdGEgPSBbLi4udGhpcy5kYXRhXTtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMub3JpZ2luYWxEYXRhO1xuXG4gICAgLy8gU0tTMjBNQVIyNSBDaGVjayBpZiB0aGUgZGlzcGx5Y29sdW1uJ3MgaGF2ZSBhIHN1bW1hcnkgY29sdW1uXG4gICAgaWYgKHRoaXMuc3VtbWFyeVJvd3MgJiYgdGhpcy5zdW1tYXJ5Um93cz8ubGVuZ3RoID4gMCAmJiB0aGlzLmN1cnJlbnRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaXNGdWxsVGFibGVTdW1tYXJ5Um93ID0gdGhpcy5zdW1tYXJ5Um93c1swXS50eXBlID09PSAnZnVsbFJvdycgfHwgIHRoaXMuc3VtbWFyeVJvd3NbMF0udHlwZSA9PT0gJ2Z1bGxyb3cnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgdGhpcy5pc1N1bW1hcnlDb2x1bW4gPSB0aGlzLmN1cnJlbnRDb2x1bW5zLnNvbWUoZWxlbWVudCA9PiBlbGVtZW50ID09PSB0aGlzLnN1bW1hcnlSb3dzWzBdLmNvbHVtbik7XG4gICAgICBpZiAodGhpcy5pc1N1bW1hcnlDb2x1bW4gJiYgIXRoaXMuaXNGdWxsVGFibGVTdW1tYXJ5Um93KSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jdXJyZW50Q29sdW1ucy5pbmRleE9mKHRoaXMuc3VtbWFyeVJvd3NbMF0uY29sdW1uKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHRoaXMuaXNTdW1tYXJ5U3RhcnRDb2x1bW4gPSB0aGlzLmN1cnJlbnRDb2x1bW5zLnNsaWNlKDAsIGluZGV4IC0gMSk7XG4gICAgICAgICAgdGhpcy5pc1N1bW1hcnlFbmRDb2x1bW4gPSB0aGlzLmN1cnJlbnRDb2x1bW5zLnNsaWNlKGluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZih0aGlzLmN1cnJlbnRWaWV3RmlsdGVyID09PSB1bmRlZmluZWQgfHwgdGhpcy5jdXJyZW50Vmlld0ZpbHRlciA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5jdXJyZW50Vmlld0ZpbHRlciA9IHRoaXMubGlzdFZpZXdzICYmIHRoaXMubGlzdFZpZXdzLmxlbmd0aCA+IDAgPyB0aGlzLmxpc3RWaWV3c1swXSA6IG51bGw7XG4gICAgfVxuICAgIGlmKHRoaXMuY3VycmVudFZpZXdGaWx0ZXIgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmN1cnJlbnRWaWV3RmlsdGVyICE9PSBudWxsKXtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gdGhpcy5jdXJyZW50Vmlld0ZpbHRlci5maWx0ZXJOYW1lO1xuICAgICAgaWYodGhpcy5jdXJyZW50Vmlld0ZpbHRlci5pc0RlZmF1bHQgfHwgdGhpcy5jdXJyZW50Vmlld0ZpbHRlci5maWx0ZXJOYW1lID09PSBcIkFsbCBEYXRhXCIpe1xuICAgICAgICB0aGlzLmN1cnJlbnRDb2x1bW5zID0gdGhpcy5jb2x1bW5zXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5jdXJyZW50Vmlld0ZpbHRlcj8uY29sdW1ucyB8fCBbXTtcbiAgICAgICAgY29uc3QgdXBkYXRlQ29sdW1uID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgY29uc3QgbWF0Y2ggPSBjb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLm5hbWUgPT09IGNvbHVtbi5maWVsZE5hbWUpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICBpc0hpZGU6ICFtYXRjaCxcbiAgICAgICAgICAgIGZpbHRlcjogISFtYXRjaD8uZmlsdGVyYWJsZSxcbiAgICAgICAgICAgIHNvcnQ6ICEhbWF0Y2g/LnNvcnRhYmxlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY3VycmVudENvbHVtbnMgPSBbLi4udXBkYXRlQ29sdW1uXVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjdXJyZW50RmlsdGVyQ29sdW1ucyA9IHRoaXMuY3VycmVudENvbHVtbnM/LmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZpbHRlciA9PT0gdHJ1ZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKVxuICAgIGlmIChjdXJyZW50RmlsdGVyQ29sdW1ucz8ubGVuZ3RoID4gMCAmJiB0aGlzLmNvbmZpZ1BhZ2luYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXkgPSB7fTtcbiAgICAgIGNvbnN0IGZpbHRPYmpzOiBhbnkgPSB7fTtcbiAgICAgIGN1cnJlbnRGaWx0ZXJDb2x1bW5zLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXlbZWxlbWVudF0gPSBudWxsO1xuICAgICAgICBmaWx0T2Jqc1tlbGVtZW50XSA9IFtdO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmRhdGEuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgY3VycmVudEZpbHRlckNvbHVtbnMuZm9yRWFjaCgoa2V5OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0T2JqVmFsdWUoZWxlbWVudCwga2V5KTsgIC8vIDwtIGdldCBuZXN0ZWQgdmFsdWVcbiAgICBcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZmlsdE9ianNba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheVtrZXldID0gbmV3IFNldChmaWx0T2Jqc1trZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXkgPSB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheSA9IHRoaXMubXVsdGlwbGVGaWx0ZXI7XG4gICAgfVxuICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBmaWx0ZXJlZCBhcnJheSB0aGF0IGV4Y2x1ZGVzIGFueSBjb2x1bW4gd2l0aCAnWydcbiAgICBjb25zdCB0ZW1wRmlsdGVyQ29sdW1ucyA9IHRoaXMuY29sdW1ucz8uZmlsdGVyKGNvbCA9PiAhY29sLmZpZWxkTmFtZS5pbmNsdWRlcygnWycpKTtcbiAgICBcbiAgICBpZiAodGVtcEZpbHRlckNvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpbHRPYmpzOiBhbnkgPSB7fTtcbiAgICBcbiAgICAgIC8vIFNLUzI2TUFZMjUgSW5pdGlhbGl6ZSBzZXRzIHRvIGNvbGxlY3QgdW5pcXVlIHZhbHVlcyBmb3IgZWFjaCBjb2x1bW5cbiAgICAgIHRlbXBGaWx0ZXJDb2x1bW5zLmZvckVhY2goKGNvbDogYW55KSA9PiB7XG4gICAgICAgIGZpbHRPYmpzW2NvbC5maWVsZE5hbWVdID0gbmV3IFNldCgpO1xuICAgICAgfSk7XG4gICAgXG4gICAgICAvLyBTS1MyNk1BWTI1IENvbGxlY3QgdW5pcXVlIHZhbHVlcyBmcm9tIHRhYmxlRmlsdGVyRGF0YVxuICAgICAgdGhpcy50YWJsZUZpbHRlckRhdGE/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICB0ZW1wRmlsdGVyQ29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRPYmpWYWx1ZShlbGVtZW50LCBjb2wuZmllbGROYW1lKTtcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZmlsdE9ianNbY29sLmZpZWxkTmFtZV0uYWRkKHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgXG4gICAgICAvLyBTS1MyNk1BWTI1IEFwcGVuZCBcInZhbHVlXCIgcHJvcGVydHkgdG8gZWFjaCBjb2x1bW4gb2JqZWN0IHdpdGggdGhlIGFycmF5IG9mIHVuaXF1ZSB2YWx1ZXNcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJBcnJheSA9IFsuLi50ZW1wRmlsdGVyQ29sdW1ucy5tYXAoKGNvbDogYW55KSA9PiAoe1xuICAgICAgICAuLi5jb2wsXG4gICAgICAgIHZhbHVlOiBBcnJheS5mcm9tKGZpbHRPYmpzW2NvbC5maWVsZE5hbWVdKVxuICAgICAgfSkpXVxuICAgIH0gICAgICAgICAgXG4gICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0cnVlLCBbXSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgICB9LCAwKVxuICAgIHRoaXMudG90YWxDb3VudCA9IHRoaXMudG90YWxSZWNvcmRzIHx8IHRoaXMuZGF0YT8ubGVuZ3RoXG4gICAgdGhpcy5maWx0ZXJUYWJsZU5vcyA9IHRoaXMudG90YWxSZWNvcmRzIHx8IHRoaXMuZGF0YT8ubGVuZ3RoXG4gICAgY29uc3QgTnh0RGF0YVRhYmxlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnTnh0RGF0YVRhYmxlJykpO1xuICAgIHRoaXMuY3VycmVudFNvcnRDb2x1bW4gPSBOeHREYXRhVGFibGU/LmN1cnJlbnRTb3J0Q29sdW1uO1xuICAgIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPSBOeHREYXRhVGFibGU/LmN1cnJlbnRTb3J0RGlyZWN0aW9uO1xuICAgIGlmIChOeHREYXRhVGFibGU/LmFkZFJlY29yZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5wYWdlU2l6ZSA9IE54dERhdGFUYWJsZT8ucGFnZVNpemVcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gTnh0RGF0YVRhYmxlPy5wYWdlSW5kZXhcbiAgICAgIHZhciBvYmo6IGFueSA9IHt9O1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuaW5saW5lRWxlbWVudCk7XG4gICAgICBrZXlzLmZvckVhY2goKGVsZW1lbnRLZXk6IGFueSkgPT4ge1xuICAgICAgICBvYmpbZWxlbWVudEtleV0gPSAnJztcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kYXRhLnB1c2gob2JqKTtcbiAgICAgIGNvbnN0IGRhdGE6IGFueSA9IHRoaXMuZGF0YTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YTtcblxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KHRoaXMuZGF0YVt0aGlzLmRhdGEubGVuZ3RoIC0gMV0pO1xuICAgICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZGF0YVt0aGlzLmRhdGEubGVuZ3RoIC0gMV0uZWRpdFJvdyA9IHRydWU7XG4gICAgICB9ICAgICAgXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnTnh0RGF0YVRhYmxlJywgSlNPTi5zdHJpbmdpZnkoeyBhZGRSZWNvcmQ6IGZhbHNlLCBwYWdlU2l6ZTogMTAsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsIGN1cnJlbnRTb3J0Q29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBjdXJyZW50U29ydERpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiB9KSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0aWNreUNvbHVtbiA9PT0gdHJ1ZSAmJiB0aGlzLmN1cnJlbnRDb2x1bW5zKSB7XG4gICAgICB0aGlzLnN0aWNreUNvbmRpdGlvbiA9IHRoaXMuY3VycmVudENvbHVtbnM/Lmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGlja3lDb25kaXRpb24gPSB0aGlzLmN1cnJlbnRDb2x1bW5zPy5sZW5ndGggKyAxO1xuICAgIH1cblxuICAgIC8vIFNLUzE5TUFSMjUgYWRkIGZpcnN0IGxpbmUgZm9yIGZvcm1idWlsZGVyIHRhYmxlXG4gICAgaWYgKHRoaXMuaXNFZGl0YWJsZSAmJiB0aGlzLmRhdGEubGVuZ3RoID09PSAwKSB7IHRoaXMuYWRkVGFibGVSZWNvcmQoIHRoaXMuaW5saW5lRWxlbWVudCwgXCJvbkluaXRcIikgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy50YWJsZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICBjb25zdCB0YWJsZUJvZHkgPSB0aGlzLnRhYmxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnRhYmxlLWJvZHknKTtcbiAgICAgICAgaWYgKHRhYmxlQm9keSAmJiB0aGlzLmlzUGFnaW5hdGlvbikge1xuICAgICAgICAgIHRoaXMuaXNTaGFkb3dIaWRkZW4gPSAhKHRhYmxlQm9keS5zY3JvbGxIZWlnaHQgPCA0NTApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCAxNTAwKTsgLy8gV2FpdHMgMTAwbXMgZm9yIHJlbmRlcmluZ1xuICAgIC8vIFNLUzE3QVBSMjUgdGFibGUgcGFyZW1zIGRhdGEgdXBkYXRlXG4gICAgaWYgKHRoaXMuc2VhcmNoQ29uZmlncz8uc2VhcmNoRmlsdGVyVmFsKSB7XG4gICAgICB0aGlzLnNlYXJjaEJveFZhbHVlID0gdGhpcy5zZWFyY2hDb25maWdzPy5zZWFyY2hGaWx0ZXJWYWw7IC8vIFNob3cgdmFsdWUgaW4gdGhlIHNlYXJjaCBib3hcbiAgICAgIHRoaXMucHJldlNlYXJjaCA9IHRoaXMuc2VhcmNoQ29uZmlncz8uc2VhcmNoRmlsdGVyVmFsO1xuICAgIH0gZWxzZSBpZih0aGlzLnRhYmxlUGFyYW1zPy50YWJsZVNlYXJjaCl7XG4gICAgICB0aGlzLnNlYXJjaEJveFZhbHVlID0gdGhpcy50YWJsZVBhcmFtcz8udGFibGVTZWFyY2g7XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoQ29uZmlncyAmJiB0aGlzLnNlYXJjaEJveFZhbHVlID8gdGhpcy5lbXB0eVNlYXJjaCh0aGlzLnNlYXJjaEJveFZhbHVlKSA6ICcnXG4gICAgdGhpcy5maWx0ZXJEYXRhQXJyYXkgPSB0aGlzLnRhYmxlUGFyYW1zPy5zZWFyY2hGaWx0ZXJEYXRhID8gdGhpcy50YWJsZVBhcmFtcz8uc2VhcmNoRmlsdGVyRGF0YSA6IHt9O1xuICAgIHRoaXMuc29ydERhdGEodGhpcy50YWJsZVBhcmFtcz8uc29ydD8uY29sdW1uLCB0aGlzLnRhYmxlUGFyYW1zPy5zb3J0Py5kaXJlY3Rpb24sdHJ1ZSlcbiAgICBsZXQgbGFuZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsYW5ndWFnZScpXG4gICAgaWYgKHRoaXMubGFuZ3VhZ2VDb2RlKSB7XG4gICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5zZXRMYW5ndWFnZSh0aGlzLmxhbmd1YWdlQ29kZSk7XG4gICAgfSBlbHNlIGlmKGxhbmcgJiYgbGFuZyAhPT0gJycpIHtcbiAgICAgIHRoaXMubGFuZ3VhZ2VDb2RlID0gbGFuZ1xuICAgIH1cbiAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGlvbnNMb2FkZWQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTsgLy8gRm9yY2UgcGlwZSByZS1ldmFsdWF0aW9uXG4gICAgfSk7XG4gICAgaWYgKHRoaXMuY29uZmlnUGFnaW5hdGlvbiA9PT0gZmFsc2UgJiYgdGhpcy5kYXRhICYmIHRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICBjb25zdCBwYWdlSW5kZXggPSBOdW1iZXIodGhpcy5wYWdlSW5kZXgpIHx8IDA7XG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IE51bWJlcih0aGlzLnBhZ2VTaXplKSB8fCAxMDtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gKHBhZ2VJbmRleCAtIDEpICogcGFnZVNpemU7XG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIHBhZ2VTaXplO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGE/LnNsaWNlKHN0YXJ0LCBlbmQpIHx8IFtdO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YVxuICAgIH1cbiAgICB0aGlzLnN1bW1hcnlSb3dzPy5sZW5ndGggPiAwID8gdGhpcy5jb21wdXRlU3VtbWFyeVZhbHVlcygnb25DaGFuZ2UnKSA6Jyc7IC8vIENvbXB1dGUgcGVyLXJvdyBzdW1tYXJ5IGNvbHVtbnMgZmlyc3RcbiAgfVxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplQ29sdW1uUmVzaXplcnMoKTtcbiAgfVxuICBwcml2YXRlIGluaXRpYWxpemVDb2x1bW5SZXNpemVycygpIHtcbiAgICAvLyBTS1MyMkpVTDI1IFdhaXQgZm9yIHRoZSB2aWV3IHRvIGJlIGZ1bGx5IHJlbmRlcmVkXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCByZXNpemVIYW5kbGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnJlc2l6ZS1oYW5kbGUnKTtcbiAgICAgIFxuICAgICAgcmVzaXplSGFuZGxlcy5mb3JFYWNoKChoYW5kbGU6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uUmVzaXplU3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICB9KTtcbiAgICB9LCAwKTtcbiAgfVxuICBvblJlc2l6ZVN0YXJ0KGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgXG4gICAgdGhpcy5pc1Jlc2l6aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnN0YXJ0WCA9IGV2ZW50LmNsaWVudFg7XG4gIFxuICAgIC8vIFNLUzIySlVMMjUgRmluZCB0aGUgY29sdW1uIGhlYWRlciB0aGF0IGNvbnRhaW5zIHRoaXMgcmVzaXplIGhhbmRsZVxuICAgIGNvbnN0IGNvbHVtbkhlYWRlciA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJy50YWJsZS1jZWxsJyk7XG4gICAgaWYgKGNvbHVtbkhlYWRlciAmJiBjb2x1bW5IZWFkZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBjb2x1bW5IZWFkZXIucGFyZW50Tm9kZSkge1xuICAgICAgdGhpcy5zdGFydFdpZHRoID0gY29sdW1uSGVhZGVyLm9mZnNldFdpZHRoO1xuICBcbiAgICAgIC8vIFNLUzIySlVMMjUgRmluZCB0aGUgY29sdW1uIGluZGV4XG4gICAgICBjb25zdCBzaWJsaW5ncyA9IEFycmF5LmZyb20oY29sdW1uSGVhZGVyLnBhcmVudE5vZGUuY2hpbGRyZW4pO1xuICAgICAgY29uc3QgY29sdW1uSW5kZXggPSBzaWJsaW5ncy5pbmRleE9mKGNvbHVtbkhlYWRlcik7XG4gICAgICBjb25zdCBhZGp1c3RlZEluZGV4ID0gdGhpcy53aXRoQ2hlY2tCb3ggPyBjb2x1bW5JbmRleCAtIDEgOiBjb2x1bW5JbmRleDtcbiAgXG4gICAgICBpZiAoYWRqdXN0ZWRJbmRleCA+PSAwICYmIGFkanVzdGVkSW5kZXggPCB0aGlzLmN1cnJlbnRDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRDb2x1bW4gPSB0aGlzLmN1cnJlbnRDb2x1bW5zW2FkanVzdGVkSW5kZXhdO1xuICAgICAgfVxuICAgIH1cbiAgXG4gICAgLy8gU0tTMjJKVUwyNSBBZGQgY3Vyc29yIHN0eWxlIHRvIGJvZHlcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICdjb2wtcmVzaXplJztcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QgPSAnbm9uZSc7XG4gICAgdGhpcy5pc1Jlc2l6aW5nID0gdHJ1ZTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25SZXNpemVNb3ZlKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vblJlc2l6ZUVuZCk7XG4gIH1cbiAgXG4gIHByaXZhdGUgb25SZXNpemVNb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKCF0aGlzLmlzUmVzaXppbmcgfHwgIXRoaXMuY3VycmVudENvbHVtbikgcmV0dXJuO1xuICAgIGlmICh0aGlzLnJlc2l6ZUZyYW1lSWQpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMucmVzaXplRnJhbWVJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNpemVGcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGNvbnN0IGRlbHRhWCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLnN0YXJ0WDtcbiAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5tYXgoNTAsIHRoaXMuc3RhcnRXaWR0aCArIGRlbHRhWCk7XG4gICAgICAvLyBTS1MyMkpVTDI1IFVwZGF0ZSB0aGUgY29sdW1uIHdpZHRoXG4gICAgICBpZih0aGlzLmN1cnJlbnRDb2x1bW4ud2lkdGgpIHRoaXMuY3VycmVudENvbHVtbi53aWR0aCA9IG5ld1dpZHRoICsgJ3B4JztcbiAgICAgIHRoaXMudXBkYXRlQ29sdW1uV2lkdGgodGhpcy5jdXJyZW50Q29sdW1uLCBuZXdXaWR0aCk7XG4gICAgfSk7XG4gIH07XG4gIHByaXZhdGUgb25SZXNpemVFbmQgPSAoX2V2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKCF0aGlzLmlzUmVzaXppbmcpIHJldHVybjtcbiAgICB0aGlzLmlzUmVzaXppbmcgPSBmYWxzZTtcbiAgICB0aGlzLmN1cnJlbnRDb2x1bW4gPSBudWxsO1xuICAgIFxuICAgIC8vIFNLUzIySlVMMjUgUmVtb3ZlIGN1cnNvciBzdHlsZSBmcm9tIGJvZHlcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICcnO1xuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCA9ICcnO1xuICBcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uUmVzaXplTW92ZSk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25SZXNpemVFbmQpO1xuICB9O1xuXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1uV2lkdGgoY29sdW1uOiBhbnksIG5ld1dpZHRoOiBudW1iZXIpIHsgXG4gICAgLy8gU0tTMjJKVUwyNSBVc2UgQW5ndWxhcidzIFJlbmRlcmVyMiBmb3Igc2FmZSBET00gbWFuaXB1bGF0aW9uXG4gICAgY29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmN1cnJlbnRDb2x1bW5zLmZpbmRJbmRleChjb2wgPT4gY29sLnVuaXF1ZUlkZW50aWZpZXIgPT09IGNvbHVtbi51bmlxdWVJZGVudGlmaWVyKTtcbiAgICBpZiAoY29sdW1uSW5kZXggPT09IC0xKSByZXR1cm47XG4gICAgXG4gICAgLy8gU0tTMjJKVUwyNSBBZGp1c3QgaW5kZXggaWYgY2hlY2tib3ggY29sdW1uIGV4aXN0c1xuICAgIGNvbnN0IGFkanVzdGVkSW5kZXggPSB0aGlzLndpdGhDaGVja0JveCA/IGNvbHVtbkluZGV4ICsgMSA6IGNvbHVtbkluZGV4O1xuICAgIFxuICAgIC8vIFVwZGF0ZSBoZWFkZXIgY2VsbFxuICAgIGNvbnN0IGhlYWRlckNlbGwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAudGFibGUtaGVhZGVyIC50YWJsZS1yb3cgLnRhYmxlLWNlbGw6bnRoLWNoaWxkKCR7YWRqdXN0ZWRJbmRleCArIDF9KWApO1xuICAgIGlmIChoZWFkZXJDZWxsKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGhlYWRlckNlbGwsICd3aWR0aCcsIG5ld1dpZHRoICsgJ3B4Jyk7XG4gICAgfVxuXG4gICAgLy8gU0tTMjJKVUwyNSBVcGRhdGUgYWxsIGJvZHkgY2VsbHMgaW4gdGhpcyBjb2x1bW5cbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRhYmxlLWJvZHknKTtcbiAgICBpZiAoYm9keSkge1xuICAgICAgY29uc3Qgcm93cyA9IGJvZHkucXVlcnlTZWxlY3RvckFsbCgnLnRhYmxlLXJvdycpO1xuICAgICAgcm93cy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSByb3cuY2hpbGRyZW5bYWRqdXN0ZWRJbmRleF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmIChjZWxsKSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShjZWxsLCAnd2lkdGgnLCBuZXdXaWR0aCArICdweCcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uUmVzaXplTW92ZSk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25SZXNpemVFbmQpO1xuICB9XG4gIHByaXZhdGUgZmxhdHRlblJvdyhyb3c6IGFueSk6IGFueSB7XG4gICAgY29uc3QgZmxhdHRlbmVkID0gdGhpcy5jdXJyZW50Q29sdW1ucy5yZWR1Y2UoKGFjYywgY29sKSA9PiB7XG4gICAgICBhY2NbY29sLmZpZWxkTmFtZV0gPSB0aGlzLmdldE9ialZhbHVlKHJvdywgY29sLmZpZWxkTmFtZSkgPz8gJy0nOyAvLyBEZWZhdWx0IHRvICctJyBpZiBudWxsL3VuZGVmaW5lZFxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyB7IFtrZXk6IHN0cmluZ106IGFueSB9KTtcbiAgICByZXR1cm4geyAuLi5yb3csIGZsYXR0ZW5lZCB9O1xuICB9XG4gIC8vIFNLUzIwTUFSMjUgc3VtbWFyeSBjb2x1bW5zIGNhbGNcbiAgY29tcHV0ZVN1bW1hcnlDb2x1bW5zKCkge1xuICAgIGlmICh0aGlzLnN1bW1hcnlDb2x1bW5zICYmIHRoaXMuc3VtbWFyeUNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLm1hcChyb3cgPT4ge1xuICAgICAgICBjb25zdCBuZXdSb3cgPSB7IC4uLnJvdyB9O1xuICAgICAgICB0aGlzLnN1bW1hcnlDb2x1bW5zLmZvckVhY2goc3VtbWFyeUNvbCA9PiB7XG4gICAgICAgICAgaWYgKHN1bW1hcnlDb2wudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJyAmJiBzdW1tYXJ5Q29sLm9wZXJhdGlvbiA9PT0gJ3N1bScgJiYgc3VtbWFyeUNvbC5vcGVyYW5kcykge1xuICAgICAgICAgICAgY29uc3Qgc3VtID0gc3VtbWFyeUNvbC5vcGVyYW5kcy5yZWR1Y2UoKGFjYywgb3BlcmFuZCkgPT4gYWNjICsgKE51bWJlcihuZXdSb3dbb3BlcmFuZF0pIHx8IDApLCAwKTtcbiAgICAgICAgICAgIG5ld1Jvd1tzdW1tYXJ5Q29sLmZpZWxkTmFtZV0gPSBzdW07XG4gICAgICAgICAgfSBlbHNlIGlmIChzdW1tYXJ5Q29sLnR5cGUgPT09ICdjYWxjdWxhdGlvbicgJiYgc3VtbWFyeUNvbC5vcGVyYXRpb24gPT09ICdzdWJ0cmFjdCcgJiYgc3VtbWFyeUNvbC5vcGVyYW5kcykge1xuICAgICAgICAgICAgY29uc3QgW2ZpcnN0T3BlcmFuZCwgLi4ucmVzdE9wZXJhbmRzXSA9IHN1bW1hcnlDb2wub3BlcmFuZHM7XG4gICAgICAgICAgICBsZXQgc3VtID0gTnVtYmVyKG5ld1Jvd1tmaXJzdE9wZXJhbmRdKSB8fCAwOyAvLyBTdGFydCB3aXRoIHRoZSBmaXJzdCBvcGVyYW5kXG4gICAgICAgICAgICBzdW0gPSByZXN0T3BlcmFuZHMucmVkdWNlKChhY2MsIG9wZXJhbmQpID0+IGFjYyAtIChOdW1iZXIobmV3Um93W29wZXJhbmRdKSB8fCAwKSwgc3VtKTtcbiAgICAgICAgICAgIG5ld1Jvd1tzdW1tYXJ5Q29sLmZpZWxkTmFtZV0gPSBzdW07XG4gICAgICAgICAgfSBlbHNlIGlmIChzdW1tYXJ5Q29sLnR5cGUgPT09ICdjYWxjdWxhdGlvbicgJiYgc3VtbWFyeUNvbC5vcGVyYXRpb24gPT09ICdtdWx0aXBseScgJiYgc3VtbWFyeUNvbC5vcGVyYW5kcykge1xuICAgICAgICAgICAgY29uc3QgcHJvZHVjdCA9IHN1bW1hcnlDb2wub3BlcmFuZHMucmVkdWNlKChhY2MsIG9wZXJhbmQpID0+IGFjYyAqIChOdW1iZXIobmV3Um93W29wZXJhbmRdKSB8fCAwKSwgMSk7IC8vIFN0YXJ0IHdpdGggMVxuICAgICAgICAgICAgbmV3Um93W3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHByb2R1Y3Q7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ld1JvdztcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGE7IC8vIFVwZGF0ZSBkYXRhU291cmNlXG4gICAgICBpZiAoIXRoaXMudG90YWxSZWNvcmRzICYmIHRoaXMuZGF0YSAmJiB0aGlzLmlzUGFnaW5hdGlvbikge1xuICAgICAgICBjb25zdCBwYWdlSW5kZXggPSBOdW1iZXIodGhpcy5wYWdlSW5kZXgpIHx8IDA7XG4gICAgICAgIGNvbnN0IHBhZ2VTaXplID0gTnVtYmVyKHRoaXMucGFnZVNpemUpIHx8IDEwO1xuICAgICAgICBjb25zdCBzdGFydCA9IChwYWdlSW5kZXggLSAxKSAqIHBhZ2VTaXplO1xuICAgICAgICBjb25zdCBlbmQgPSBzdGFydCArIHBhZ2VTaXplO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YT8uc2xpY2Uoc3RhcnQsIGVuZCkgfHwgW107XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzUGFnaW5hdGlvbikge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBTS1MyME1BUjI1IENvbXB1dGUgdmFsdWVzIGZvciBzdW1tYXJ5IHJvd3NcbiAgY29tcHV0ZVN1bW1hcnlWYWx1ZXMoZnJvbT8pIHtcbiAgICB0aGlzLnN1bW1hcnlSb3dzPy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICBpZiAocm93LnR5cGUgPT09ICdjYWxjdWxhdGlvbicpIHtcbiAgICAgICAgaWYgKHJvdy5vcGVyYXRpb24gPT09ICdzdW0nICYmIHJvdy5jb2x1bW4pIHtcbiAgICAgICAgICAvLyBDb3JyZWN0IHN1bSBvcGVyYXRpb25cbiAgICAgICAgICB0aGlzLnN1bW1hcnlWYWx1ZXNbcm93LmZpZWxkTmFtZV0gPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCBkYXRhUm93KSA9PiBhY2MgKyAoTnVtYmVyKGRhdGFSb3dbcm93LmNvbHVtbl0pIHx8IDApLFxuICAgICAgICAgICAgMFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocm93Lm9wZXJhdGlvbiA9PT0gJ3N1YnRyYWN0JyAmJiByb3cuY29sdW1uKSB7XG4gICAgICAgICAgLy8gU3VidHJhY3Qgc2hvdWxkIHN0YXJ0IHdpdGggdGhlIGZpcnN0IHZhbHVlXG4gICAgICAgICAgdGhpcy5zdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdID0gdGhpcy5kYXRhU291cmNlLmRhdGEucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywgZGF0YVJvdywgaW5kZXgpID0+IGluZGV4ID09PSAwID8gTnVtYmVyKGRhdGFSb3dbcm93LmNvbHVtbl0pIHx8IDAgOiBhY2MgLSAoTnVtYmVyKGRhdGFSb3dbcm93LmNvbHVtbl0pIHx8IDApLFxuICAgICAgICAgICAgMFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocm93Lm9wZXJhdGlvbiA9PT0gJ211bHRpcGx5JyAmJiByb3cuY29sdW1uKSB7XG4gICAgICAgICAgLy8gTXVsdGlwbHkgc2hvdWxkIHN0YXJ0IHdpdGggMVxuICAgICAgICAgIHRoaXMuc3VtbWFyeVZhbHVlc1tyb3cuZmllbGROYW1lXSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLnJlZHVjZShcbiAgICAgICAgICAgIChhY2MsIGRhdGFSb3cpID0+IGFjYyAqIChOdW1iZXIoZGF0YVJvd1tyb3cuY29sdW1uXSkgfHwgMCksIC8vIFVzZSAxIGluc3RlYWQgb2YgMFxuICAgICAgICAgICAgMVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAocm93Lm9wZXJhdGlvbiA9PT0gJ3N1YnRyYWN0JyAmJiByb3cub3BlcmFuZHMpIHtcbiAgICAgICAgICAvLyBTdWJ0cmFjdCBiYXNlZCBvbiBvcGVyYW5kc1xuICAgICAgICAgIGNvbnN0IFtvcDEsIG9wMl0gPSByb3cub3BlcmFuZHM7XG4gICAgICAgICAgdGhpcy5zdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdID0gKHRoaXMuc3VtbWFyeVZhbHVlc1tvcDFdIHx8IDApIC0gKHRoaXMuc3VtbWFyeVZhbHVlc1tvcDJdIHx8IDApO1xuICAgICAgICB9IGVsc2UgaWYgKHJvdy5vcGVyYXRpb24gPT09ICdzdW0nICYmIHJvdy5vcGVyYW5kcykge1xuICAgICAgICAgIC8vIFN1bSBiYXNlZCBvbiBvcGVyYW5kc1xuICAgICAgICAgIGNvbnN0IFtvcDEsIG9wMl0gPSByb3cub3BlcmFuZHM7XG4gICAgICAgICAgdGhpcy5zdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdID0gKHRoaXMuc3VtbWFyeVZhbHVlc1tvcDFdIHx8IDApICsgKHRoaXMuc3VtbWFyeVZhbHVlc1tvcDJdIHx8IDApO1xuICAgICAgICB9IGVsc2UgaWYgKHJvdy5vcGVyYXRpb24gPT09ICdtdWx0aXBseScgJiYgcm93Lm9wZXJhbmRzKSB7XG4gICAgICAgICAgLy8gTXVsdGlwbHkgYmFzZWQgb24gb3BlcmFuZHNcbiAgICAgICAgICBjb25zdCBbb3AxLCBvcDJdID0gcm93Lm9wZXJhbmRzO1xuICAgICAgICAgIHRoaXMuc3VtbWFyeVZhbHVlc1tyb3cuZmllbGROYW1lXSA9ICh0aGlzLnN1bW1hcnlWYWx1ZXNbb3AxXSB8fCAwKSAqICh0aGlzLnN1bW1hcnlWYWx1ZXNbb3AyXSB8fCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU0tTMTNKVU4yNSBTdW0gdGhlIHZhbHVlcyBieSBkZWZhdWx0LlxuICAgICAgaWYocm93LnR5cGUgPT09ICdmdWxsUm93JyB8fCByb3cudHlwZSA9PT0gJ2Z1bGxyb3cnKXtcbiAgICAgICAgcm93Py5jb2x1bW5zPy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgIHRoaXMuc3VtbWFyeVZhbHVlc1tlbGVtZW50XSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLnJlZHVjZShcbiAgICAgICAgICAgIChhY2MsIGRhdGFSb3cpID0+IGFjYyArIChOdW1iZXIoZGF0YVJvd1tlbGVtZW50XSkgfHwgMCksXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGZyb20gIT09ICdvbkNoYW5nZScgJiYgZnJvbSAhPT0gJ29uSW5pdCcgJiYgdGhpcy5mcm9tID09PSAnZm9ybUJ1aWxkZXInKSB7XG4gICAgICBpZih0aGlzLmZyb20gPT09ICdmb3JtQnVpbGRlcicpICB0aGlzLm9yaWdpbmFsRGF0YSA9IHRoaXMuZGF0YS5sZW5ndGggPiB0aGlzLm9yaWdpbmFsRGF0YS5sZW5ndGggPyB0aGlzLmRhdGEgOiB0aGlzLm9yaWdpbmFsRGF0YS8vU0tTN0pVTjI1IE9ubHkgYXNzaWduIGRhdGEgdG8gb3JpZ2luYWxEYXRhIGlmIGZyb20gZm9ybUJ1aWxkZXJcbiAgICAgIHRoaXMuZW1pdFRhYmxlRGF0YVZhbHVlKHtkYXRhOiB0aGlzLm9yaWdpbmFsRGF0YSwgc3VtbWFyeVZhbHVlczogdGhpcy5zdW1tYXJ5VmFsdWVzfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU0tTMjBNQVIyNSBIYW5kbGUgbWFudWFsIGlucHV0IGNoYW5nZXMgaW4gc3VtbWFyeSByb3dzIFxuICBvblN1bW1hcnlJbnB1dENoYW5nZSgpIHtcbiAgICB0aGlzLmNvbXB1dGVTdW1tYXJ5VmFsdWVzKCk7XG4gIH1cbiAgLy8gU0tTMTVGRUIyNSBDdXN0b20gc29ydCBmdW5jdGlvblxuICBzb3J0RGF0YShjb2x1bW46IHN0cmluZywgc29ydGluZ1N0YXRlPzogYW55IHwgdW5kZWZpbmVkLCBjdXJyZW50U3RhdGU/OmFueSB8dW5kZWZpbmVkLCBmcm9tPzphbnkpIHtcbiAgICAvLyBEZWZpbmUgc29ydGluZyBzdGF0ZXNcbiAgICBjb25zdCBzb3J0aW5nU3RhdGVzID0gWydhc2MnLCAnZGVzYycsICdub25lJ107XG4gICAgaWYgKHRoaXMuY29uZmlnUGFnaW5hdGlvbiA9PT0gZmFsc2UgfHwgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSB0aGlzLnRvdGFsUmVjb3Jkcykge1xuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjdXJyZW50IHNvcnRpbmcgc3RhdGVcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTb3J0Q29sdW1uID09PSBjb2x1bW4gJiYgIXNvcnRpbmdTdGF0ZSkge1xuICAgICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IHNvcnRpbmcgc3RhdGVcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gc29ydGluZ1N0YXRlcy5pbmRleE9mKHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID0gc29ydGluZ1N0YXRlc1soY3VycmVudEluZGV4ICsgMSkgJSBzb3J0aW5nU3RhdGVzLmxlbmd0aF0gYXMgXCJhc2NcIiB8IFwiZGVzY1wiIHwgXCJub25lXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiBhIG5ldyBjb2x1bW4gaXMgc2VsZWN0ZWQsIHN0YXJ0IHdpdGggYXNjZW5kaW5nIHNvcnRcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydENvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9IHNvcnRpbmdTdGF0ZSB8fCAnYXNjJztcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZpbHRlckJveERhdGEgJiYgdGhpcy5maWx0ZXJCb3hEYXRhLmxlbmd0aCA+IDAgPyB0aGlzLmZpbHRlckJveERhdGEgOiB0aGlzLmRhdGFTb3VyY2UuZGF0YTtcbiAgICAgIC8vIE9ubHkgc29ydCBpZiB0aGUgZGlyZWN0aW9uIGlzICdhc2MnIG9yICdkZXNjJ1xuICAgICAgaWYgKHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnIHx8IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdkZXNjJykge1xuICAgICAgICBkYXRhLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBsZXQgdmFsdWVBID0gdGhpcy5nZXRPYmpWYWx1ZShhLCBjb2x1bW4pO1xuICAgICAgICAgIGxldCB2YWx1ZUIgPSB0aGlzLmdldE9ialZhbHVlKGIsIGNvbHVtbik7XG4gICAgICAgICAgLy8gSGFuZGxlIHVuZGVmaW5lZCBvciBudWxsIHZhbHVlc1xuICAgICAgICAgIGlmICh2YWx1ZUEgPT0gbnVsbCAmJiB2YWx1ZUIgPT0gbnVsbCkgcmV0dXJuIDA7IC8vIEJvdGggYXJlIG51bGwvdW5kZWZpbmVkXG4gICAgICAgICAgaWYgKHZhbHVlQSA9PSBudWxsKSByZXR1cm4gdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAxIDogLTE7IC8vIHZhbHVlQSBpcyBudWxsXG4gICAgICAgICAgaWYgKHZhbHVlQiA9PSBudWxsKSByZXR1cm4gdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAtMSA6IDE7IC8vIHZhbHVlQiBpcyBudWxsXG4gICAgICAgICAgLy8gSGFuZGxlIGRhdGUgc29ydGluZ1xuICAgICAgICAgIGlmICh0aGlzLmNvbHVtbnM/LnNvbWUoY29sID0+IGNvbC5maWVsZE5hbWUgPT09IGNvbHVtbiAmJiBjb2wudHlwZSA9PT0gJ2RhdGUnKSkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZUEgPSBuZXcgRGF0ZSh2YWx1ZUEpO1xuICAgICAgICAgICAgY29uc3QgZGF0ZUIgPSBuZXcgRGF0ZSh2YWx1ZUIpO1xuICAgICAgICAgICAgdmFsdWVBID0gZGF0ZUEuZ2V0VGltZSgpO1xuICAgICAgICAgICAgdmFsdWVCID0gZGF0ZUIuZ2V0VGltZSgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlQSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlQiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBudW1iZXIgc29ydGluZ1xuICAgICAgICAgICAgdmFsdWVBID0gTnVtYmVyKHZhbHVlQSk7XG4gICAgICAgICAgICB2YWx1ZUIgPSBOdW1iZXIodmFsdWVCKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZUEgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZUIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgc3RyaW5nIGNvbXBhcmlzb25cbiAgICAgICAgICAgIHZhbHVlQSA9IHZhbHVlQS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgdmFsdWVCID0gdmFsdWVCLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIENvbXBhcmUgdmFsdWVzXG4gICAgICAgICAgaWYgKHZhbHVlQSA8IHZhbHVlQikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gLTEgOiAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWVBID4gdmFsdWVCKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAxIDogLTE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIHZhbHVlcyBhcmUgdGhlIHNhbWUsIHJldHVybiAwIHRvIG1haW50YWluIG9yaWdpbmFsIG9yZGVyXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IFsuLi5kYXRhXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhZ2VJbmRleCA9IE51bWJlcih0aGlzLnBhZ2VJbmRleCkgfHwgMDtcbiAgICAgICAgY29uc3QgcGFnZVNpemUgPSBOdW1iZXIodGhpcy5wYWdlU2l6ZSkgfHwgMTA7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gKHBhZ2VJbmRleCAtIDEpICogcGFnZVNpemU7XG4gICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgcGFnZVNpemU7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5maWx0ZXJCb3hEYXRhID8gdGhpcy5maWx0ZXJCb3hEYXRhPy5zbGljZShzdGFydCwgZW5kKSB8fCBbXSA6IHRoaXMuZGF0YT8uc2xpY2Uoc3RhcnQsIGVuZCkgfHwgW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERldGVybWluZSB0aGUgY3VycmVudCBzb3J0aW5nIHN0YXRlXG4gICAgICBpZiAodGhpcy5jdXJyZW50U29ydENvbHVtbiA9PT0gY29sdW1uKSB7XG4gICAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgc29ydGluZyBzdGF0ZVxuICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBzb3J0aW5nU3RhdGVzLmluZGV4T2YodGhpcy5jdXJyZW50U29ydERpcmVjdGlvbik7XG4gICAgICAgIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPSBzb3J0aW5nU3RhdGVzWyhjdXJyZW50SW5kZXggKyAxKSAlIHNvcnRpbmdTdGF0ZXMubGVuZ3RoXSBhcyBcImFzY1wiIHwgXCJkZXNjXCIgfCBcIm5vbmVcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIGEgbmV3IGNvbHVtbiBpcyBzZWxlY3RlZCwgc3RhcnQgd2l0aCBhc2NlbmRpbmcgc29ydFxuICAgICAgICB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uID0gY29sdW1uO1xuICAgICAgICB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID0gJ2FzYyc7XG4gICAgICB9XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnTnh0RGF0YVRhYmxlJywgSlNPTi5zdHJpbmdpZnkoeyBhZGRSZWNvcmQ6IGZhbHNlLCBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCwgY3VycmVudFNvcnRDb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGN1cnJlbnRTb3J0RGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uIH0pKTtcbiAgICAgIC8vIE9ubHkgc29ydCBpZiB0aGUgZGlyZWN0aW9uIGlzICdhc2MnIG9yICdkZXNjJ1xuICAgICAgaWYoY3VycmVudFN0YXRlICE9PSB0cnVlICYmIGZyb20gIT09ICdvbkNoYW5nZScpdGhpcy5OeHRUYWJsZUVtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXggfSwgdGFibGVTZWFyY2g6IHsgZmllbGRzOiB0aGlzLmN1cnJlbnRDb2x1bW5zLCB2YWx1ZTogdGhpcy5zZWFyY2hCb3hWYWx1ZSB9LCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbixsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9IH0pXG4gICAgfVxuICAgIGlmKGZyb20gIT09ICdvbkNoYW5nZScpdGhpcy5OeHRUYWJsZVBhcmFtc0VtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXggfSx0YWJsZVNlYXJjaDogdGhpcy5zZWFyY2hCb3hWYWx1ZSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gLGxpc3RWaWV3OiB0aGlzLnNlbGVjdGVkVmlld319KVxuICAgIGlmKGZyb20gPT09ICdvbkNoYW5nZScpIHRoaXMucGFnZVBhcmFtcyh0aGlzLnRhYmxlUGFyYW1zPy5wYWdpbmF0aW9uLCdvbkNoYW5nZScpXG4gICAgdGhpcy5vblN1bW1hcnlJbnB1dENoYW5nZSgpXG4gIH1cblxuICBvblNjcm9sbCh0YWJsZUNvbnRhaW5lcjogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLmlzU2Nyb2xsZWQgPSB0YWJsZUNvbnRhaW5lci5zY3JvbGxUb3AgPiAwO1xuICAgIGNvbnN0IHRhYmxlQm9keUhlaWdodCA9IHRhYmxlQ29udGFpbmVyLnNjcm9sbEhlaWdodDtcbiAgICBjb25zdCBpc0F0Qm90dG9tID0gdGFibGVCb2R5SGVpZ2h0IC0gdGFibGVDb250YWluZXIuc2Nyb2xsVG9wIDw9IHRhYmxlQ29udGFpbmVyLmNsaWVudEhlaWdodCArIDE7XG4gICAgLy9TS1MxNUZFQjI1IEVuc3VyZSBzaGFkb3cgaXMgaGlkZGVuIG9ubHkgaWYgdGFibGUgYm9keSBoZWlnaHQgaXMgZ3JlYXRlciB0aGFuIDQwMHB4XG4gICAgaWYgKHRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLmlzU2hhZG93SGlkZGVuID0gIShpc0F0Qm90dG9tIHx8IHRhYmxlQm9keUhlaWdodCA8IDQ1MCk7XG4gICAgfVxuICB9XG5cbiAgLy9TS1MxNUZFQjI1IGxvc2luZyB0aGUgZmlsdGVyIGNvbXBvbmVudCB3aGVuIHRoZSBtb3VzZSBpcyBjbGlja2VkIG91dHNpZGUgdGFibGVcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKSBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc2VhcmNoRmlsdGVyID0gZmFsc2U7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vIHByZXZlbnRzIGFueSBvdGhlciBkZWZhdWx0IGFjdGlvblxuICB9XG5cbiAgLy9TS1MxNUZFQjI1IGZpbHRlciBkYXRhIHRoYXQgdG8gYmUgZGlzcGxheWVkIGluIGhlYWRlciBmaWx0ZXIgaWNvbiBpcyBwYXNzZWQgaW4gJ2ZpbHRlckFycmF5JyBhcnJheVxuICBmaWx0ZXIoZGF0YXM6IGFueSkge1xuICAgIHRoaXMuZmlsdGVyQXJyYXkgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkRmlsdGVyID0gZGF0YXM7XG4gICAgdGhpcy5maWx0ZXJBcnJheSA9IFsuLi50aGlzLm11bHRpcGxlRmlsdGVyQXJyYXk/LltkYXRhc11dO1xuICAgIHRoaXMuc2VhcmNoRmlsdGVyID0gIXRoaXMuc2VhcmNoRmlsdGVyO1xuICAgIHRoaXMuaXNSZXNpemVkID0gdGhpcy5maWx0ZXJEYXRhQXJyYXlbdGhpcy5zZWxlY3RlZEZpbHRlcl0/Lmxlbmd0aCA+IDBcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgIGVtaXR0aW5nIHBhZ3Igc2l6ZSBhbmQgaW5kZXggdG8gcGFyZW50IG9uIHBhZ2luYXRpbmdcbiAgcGFnZVBhcmFtcyhldmVudDogYW55LCBmcm9tPzphbnkpIHtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IGV2ZW50Py5wYWdlSW5kZXggfHwgdGhpcy5wYWdlSW5kZXhcbiAgICB0aGlzLnBhZ2VTaXplID0gZXZlbnQ/LnBhZ2VTaXplIHx8IHRoaXMucGFnZVNpemVcbiAgICB0aGlzLmZpbHRlclRhYmxlTm9zID0gdGhpcy5maWx0ZXJCb3hEYXRhPy5sZW5ndGhcbiAgICBpZih0aGlzLmZyb20gPT09ICdmb3JtQnVpbGRlcicpIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5maWx0ZXJCb3hEYXRhID0gdGhpcy5kYXRhXG4gICAgaWYgKHRoaXMuY29uZmlnUGFnaW5hdGlvbiA9PT0gZmFsc2UgfHwgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSB0aGlzLnRvdGFsUmVjb3Jkcykge1xuICAgICAgaWYoZnJvbSAhPT0gJ29uQ2hhbmdlJyl0aGlzLmFwcGx5RmlsdGVyKHRoaXMuc2VhcmNoQm94VmFsdWUgLCAncGFnZVBhcmFtcycpXG4gICAgICBjb25zdCBzdGFydCA9IChOdW1iZXIodGhpcy5wYWdlSW5kZXgpIC0gMSkgKiBOdW1iZXIodGhpcy5wYWdlU2l6ZSk7XG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIE51bWJlcih0aGlzLnBhZ2VTaXplKTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5maWx0ZXJCb3hEYXRhPy5zbGljZShzdGFydCwgZW5kKTtcbiAgICAgIHRoaXMub25TdW1tYXJ5SW5wdXRDaGFuZ2UoKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZihmcm9tICE9PSAnb25DaGFuZ2UnKXRoaXMuTnh0VGFibGVFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4IH0sIHRhYmxlU2VhcmNoOiB7IGZpZWxkczogdGhpcy5jdXJyZW50Q29sdW1ucywgdmFsdWU6IHRoaXMuc2VhcmNoQm94VmFsdWUgfSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gLGxpc3RWaWV3OiB0aGlzLnNlbGVjdGVkVmlld30gfSlcbiAgICB9XG4gICAgaWYoZnJvbSAhPT0gJ29uQ2hhbmdlJyl0aGlzLk54dFRhYmxlUGFyYW1zRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCB9LHRhYmxlU2VhcmNoOiB0aGlzLnNlYXJjaEJveFZhbHVlLCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiAsbGlzdFZpZXc6IHRoaXMuc2VsZWN0ZWRWaWV3fX0pXG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IGFwcGx5IHNlYXJjaCBiYXIgZmlsdGVyIHVzaW5nIG1hdFxuICBhcHBseUZpbHRlcihldmVudDogYW55LCBmcm9tPzogYW55KSB7XG4gICAgbGV0IGZpbHRlclZhbHVlID0gZXZlbnQ7XG4gICAgZmlsdGVyVmFsdWUgPyBmaWx0ZXJWYWx1ZSA9IGZpbHRlclZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpIDogZmlsdGVyVmFsdWUgPSAnJztcbiAgICB0aGlzLnNlYXJjaEJveFZhbHVlID0gZmlsdGVyVmFsdWVcbiAgICBpZiAoIWZpbHRlclZhbHVlKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMub3JpZ2luYWxEYXRhXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5vcmlnaW5hbERhdGEuZmlsdGVyKGl0ZW0gPT5cbiAgICAgICAgdGhpcy5jdXJyZW50Q29sdW1ucy5zb21lKGNvbHVtbiA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldE9ialZhbHVlKGl0ZW0sY29sdW1uLmZpZWxkTmFtZSk/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICAgICAgICByZXR1cm4gdmFsdWUuaW5jbHVkZXMoZmlsdGVyVmFsdWUpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYoZnJvbSAhPT0gJ3BhZ2VQYXJhbXMnICYmIGZyb20gIT09ICdvbkNoYW5nZScpIHRoaXMucGFnZUluZGV4ID0gMVxuICAgIHRoaXMuc0ZpbHRlckRhdGEgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YVxuICAgIHRoaXMuZmlsdGVyVGFibGVOb3MgPSB0aGlzLnNGaWx0ZXJEYXRhPy5sZW5ndGhcbiAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLmRhdGEubGVuZ3RoXG4gICAgY29uc3Qgc3RhcnQgPSAoTnVtYmVyKHRoaXMucGFnZUluZGV4KSAtIDEpICogTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhU291cmNlLmRhdGE/LnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIHRoaXMuZmlsdGVyUmV0YWluKGZyb20gPT09ICdvbkNoYW5nZScgPyB0aGlzLnRhYmxlUGFyYW1zPy5zZWFyY2hGaWx0ZXJEYXRhIHx8IHRoaXMuZmlsdGVyRGF0YUFycmF5IDogdGhpcy5maWx0ZXJEYXRhQXJyYXksZnJvbSApXG4gIH1cblxuICAvKiogU0tTMTVGRUIyNSBXaGV0aGVyIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgZWxlbWVudHMgbWF0Y2hlcyB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3MuICovXG4gIGlzQWxsU2VsZWN0ZWQoKSB7XG4gICAgLy8gY2hlY2sgaWYgYWxsIHJvd3MgYXJlIHNlbGVjdGVkXG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7XG4gICAgY29uc3QgbnVtUm93cyA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aDtcbiAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XG4gIH1cblxuICAvKiogU0tTMTVGRUIyNSBTZWxlY3RzIGFsbCByb3dzIGlmIHRoZXkgYXJlIG5vdCBhbGwgc2VsZWN0ZWQ7IG90aGVyd2lzZSBjbGVhciBzZWxlY3Rpb24uICovXG4gIG1hc3RlclRvZ2dsZSgpIHtcbiAgICAvLyBpZiB0aGVyZSBpcyBhIHNlbGVjdGlvbiB0aGVuIGNsZWFyIHRoYXQgc2VsZWN0aW9uXG4gICAgLy8gZW1pdCB0aGUgc2VsZWN0ZWQgdmFsdWUgb25seSB0byBwYXJlbnRcbiAgICBpZiAodGhpcy5pc1NvbWVTZWxlY3RlZCgpKSB7XG4gICAgICAvLyAgIHRvIHJlbW92ZSB0aGUgZWRpdFJvdywgaWYgdGhlIGNoZWNrYm94IGlzIHVuY2hlY2tlZFxuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50Py5lZGl0Um93KSBlbGVtZW50WydlZGl0Um93J10gPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuZW1pdCh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIG5vIGl0ZW1zIGFyZSBzZWxlY3RlZCwgZWl0aGVyIHNlbGVjdCBhbGwgaXRlbXMgb3IgY2xlYXIgdGhlIHNlbGVjdGlvblxuICAgICAgLy8gZW1pdCB0aGUgc2VsZWN0ZWQgdmFsdWVzIHRvIHBhcmVudFxuICAgICAgdGhpcy5pc0FsbFNlbGVjdGVkKCkgPyB0aGlzLnNlbGVjdGlvbi5jbGVhcigpIDogdGhpcy5kYXRhU291cmNlLmRhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHRoaXMuc2VsZWN0aW9uLnNlbGVjdChyb3cpKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuZW1pdCh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBDaGVja3Mgd2hldGhlciBhbnkgaXRlbXMgYXJlIGN1cnJlbnRseSBzZWxlY3RlZCBpbiB0aGUgdGFibGUuXG4gIGlzU29tZVNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPiAwO1xuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBlbWl0IHRoZSBjaGVjayBib3ggdmFsdWVzLCB0aGF0IHNlbGVjdGVkIHNlcGFyYXRlbHlcbiAgc2VwYXJhdGVSb3dTZWxlY3QoZGF0YTogYW55LCBlbGVtZW50OiBhbnkpIHtcbiAgICAvLyAgIHRvIHJlbW92ZSB0aGUgZWRpdFJvdyBpZCBjaGVjayBib3ggaXMgdW5jaGVja2VkIG9uIHNlcGFyYXRlIHJvd1xuICAgIGlmIChkYXRhICYmIGVsZW1lbnQ/LmVkaXRSb3cpIHtcbiAgICAgIGVsZW1lbnRbJ2VkaXRSb3cnXSA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5lbWl0KHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkKVxuICAgIH1cbiAgfVxuXG4gIC8vU0tTMTVGRUIyNSBkYXRhIHRoYXQgdG8gYmUgcGFzc2VkLCB3aGVuIHRhYmxlIHJvdyBpcyBjbGlja2VkXG4gIHRhYmxlQ2xpY2soZGF0YTogYW55KSB7XG4gICAgdGhpcy50YWJsZVJvd0NsaWNrLmVtaXQoZGF0YSk7XG4gIH1cbiAgZ2V0TmVzdGVkVmFsdWUob2JqOiBhbnksIHBhdGg6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKCFvYmogfHwgIXBhdGgpIHJldHVybiB1bmRlZmluZWQ7XG4gIFxuICAgIHJldHVybiBwYXRoXG4gICAgICAucmVwbGFjZSgvXFxbKFxcZCspXFxdL2csICcuJDEnKSAvLyB0dXJucyBcIm1lbWJlcnNbMF1cIiBpbnRvIFwibWVtYmVycy4wXCJcbiAgICAgIC5zcGxpdCgnLicpXG4gICAgICAucmVkdWNlKChhY2MsIHBhcnQpID0+IChhY2MgJiYgYWNjW3BhcnRdICE9PSB1bmRlZmluZWQpID8gYWNjW3BhcnRdIDogdW5kZWZpbmVkLCBvYmopO1xuICB9XG4gIFxuICAvL1NLUzE1RkVCMjUgUmV0YWluIHRoZSBmaWx0ZXJkYXRhXG4gIGZpbHRlclJldGFpbihmaWx0ZXJrZXk6IGFueSwgZnJvbT86YW55KSB7XG4gICAgaWYgKGZpbHRlcmtleSAmJiBPYmplY3Qua2V5cyhmaWx0ZXJrZXkpLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLnNGaWx0ZXJEYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgIGxldCBpc0RhdGFDaGVja2VkID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoZmlsdGVya2V5KSkge1xuICAgICAgICBpZiAoZmlsdGVya2V5W2tleV0gJiYgZmlsdGVya2V5W2tleV0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlzRGF0YUNoZWNrZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWlzRGF0YUNoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5zRmlsdGVyRGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhmaWx0ZXJrZXkpKSB7XG4gICAgICAgICAgaWYgKGZpbHRlcmtleVtrZXldKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5zRmlsdGVyRGF0YS5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0TmVzdGVkVmFsdWUoaXRlbSwga2V5KTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmtleVtrZXldLmluY2x1ZGVzKHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgIFxuICAgICAgICAgICAgY29uc3QgZGF0YTEgPSBbLi4udGhpcy5kYXRhLCAuLi5kYXRhXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMucmVtb3ZlRHVwbGljYXRlcyhkYXRhMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmKGZyb20gIT09ICdwYWdlUGFyYW1zJyAmJiBmcm9tICE9PSAnb25DaGFuZ2UnKSB0aGlzLnBhZ2VJbmRleCA9IDFcbiAgICBjb25zdCBzdGFydCA9IChOdW1iZXIodGhpcy5wYWdlSW5kZXgpIC0gMSkgKiBOdW1iZXIodGhpcy5wYWdlU2l6ZSk7XG4gICAgY29uc3QgZW5kID0gc3RhcnQgKyBOdW1iZXIodGhpcy5wYWdlU2l6ZSk7XG4gICAgdGhpcy5maWx0ZXJCb3hEYXRhID0gdGhpcy5kYXRhXG4gICAgdGhpcy5maWx0ZXJUYWJsZU5vcyA9IHRoaXMuZmlsdGVyQm94RGF0YT8ubGVuZ3RoXG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGE/LnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIHRoaXMuZGF0YSA9IHRoaXMub3JpZ2luYWxEYXRhXG4gICAgdGhpcy5zb3J0RGF0YSh0aGlzLmN1cnJlbnRTb3J0Q29sdW1uICx0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uLHVuZGVmaW5lZCxmcm9tKVxuICB9XG5cbi8vIFNLUzE1RkVCMjUgdG8gcmVtb3ZlIGR1cGxpY2F0ZSBvYmplY3QgZnJvbSB0d28gYXJyYXlzIChzYWZlIHN0cmluZ2lmeSlcbnJlbW92ZUR1cGxpY2F0ZXMob2JqZWN0czogYW55KSB7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgdW5pcXVlT2JqZWN0czogYW55W10gPSBbXTtcblxuICBjb25zdCBzYWZlU3RyaW5naWZ5ID0gKG9iajogYW55KSA9PiB7XG4gICAgY29uc3Qgc2Vlbk9ianMgPSBuZXcgV2Vha1NldCgpO1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmosIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIG51bGw7IC8vIHJlcGxhY2UgdW5kZWZpbmVkIHRvIGF2b2lkIGlzc3Vlc1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc2Vlbk9ianMuaGFzKHZhbHVlKSkgcmV0dXJuOyAvLyBza2lwIGNpcmN1bGFyXG4gICAgICAgIHNlZW5PYmpzLmFkZCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG4gIH07XG5cbiAgb2JqZWN0cy5mb3JFYWNoKChvYmo6IGFueSkgPT4ge1xuICAgIGNvbnN0IGtleSA9IHNhZmVTdHJpbmdpZnkob2JqKTtcbiAgICBpZiAoIXNlZW4uaGFzKGtleSkpIHtcbiAgICAgIHNlZW4uYWRkKGtleSk7XG4gICAgICB1bmlxdWVPYmplY3RzLnB1c2gob2JqKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB1bmlxdWVPYmplY3RzO1xufVxuXG4gIC8vIFNLUzE1RkVCMjUgIG9uIGRlbGV0ZSBjbGljayBzYXZlIHRoZSBkYXRhIGluIHZhcmlhYmxlc1xuICBkZWxldGVSZWNvcmQoZGF0YTogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZnJvbSA9PT0gJ2Zvcm1CdWlsZGVyJykge1xuICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSBbLi4udGhpcy5kYXRhU291cmNlLmRhdGFdOyAvLyBDcmVhdGUgYSBuZXcgcmVmZXJlbmNlXG4gICAgICB1cGRhdGVkRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB1cGRhdGVkRGF0YTsgLy8gUmVhc3NpZ24gdG8gdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgICB0aGlzLmRhdGEgPSB1cGRhdGVkRGF0YTsgLy8gU3luYyB0aGlzLmRhdGFcbiAgICAgIHRoaXMuY29tcHV0ZVN1bW1hcnlWYWx1ZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWxldGVEYXRhID0gZGF0YTtcbiAgICAgIHRoaXMuZGVsZXRlSW5kZXggPSBpbmRleDtcbiAgICAgIHRoaXMuZGVsZXRlTW9kYWwgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgIGFmdGVyIGNsaWNraW5nIHllcyBpbiBkZWxldGUgYWxlcnQgbW9kYWwsIGVtaXQgdG8gcGFyZW50XG4gIGRlbGV0ZVJlY29yZERhdGEoKSB7XG4gICAgdGhpcy5vbkRlbGV0ZURhdGEuZW1pdCh7IGRhdGE6IHRoaXMuZGVsZXRlRGF0YSwgYWxsRGF0YTogdGhpcy5kYXRhIH0pO1xuICAgIHRoaXMuZGVsZXRlTW9kYWwgPSBmYWxzZTtcbiAgfVxuXG4gIC8vU0tTMTVGRUIyNSB0byBzYXZlIHRoZSBlZGl0ZWQgZGF0YSBpbiB0YWJsZTtcbiAgc2F2ZUJ1dHRvbigpIHtcbiAgICAvLyBlbWl0dGluZyBhbGwgZGF0YSB3aXRoIHNlbGVjdGVkIGRhdGFcbiAgICB0aGlzLnNhdmVCdXR0b25EYXRhLmVtaXQoeyBzZWxlY3RlZERhdGE6IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLCBhbGxEYXRhOiB0aGlzLmRhdGEgfSk7XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgcGFzcyB0aGUgcmVqZWN0ZWQgcmVhc29uXG4gIG9uRWRpdChkYXRhOiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSBkYXRhWydlZGl0Um93J10gPSB0cnVlOyAvLyBtYWRlIGVkaXRpbmcgcm93IGFzIHRydWUgLy8gIHNvbHZlIHVuZGVmaW5lZCBlcnJvciBvbiBzdHJpbmdcbiAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QoZGF0YSk7XG4gICAgdGhpcy5vbkVkaXREYXRhLmVtaXQoeyBkYXRhOiBkYXRhLCBhbGxEYXRhOiB0aGlzLmRhdGEgfSk7XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IHRhYmxlIHRvcCBidXR0b25zIGVtaXRcbiAgY29tbW9uQnV0dG9uQ2xpY2soYnV0dG9uOiBhbnkpIHtcbiAgICB0aGlzLmJ1dHRvbkVtaXQuZW1pdChidXR0b24pO1xuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmV0cmlldmUgZGF0YSBmcm9tIG9iamVjdHMuIFxuICAvLyBJbiAnZWxlbWVudCcgd2Ugd2lsbCBwYXNzIG9iamVjdCBhbmQgaW4gJ2NvbHVtbicgd2Ugd2lsbCBwYXNzIHBhdGggYXMgc3RyaW5nIGVnLmVtcGxveWVlLmZpbmFuY2VJbmZvWzBdLnVhbiB0byByZXRpZXZlIHVhbiB2YWx1ZSBcbiAgZ2V0T2JqVmFsdWUoZWxlbWVudDogYW55LCBjb2x1bW46IHN0cmluZykge1xuICAgIGlmICghZWxlbWVudCB8fCAhY29sdW1uKSB7XG4gICAgICByZXR1cm4gJyc7IC8vIFJldHVybiBlbXB0eSBzdHJpbmcgb3IgbnVsbCBpZiBlbGVtZW50IG9yIGNvbHVtbiBpcyBpbnZhbGlkXG4gICAgfVxuICAgIGxldCBmbGRzID0gY29sdW1uLnNwbGl0KCcuJyk7XG4gICAgbGV0IGN1cnJlbnQgPSBlbGVtZW50O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IHNwbGl0RmxkcyA9IGZsZHNbaV0uc3BsaXQoJ1snKTtcbiAgICAgIGlmIChzcGxpdEZsZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W2ZsZHNbaV1dID8/ICcnOyAvLyBVc2UgbnVsbGlzaCBjb2FsZXNjaW5nIHRvIGhhbmRsZSB1bmRlZmluZWQvbnVsbFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGluZGV4ID0gTnVtYmVyKHNwbGl0Rmxkc1sxXS5zcGxpdCgnXScpWzBdKTtcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnRbc3BsaXRGbGRzWzBdXT8uW2luZGV4XSA/PyAnJzsgLy8gU2FmZWx5IGFjY2VzcyBhcnJheSBpbmRleFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3VycmVudDtcbiAgfVxuICAvL1NLUzE1RkVCMjUgaHlwZXJsaW5sIGNvbHVtbnMgb25seSBlbWl0dGVkXG4gIG9uQ2xpY2tIeXBlcmxpbmsoY29sdW1uOiBhbnksIGVsZW1lbnQ6IGFueSwgaXNIeXBlckxpbms6IGFueSkge1xuICAgIGlmIChpc0h5cGVyTGluaykgdGhpcy5oeXBlckxpbmtFbWl0LmVtaXQoeyBjb2x1bW46IGNvbHVtbiwgZWxlbWVudDogZWxlbWVudCB9KTtcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgb24gYWRkIHJlY29yZCBpbiB0YWJsZSwgdGhlICdpbmxpbmVFbGVtZW50JyB2YWx1ZXMgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgdGFibGUgZGF0YSBcbiAgYWRkVGFibGVSZWNvcmQoZWxlbWVudDogYW55LGZyb20/OmFueSkge1xuICAgIGlmICh0aGlzLmNvbmZpZ1BhZ2luYXRpb24gPT09IGZhbHNlIHx8IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA9PT0gdGhpcy50b3RhbFJlY29yZHMpIHtcbiAgICAgIHZhciBvYmo6IGFueSA9IHt9O1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGVsZW1lbnQpO1xuICAgICAga2V5cy5mb3JFYWNoKChlbGVtZW50S2V5OiBhbnkpID0+IHtcbiAgICAgICAgb2JqW2VsZW1lbnRLZXldID0gJyc7XG4gICAgICB9KTtcbiAgICAgIC8vIFNLUzIwTUFSMjUgQ29tcHV0ZSBzdW1tYXJ5IGNvbHVtbnMgZm9yIHRoZSBuZXcgcm93XG4gICAgICBpZiAodGhpcy5zdW1tYXJ5Q29sdW1ucyAmJiB0aGlzLnN1bW1hcnlDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zdW1tYXJ5Q29sdW1ucy5mb3JFYWNoKHN1bW1hcnlDb2wgPT4ge1xuICAgICAgICAgIGlmIChzdW1tYXJ5Q29sLnR5cGUgPT09ICdjYWxjdWxhdGlvbicgJiYgc3VtbWFyeUNvbC5vcGVyYXRpb24gPT09ICdzdW0nICYmIHN1bW1hcnlDb2wub3BlcmFuZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1bSA9IHN1bW1hcnlDb2wub3BlcmFuZHMucmVkdWNlKChhY2MsIG9wZXJhbmQpID0+IGFjYyArIChOdW1iZXIob2JqW29wZXJhbmRdKSB8fCAwKSwgMCk7XG4gICAgICAgICAgICBvYmpbc3VtbWFyeUNvbC5maWVsZE5hbWVdID0gc3VtO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3VtbWFyeUNvbC50eXBlID09PSAnY2FsY3VsYXRpb24nICYmIHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnc3VidHJhY3QnICYmIHN1bW1hcnlDb2wub3BlcmFuZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1bSA9IHN1bW1hcnlDb2wub3BlcmFuZHMucmVkdWNlKChhY2MsIG9wZXJhbmQpID0+IGFjYyAtIChOdW1iZXIob2JqW29wZXJhbmRdKSB8fCAwKSwgMCk7XG4gICAgICAgICAgICBvYmpbc3VtbWFyeUNvbC5maWVsZE5hbWVdID0gc3VtO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3VtbWFyeUNvbC50eXBlID09PSAnY2FsY3VsYXRpb24nICYmIHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnbXVsdGlwbHknICYmIHN1bW1hcnlDb2wub3BlcmFuZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1bSA9IHN1bW1hcnlDb2wub3BlcmFuZHMucmVkdWNlKChhY2MsIG9wZXJhbmQpID0+IGFjYyAqIChOdW1iZXIob2JqW29wZXJhbmRdKSB8fCAwKSwgMCk7XG4gICAgICAgICAgICBvYmpbc3VtbWFyeUNvbC5maWVsZE5hbWVdID0gc3VtO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChzdW1tYXJ5Q29sLnR5cGUgPT09ICdjYWxjdWxhdGlvbicgJiYgc3VtbWFyeUNvbC5vcGVyYXRpb24gPT09ICdzdWJ0cmFjdCcgJiYgc3VtbWFyeUNvbC5vcGVyYW5kcykge1xuICAgICAgICAgICAgY29uc3Qgc3VtID0gc3VtbWFyeUNvbC5vcGVyYW5kcy5zbGljZSgxKS5yZWR1Y2UoXG4gICAgICAgICAgICAgIChhY2MsIG9wZXJhbmQpID0+IGFjYyAtIChOdW1iZXIob2JqW29wZXJhbmRdKSB8fCAwKSxcbiAgICAgICAgICAgICAgTnVtYmVyKG9ialtzdW1tYXJ5Q29sLm9wZXJhbmRzWzBdXSkgfHwgMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG9ialtzdW1tYXJ5Q29sLmZpZWxkTmFtZV0gPSBzdW07XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKHN1bW1hcnlDb2wudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJyAmJiBzdW1tYXJ5Q29sLm9wZXJhdGlvbiA9PT0gJ211bHRpcGx5JyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0ID0gc3VtbWFyeUNvbC5vcGVyYW5kcy5yZWR1Y2UoXG4gICAgICAgICAgICAgIChhY2MsIG9wZXJhbmQpID0+IGFjYyAqIChOdW1iZXIob2JqW29wZXJhbmRdKSB8fCAwKSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG9ialtzdW1tYXJ5Q29sLmZpZWxkTmFtZV0gPSBwcm9kdWN0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGEucHVzaChvYmopO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSAgdGhpcy5kYXRhO1xuICAgICAgdGhpcy5vcmlnaW5hbERhdGEgPSAgdGhpcy5kYXRhO1xuXG4gICAgICBpZiAodGhpcy5zdGlja3lDb2x1bW4gPT09IHRydWUgJiYgdGhpcy5jdXJyZW50Q29sdW1ucykge1xuICAgICAgICB0aGlzLnN0aWNreUNvbmRpdGlvbiA9IHRoaXMuY3VycmVudENvbHVtbnM/Lmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RpY2t5Q29uZGl0aW9uID0gdGhpcy5jdXJyZW50Q29sdW1ucz8ubGVuZ3RoICsgMTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFnZVNpemUgPSAxMFxuICAgICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy5kYXRhLmxlbmd0aFxuICAgICAgdGhpcy5maWx0ZXJUYWJsZU5vcyArPSAxIFxuICAgICAgdGhpcy5wYWdlSW5kZXggPSBNYXRoLmNlaWwodGhpcy50b3RhbENvdW50IC8gdGhpcy5wYWdlU2l6ZSk7XG4gICAgICBjb25zdCBzdGFydCA9IChOdW1iZXIodGhpcy5wYWdlSW5kZXgpIC0gMSkgKiBOdW1iZXIodGhpcy5wYWdlU2l6ZSk7XG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIE51bWJlcih0aGlzLnBhZ2VTaXplKTtcbiAgICAgIGlmICghdGhpcy5pc1BhZ2luYXRpb24pIHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhPy5zbGljZShzdGFydCwgZW5kKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdCh0aGlzLmRhdGFbdGhpcy5kYXRhLmxlbmd0aCAtIDFdKTtcbiAgICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmRhdGFbdGhpcy5kYXRhLmxlbmd0aCAtIDFdLmVkaXRSb3cgPSB0cnVlO1xuICAgICAgfSAgICAgIFxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwYWdlSW5kZXggPSBNYXRoLmNlaWwodGhpcy50b3RhbFJlY29yZHMgLyAxMCk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnTnh0RGF0YVRhYmxlJywgSlNPTi5zdHJpbmdpZnkoeyBhZGRSZWNvcmQ6IHRydWUsIHBhZ2VTaXplOiAxMCwgcGFnZUluZGV4OiBwYWdlSW5kZXgsIGN1cnJlbnRTb3J0Q29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBjdXJyZW50U29ydERpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiB9KSk7XG4gICAgICBpZihmcm9tICE9PSAnb25DaGFuZ2UnKXRoaXMuTnh0VGFibGVFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiAxMCwgcGFnZUluZGV4OiBwYWdlSW5kZXggfSwgdGFibGVTZWFyY2g6IHsgZmllbGRzOiB0aGlzLmN1cnJlbnRDb2x1bW5zLCB2YWx1ZTogdGhpcy5zZWFyY2hCb3hWYWx1ZSB9LCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiAsbGlzdFZpZXc6IHRoaXMuc2VsZWN0ZWRWaWV3fSB9KVxuICAgIH1cbiAgICB0aGlzLmNvbXB1dGVTdW1tYXJ5VmFsdWVzKGZyb20pO1xuICAgIGlmKGZyb20gIT09ICdvbkNoYW5nZScpdGhpcy5OeHRUYWJsZVBhcmFtc0VtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXggfSx0YWJsZVNlYXJjaDogdGhpcy5zZWFyY2hCb3hWYWx1ZSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gLGxpc3RWaWV3OiB0aGlzLnNlbGVjdGVkVmlld319KVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBBY3Rpb24gYnV0dG9uIGNvbmRpdGlvbmFsbHkgZGlzcGxheWVkIGZ1bmN0aW9uXG4gIGlzQ29uZGl0aW9uTWV0KGVsZW1lbnQ6IGFueSwgY29uZGl0aW9uczogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKGNvbmRpdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgeyBhbmRDb25kaXRpb25MaXN0LCBvckNvbmRpdGlvbkxpc3QgfSA9IGNvbmRpdGlvbnM7XG4gICAgICAvLyAgSWYgYW5kQ29uZGl0aW9uTGlzdCBleGlzdHMsIGNoZWNrIHRoYXQgYWxsIGNvbmRpdGlvbnMgYXJlIG1ldFxuICAgICAgY29uc3QgaXNBbmRDb25kaXRpb25NZXQgPSBhbmRDb25kaXRpb25MaXN0ID8gYW5kQ29uZGl0aW9uTGlzdC5ldmVyeSgoY29uZDogeyBjb25kaXRpb246IHN0cmluZyB8IGFueVtdOyBjb2x1bW46IHN0cmluZyB8IG51bWJlcjsgfSkgPT5cbiAgICAgICAgY29uZC5jb25kaXRpb24uaW5jbHVkZXMoZWxlbWVudFtjb25kLmNvbHVtbl0pXG4gICAgICApIDogdHJ1ZTsgLy8gIElmIG5vIGFuZENvbmRpdGlvbkxpc3QsIGNvbnNpZGVyIGl0IGFzIGFsd2F5cyBtZXRcbiAgICAgIC8vICBJZiBvckNvbmRpdGlvbkxpc3QgZXhpc3RzLCBjaGVjayBpZiBhdCBsZWFzdCBvbmUgY29uZGl0aW9uIGlzIG1ldFxuICAgICAgY29uc3QgaXNPckNvbmRpdGlvbk1ldCA9IG9yQ29uZGl0aW9uTGlzdCA/IG9yQ29uZGl0aW9uTGlzdC5zb21lKChjb25kOiB7IGNvbmRpdGlvbjogc3RyaW5nIHwgYW55W107IGNvbHVtbjogc3RyaW5nIHwgbnVtYmVyOyB9KSA9PlxuICAgICAgICBjb25kLmNvbmRpdGlvbi5pbmNsdWRlcyhlbGVtZW50W2NvbmQuY29sdW1uXSlcbiAgICAgICkgOiB0cnVlOyAvLyAgSWYgbm8gb3JDb25kaXRpb25MaXN0LCBjb25zaWRlciBpdCBhcyBhbHdheXMgbWV0XG4gICAgICAvLyAgUmV0dXJuIHRydWUgaWYgdGhlIEFORCBjb25kaXRpb24gaXMgbWV0IGFuZCB0aGUgT1IgY29uZGl0aW9uIGlzIG1ldFxuICAgICAgcmV0dXJuIGlzQW5kQ29uZGl0aW9uTWV0ICYmIGlzT3JDb25kaXRpb25NZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgY29uZmlnIHNlYXJjaCBmaWx0ZXIgYm94IGZ1bmN0aW9uXG4gIG9uU2VhcmNoKGV2ZW50OiBhbnksZnJvbT86YW55KSB7XG4gICAgdGhpcy5zZWFyY2hCb3hWYWx1ZSA9IGV2ZW50OyAvLyBVcGRhdGUgdGhlIGRpc3BsYXllZCB2YWx1ZSBpbiB0aGUgc2VhcmNoIGJveFxuICAgIGlmICh0aGlzLnNlYXJjaENvbmZpZ3MgfHwgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSB0aGlzLnRvdGFsUmVjb3Jkcykge1xuICAgICAgdGhpcy5wYWdlSW5kZXggPSAxXG4gICAgICB0aGlzLnBhZ2VTaXplID0gMTBcbiAgICAgIGlmKGZyb20gIT09ICdvbkNoYW5nZScpdGhpcy5OeHRUYWJsZUVtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogTnVtYmVyKHRoaXMucGFnZUluZGV4KSB9LCB0YWJsZVNlYXJjaDogeyBmaWVsZHM6IHRoaXMuY3VycmVudENvbHVtbnMsIHZhbHVlOiB0aGlzLnNlYXJjaEJveFZhbHVlIH0sIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uICxsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9IH0pXG4gICAgfVxuICAgIGlmKGZyb20gIT09ICdvbkNoYW5nZScpdGhpcy5OeHRUYWJsZVBhcmFtc0VtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXggfSx0YWJsZVNlYXJjaDogdGhpcy5zZWFyY2hCb3hWYWx1ZSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gLGxpc3RWaWV3OiB0aGlzLnNlbGVjdGVkVmlld319KVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBJZiB0aGUgdmFsdWUgaW4gdGhlIHNlYXJjaCBib3ggaXMgZW1wdHksIGNhbGwgdGhlIG9uU2VhcmNoIGZ1bmN0aW9uIGF1dG9tYXRpY2FsbHlcbiAgZW1wdHlTZWFyY2goZXZlbnQ6IGFueSkge1xuICAgIGlmICghZXZlbnQudHJpbSgpICYmICh0aGlzLnByZXZTZWFyY2ggIT0gZXZlbnQudHJpbSgpKSkge1xuICAgICAgdGhpcy5vblNlYXJjaChldmVudClcbiAgICB9XG4gICAgdGhpcy5wcmV2U2VhcmNoID0gZXZlbnQudHJpbSgpXG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IGluZm9TaWRlc2NyZWVuIGVtaXQgXG4gIG9uU2lkZU5hdkluZm9DbGljayhkYXRhOiBhbnksIGNvbDogYW55KSB7XG4gICAgdGhpcy5zaWRlTmF2RW1pdC5lbWl0KHtcbiAgICAgIGRhdGEsIGNvbCxcbiAgICAgIGNvbmZpZzogdW5kZWZpbmVkXG4gICAgfSlcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgZm9yIGFjdGl2ZSBjb2x1bW4gc2VsZWN0XG4gIG9uQ29sdW1uQ2xpY2sodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgdGhpcy5hY3RpdmVDb2x1bW4gPSB1bmlxdWVJZGVudGlmaWVyO1xuICAgIGlmICghdGhpcy5pc0VkaXRhYmxlKSB7XG4gICAgICAvLyBFeGlzdGluZyBzb3J0L2ZpbHRlciBsb2dpY1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1uID09PSB1bmlxdWVJZGVudGlmaWVyKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uID0gbnVsbDtcbiAgICAgIHRoaXMuY29sdW1uU2VsZWN0ZWQuZW1pdChudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbiA9IHVuaXF1ZUlkZW50aWZpZXI7XG4gICAgICBjb25zdCBjb2x1bW5EYXRhID0gdGhpcy5kYXRhU291cmNlLmRhdGEubWFwKHJvdyA9PiAoe1xuICAgICAgICB2YWx1ZTogcm93W3VuaXF1ZUlkZW50aWZpZXJdLFxuICAgICAgICBpZDogcm93LmlkIC8vIG9yIHVuaXF1ZSBpZGVudGlmaWVyXG4gICAgICB9KSk7XG4gICAgICB0aGlzLmNvbHVtblNlbGVjdGVkLmVtaXQoeyB1bmlxdWVJZGVudGlmaWVyLCBkYXRhOiBjb2x1bW5EYXRhIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgZm9yIGNsb3NlIHNlYXJjaCBmaWx0ZXIgYm94XG4gIGNsb3NlZmlsdGVyKGZyb20/OmFueSkge1xuICAgIHRoaXMucGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplIHx8IDEwXG4gICAgdGhpcy5wYWdlSW5kZXggPSAxXG4gICAgdGhpcy5maWx0ZXJEYXRhQXJyYXlbdGhpcy5zZWxlY3RlZEZpbHRlcl0gPSBbXVxuICAgIHRoaXMuaXNSZXNpemVkID0gZmFsc2VcbiAgICBpZiAodGhpcy5jb25maWdQYWdpbmF0aW9uID09PSBmYWxzZSB8fCB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IHRoaXMudG90YWxSZWNvcmRzKSB7XG4gICAgICB0aGlzLmZpbHRlclJldGFpbih0aGlzLmZpbHRlckRhdGFBcnJheSlcbiAgICB9IGVsc2Uge1xuICAgICAgaWYoZnJvbSAhPT0gJ29uQ2hhbmdlJyl0aGlzLk54dFRhYmxlRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogMTAsIHBhZ2VJbmRleDogMSB9LCB0YWJsZVNlYXJjaDogeyBmaWVsZHM6IHRoaXMuY3VycmVudENvbHVtbnMsIHZhbHVlOiB0aGlzLnNlYXJjaEJveFZhbHVlIH0sIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uICxsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9IH0pXG4gICAgfVxuICAgIGlmKGZyb20gIT09ICdvbkNoYW5nZScpdGhpcy5OeHRUYWJsZVBhcmFtc0VtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXggfSx0YWJsZVNlYXJjaDogdGhpcy5zZWFyY2hCb3hWYWx1ZSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gLGxpc3RWaWV3OiB0aGlzLnNlbGVjdGVkVmlld319KVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBzZWFyY2ggZmlsdGVyIGJveCBjaGVja2JveCByZXRhaW5cbiAgaXNTZWxlY3RlZChldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuZmlsdGVyRGF0YUFycmF5W3RoaXMuc2VsZWN0ZWRGaWx0ZXJdICYmIHRoaXMuZmlsdGVyRGF0YUFycmF5W3RoaXMuc2VsZWN0ZWRGaWx0ZXJdLmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBzZWFyY2ggZmlsdGVyIGJveCBjaGVja2JveCBzZWxlY3RcbiAgY2hlY2tlZERhdGEoZXZlbnQ6IGFueSxmcm9tPzphbnkpIHtcbiAgICBsZXQgc2VsZWN0ZWRBcnJheSA9IFtdXG4gICAgc2VsZWN0ZWRBcnJheSA9IHRoaXMuZmlsdGVyRGF0YUFycmF5W3RoaXMuc2VsZWN0ZWRGaWx0ZXJdID8gdGhpcy5maWx0ZXJEYXRhQXJyYXlbdGhpcy5zZWxlY3RlZEZpbHRlcl0gOiBbXVxuICAgIGlmIChzZWxlY3RlZEFycmF5ICYmIHNlbGVjdGVkQXJyYXkuaW5jbHVkZXMoZXZlbnQpKSB7XG4gICAgICBzZWxlY3RlZEFycmF5ID0gc2VsZWN0ZWRBcnJheS5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbSAhPT0gZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3RlZEFycmF5LnB1c2goZXZlbnQpO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlckRhdGFBcnJheVt0aGlzLnNlbGVjdGVkRmlsdGVyXSA9IHNlbGVjdGVkQXJyYXlcbiAgICB0aGlzLmlzUmVzaXplZCA9IHNlbGVjdGVkQXJyYXk/Lmxlbmd0aCA+IDBcbiAgICBpZiAodGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoICE9PSB0aGlzLnRvdGFsUmVjb3JkcyAmJiB0aGlzLmNvbmZpZ1BhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gMVxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IDEwXG4gICAgICBpZihmcm9tICE9PSAnb25DaGFuZ2UnKXRoaXMuTnh0VGFibGVFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IE51bWJlcih0aGlzLnBhZ2VJbmRleCkgfSwgdGFibGVTZWFyY2g6IHsgZmllbGRzOiB0aGlzLmN1cnJlbnRDb2x1bW5zLCB2YWx1ZTogdGhpcy5zZWFyY2hCb3hWYWx1ZSB9LCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiAsbGlzdFZpZXc6IHRoaXMuc2VsZWN0ZWRWaWV3fSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlclJldGFpbih0aGlzLmZpbHRlckRhdGFBcnJheSlcbiAgICB9XG4gICAgaWYoZnJvbSAhPT0gJ29uQ2hhbmdlJyl0aGlzLk54dFRhYmxlUGFyYW1zRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCB9LHRhYmxlU2VhcmNoOiB0aGlzLnNlYXJjaEJveFZhbHVlLCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiAsbGlzdFZpZXc6IHRoaXMuc2VsZWN0ZWRWaWV3fX0pXG4gIH1cblxuICAvLyBTS1MxNUZFQjI1ICBhY3Rpb24gY29sdW1uIGRyb3Bkb3duIGJ1dHRvbnMgY2xvc2VcbiAgcHJpdmF0ZSBhZGRDbGlja091dHNpZGVMaXN0ZW5lcigpIHtcbiAgICBpZiAoIXRoaXMuY2xpY2tMaXN0ZW5lcikge1xuICAgICAgdGhpcy5jbGlja0xpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5kcm9wZG93bicpKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50T3BlbkluZGV4ID0gbnVsbDtcbiAgICAgICAgICB0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXIoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy9TS1MxNUZFQjI1IGlmIGNsb3NlIHRoZSBkcm9wZG93biBtZW51IHN0b3AgdGhlIGNsaWNrIGxpc3RlbmVyXG4gIHByaXZhdGUgcmVtb3ZlQ2xpY2tMaXN0ZW5lcigpIHtcbiAgICBpZiAodGhpcy5jbGlja0xpc3RlbmVyKSB7XG4gICAgICB0aGlzLmNsaWNrTGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuY2xpY2tMaXN0ZW5lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSAgYWN0aW9uIGNvbHVtbiBkcm9wZG93biBidXR0b25zIG9wZW4gLyBjbG9zZVxuICB0b2dnbGVEcm9wZG93bihpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5jdXJyZW50T3BlbkluZGV4ID0gdGhpcy5jdXJyZW50T3BlbkluZGV4ID09PSBpbmRleCA/IG51bGwgOiBpbmRleDtcbiAgICB0aGlzLmFkZENsaWNrT3V0c2lkZUxpc3RlbmVyKCk7XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgYWN0aW9uIGJ1dHRvbiBldm50IGVtaXRcbiAgYWN0aW9uQnV0dG9uQ2xpY2tlZChldmVudDogYW55LCBkYXRhOiBhbnkpIHtcbiAgICB0aGlzLmFjdGlvbkJ1dHRvbkVtaXQuZW1pdCh7IGV2ZW50LCBkYXRhIH0pXG4gIH1cblxuICByZW1vdmVDb2wodW5pcXVlSWRlbnRpZmllcjogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbiA9IG51bGw7XG4gICAgLy8gRW1pdCBkZXNlbGVjdGlvblxuICAgIGlmICghdGhpcy5pc0VkaXRhYmxlKSB7XG4gICAgICAvLyBFeGlzdGluZyBzb3J0L2ZpbHRlciBsb2dpY1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbHVtbkRhdGEgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5tYXAocm93ID0+ICh7XG4gICAgICB2YWx1ZTogcm93W3VuaXF1ZUlkZW50aWZpZXJdLFxuICAgICAgaWQ6IHJvdy5pZCAvLyBvciB1bmlxdWUgaWRlbnRpZmllclxuICAgIH0pKTtcbiAgICB0aGlzLnJlbW92ZUNvbHVtbi5lbWl0KHsgdW5pcXVlSWRlbnRpZmllciwgZGF0YTogY29sdW1uRGF0YSB9KTtcblxuICB9XG4gIGVtaXRUYWJsZURhdGFWYWx1ZSh1cGRhdGVkVGFibGVEYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBsZXQgY2hhbmdlOiBhbnkgPXt9O1xuICAgIGNoYW5nZVsnZnJvbVF1ZXN0aW9uSWQnXSA9IHRoaXMucXVlc3Rpb24uaWQ7XG4gICAgY2hhbmdlWyd2YWx1ZU9iaiddID0gdXBkYXRlZFRhYmxlRGF0YTtcbiAgICBjaGFuZ2VbJ3JlZmVyZW5jZUZpZWxkJ10gPSB0aGlzLnF1ZXN0aW9uLnJlZmVyZW5jZUZpZWxkO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChjaGFuZ2UpO1xuICB9XG5cbiAgdXBkYXRlRWRpdChpbmRleDogbnVtYmVyLCB2YWx1ZTogYW55LCBlbGVtZW50OiBhbnksIGNvbHVtbjogYW55LHR5cGU/OmFueSk6IHZvaWQgeyBcbiAgICBpZih0eXBlID09PSAnbGlzdCcpe1xuICAgICAgdmFsdWUgPSAodmFsdWUudmFsdWVPYmogJiYgdHlwZW9mIHZhbHVlLnZhbHVlT2JqID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZS52YWx1ZU9iaikpID8gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZSh2YWx1ZT8udmFsdWVPYmosIHZhbHVlPy5maWVsZCkgOiB2YWx1ZS52YWx1ZU9iajtcbiAgICB9XG4gICAgY29uc3QgdXBkYXRlZEVsZW1lbnQgPSB0aGlzLnVwZGF0ZVZhbHVlKGVsZW1lbnQsIGNvbHVtbiwgdmFsdWUpO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhW2luZGV4XSA9IHVwZGF0ZWRFbGVtZW50O1xuICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhXG4gICAgLy8gU0tTMjJKVUwyNSBJbnZhbGlkYXRlIGNhY2hlIGZvciB0aGlzIHJvdyBhbmQgY29sdW1uXG4gICAgY29uc3Qgcm93SWQgPSBlbGVtZW50Py5pZCA/PyBpbmRleDtcbiAgICBjb25zdCBrZXkgPSBgJHtyb3dJZH0tJHtjb2x1bW4gPz8gJ3Vua25vd24nfWA7XG4gICAgdGhpcy5xdWVzdGlvbnNDYWNoZS5kZWxldGUoa2V5KTtcbiAgICAvLyBTS1MyME1BUjI1IEVuc3VyZSB0aGlzLmRhdGEgaXMgdXBkYXRlZCBzaW5jZSBzdW1tYXJ5IHVzZXMgdGhlIGZ1bGwgZGF0YXNldFxuICAgIGNvbnN0IGRhdGFJbmRleCA9IHRoaXMuZGF0YS5maW5kSW5kZXgoKGl0ZW06IGFueSkgPT4gaXRlbSA9PT0gZWxlbWVudCk7XG4gICAgaWYgKGRhdGFJbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuZGF0YVtkYXRhSW5kZXhdID0gdXBkYXRlZEVsZW1lbnQ7XG4gICAgfVxuICAgIC8vIFJlY29tcHV0ZSBzdW1tYXJ5IGNvbHVtbnMgZm9yIHRoZSB1cGRhdGVkIHJvd1xuICAgIGlmICh0aGlzLnN1bW1hcnlDb2x1bW5zICYmIHRoaXMuc3VtbWFyeUNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zdW1tYXJ5Q29sdW1ucy5mb3JFYWNoKHN1bW1hcnlDb2wgPT4ge1xuICAgICAgICBpZiAoc3VtbWFyeUNvbC50eXBlID09PSAnY2FsY3VsYXRpb24nICYmIHN1bW1hcnlDb2wub3BlcmFuZHMgJiYgc3VtbWFyeUNvbC5vcGVyYW5kcy5sZW5ndGgpIHtcbiAgICAgICAgICBpZiAoc3VtbWFyeUNvbC5vcGVyYXRpb24gPT09ICdzdW0nKSB7XG4gICAgICAgICAgICB1cGRhdGVkRWxlbWVudFtzdW1tYXJ5Q29sLmZpZWxkTmFtZV0gPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnJlZHVjZShcbiAgICAgICAgICAgICAgKGFjYywgb3BlcmFuZCkgPT4gYWNjICsgKE51bWJlcih1cGRhdGVkRWxlbWVudFtvcGVyYW5kXSkgfHwgMCksXG4gICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdW1tYXJ5Q29sLm9wZXJhdGlvbiA9PT0gJ211bHRpcGx5Jykge1xuICAgICAgICAgICAgdXBkYXRlZEVsZW1lbnRbc3VtbWFyeUNvbC5maWVsZE5hbWVdID0gc3VtbWFyeUNvbC5vcGVyYW5kcy5yZWR1Y2UoXG4gICAgICAgICAgICAgIChhY2MsIG9wZXJhbmQpID0+IGFjYyAqIChOdW1iZXIodXBkYXRlZEVsZW1lbnRbb3BlcmFuZF0pIHx8IDApLCAgLy8gU3RhcnQgd2l0aCAxIGluc3RlYWQgb2YgMFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3VtbWFyeUNvbC5vcGVyYXRpb24gPT09ICdzdWJ0cmFjdCcpIHtcbiAgICAgICAgICAgIHVwZGF0ZWRFbGVtZW50W3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHN1bW1hcnlDb2wub3BlcmFuZHMuc2xpY2UoMSkucmVkdWNlKFxuICAgICAgICAgICAgICAoYWNjLCBvcGVyYW5kKSA9PiBhY2MgLSAoTnVtYmVyKHVwZGF0ZWRFbGVtZW50W29wZXJhbmRdKSB8fCAwKSxcbiAgICAgICAgICAgICAgTnVtYmVyKHVwZGF0ZWRFbGVtZW50W3N1bW1hcnlDb2wub3BlcmFuZHNbMF1dKSB8fCAwXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YVtpbmRleF0gPSB1cGRhdGVkRWxlbWVudDtcbiAgICAgIGlmIChkYXRhSW5kZXggIT09IC0xKSB7XG4gICAgICAgIHRoaXMuZGF0YVtkYXRhSW5kZXhdID0gdXBkYXRlZEVsZW1lbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmZyb20gPT09ICdmb3JtQnVpbGRlcicpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhW2luZGV4XSA9IHRoaXMudXBkYXRlVmFsdWUoZWxlbWVudCwgY29sdW1uLCB2YWx1ZSk7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YVxuICAgIH1cbiAgICB0aGlzLmNvbXB1dGVTdW1tYXJ5VmFsdWVzKCk7XG4gIH1cbiAgLy8gU0tTMThNQVIyNSB1cGRhdGUgZWxlbWVudFxuICB1cGRhdGVWYWx1ZShlbGVtZW50OiBhbnksIGNvbHVtbjogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgbGV0IGZsZHMgPSBjb2x1bW4/LnNwbGl0KCcuJyk7XG4gICAgbGV0IG9iaiA9IGVsZW1lbnQ7IC8vIEtlZXAgcmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCBvYmplY3RcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmxkcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIGxldCBzcGxpdEZsZHMgPSBmbGRzW2ldLnNwbGl0KCdbJyk7XG4gICAgICBpZiAoc3BsaXRGbGRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBvYmogPSBvYmpbZmxkc1tpXV0gfHwgKG9ialtmbGRzW2ldXSA9IHt9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBpbmRleCA9IE51bWJlcihzcGxpdEZsZHNbMV0uc3BsaXQoJ10nKVswXSk7XG4gICAgICAgIG9iaiA9IG9ialtzcGxpdEZsZHNbMF1dIHx8IChvYmpbc3BsaXRGbGRzWzBdXSA9IFtdKTtcbiAgICAgICAgb2JqID0gb2JqW2luZGV4XSB8fCAob2JqW2luZGV4XSA9IHt9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIGZpbmFsIHByb3BlcnR5XG4gICAgbGV0IGxhc3RLZXkgPSBmbGRzW2ZsZHMubGVuZ3RoIC0gMV07XG4gICAgbGV0IHNwbGl0TGFzdEtleSA9IGxhc3RLZXkuc3BsaXQoJ1snKTtcbiAgICBpZiAoc3BsaXRMYXN0S2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgb2JqW2xhc3RLZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBpbmRleCA9IE51bWJlcihzcGxpdExhc3RLZXlbMV0uc3BsaXQoJ10nKVswXSk7XG4gICAgICBvYmpbc3BsaXRMYXN0S2V5WzBdXVtpbmRleF0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIGV4cGVuc2VBdHRhY2htZW50KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpbGVFbWl0LmVtaXQoZXZlbnQpXG4gIH1cbiAgbGlzdFZpZXdFbWl0KGV2ZW50KXtcbiAgICBpZihldmVudC5hY3Rpb24gPT09ICdmaWx0ZXJHZXQnKXtcbiAgICAgIGV2ZW50WydkYXRhJ109IHRoaXMuY29sdW1ucz8uZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uZmlsdGVyID09PSB0cnVlKS5tYXAoY29sdW1uID0+IGNvbHVtbi5maWVsZE5hbWUpXG4gICAgICBpZighdGhpcy50YWJsZUZpbHRlckRhdGEgfHwgdGhpcy50YWJsZUZpbHRlckRhdGEubGVuZ3RoID09PSAwKXtcbiAgICAgICAgdGhpcy5OeHRUYWJsZUZpbHRlckVtaXQuZW1pdChldmVudClcbiAgICAgIH1cbiAgICB9IGVsc2V7IFxuICAgICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ3NlbGVjdCcgfHwgZXZlbnQuYWN0aW9uID09PSAnc2F2ZScpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSBldmVudC5kYXRhLmZpbHRlck5hbWU7XG4gICAgICAgIHRoaXMuY3VycmVudFZpZXdGaWx0ZXIgPSBldmVudC5kYXRhO1xuICAgICAgICB0aGlzLm5nT25DaGFuZ2VzKHt9KVxuICAgICAgfVxuICAgICAgdGhpcy5OeHRUYWJsZUZpbHRlckVtaXQuZW1pdChldmVudClcbiAgICB9XG4gIH1cbiAgYXN5bmMgb25JbWFnZUVkaXQocXVlczogYW55KSB7XG4gICAgdGhpcy5pc0ltYWdlRWRpdCA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZEltYWdlRWxlbWVudCA9IHF1ZXM7XG4gIH1cbiAgYXN5bmMgb25JbWFnZURlbGV0ZShxdWVzOiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgcXVlcy5pbWFnZURhdGEgPSAnJztcbiAgICAgIHF1ZXMub3JnSW1hZ2VEYXRhID0gJyc7XG4gICAgICAvLyBTS1MyMkpVTDI1IEluaXRpYWxpemUgbG9nbyBzaXplIGlmIG5vdCBhbHJlYWR5IHNldFxuICAgICAgaWYgKCFxdWVzLmltYWdlU2l6ZSkge1xuICAgICAgICBxdWVzLmltYWdlU2l6ZSA9IHsgd2lkdGg6IDE1MCwgaGVpZ2h0OiAxNTAgfTtcbiAgICAgIH1cbiAgICAgIC8vIGF3YWl0IHRoaXMuY2hpbGRFdmVudENhcHR1cmUocXVlcy5pbWFnZURhdGEsIHF1ZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcmVhZGluZyBmaWxlOlwiLCBlcnJvcik7XG4gICAgfVxuICB9XG4gICAvLyBTS1MyNU1BUjI1IGltYWdlIGFkZFxuICAgYXN5bmMgZmlsZUNoYW5nZUV2ZW50KHF1ZXM6IGFueSwgZXZlbnQ6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGltYWdlRGF0YSA9IGF3YWl0IHRoaXMucmVhZEZpbGVBc0RhdGFVUkwoZmlsZSk7XG4gICAgICAgIHF1ZXMuaW1hZ2VEYXRhID0gaW1hZ2VEYXRhO1xuICAgICAgICBxdWVzLm9yZ0ltYWdlRGF0YSA9IGltYWdlRGF0YTtcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBsb2dvIHNpemUgaWYgbm90IGFscmVhZHkgc2V0XG4gICAgICAgIGlmICghcXVlcy5pbWFnZVNpemUpIHtcbiAgICAgICAgICBxdWVzLmltYWdlU2l6ZSA9IHsgd2lkdGg6IDE1MCwgaGVpZ2h0OiAxNTAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGF3YWl0IHRoaXMuY2hpbGRFdmVudENhcHR1cmUoaW1hZ2VEYXRhLCBxdWVzKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciByZWFkaW5nIGZpbGU6XCIsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRGaWxlQXNEYXRhVVJMKGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpO1xuICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHJlamVjdChlcnJvcik7XG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICB9KTtcbiAgfVxuICAvLyBTS1MyOE1BUjI1IGZvciBuZXN0ZWQgYm9vayByZWFkXG4gIHJlYWRRdWVzdGlvbnMocWJJZDogYW55LCBxdWVzOmFueSkge1xuICAgIGxldCBxdWVzdGlvbnMgPSBbXTtcbiAgICAvLyBTS1MyMkpVTDI1IEFkZGVkIHRlcm5hcnkgdG8gYXZvaWQgdW5kZWZpbmVkXG4gICAgZm9yICh2YXIgc3EgaW4gcXVlcy5ib29rUXVlc3Rpb25zTWFwW3FiSWRdLnN1YlF1ZXN0aW9ucykge1xuICAgICAgbGV0IHE6IGFueSA9IHF1ZXMuYm9va1F1ZXN0aW9uc01hcFtxYklkXS5zdWJRdWVzdGlvbnNbc3FdO1xuICAgICAgLy8gaWYgcXVlc3Rpb24gaXMgdGhlcmUgcHJvY2Vzc1xuICAgICAgaWYgKHEpIHtcbiAgICAgICAgICBxdWVzdGlvbnMucHVzaChxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9ucztcbiAgfVxuICBnZXREcm9wRG93bihldmVudDogYW55KSB7XG4gICAgdGhpcy5oYWRsZURyb3BEb3duRGVwZW5kZW50LmVtaXQoZXZlbnQpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGFibGUtbGF5b3V0XCIgW2lkXT1cInRhYmxlSWRcIiBbbmdTdHlsZV09XCJ7J3BhZGRpbmctdG9wJzogJzFweCcsICd3aWR0aCc6IHRhYmxlV2lkdGh9XCIgW2Rpcl09XCJkaXJlY3Rpb25cIj5cbiAgICA8ZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwidGl0bGVcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHRhYmxlLXRpdGxlIGFsaWduLXRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICB7e3RpdGxlfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc05vc0luZGljYXRvciB8fCBzZWFyY2hCYXIgfHwgaXNCdXR0b25zXCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCJcbiAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1ib3R0b206IDIwcHg7XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMjZBUFIyNSBMaXN0IFZpZXcgRmlsdGVyIC0tPlxuICAgICAgICAgICAgICAgIDxhcHAtbGlzdC12aWV3LWZpbHRlciAqbmdJZj1cImxpc3RWaWV3cyAmJiBsaXN0Vmlld3MubGVuZ3RoID4gMFwiIFtsaXN0Vmlld3NdPVwibGlzdFZpZXdzXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkVmlld109XCJzZWxlY3RlZFZpZXdcIiBbZGlzcGxheWVkQ29sdW1uc109J2NvbHVtbnMnIFt0YWJsZUZpbHRlckFycmF5XT1cInRhYmxlRmlsdGVyQXJyYXlcIlxuICAgICAgICAgICAgICAgICAgICAobGlzdFZpZXdFbWl0KT1cImxpc3RWaWV3RW1pdCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtbGlzdC12aWV3LWZpbHRlcj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiKCFsaXN0Vmlld3MgfHwgbGlzdFZpZXdzLmxlbmd0aCA9PT0gMCkgJiYgaXNOb3NJbmRpY2F0b3JcIiBjbGFzcz1cIm5vT2ZSZWNcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9XCJmb250LXdlaWdodDogNTAwOyBtYXJnaW4tcmlnaHQ6IDVweDsgbWFyZ2luLWJvdHRvbTogMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ05PUycgfCBueHRDdXN0b21UcmFuc2xhdGUgOiAnTm9zJ319IDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImNvbG9yOiByZ2IoNDMsIDg3LCAyNDkpO1wiPnt7dG90YWxSZWNvcmRzIHx8IHRvdGFsQ291bnR9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hCYXJcIiBjbGFzcz1cInNlYXJjaFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBzZWFyY2gtYmFyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjY0MTMgMTkuMjVDMTYuNjMyMiAxOS4yNSAyMC42NzgxIDE1LjM1MTEgMjAuNjc4MSAxMC41NDE3QzIwLjY3ODEgNS43MzIxOCAxNi42MzIyIDEuODMzMzMgMTEuNjQxMyAxLjgzMzMzQzYuNjUwNCAxLjgzMzMzIDIuNjA0NDkgNS43MzIxOCAyLjYwNDQ5IDEwLjU0MTdDMi42MDQ0OSAxNS4zNTExIDYuNjUwNCAxOS4yNSAxMS42NDEzIDE5LjI1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM3ODc0ODZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjEuNjI5NSAyMC4xNjY3TDE5LjcyNzEgMTguMzMzM1wiIHN0cm9rZT1cIiM3ODc0ODZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cInt7ICdTRUFSQ0gnIHwgbnh0Q3VzdG9tVHJhbnNsYXRlIDogJ1NlYXJjaCcgIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwic2VhcmNoQ29uZmlncyA/IGVtcHR5U2VhcmNoKCRldmVudC50YXJnZXQudmFsdWUpIDogYXBwbHlGaWx0ZXIoJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hCb3hWYWx1ZSB8fCAnJ1wiICNpbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJzZWFyY2hDb25maWdzICYmIHNlYXJjaEJhclwiIGNsYXNzPVwiY29uZmlnU2VhcmNoXCIgKGNsaWNrKT1cIm9uU2VhcmNoKGlucHV0LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQgNUgyMFwiIHN0cm9rZT1cIiNmZmZmZmZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQgOEgxN1wiIHN0cm9rZT1cIiNmZmZmZmZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjEgMTEuNUMyMSAxNi43NSAxNi43NSAyMSAxMS41IDIxQzYuMjUgMjEgMiAxNi43NSAyIDExLjVDMiA2LjI1IDYuMjUgMiAxMS41IDJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjZmZmZmZmXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyIDIyTDIwIDIwXCIgc3Ryb2tlPVwiI2ZmZmZmZlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiICpuZ0lmPVwiaXNCdXR0b25zXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDdweDsgZ2FwOiA3cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCIgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBidXR0b25BcnJheVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG54dC1idXR0b24gY2xhc3M9XCJkYXRhLXRhYmxlLWZzYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2tFbWl0KT1cIihidXR0b24udHlwZSA9PT0gJ2dyb3VwJyB8fCBidXR0b24udHlwZSA9PT0gJ2Ryb3Bkb3duJykgPyBjb21tb25CdXR0b25DbGljaygkZXZlbnQpIDogY29tbW9uQnV0dG9uQ2xpY2soYnV0dG9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2J1dHRvblR5cGVdPVwiYnV0dG9uLmNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYnV0dG9uVmFsdWVdPVwiYnV0dG9uLmxhYmVsUGF0aCB8fCBidXR0b24ubGFiZWwgfHwgYnV0dG9uLm5hbWUgfCBueHRDdXN0b21UcmFuc2xhdGUgOiBidXR0b24ubGFiZWwgfHwgYnV0dG9uLm5hbWUgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYnV0dG9uQ29uZmlnXT1cImJ1dHRvbi5idXR0b25Db25maWdcIiBbdHlwZV09XCJidXR0b24udHlwZVwiIGNsYXNzPVwibXMtMiBtZS0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYnRuSWNvbkxlZnRTcmNdPVwiYnV0dG9uLmJ0bkljb25MZWZ0U3JjXCIgW2lzSW1hZ2VTdmddPVwiYnV0dG9uLmlzSW1hZ2VTdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbnh0LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLW1hcmdpblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncmVzaXppbmcnOiBpc1Jlc2l6aW5nIH1cIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgbWF4SGVpZ2h0OiBpc1BhZ2luYXRpb24gPyAnNDUwcHgnIDogJ2F1dG8nLCBtaW5IZWlnaHQ6IGRhdGFTb3VyY2UuZGF0YSAmJiBkYXRhU291cmNlPy5kYXRhPy5sZW5ndGggPT09IDAgJiYgIWlzTG9hZGluZyAmJiBmcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gJzBweCcgOiAnMTAwcHgnIH1cIlxuICAgICAgICAgICAgICAgICN0YWJsZUNvbnRhaW5lciAoc2Nyb2xsKT1cIm9uU2Nyb2xsKHRhYmxlQ29udGFpbmVyKVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tdGFibGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IFRhYmxlIEhlYWRlciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkZXJcIiBbbmdDbGFzc109XCJ7ICdzaGFkb3cnOiBpc1Njcm9sbGVkIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IENoZWNrYm94IENvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndpdGhDaGVja0JveFwiIGNsYXNzPVwidGFibGUtY2VsbCBzdGlja3ktY29sdW1uIGhlYWQtY29sb3JcIiBbc3R5bGUud2lkdGhdPVwiJzUwcHgnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIChjaGFuZ2UpPVwibWFzdGVyVG9nZ2xlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvbj8uaGFzVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0aW9uPy5oYXNWYWx1ZSgpICYmICFpc0FsbFNlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgRGF0YSBDb2x1bW5zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY3VycmVudENvbHVtbnM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4uc3VtbWFyeUNvbHVtbiAhPT0gdHJ1ZSAmJiBjb2x1bW4uc3VtbWFyeVJvdyAhPT0gdHJ1ZSAmJiBjb2x1bW4uaXNIaWRlICE9PSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYmxlLWNlbGwgdGFibGVIZWFkZXIgaGVhZC1jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnN0aWNreS1jb2x1bW5dPVwiaSA9PT0gKHN0aWNreUNvbmRpdGlvbiAtIDEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlLWNvbHVtbl09XCJhY3RpdmVDb2x1bW4gPT09IGNvbHVtbi51bmlxdWVJZGVudGlmaWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWQtY29sdW1uXT1cIm1vZGUgPT09ICdlZGl0JyAmJiBpc0VkaXRhYmxlICYmIHNlbGVjdGVkQ29sdW1uID09PSBjb2x1bW4udW5pcXVlSWRlbnRpZmllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25Db2x1bW5DbGljayhjb2x1bW4udW5pcXVlSWRlbnRpZmllcik7IGNvbHVtbi5zb3J0ID8gc29ydERhdGEoY29sdW1uLmZpZWxkTmFtZSkgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZENvbHVtbiA9IGNvbHVtbi5maWVsZE5hbWVcIiAobW91c2VsZWF2ZSk9XCJob3ZlcmVkQ29sdW1uID0gbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbHVtbi53aWR0aCB8fCAnMTAwcHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZmxleF09XCInMCAwICcgKyAoY29sdW1uLndpZHRoIHx8ICcxMDBweCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cIic1MHB4J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5EaXZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1oZWFkZXJcIiBbc3R5bGUud2lkdGhdPVwiY29sdW1uLndpZHRoIHx8ICcxMDBweCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWRkIGNsb3NlIGJ1dHRvbiBmb3Igc2VsZWN0ZWQgY29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1vZGUgPT09ICdlZGl0JyAmJiBpc0VkaXRhYmxlICYmIHNlbGVjdGVkQ29sdW1uID09PSBjb2x1bW4udW5pcXVlSWRlbnRpZmllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjbG9zZS1jb2x1bW4tYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyByZW1vdmVDb2woY29sdW1uLnVuaXF1ZUlkZW50aWZpZXIpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pyVXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbGxpcHNpc1wiIHN0eWxlPVwiZmxleDogMTtcIiBbdGl0bGVdPVwiY29sdW1uLmxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGNvbHVtbi5sYWJlbFBhdGgpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb2x1bW4ubGFiZWxQYXRoIHwgbnh0Q3VzdG9tVHJhbnNsYXRlIDogY29sdW1uLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IChjb2x1bW4udW5pcXVlSWRlbnRpZmllcisnLmxhYmVsJykgfCBueHRDdXN0b21UcmFuc2xhdGUgOiBjb2x1bW4ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiY29sdW1uLmZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGZpbHRlcihjb2x1bW4uZmllbGROYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1yaWdodDogMnB4O1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTIgMTFcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAuNzUgMS4yNUgwLjc1TDQuNzUgNS43MTcyMlY4LjgwNTU2TDYuNzUgOS43NVY1LjcxNzIyTDEwLjc1IDEuMjVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMyNDI1MzNcIiBzdHJva2Utd2lkdGg9XCIxLjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgUmVkIGRvdCBmb3IgYWN0aXZlIGZpbHRlciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJEYXRhQXJyYXkgJiYgZmlsdGVyRGF0YUFycmF5W2NvbHVtbi5maWVsZE5hbWVdPy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN4PVwiOVwiIGN5PVwiMlwiIHI9XCIyLjVcIiBmaWxsPVwicmVkXCI+PC9jaXJjbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbHVtbi5zb3J0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzb3J0LWluZGljYXRvcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjdXJyZW50U29ydENvbHVtbiA9PT0gY29sdW1uLmZpZWxkTmFtZVwiIGNsYXNzPVwic29ydC1kaXJlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/ICfihpEnIDogY3VycmVudFNvcnREaXJlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PSAnZGVzYycgPyAn4oaTJyA6ICcnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaG92ZXJlZENvbHVtbiA9PT0gY29sdW1uLmZpZWxkTmFtZSAmJiBjdXJyZW50U29ydENvbHVtbiAhPT0gY29sdW1uLmZpZWxkTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNvcnQtZGlyZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDihpFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hGaWx0ZXIgJiYgY29sdW1uLmZpZWxkTmFtZSA9PT0gc2VsZWN0ZWRGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1jb21wb25lbnQgcG9zaXRpb24tYWJzb2x1dGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnNlYXJjaFwiIFtjbGFzcy5yZXNpemVkXT1cImlzUmVzaXplZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzZWFyY2gtYmFyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInNlYXJjaFN2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIyMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjJcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEuNjQxMyAxOS4yNUMxNi42MzIyIDE5LjI1IDIwLjY3ODEgMTUuMzUxMSAyMC42NzgxIDEwLjU0MTdDMjAuNjc4MSA1LjczMjE4IDE2LjYzMjIgMS44MzMzMyAxMS42NDEzIDEuODMzMzNDNi42NTA0IDEuODMzMzMgMi42MDQ0OSA1LjczMjE4IDIuNjA0NDkgMTAuNTQxN0MyLjYwNDQ5IDE1LjM1MTEgNi42NTA0IDE5LjI1IDExLjY0MTMgMTkuMjVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM3ODc0ODZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjEuNjI5NSAyMC4xNjY3TDE5LjcyNzEgMTguMzMzM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNzg3NDg2XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cIndpZHRoLTEwMFwiIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnU0VBUkNIJyB8IG54dEN1c3RvbVRyYW5zbGF0ZSA6ICdTZWFyY2gnICB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImlzUmVzaXplZFwiIChjbGljayk9XCJjbG9zZWZpbHRlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2xvc2UtaWNvblwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05LjE2OTk4IDE0LjgzTDE0LjgzIDkuMTcwMDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNC44MyAxNC44M0w5LjE2OTk4IDkuMTcwMDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkgMjJIMTVDMjAgMjIgMjIgMjAgMjIgMTVWOUMyMiA0IDIwIDIgMTUgMkg5QzQgMiAyIDQgMiA5VjE1QzIgMjAgNCAyMiA5IDIyWlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY29udGVudFwiIFtzdHlsZV09XCInb3ZlcmZsb3cteTogYXV0bydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZGF0YSBvZiBmaWx0ZXJBcnJheSB8IHNlYXJjaEZpbHRlciA6IHNlYXJjaFRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIG1iLTMgY2hlY2tib3hkaXZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZ2FwOiA1cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0ZWQoZGF0YSlcIiBbdmFsdWVdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJkYXRhXCIgKGNoYW5nZSk9XCJjaGVja2VkRGF0YShkYXRhKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtcy0yIGxhYmVsLWRhdGFcIj57e2RhdGF9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEVuaGFuY2VkIHJlc2l6ZSBoYW5kbGUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXNpemUtaGFuZGxlXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25SZXNpemVTdGFydCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJEcmFnIHRvIHJlc2l6ZSBjb2x1bW5cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBBY3Rpb24gQ29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aW9uQnV0dG9uIHx8IGlzRGVsZXRlUm93IHx8IGlzRWRpdFJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYmxlLWNlbGwgaGVhZC1jb2xvciBhY3Rpb25Db2wgc3RpY2t5LWNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiJzE1MHB4J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDEycHggIWltcG9ydGFudDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGlvbkNvbHVtSGVhZGVyIHwgbnh0Q3VzdG9tVHJhbnNsYXRlIDogJ0FjdGlvbid9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBUYWJsZSBCb2R5IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWJvZHlcIiAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIGRhdGFTb3VyY2UuZGF0YTsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwidGFibGUtcm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRhYmxlQ2xpY2soZWxlbWVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgQ2hlY2tib3ggQ2VsbCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndpdGhDaGVja0JveFwiIGNsYXNzPVwidGFibGUtY29sLWNlbGwgc3RpY2t5LWNvbHVtbiBib2R5LWNvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjdXN0b20tY2hlY2tib3hcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlcGFyYXRlUm93U2VsZWN0KHNlbGVjdGlvbi50b2dnbGUoZWxlbWVudCksIGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaXNTZWxlY3RlZChlbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIihlbGVtZW50LmlzUGF5UHJvY2Vzc2VkID09PSB0cnVlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBEYXRhIENlbGxzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY3VycmVudENvbHVtbnM7IGxldCBsYXN0ID0gbGFzdDsgZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4uc3VtbWFyeUNvbHVtbiAhPT0gdHJ1ZSAmJiBjb2x1bW4uc3VtbWFyeVJvdyAhPT0gdHJ1ZSAmJiBjb2x1bW4uaXNIaWRlICE9PSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYmxlLWNvbC1jZWxsIGJvZHktY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZC1jZWxsXT1cIm1vZGUgPT09ICdlZGl0JyAmJiBpc0VkaXRhYmxlICYmIHNlbGVjdGVkQ29sdW1uID09PSBjb2x1bW4udW5pcXVlSWRlbnRpZmllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbHVtbi53aWR0aCB8fCAnMTAwcHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZmxleF09XCInMCAwICcgKyAoY29sdW1uLndpZHRoIHx8ICcxMDBweCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cIic1MHB4J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aF09XCJjb2x1bW4ud2lkdGggfHwgJzEwMHB4J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0tTMjJKVUwyNSBjYWxlbmRhciAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdjYWxlbmRhcidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxhcHAtY3VzdG9tLWNhbGVuZGFyIFtxdWVzdGlvbl09XCJjb2x1bW4gfCBxdWVzdGlvbkJ5Um93OmVsZW1lbnQ6aVwiIChldmVudFNlbGVjdGVkKT1cImdldENhbGVuZGFyRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlU2VsZWN0ZWQpPVwiZ2V0Q3VycmVudENhbGVuZGFyKCRldmVudClcIiAob3Blbk1vZGFsKT1cIm9wZW5DYWxlbmRhck1vZGFsKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xvc2VNb2RhbCk9XCJjbG9zZUNhbGVuZGFyTW9kYWwoJGV2ZW50KVwiPjwvYXBwLWN1c3RvbS1jYWxlbmRhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1tb2RlbCAqbmdJZj1cImlzQ2FsZW5kYXJNb2RhbE9wZW5cIiBbbW9kYWxUaXRsZV09XCJjYWxlbmRhck1vZGFsVGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNNb2RhbE9wZW5dPVwiaXNDYWxlbmRhck1vZGFsT3BlblwiIFttb2RhbFNpemVdPVwiY2FsZW5kYXJNb2RhbFNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2F2ZUJ1dHRvblZhbHVlXT1cImNhbGVuZGFyU2F2ZUJ1dHRvblZhbHVlXCIgW21vZGFsRm9vdGVyXT1cIm1vZGFsQ2FsZW5kYXJNb2RhbEZvb3RlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzYXZlQnV0dG9uRW1pdCk9XCJvbkNhbGVuZGFyTW9kYWxTYXZlKClcIiAoY2FuY2VsQnV0dG9uRW1pdCk9XCJjbG9zZUNhbGVuZGFyTW9kYWwoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uYm9vayBbcWJJdGVtXT1cInFiUmVmcmVuY2VCb29rXCIgW3F1ZXN0aW9uc109XCJyZWZlcmVuY2VRdWVzdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhhbmRsZVF1ZXN0aW9uKT1cImhhbmRsZVF1ZXN0aW9uRXZlbnQoJGV2ZW50KVwiPjwvbGliLXF1ZXN0aW9uYm9vaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tbW9kZWw+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0tTMjJKVUwyNSBmb3IgcGljayBsb2NhdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtcGljay1sb2NhdGlvbiAgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2xvY2F0aW9uJ1wiIFthcGlLZXldPVwiY29sdW1uWydhcGlLZXknXVwiIFthZGRyZXNzXT1cInF1ZXN0aW9uLnNlbGVjdGVkVmFsdWVcIiBbcXVlc3Rpb25dPVwiY29sdW1uIHwgcXVlc3Rpb25CeVJvdzplbGVtZW50OmlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImZyb20gPT09ICdmb3JtQnVpbGRlcicgPyBlbGVtZW50Py5lZGl0Um93ICYmICFjb2x1bW4ucXVlc3Rpb24/LmlzUmVhZE9ubHkgPyAnZWRpdCcgOiAndmlldycgOiBlbGVtZW50Py5lZGl0Um93ICYmIChpc0VkaXRSb3cgfHwgYWRkSW5saW5lUmVjb3JkKSA/ICdlZGl0JyA6ICd2aWV3J1wiIFtmcm9tXT1cIidueHRUYWJsZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2NhdGlvblNlbGVjdGVkKT1cInVwZGF0ZUVkaXQoaSwkZXZlbnQsZWxlbWVudCxjb2x1bW4uZmllbGROYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtcGljay1sb2NhdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTS1MyMkpVTDI1IEltYWdlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnaW1hZ2UnXCIgKG1vdXNlZW50ZXIpPVwiaXNJbWFnZUhvdmVyID0gdHJ1ZTtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImlzSW1hZ2VIb3ZlciA9IGZhbHNlO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cImlzSW1hZ2VIb3ZlclwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBlbmQ7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCIhY29sdW1uLnF1ZXN0aW9uPy5pc1JlYWRPbmx5XCIgKGNsaWNrKT1cIm9uSW1hZ2VFZGl0KGNvbHVtbi5xdWVzdGlvbilcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjEwNjcgNi4wNzE3NEw5LjkyODMzIDQuODkzNEwyLjE2NjY3IDEyLjY1NTFWMTMuODMzNEgzLjM0NUwxMS4xMDY3IDYuMDcxNzRaTTEyLjI4NSA0Ljg5MzRMMTMuNDYzMyAzLjcxNTA3TDEyLjI4NSAyLjUzNjc0TDExLjEwNjcgMy43MTUwN0wxMi4yODUgNC44OTM0Wk00LjAzNSAxNS41MDAxSDAuNVYxMS45NjQyTDExLjY5NTggMC43Njg0MDNDMTEuODUyMSAwLjYxMjE3NyAxMi4wNjQgMC41MjQ0MTQgMTIuMjg1IDAuNTI0NDE0QzEyLjUwNiAwLjUyNDQxNCAxMi43MTc5IDAuNjEyMTc3IDEyLjg3NDIgMC43Njg0MDNMMTUuMjMxNyAzLjEyNTlDMTUuMzg3OSAzLjI4MjE4IDE1LjQ3NTcgMy40OTQxIDE1LjQ3NTcgMy43MTUwN0MxNS40NzU3IDMuOTM2MDQgMTUuMzg3OSA0LjE0Nzk2IDE1LjIzMTcgNC4zMDQyNEw0LjAzNTgzIDE1LjUwMDFINC4wMzVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzZDNzU3RFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIWNvbHVtbi5xdWVzdGlvbj8uaXNSZWFkT25seVwiIChjbGljayk9XCJvbkltYWdlRGVsZXRlKGNvbHVtbi5xdWVzdGlvbilcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE0IDMuOTg3MjZDMTEuNzggMy43NjcyNiA5LjU0NjY3IDMuNjUzOTMgNy4zMiAzLjY1MzkzQzYgMy42NTM5MyA0LjY4IDMuNzIwNiAzLjM2IDMuODUzOTNMMiAzLjk4NzI2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk01LjY2NjUgMy4zMTM2Mkw1LjgxMzE3IDIuNDQwMjhDNS45MTk4NCAxLjgwNjk1IDUuOTk5ODQgMS4zMzM2MiA3LjEyNjUgMS4zMzM2Mkg4Ljg3MzE3QzkuOTk5ODQgMS4zMzM2MiAxMC4wODY1IDEuODMzNjIgMTAuMTg2NSAyLjQ0Njk1TDEwLjMzMzIgMy4zMTM2MlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIuNTY2NyA2LjA5Mzc1TDEyLjEzMzQgMTIuODA3MUMxMi4wNiAxMy44NTM3IDEyIDE0LjY2NzEgMTAuMTQgMTQuNjY3MUg1Ljg2MDAyQzQuMDAwMDIgMTQuNjY3MSAzLjk0MDAyIDEzLjg1MzcgMy44NjY2OCAxMi44MDcxTDMuNDMzMzUgNi4wOTM3NVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuODg2NDcgMTEuMDAwNEg5LjEwNjQ3XCIgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4zMzM1IDguMzMzMjVIOS42NjY4M1wiIHN0cm9rZT1cIiNGRjJDMTBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiY29sdW1uLnF1ZXN0aW9uPy5pc1JlYWRPbmx5XCIgW3NyY109XCJjb2x1bW4ucXVlc3Rpb24/LmltYWdlRGF0YVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiIWNvbHVtbi5xdWVzdGlvbj8uaXNSZWFkT25seVwiIGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nbyBwcmV2aWV3IGFyZWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ28tcHJldmlld1wiICpuZ0lmPVwiY29sdW1uLnF1ZXN0aW9uPy5pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImNvbHVtbi5xdWVzdGlvbj8uaW1hZ2VEYXRhXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXBsb2FkIGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWNvbHVtbi5xdWVzdGlvbj8uaW1hZ2VEYXRhXCIgY2xhc3M9XCJsb2dvLXVwbG9hZC1wbGFjZWhvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImxvZ28tdXBsb2FkLXt7aX19XCIgY2xhc3M9XCJsb2dvLXVwbG9hZC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL0ltYWdlLnN2Z1wiIGFsdD1cIlVwbG9hZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+VXBsb2FkIEltYWdlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGlkPVwibG9nby11cGxvYWQte3tpfX1cIiBhY2NlcHQ9XCJpbWFnZS8qXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImZpbGVDaGFuZ2VFdmVudChjb2x1bW4ucXVlc3Rpb24sICRldmVudClcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzIySlVMMjUgaWNvbi1zZWxlY3RvciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxueHQtaWNvbi1zZWxlY3RvciBbYWxsSWNvbnNdPVwiYWxsSWNvbnNcIiAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnaWNvbidcIiBbcmVxdWlyZWRdPVwiY29sdW1uLnF1ZXN0aW9uPy5pc09wdGlvbmFsXCIgW21vZGVdPVwibW9kZVwiIFtxdWVzdGlvbl09XCJjb2x1bW4gfCBxdWVzdGlvbkJ5Um93OmVsZW1lbnQ6aVwiIFtsYWJlbEZvbnRdPVwiY29sdW1uLnF1ZXN0aW9uPy5mb250XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29sdW1uLnF1ZXN0aW9uPy5xdWVzdGlvblRleHQgPyAoKGNvbHVtbj8ucXVlc3Rpb24/LmlkKycucXVlc3Rpb25UZXh0JykgfCBueHRDdXN0b21UcmFuc2xhdGUgOiBjb2x1bW4/LnF1ZXN0aW9uPy5xdWVzdGlvblRleHQpIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbG9yXT1cImNvbHVtbi5xdWVzdGlvbj8uZm9udENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxTaXplXT1cImNvbHVtbi5xdWVzdGlvbj8uZm9udFNpemVcIiBbbGFiZWxXZWlnaHRdPVwiY29sdW1uLnF1ZXN0aW9uPy5mb250V2VpZ2h0XCIgW3Nob3dMYWJlbF09XCJjb2x1bW4ucXVlc3Rpb24/LnN0eWxlPy5zaG93TGFiZWxcIiAoaWNvblNlbGVjdGVkKT1cInVwZGF0ZUVkaXQoaSwkZXZlbnQsZWxlbWVudCxjb2x1bW4uZmllbGROYW1lKVwiPjwvbnh0LWljb24tc2VsZWN0b3I+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0tTMjJKVUwyNSBsaW5lIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdsaW5lJ1wiIGNsYXNzPVwiY3VzdG9tLWxpbmVcIiBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1mbGV4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0tTMjJKVUwyNSBkYXRhIHRhYmxlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG54dC1kYXRhdGFibGUgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ3RhYmxlJ1wiIGlzRWRpdFJvdyBpc0RlbGV0ZVJvdyBhY3Rpb25CdXR0b24gaXNCdXR0b25zIFtxdWVzdGlvbl09XCJjb2x1bW4gfCBxdWVzdGlvbkJ5Um93OmVsZW1lbnQ6aVwiIGZyb209XCJmb3JtQnVpbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInVwZGF0ZUVkaXQoaSwkZXZlbnQuZGF0YSxlbGVtZW50LGNvbHVtbi5maWVsZE5hbWUpXCIgW2FwaU1ldGFdPVwiY29sdW1uLnF1ZXN0aW9uPy5zdWJUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJmcm9tID09PSAnZm9ybUJ1aWxkZXInID8gZWxlbWVudD8uZWRpdFJvdyAmJiAhY29sdW1uLnF1ZXN0aW9uPy5pc1JlYWRPbmx5ID8gJ2VkaXQnIDogJ3ZpZXcnIDogZWxlbWVudD8uZWRpdFJvdyAmJiAoaXNFZGl0Um93IHx8IGFkZElubGluZVJlY29yZCkgPyAnZWRpdCcgOiAndmlldydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJsZUNvbmZpZ109XCJjb2x1bW4ucXVlc3Rpb24/LnRhYmxlQ29uZmlnXCIgdGFibGVJZD1cIlwiIGRpcmVjdGlvbj1cImx0clwiIHRhYmxlV2lkdGg9XCJhdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L254dC1kYXRhdGFibGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzIySlVMMjUgbGlzdCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxueHQtc2VhcmNoLWJveCAgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2xpc3QnXCIgW3F1ZXN0aW9uXT1cImNvbHVtbiB8IHF1ZXN0aW9uQnlSb3c6ZWxlbWVudDppXCIgW3JlYWRPbmx5XT1cImNvbHVtbi5xdWVzdGlvbj8uaXNSZWFkT25seVwiIFthcGlNZXRhXT1cImNvbHVtbi5xdWVzdGlvbj8uc3ViVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImNvbHVtbi5xdWVzdGlvbj8uaWRcIiBbcGxhY2VIb2xkZXJUZXh0XT1cImNvbHVtbi5xdWVzdGlvbj8ucXVlc3Rpb24gfHwgJydcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJmcm9tID09PSAnZm9ybUJ1aWxkZXInID8gZWxlbWVudD8uZWRpdFJvdyAmJiAhY29sdW1uLnF1ZXN0aW9uPy5pc1JlYWRPbmx5ID8gJ2VkaXQnIDogJ3ZpZXcnOiBlbGVtZW50Py5lZGl0Um93ICYmIChpc0VkaXRSb3cgfHwgYWRkSW5saW5lUmVjb3JkKSA/ICdlZGl0JyA6ICd2aWV3J1wiIFtmcm9tXT1cIidueHRUYWJsZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWFyY2hWYWx1ZUNoYW5nZSk9XCJ1cGRhdGVFZGl0KGksJGV2ZW50LnZhbHVlLGVsZW1lbnQsY29sdW1uLmZpZWxkTmFtZSxjb2x1bW4udHlwZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbnh0LXNlYXJjaC1ib3g+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0tTMjJKVUwyNSBEcm9wZG93biAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWRyb3Bkb3duICpuZ0lmPVwiY29sdW1uPy50eXBlID09PSAnZHJvcGRvd24nICYmIGNvbHVtbi5xdWVzdGlvbj8ub3B0aW9uc1wiIFtvcHRpb25zXT1cImNvbHVtbi5xdWVzdGlvbj8ub3B0aW9uc1wiIFthcGlNZXRhXT1cImNvbHVtbi5xdWVzdGlvbj8uc3ViVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImNvbHVtbi5xdWVzdGlvbj8uaWRcIiBbc2VsZWN0ZWRWYWx1ZV09XCJjb2x1bW4uaXNTaGVuZ2VsID8gY29sdW1uLnF1ZXN0aW9uPy5pbnB1dCA6IGNvbHVtbi5xdWVzdGlvbj8uc2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlcnJvck1lc3NhZ2VdPVwiY29sdW1uLnF1ZXN0aW9uPy5lcnJvck1lc3NhZ2VcIiBbZXJyb3JdPVwiY29sdW1uLnF1ZXN0aW9uPy5lcnJvclwiIFtyZWZlcmVuY2VGaWVsZF09XCJjb2x1bW4ucXVlc3Rpb24/LnJlZmVyZW5jZUZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiY29sdW1uLnF1ZXN0aW9uPy5pc1JlYWRPbmx5XCIgW3F1ZXN0aW9uXT1cImNvbHVtbiB8IHF1ZXN0aW9uQnlSb3c6ZWxlbWVudDppXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJmcm9tID09PSAnZm9ybUJ1aWxkZXInID8gZWxlbWVudD8uZWRpdFJvdyAmJiAhY29sdW1uLnF1ZXN0aW9uPy5pc1JlYWRPbmx5ID8gJ2VkaXQnIDogJ3ZpZXcnIDogZWxlbWVudD8uZWRpdFJvdyAmJiAoaXNFZGl0Um93IHx8IGFkZElubGluZVJlY29yZCkgPyAnZWRpdCcgOiAndmlldydcIiBbZnJvbV09XCInbnh0VGFibGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwidXBkYXRlRWRpdChpLCRldmVudC52YWx1ZS52YWx1ZU9iaixlbGVtZW50LGNvbHVtbi5maWVsZE5hbWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzIySlVMMjUgY3VzdG9tLXJhZGlvIGNvbXBvbmVudCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ3JhZGlvJyAmJiBjb2x1bW4ucXVlc3Rpb24/Lm9wdGlvbnNcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLXJhZGlvIFtvcHRpb25zXT1cImNvbHVtbi5xdWVzdGlvbj8ub3B0aW9uc1wiIFtxdWVzdGlvbl09XCJjb2x1bW4gfCBxdWVzdGlvbkJ5Um93OmVsZW1lbnQ6aVwiIFthcGlNZXRhXT1cImNvbHVtbi5xdWVzdGlvbj8uc3ViVGV4dFwiIFtpZF09XCJjb2x1bW4ucXVlc3Rpb24/LmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwiY29sdW1uLnF1ZXN0aW9uPy5zZWxlY3RlZFZhbHVlXCIgW2Vycm9yTWVzc2FnZV09XCJjb2x1bW4ucXVlc3Rpb24/LmVycm9yTWVzc2FnZVwiIFtlcnJvcl09XCJjb2x1bW4ucXVlc3Rpb24/LmVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZmVyZW5jZUZpZWxkXT1cImNvbHVtbi5xdWVzdGlvbj8ucmVmZXJlbmNlRmllbGRcIiBbcmVhZE9ubHldPVwiY29sdW1uLnF1ZXN0aW9uPy5pc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiZnJvbSA9PT0gJ2Zvcm1CdWlsZGVyJyA/IGVsZW1lbnQ/LmVkaXRSb3cgJiYgIWNvbHVtbi5xdWVzdGlvbj8uaXNSZWFkT25seSA/ICdlZGl0JyA6ICd2aWV3JyA6IGVsZW1lbnQ/LmVkaXRSb3cgJiYgKGlzRWRpdFJvdyB8fCBhZGRJbmxpbmVSZWNvcmQpID8gJ2VkaXQnIDogJ3ZpZXcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInVwZGF0ZUVkaXQoaSwkZXZlbnQudmFsdWUudmFsdWVPYmosZWxlbWVudCxjb2x1bW4uZmllbGROYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1yYWRpbz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzIySlVMMjUgQXR0YWNobWVudCAvIEZpbGVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1maWxlLXVwbG9hZCAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnZmlsZSdcIiBbbGltaXRGaWxlVXBsb2FkaW5nXT1cIjVcIiBbZXJyb3JdPVwiY29sdW1uLnF1ZXN0aW9uPy5lcnJvclwiIFtxdWVzdGlvbl09XCJjb2x1bW4gfCBxdWVzdGlvbkJ5Um93OmVsZW1lbnQ6aVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiZnJvbSA9PT0gJ2Zvcm1CdWlsZGVyJyA/IGVsZW1lbnQ/LmVkaXRSb3cgJiYgIWNvbHVtbi5xdWVzdGlvbj8uaXNSZWFkT25seSA/ICdlZGl0JyA6ICd2aWV3JyA6IGVsZW1lbnQ/LmVkaXRSb3cgJiYgKGlzRWRpdFJvdyB8fCBhZGRJbmxpbmVSZWNvcmQpID8gJ2VkaXQnIDogJ3ZpZXcnXCIgW2Zyb21dPVwiJ254dFRhYmxlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsbEZpbGVzXT1cImNvbHVtbi5xdWVzdGlvbj8uaW5wdXRcIiAoc2VsZWN0ZWRGaWxlRGF0YSk9XCJ1cGRhdGVFZGl0KGksJGV2ZW50LnZhbHVlLnZhbHVlT2JqLGVsZW1lbnQsY29sdW1uLmZpZWxkTmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLWZpbGUtdXBsb2FkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTS1MyMkpVTDI1IEJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxueHQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2J1dHRvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImZyb20gPT09ICdmb3JtQnVpbGRlcicgPyBlbGVtZW50Py5lZGl0Um93ICYmICFjb2x1bW4ucXVlc3Rpb24/LmlzUmVhZE9ubHkgPyAnZWRpdCcgOiAndmlldycgOiBlbGVtZW50Py5lZGl0Um93ICYmIChpc0VkaXRSb3cgfHwgYWRkSW5saW5lUmVjb3JkKSA/ICdlZGl0JyA6ICd2aWV3J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2J0bkhlaWdodF09XCInNTBweCdcIiBbYnRuV2lkdGhdPVwiJzE1MHB4J1wiIFtidXR0b25WYWx1ZV09XCJjb2x1bW4ucXVlc3Rpb24/LnF1ZXN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2tFbWl0KT1cInVwZGF0ZUVkaXQoaSwkZXZlbnQsZWxlbWVudCxjb2x1bW4uZmllbGROYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ueHQtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTS1MyMkpVTDI1IGJvb2sgdHlwZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGxpYi1xdWVzdGlvbmJvb2sgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2Jvb2snXCIgW3FiSXRlbV09XCJjb2x1bW4ucXVlc3Rpb24/LnFiSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uc109XCJyZWFkUXVlc3Rpb25zKGNvbHVtbi5xdWVzdGlvbj8ucWJSZWZlcmVuY2UsIGNvbHVtbi5xdWVzdGlvbj8ucWJSZWZlcmVuY2VRdWVzdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGFuZGxlRHJvcERvd24pPVwiZ2V0RHJvcERvd24oJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItcXVlc3Rpb25ib29rPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0tTMjJKVUwyNSBUZXh0LCBFbWFpbCwgbGFiZWwsIG51bWJlciwgQm9vbGVhbiwgcmljaCB0ZXh0IGVkaXRvciwgRGF0ZVRpbWUsIERhdGUsIFRpbWUtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxueHQtaW5wdXQgICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09IHVuZGVmaW5lZCB8fCBjb2x1bW4udHlwZSA9PT0gJ3RleHQnIHx8IGNvbHVtbi50eXBlID09PSAnZW1haWwnIHx8IGNvbHVtbi50eXBlID09PSAnbnVtYmVyJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2xhYmVsJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2Jvb2xlYW4nIHx8IGNvbHVtbi50eXBlID09PSAncmljaHRleHRhcmVhJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2RhdGV0aW1lJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2RhdGUnIHx8IGNvbHVtbi50eXBlID09PSAndGltZScgfHwgY29sdW1uLnR5cGUgPT09ICd0ZXh0YXJlYSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImNvbHVtbi50eXBlID09PSAnYm9vbGVhbicgPyAnY2hlY2tib3gnIDogY29sdW1uLnR5cGUgPT09ICdyaWNodGV4dGFyZWEnID8gJ3JpY2h0ZXh0JyA6IGNvbHVtbi50eXBlID09PSB1bmRlZmluZWQgPyAndGV4dCcgOiBjb2x1bW4udHlwZSBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImZyb20gPT09ICdmb3JtQnVpbGRlcicgPyBlbGVtZW50Py5lZGl0Um93ICYmICFjb2x1bW4ucXVlc3Rpb24/LmlzUmVhZE9ubHkgPyAnZWRpdCcgOiAndmlldycgOiBlbGVtZW50Py5lZGl0Um93ICYmIChpc0VkaXRSb3cgfHwgYWRkSW5saW5lUmVjb3JkKSA/ICdlZGl0JyA6ICd2aWV3J1wiIFtmcm9tXT1cIidueHRUYWJsZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJlbGVtZW50IHwgZ2V0VmFsdWU6IGNvbHVtbi5maWVsZE5hbWUgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHlwZXJMaW5rXT1cImNvbHVtbi5oeXBlckxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoeXBlcmxpbmtFbWl0KT1cIm9uQ2xpY2tIeXBlcmxpbmsoY29sdW1uLmZpZWxkTmFtZSxlbGVtZW50LCBjb2x1bW4uaHlwZXJMaW5rKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImNvbHVtbiB8IHF1ZXN0aW9uQnlSb3c6ZWxlbWVudDppXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxGb250XT1cImNvbHVtbi5xdWVzdGlvbj8uZm9udFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbHVtbi5xdWVzdGlvbj8ucXVlc3Rpb25UZXh0ID8gKChjb2x1bW4ucXVlc3Rpb24/LmlkKycucXVlc3Rpb25UZXh0JykgfCBueHRDdXN0b21UcmFuc2xhdGUgOiBjb2x1bW4ucXVlc3Rpb24/LnF1ZXN0aW9uVGV4dCk6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxDb2xvcl09XCJjb2x1bW4ucXVlc3Rpb24/LmZvbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsU2l6ZV09XCJjb2x1bW4ucXVlc3Rpb24/LmZvbnRTaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRWYWx1ZVNpemVdPVwiY29sdW1uLnF1ZXN0aW9uPy5mb250U2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsV2VpZ2h0XT1cImNvbHVtbi5xdWVzdGlvbj8uZm9udFdlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0V2VpZ2h0XT1cImNvbHVtbi5xdWVzdGlvbj8uZm9udFdlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dMYWJlbF09XCJjb2x1bW4ucXVlc3Rpb24/LnN0eWxlPy5zaG93TGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Qm9yZGVyPVwibm9uZVwiIHN2Z0hlaWdodD1cIjIwcHhcIiBzdmdXaWR0aD1cIjIwcHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb2x1bW4ucXVlc3Rpb24/LnF1ZXN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiY29sdW1uLnF1ZXN0aW9uPy5pc09wdGlvbmFsXCIgaW5wdXRCZ0NvbG9yPVwiI0ZBRkFGQVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SWRdPVwiY29sdW1uLnF1ZXN0aW9uPy50cmFja2luZ0lkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JNZXNzYWdlc109XCJ7IHJlcXVpcmVkOiAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCcgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SWNvbkxlZnRTcmNdPVwiY29sdW1uLnF1ZXN0aW9uPy5pY29uTGVmdFNyY1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5EYXRlXT1cImNvbHVtbi5xdWVzdGlvbj8ubWluRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwiM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0VmFsdWUpPVwidXBkYXRlRWRpdChpLCRldmVudC52YWx1ZS52YWx1ZU9iaixlbGVtZW50LGNvbHVtbi5maWVsZE5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L254dC1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgQWN0aW9uIEJ1dHRvbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25CdXR0b24gfHwgaXNEZWxldGVSb3cgfHwgaXNFZGl0Um93XCIgY2xhc3M9XCJ0YWJsZS1jb2wtY2VsbCBhY3Rpb25Db2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25CdXR0b25cIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBFZGl0IEJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNFZGl0Um93XCIgY2xhc3M9XCJlaWNvbi1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwie3sgJ0VESVRfUkVDT1JEJyB8IG54dEN1c3RvbVRyYW5zbGF0ZSA6ICdFZGl0IFJlY29yZCcgIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAycHg7IGJvcmRlcjogMXB4IHNvbGlkICNkY2RjZGM7IGJvcmRlci1yYWRpdXM6IDVweDsgbWFyZ2luLWxlZnQ6IDNweDsgbWFyZ2luLXJpZ2h0OiAzcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgZWRpdC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMnB4IDRweDsgYm9yZGVyLXJhZGl1czogNXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwib25FZGl0KGVsZW1lbnQpXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMS4xMDY3IDYuMDcxNzRMOS45MjgzMyA0Ljg5MzRMMi4xNjY2NyAxMi42NTUxVjEzLjgzMzRIMy4zNDVMMTEuMTA2NyA2LjA3MTc0Wk0xMi4yODUgNC44OTM0TDEzLjQ2MzMgMy43MTUwN0wxMi4yODUgMi41MzY3NEwxMS4xMDY3IDMuNzE1MDdMMTIuMjg1IDQuODkzNFpNNC4wMzUgMTUuNTAwMUgwLjVWMTEuOTY0MkwxMS42OTU4IDAuNzY4NDAzQzExLjg1MjEgMC42MTIxNzcgMTIuMDY0IDAuNTI0NDE0IDEyLjI4NSAwLjUyNDQxNEMxMi41MDYgMC41MjQ0MTQgMTIuNzE3OSAwLjYxMjE3NyAxMi44NzQyIDAuNzY4NDAzTDE1LjIzMTcgMy4xMjU5QzE1LjM4NzkgMy4yODIxOCAxNS40NzU3IDMuNDk0MSAxNS40NzU3IDMuNzE1MDdDMTUuNDc1NyAzLjkzNjA0IDE1LjM4NzkgNC4xNDc5NiAxNS4yMzE3IDQuMzA0MjRMNC4wMzU4MyAxNS41MDAxSDQuMDM1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNkM3NTdEXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgRGVsZXRlIEJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNEZWxldGVSb3dcIiBjbGFzcz1cImRpY29uLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidERUxFVEVfUkVDT1JEJyB8IG54dEN1c3RvbVRyYW5zbGF0ZSA6ICdEZWxldGUgUmVjb3JkJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMnB4OyBib3JkZXI6IDFweCBzb2xpZCAjZmZiNWI1OyBib3JkZXItcmFkaXVzOiA1cHg7IG1hcmdpbi1sZWZ0OiAzcHg7IG1hcmdpbi1yaWdodDogM3B4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVsZXRlLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAycHggNHB4OyBib3JkZXItcmFkaXVzOiA1cHg7IGJhY2tncm91bmQtY29sb3I6ICNmZWVlZWQ7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIChjbGljayk9XCJkZWxldGVSZWNvcmQoZWxlbWVudCxpKVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQgMy45ODcyNkMxMS43OCAzLjc2NzI2IDkuNTQ2NjcgMy42NTM5MyA3LjMyIDMuNjUzOTNDNiAzLjY1MzkzIDQuNjggMy43MjA2IDMuMzYgMy44NTM5M0wyIDMuOTg3MjZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTUuNjY2NSAzLjMxMzYyTDUuODEzMTcgMi40NDAyOEM1LjkxOTg0IDEuODA2OTUgNS45OTk4NCAxLjMzMzYyIDcuMTI2NSAxLjMzMzYySDguODczMTdDOS45OTk4NCAxLjMzMzYyIDEwLjA4NjUgMS44MzM2MiAxMC4xODY1IDIuNDQ2OTVMMTAuMzMzMiAzLjMxMzYyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMi41NjY3IDYuMDkzNzVMMTIuMTMzNCAxMi44MDcxQzEyLjA2IDEzLjg1MzcgMTIgMTQuNjY3MSAxMC4xNCAxNC42NjcxSDUuODYwMDJDNC4wMDAwMiAxNC42NjcxIDMuOTQwMDIgMTMuODUzNyAzLjg2NjY4IDEyLjgwNzFMMy40MzMzNSA2LjA5Mzc1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02Ljg4NjQ3IDExLjAwMDRIOS4xMDY0N1wiIHN0cm9rZT1cIiNGRjJDMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4zMzM1IDguMzMzMjVIOS42NjY4M1wiIHN0cm9rZT1cIiNGRjJDMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgUmVuZGVyIGlubGluZSBidXR0b25zIHVwIHRvIFNpemUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGFjdGlvbkJ1dHRvbkFycmF5Py5idXR0b25BcnJheTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaSA8IGFjdGlvbkJ1dHRvbkFycmF5Py5zaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiIG1hcmdpbi1sZWZ0OiAzcHg7IG1hcmdpbi1yaWdodDogM3B4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ29uZGl0aW9uTWV0KGVsZW1lbnQsIGJ1dHRvbi5jb25kaXRpb25zKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiYnV0dG9uLnRvb2x0aXBQYXRoIHx8IGJ1dHRvbi50b29sdGlwIHwgbnh0Q3VzdG9tVHJhbnNsYXRlIDogYnV0dG9uLnRvb2x0aXAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uQnV0dG9uQ2xpY2tlZChidXR0b24sZWxlbWVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIiRldmVudC50YXJnZXQuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAnICsgYnV0dG9uLmhvdmVyQm9yZGVyQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIiRldmVudC50YXJnZXQuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAnICsgYnV0dG9uLmJvcmRlckNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDJweDsgYm9yZGVyLXJhZGl1czoge3tidXR0b24uYm9yZGVyUmFkaXVzfX1weDsgIGJvcmRlcjogMXB4IHNvbGlkIHt7YnV0dG9uLmJvcmRlckNvbG9yfX07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAobW91c2VlbnRlcik9XCIkZXZlbnQudGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGJ1dHRvbi5ob3ZlckJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIiRldmVudC50YXJnZXQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gYnV0dG9uLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzoge3tidXR0b24ucGFkZGluZ319cHgge3tidXR0b24ucGFkZGluZyArIDJ9fXB4OyBib3JkZXItcmFkaXVzOiB7e2J1dHRvbi5ib3JkZXJSYWRpdXN9fXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiB7e2J1dHRvbi5iYWNrZ3JvdW5kQ29sb3J9fTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImJ1dHRvbi5pY29uU3JjXCIgI2ltZ0VsZW1lbnQgW3NyY109XCJidXR0b24uaWNvblNyY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJpbWdFbGVtZW50LnNyYyA9IGJ1dHRvbi5ob3Zlckljb25TcmMgfHwgYnV0dG9uLmljb25TcmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiaW1nRWxlbWVudC5zcmMgPSBidXR0b24uaWNvblNyY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkcm9wZG93bkFjdGlvbkJ1dHRvbiAmJiBkcm9wZG93bkFjdGlvbkJ1dHRvbi5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xpY2thYmxlLWltZ1wiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bihpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIiBtYXJnaW4tbGVmdDogM3B4OyBtYXJnaW4tcmlnaHQ6IDNweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7IHBhZGRpbmc6IDJweCA0cHg7IGJvcmRlci1yYWRpdXM6IDVweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsgYm9yZGVyLXJhZGl1czogNXB4OyBib3JkZXI6IDFweCBzb2xpZCAjNmM3NTdkO1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgNDAgNDBcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTkuOTk5OSAyNS42NjY3QzIzLjY4MTggMjUuNjY2NyAyNi42NjY2IDIyLjY4MTkgMjYuNjY2NiAxOUMyNi42NjY2IDE1LjMxODEgMjMuNjgxOCAxMi4zMzM0IDE5Ljk5OTkgMTIuMzMzNEMxNi4zMTggMTIuMzMzNCAxMy4zMzMzIDE1LjMxODEgMTMuMzMzMyAxOUMxMy4zMzMzIDIyLjY4MTkgMTYuMzE4IDI1LjY2NjcgMTkuOTk5OSAyNS42NjY3WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzI5MkQzMlwiIHN0cm9rZT1cIiMyOTJEMzJcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLW1pdGVybGltaXQ9XCIxMFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3LjY0NjcgMTguMTZMMjAuMDAwMSAyMC41MDY3TDIyLjM1MzQgMTguMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUucmlnaHRdPVwiKChhY3Rpb25CdXR0b25BcnJheT8uc2l6ZSA/PyAwKSAtIChhY3Rpb25CdXR0b25BcnJheT8uYnV0dG9uQXJyYXk/LnNpemUgPz8gMCkgKyAoaXNFZGl0Um93ID8gMSA6IDApICsgKGlzRGVsZXRlUm93ID8gMSA6IDApICsgKGRyb3Bkb3duQWN0aW9uQnV0dG9uPy5sZW5ndGggPiAwID8gMSA6IDApKSAqIDEwMCArICclJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImN1cnJlbnRPcGVuSW5kZXggPT09IGlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGJ0biBvZiBkcm9wZG93bkFjdGlvbkJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc0NvbmRpdGlvbk1ldChlbGVtZW50LCBidG4uY29uZGl0aW9ucylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWlkXT1cImVsZW1lbnQuaWRcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1pY29uIHt7YnRuLmJ1dHRvblR5cGV9fSB0b29sdGlwLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImJ0bi50b29sdGlwUGF0aCB8fCBidG4udG9vbHRpcCB8IG54dEN1c3RvbVRyYW5zbGF0ZSA6IGJ0bi50b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ0bi5idXR0b25EaXNhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbkJ1dHRvbkNsaWNrZWQoYnRuLGVsZW1lbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJidG4uaWNvblNyY1wiIFtzcmNdPVwiYnRuLmljb25TcmNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZjLWJ0bi10ZXh0XCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDEwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2J0bi5uYW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzIwTUFSMjUgU3VtbWFyeSBSb3dzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3VtbWFyeVJvd3MgJiYgc3VtbWFyeVJvd3MubGVuZ3RoID4gMCAmJiBkYXRhU291cmNlLmRhdGEgJiYgZGF0YVNvdXJjZT8uZGF0YT8ubGVuZ3RoID4gMCAmJiAhaXNMb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0Z1bGxUYWJsZVN1bW1hcnlSb3cgJiYgaXNTdW1tYXJ5Q29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBzdW1tYXJ5Um93c1wiIGNsYXNzPVwidGFibGUtcm93IHN1bW1hcnktcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIExhYmVsIGluIHRoZSBmaXJzdCBjb2x1bW4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwid2l0aENoZWNrQm94XCIgY2xhc3M9XCJub24tc3VtbWFyeS10YWJsZS1jZWxsXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEVtcHR5IGNlbGxzIHRvIGFsaWduIHdpdGggZGF0YSBjb2x1bW5zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY29sIG9mIGlzU3VtbWFyeVN0YXJ0Q29sdW1uOyBsZXQgbGFzdCA9IGxhc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibm9uLXN1bW1hcnktdGFibGUtY2VsbFwiIFtjbGFzcy5sYXN0LWNlbGxdPVwibGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IDwhLS0gVmFsdWUgb3IgaW5wdXQgaW4gdGhlIGxhc3QgY29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnktdGFibGUtY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkLWNlbGxdPVwibW9kZSA9PT0gJ2VkaXQnICYmIGlzRWRpdGFibGUgJiYgc2VsZWN0ZWRDb2x1bW4gPT09IHJvdy51bmlxdWVJZGVudGlmaWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvbkNvbHVtbkNsaWNrKHJvdy51bmlxdWVJZGVudGlmaWVyKVwiPnt7IChyb3cuaWQrJy5sYWJlbCcpIHwgbnh0Q3VzdG9tVHJhbnNsYXRlIDogcm93Py5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VtbWFyeS10YWJsZS1jZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWQtY2VsbF09XCJtb2RlID09PSAnZWRpdCcgJiYgaXNFZGl0YWJsZSAmJiBzZWxlY3RlZENvbHVtbiA9PT0gcm93LnVuaXF1ZUlkZW50aWZpZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LnR5cGUgPT09ICdjYWxjdWxhdGlvbidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBZGQgY2xvc2UgYnV0dG9uIGZvciBzZWxlY3RlZCBjb2x1bW4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJtb2RlID09PSAnZWRpdCcgJiYgaXNFZGl0YWJsZSAmJiBzZWxlY3RlZENvbHVtbiA9PT0gcm93LnVuaXF1ZUlkZW50aWZpZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjbG9zZS1jb2x1bW4tYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHJlbW92ZUNvbChyb3cudW5pcXVlSWRlbnRpZmllcilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKclVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc3VtbWFyeVZhbHVlc1tyb3cuZmllbGROYW1lXSB8IG51bWJlciB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cudHlwZSA9PT0gJ2lucHV0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIFsobmdNb2RlbCldPVwic3VtbWFyeVZhbHVlc1tyb3cuZmllbGROYW1lXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblN1bW1hcnlJbnB1dENoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibnh0LWxvcC1pbnB1dCB0YWJsZS13aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZToge3sgcm93VGV4dFNpemUgPyByb3dUZXh0U2l6ZSA6ICcxM3B4JyB9fTsgY29sb3I6IHt7cm93VGV4dENvbG9yID8gcm93VGV4dENvbG9yIDogJyMyYzMxMzcnfX07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0tTMjBNQVIyNSBFbXB0eSBjZWxscyB0byBhbGlnbiB3aXRoIGRhdGEgY29sdW1ucyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbCBvZiBpc1N1bW1hcnlFbmRDb2x1bW47IGxldCBsYXN0ID0gbGFzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJub24tc3VtbWFyeS10YWJsZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25CdXR0b24gfHwgaXNEZWxldGVSb3cgfHwgaXNFZGl0Um93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5vbi1zdW1tYXJ5LXRhYmxlLWNlbGwgYWN0aW9uQ29sIHN0aWNreS1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzEzSlVOMjUgZnVsbCB0YWJsZSBzdW1tYXJ5IHJvdyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNGdWxsVGFibGVTdW1tYXJ5Um93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBzdW1tYXJ5Um93c1wiIGNsYXNzPVwidGFibGUtcm93IHN1bW1hcnktcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzEzSlVOMjUgQ2hlY2tib3ggY29sdW1uIChpZiBlbmFibGVkKSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ3aXRoQ2hlY2tCb3hcIiBjbGFzcz1cImhvcml6b250YWwtc3VtbWFyeS10YWJsZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcm93LmxhYmVsUGF0aCB8fCByb3cubGFiZWwgfCBueHRDdXN0b21UcmFuc2xhdGUgOiByb3cubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzEzSlVOMjUgc3VtbWFyeSBjZWxsIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY29sIG9mIGN1cnJlbnRDb2x1bW5zOyBsZXQgbGFzdCA9IGxhc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaG9yaXpvbnRhbC1zdW1tYXJ5LXRhYmxlLWNlbGxcIiBzdHlsZT1cInRleHQtYWxpZ246IGxlZnQ7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChyb3c/LmNvbHVtbnM/LmluY2x1ZGVzKGNvbC5maWVsZE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc3VtbWFyeVZhbHVlc1tjb2wuZmllbGROYW1lXSB8IG51bWJlciB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGlvbkJ1dHRvbiB8fCBpc0RlbGV0ZVJvdyB8fCBpc0VkaXRSb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaG9yaXpvbnRhbC1zdW1tYXJ5LXRhYmxlLWNlbGwgYWN0aW9uQ29sIHN0aWNreS1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzI4TUFSMjUgSW4gdGhlIExvYWRpbmcgc2VjdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5XCIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJlcGVhdCBmb3IgNSBza2VsZXRvbiByb3dzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IF8gb2YgWzEsMiwzLDQsNV1cIiBjbGFzcz1cInRhYmxlLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENoZWNrYm94IENvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndpdGhDaGVja0JveFwiIGNsYXNzPVwic2tlbGV0b24tY2VsbCBzdGlja3ktY29sdW1uXCI+PC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEYXRhIENvbHVtbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbCBvZiBjdXJyZW50Q29sdW1uc1wiIGNsYXNzPVwic2tlbGV0b24tY2VsbCBcIj48L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFjdGlvbiBDb2x1bW4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25CdXR0b24gfHwgaXNEZWxldGVSb3cgfHwgaXNFZGl0Um93XCIgY2xhc3M9XCJza2VsZXRvbi1jZWxsIGFjdGlvbkNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiZGF0YVNvdXJjZS5kYXRhICYmIGRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCA9PT0gMCAmJiAhaXNMb2FkaW5nICYmIGZyb20gPT09ICdmb3JtQnVpbGRlcidcIiBjbGFzcz1cImZvcm0tYnVpbGRlci10YWJsZS1ib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgIC8gZHJhZ3MgZmllbGRzIGZyb20gZWxlbWVudHMgc2VjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IE5vIERhdGEgUm93IC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRhdGFTb3VyY2UuZGF0YSAmJiBkYXRhU291cmNlPy5kYXRhPy5sZW5ndGggPT09IDAgJiYgIWlzTG9hZGluZyAmJiBmcm9tICE9PSAnZm9ybUJ1aWxkZXInXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm5vLWRhdGFcIj5cbiAgICAgICAgICAgICAgICB7eydOT19SRUNPUkRTX09SX0RBVEFfRk9VTkQnIHwgbnh0Q3VzdG9tVHJhbnNsYXRlIDogJ05vIHJlY29yZHMvZGF0YSBmb3VuZC4nfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgUGFnaW5hdGlvbiAtLT5cbiAgICAgICAgICAgIDxkaXYgW2NsYXNzLnNoYWRvdy1oaWRkZW5dPVwiaXNTaGFkb3dIaWRkZW5cIj5cbiAgICAgICAgICAgICAgICA8IS0tIHRhYmxlIGlucHV0IHNhdmUgYnV0dG9uIGNoYW5nZXMgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBpbmxpbmVBZGQganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhZGRJY29uQm9yIGN1cnNvci1wb2ludGVyXCIgKm5nSWY9XCJhZGRJbmxpbmVSZWNvcmQgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRUYWJsZVJlY29yZChpbmxpbmVFbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwie3sgJ0FERF9SRUNPUkQnfCBueHRDdXN0b21UcmFuc2xhdGUgOiAnQWRkIFJlY29yZCd9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZEljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibmF2LWljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiB3aWR0aD1cIjI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTQ0MC0yODBoODB2LTE2MGgxNjB2LTgwSDUyMHYtMTYwaC04MHYxNjBIMjgwdjgwaDE2MHYxNjBabTQwIDIwMHEtODMgMC0xNTYtMzEuNVQxOTctMTk3cS01NC01NC04NS41LTEyN1Q4MC00ODBxMC04MyAzMS41LTE1NlQxOTctNzYzcTU0LTU0IDEyNy04NS41VDQ4MC04ODBxODMgMCAxNTYgMzEuNVQ3NjMtNzYzcTU0IDU0IDg1LjUgMTI3VDg4MC00ODBxMCA4My0zMS41IDE1NlQ3NjMtMTk3cS01NCA1NC0xMjcgODUuNVQ0ODAtODBabTAtODBxMTM0IDAgMjI3LTkzdDkzLTIyN3EwLTEzNC05My0yMjd0LTIyNy05M3EtMTM0IDAtMjI3IDkzdC05MyAyMjdxMCAxMzQgOTMgMjI3dDIyNyA5M1ptMC0zMjBaXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgcmVtb3ZlZCBidXR0b24gZGlzYWJsZSBsb2dpYywgYWRkZWQgYW5vdGhlciBjb25kaXRpb24gZm9yIGJ1dHRvbiBzaG93aW5nLS0+XG4gICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IFNSMDZKQU4yMDI1IGJ1dHRvbiBkaXNhYmxlIGxvZ2ljIGZvciBub3Qgc2VsZWN0IGFueSBlbXBsb3llZS0tPlxuICAgICAgICAgICAgICAgICAgICA8bnh0LWJ1dHRvbiAqbmdJZj1cIih0YWJsZVNhdmVCdXR0b24gfHwgaXNFZGl0Um93IHx8IGFkZElubGluZVJlY29yZCkgJiYgZnJvbSAhPSAnZm9ybUJ1aWxkZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvblR5cGU9XCJidG4gYnRuLXByaW1hcnlcIiBbYnV0dG9uRGlzYWJsZV09XCJzZWxlY3Rpb24/LnNlbGVjdGVkPy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGJ1dHRvbkNsaWNrRW1pdCk9XCJzYXZlQnV0dG9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uVmFsdWU9XCJ7eyAnU0FWRScgfCBueHRDdXN0b21UcmFuc2xhdGUgOiAnU2F2ZScgIH19XCI+PC9ueHQtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxueHQtcGFnaW5hdGlvbiAqbmdJZj1cImlzUGFnaW5hdGlvblwiIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbGxlY3Rpb25TaXplXT1cImNvbmZpZ1BhZ2luYXRpb24gPyB0b3RhbFJlY29yZHMgfHwgdG90YWxDb3VudCA6IGZpbHRlclRhYmxlTm9zXCJcbiAgICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCIgW2N1cnJlbnRQYWdlXT1cInBhZ2VJbmRleFwiIFtmaXJzdExhc3RCdXR0b25zXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAoZXZlbnQpPVwicGFnZVBhcmFtcygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9ueHQtcGFnaW5hdGlvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tU0tTMTVGRUIyNSBhbGVydCBvbiBkZWxldGluZyByZWNvcmQgLS0+XG48ZGl2ICpuZ0lmPVwiZGVsZXRlTW9kYWxcIiBjbGFzcz1cIm1vZGFsIG1vZGFsLWJhY2tkcm9wIHNob3cgIGQtYmxvY2tcIiBpZD1cImRlbGV0ZVJlY29yZFwiIHRhYmluZGV4PVwiLTFcIlxuICAgIGFyaWEtbGFiZWxsZWRieT1cImRlbGV0ZVJlY29yZExhYmVsXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwiIWRlbGV0ZU1vZGFsXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxiIGNsYXNzPVwibW9kYWwtdGl0bGUgZnMtNVwiIGlkPVwiZGVsZXRlUmVjb3JkTGFiZWxcIj57eyAnREVMRVRFX1JFQ09SRCd8IG54dEN1c3RvbVRyYW5zbGF0ZSA6ICdEZWxldGUgUmVjb3JkJ319PC9iPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlTW9kYWwgPSBmYWxzZVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgIHt7ICdBUkVfWU9VX1NVUkVfWU9VX1dBTlRfVE9fREVMRVRFX1RIRV9SRUMnfCBueHRDdXN0b21UcmFuc2xhdGUgOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgcmVjb3JkJ319ID9cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJkZWxldGVNb2RhbCA9IGZhbHNlXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgJ05PJ3wgbnh0Q3VzdG9tVHJhbnNsYXRlIDogJ05vJ319PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVSZWNvcmREYXRhKClcIj57eyAnWUVTJ3wgbnh0Q3VzdG9tVHJhbnNsYXRlIDogJ1llcyd9fTwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|
|
1744
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBYyxZQUFZLEVBQStDLE1BQU0sZUFBZSxDQUFDO0FBQ3pKLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEw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QTYzQmlCLGVBQWU7c0JBQTFELFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlcywgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE54dEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2J1dHRvbi9ueHQtYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOeHRQYWdpbmF0aW9uIH0gZnJvbSAnLi4vcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOeHRTZWFyY2hGaWx0ZXJQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZS9zZWFyY2gtZmlsdGVyL3NlYXJjaC1maWx0ZXIucGlwZSc7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE54dEdldFZhbHVlUGlwZSB9IGZyb20gJy4uLy4uL3BpcGUvZ2V0LXZhbHVlLnBpcGUnO1xuaW1wb3J0IHsgTGlzdFZpZXdGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9saXN0LXZpZXctZmlsdGVyL2xpc3Qtdmlldy1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE54dEN1c3RvbVRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlL2N1c3RvbS10cmFuc2xhdGUucGlwZSc7XG5pbXBvcnQgeyBQaWNrTG9jYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi9waWNrLWxvY2F0aW9uL3BpY2stbG9jYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IEljb25TZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24tc2VsZWN0b3IvaWNvbi1zZWxlY3Rvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnh0U2VhcmNoQm94IH0gZnJvbSAnLi4vc2VhcmNoLWJveC9zZWFyY2gtYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdXN0b21Ecm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uL2N1c3RvbS1kcm9wZG93bi9jdXN0b20tZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IEN1c3RvbVJhZGlvQ29tcG9uZW50IH0gZnJvbSAnLi4vY3VzdG9tLXJhZGlvL2N1c3RvbS1yYWRpby5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnh0RmlsZVVwbG9hZENvbXBvbmVudCB9IGZyb20gJy4uL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOeHRJbnB1dCB9IGZyb20gJy4uL254dC1pbnB1dC9ueHQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFF1ZXN0aW9uQnlSb3dQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZS9xdWVzdGlvbi1ieS1yb3cucGlwZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi90cmFuc2xhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5nZS9jaGFuZ2Uuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ254dC1kYXRhdGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTnh0QnV0dG9uQ29tcG9uZW50LFxuICAgIE54dFBhZ2luYXRpb24sXG4gICAgTnh0U2VhcmNoRmlsdGVyUGlwZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgIE54dEdldFZhbHVlUGlwZSxcbiAgICBQaWNrTG9jYXRpb25Db21wb25lbnQsXG4gICAgTnh0RGF0YXRhYmxlLFxuICAgIEljb25TZWxlY3RvckNvbXBvbmVudCxcbiAgICBOeHRTZWFyY2hCb3gsXG4gICAgQ3VzdG9tRHJvcGRvd25Db21wb25lbnQsXG4gICAgQ3VzdG9tUmFkaW9Db21wb25lbnQsXG4gICAgTnh0RmlsZVVwbG9hZENvbXBvbmVudCxcbiAgICBOeHRJbnB1dCxcbiAgICBMaXN0Vmlld0ZpbHRlckNvbXBvbmVudCxcbiAgICBOeHRDdXN0b21UcmFuc2xhdGVQaXBlLFxuICAgIFF1ZXN0aW9uQnlSb3dQaXBlXG4gICAgLy8gUm93UmVzaXplckRpcmVjdGl2ZVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2RhdGF0YWJsZS5jb21wb25lbnQuY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBOeHREYXRhdGFibGUge1xuICBASW5wdXQoKSBkYXRhOiBhbnlbXSA9IFtdOyAgLy8gIGdldCBkYXRhIHRoYXQgdG8gYmUgZGlzcGxheWVkIGluIGEgYXJyYXlcbiAgQElucHV0KCkgdGFibGVGaWx0ZXJEYXRhOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBjb2x1bW5zOiBBcnJheTxhbnk+ID0gW107IC8vIENvbHVtbnMgaGF2ZSBhIGxhYmVsLCBhIGNvbHVtbiB0eXBlLCBhbmQgZmlsdGVyIGRldGFpbHMuXG4gIEBJbnB1dCgpIHdpdGhDaGVja0JveDogYm9vbGVhbjsgIC8vIGdldCBpZiB3aXRoIG9yIHdpdGhvdXQgY2hlY2tib3ggaW4gdGFibGVcbiAgQElucHV0KCkgc2VhcmNoQmFyOiBib29sZWFuOyAvLyBpZiBpdCBpcyB0cnVlLCB0aGUgc2VhcmNoIGJhciB3aWxsIGJlIGRpc3BsYXllZCBvbiB0YWJsZVxuICBASW5wdXQoKSB0YWJsZVNhdmVCdXR0b24gPSBmYWxzZTsgLy8gc2F2ZSBidXR0b24gZm9yIGVkaXRpbmcgTE9QIGluIHBheXJvbGwgdGFibGUsICBjaGFuZ2VkIG5hbWUgZnJvbSAnc2F2ZUxPUCdcbiAgQElucHV0KCkgc3RpY2t5Q29sdW1uID0gZmFsc2U7IC8vIGlmIHRoZSBsYXN0IGNvbHVtbiBzaG91bGQgYmUgc3RpY2t5LCBpdCBzaG91bGQgYmUgc2VudCBhcyBib29sZWFuIHZhbHVlXG4gIEBJbnB1dCgpIHRhYmxlV2lkdGggPSAnMTAwJSc7IC8vIHdpZHRoIG9mIHRhYmxlIGNhbiBiZSBhZGp1c3RlZCBmcm9tIHBhcmVudCwgYnkgZGVmYXVsdCBpdCBpcyAxMDAlXG4gIEBJbnB1dCgpIGFjdGlvbkNvbHVtSGVhZGVyID0gJ0FDVElPTic7ICAvLyB0byBjaGFuZ2UgdGhlIGhlYWRlciBmb3IgYWN0aW9uIGNvbHVtblxuICBASW5wdXQoKSBhY3Rpb25CdXR0b246IGJvb2xlYW47ICAvL3RvIHNob3cgYnV0dG9uIGNvbHVtIGFzIGFjdGlvblxuICBASW5wdXQoKSB0aXRsZTogYW55Oy8vIHRoZSB0aXRsZSBmb3IgdGhlIHRhYmxlO1xuICBASW5wdXQoKSBpc0J1dHRvbnM6IGJvb2xlYW47Ly8gaXMgYnV0dG9uIHByZXNlbnQgaW4gdGFibGU7XG4gIEBJbnB1dCgpIGJ1dHRvbkFycmF5OiBhbnk7Ly8gYnV0dG9ucyB0byBiZSBkaXNwbGF5ZWQ7XG4gIEBJbnB1dCgpIHRhYmxlSWQ6IGFueSA9ICdpZCc7IC8vIGlkIG9mIHRhYmxlXG4gIEBJbnB1dCgpIGlzRWRpdFJvdzogYm9vbGVhbjsgLy8gaWYgaXQgaXMgdHJ1ZSwgdGhlIHJvdyBjYW4gYmUgZWRpdGVkXG4gIEBJbnB1dCgpIGlzRGVsZXRlUm93OiBib29sZWFuOyAvLyBpZiBpdCBpcyB0cnVlLCB0aGUgcm93IGNhbiBiZSBkZWxldGVkXG4gIEBJbnB1dCgpIGFkZElubGluZVJlY29yZDogYm9vbGVhbjsgLy8gaWYgaXQgaXMgdHJ1ZSwgdGhlIHJvdyBjYW4gYmUgYWRkZWQgaW5saW5lXG4gIEBJbnB1dCgpIHNlYXJjaENvbmZpZ3M6IGFueTsgLy8gc2VhcmNoIGNvbmZpZ3VyYXRpb25zXG4gIEBJbnB1dCgpIGRpcmVjdGlvbjogJ3J0bCcgfCAnbHRyJyA9ICdsdHInOyAvLyBkaXJlY3Rpb24gb2YgdGFibGVcbiAgQElucHV0KCkgcGFnaW5hdGlvbjogYW55OyAvLyBwYWdpbmF0aW9uIGNvbmZpZ3VyYXRpb25zXG4gIEBJbnB1dCgpIGFjdGlvbkJ1dHRvbkFycmF5OiBhbnk7IC8vIGFjdGlvbiBidXR0b24gY29uZmlndXJhdGlvbnNcbiAgQElucHV0KCkgbXVsdGlwbGVGaWx0ZXI6IGFueTsgLy8gaWYgcGFnaW5hdGlvbiB0cnVlIHRoZW4gdGhpcyB3aWxsIGJlIHVzZWRcbiAgQElucHV0KCkgaXNQYWdpbmF0aW9uOiBhbnk7IC8vIHBhZ2luYXRpb24gY29uZmlndXJhdGlvbnMgaWYgdHJ1ZSB0aGVuIHBhZ2luYXRpb24gd2lsbCBiZSBlbmFibGVkXG4gIEBJbnB1dCgpIGlzTm9zSW5kaWNhdG9yOiBhbnk7IC8vIGlmIHRydWUgdGhlbiBubyBkYXRhIGluZGljYXRvciB3aWxsIGJlIHNob3duXG4gIEBJbnB1dCgpIGlzRWRpdGFibGU6IGFueTsgLy8gaWYgdHJ1ZSB0aGVuIHRhYmxlIHdpbGwgYmUgZWRpdGFibGVcbiAgQElucHV0KCkgZnJvbTogYW55OyAvLyBmcm9tIGRhdGUgcGFsdGZvcm0gYmFzZWQgaW5pdGlhbGl6ZSBpbnB1dHMgZXg6LSAnZm9ybUJ1aWxkZXInXG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBhbnk7IC8vIHF1ZXN0aW9uIGlzIHVzZWQgZm9yIG54dCBmb3JtIGJ1aWxkZXIgdGFibGUgcHJldmlld1xuICBASW5wdXQoKSByb3dUZXh0U2l6ZTogYW55OyAvLyBzaXplIG9mIHJvdyB0ZXh0XG4gIEBJbnB1dCgpIHJvd1RleHRDb2xvcjogYW55OyAvLyBjb2xvciBvZiByb3cgdGV4dFxuICBASW5wdXQoKSBhcGlNZXRhOiBzdHJpbmc7IC8vIGFwaSBtZXRhIGlzIHVzZWQgZm9yIG54dCBmb3JtIGJ1aWxkZXIgdGFibGUgcHJldmlld1xuICBASW5wdXQoKSBzdW1tYXJ5Um93czogYW55OyAvLyBJbnB1dCBmb3IgY29uZmlndXJhYmxlIHN1bW1hcnkgcm93c1xuICBASW5wdXQoKSBzdW1tYXJ5Q29sdW1uczogYW55OyAvLyBJbnB1dCBmb3Igc3VtbWFyeSBjb2x1bW5zIGNvbmZpZ1xuICBASW5wdXQoKSBpc0xvYWRpbmc6IGFueTsgLy9TS1MyOE1BUjI1IElucHV0IGZvciBsb2FkaW5nIGluZGljYXRvclxuICBASW5wdXQoKSB0YWJsZUNvbmZpZzogYW55OyAvLyB0YWJsZSBjb25maWcgZm9yIG54dCBmb3JtIGJ1aWxkZXIgdGFibGVcbiAgQElucHV0KCkgdGFibGVQYXJhbXM6IGFueTsgLy9TS1MxN0FQUjI1IFJlY2VpdmVzIHRhYmxlUGFyYW1zIGluZm9ybWF0aW9uIGZyb20gcGFyZW50IGNvbXBvbmVudFxuICBASW5wdXQoKSBsaXN0Vmlld3M6IGFueVtdID0gW107IC8vU0tTMjZBUFIyNSBQcmVkZWZpbmVkIGxpc3Qgdmlld3NcbiAgQElucHV0KCkgbW9kZTogJ3ZpZXcnIHwgJ2VkaXQnIHwgJ3ByaW50JyA9ICdlZGl0JzsgLy8gU0tTMTFKVU4yNSBOZXcgbW9kZSBpbnB1dFxuICBASW5wdXQoKSBsYW5ndWFnZUNvZGU6IHN0cmluZzsgLy9TS1MyOEpVTjI1IGZvciB0cmFuc2xhdGlvblxuICBASW5wdXQoKSBzZWxlY3RlZENvbHVtbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vIFNLUzIySlVMMjUgdG8gZ2V0IHRoZSBzZWxlY3RlZCBjb2x1bW5cbiAgQElucHV0KCkgYWxsSWNvbnM6IGFueVtdID0gW107IC8vIFNLUzIySlVMMjUgaWNvbiBzZWxlY3RvciBjb21wb25lbnQgaW5wdXRcblxuICBAT3V0cHV0KCkgdGFibGVSb3dDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PjsgLy8gZGF0YXMgdG8gYmUgcGFzc2VkIHdoZW4gdGFibGUgcm93IGlzIGNsaWNrZWRcbiAgQE91dHB1dCgpIG9uRWRpdERhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47IC8vIGlmIGVkaXQgYnV0dG9uIGlzIGNsaWNrZWQsIHRoZSBkYXRhIG9mIHRoYXQgcm93IHdpbGwgYmUgcGFzc2VkXG4gIEBPdXRwdXQoKSBzYXZlQnV0dG9uRGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PjsgLy8gZWRpdGVkIHJvd3MgZGF0YSB3aWxsIGJlIHBhc3NlZFxuICBAT3V0cHV0KCkgb25EZWxldGVEYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAgLy8gd2hlbiBkZWxldGUgYnV0dG9uIGNsaWNrZWQgcGFzcyB0aGUgZGF0YVxuICBAT3V0cHV0KCkgYnV0dG9uRW1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PjsgLy8gdGhpcyB3aWxsIGVtaXQgYSB0YWJsZSB0b3AgYnV0dG9uIGNsaWNrIGV2ZW50XG4gIEBPdXRwdXQoKSBoeXBlckxpbmtFbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAvLyBoeXBlciBsaW5rIGNsaWNrIGV2ZW50XG4gIEBPdXRwdXQoKSBzaWRlTmF2RW1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBkYXRhOiBhbnksIGNvbDogYW55LCBjb25maWc6IGFueSB9PjsgLy8gcmlnaHRuYXYgY29sdW1uIGVtaXRcbiAgQE91dHB1dCgpIGFjdGlvbkJ1dHRvbkVtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47IC8vIGRhdGFzIHRvIGJlIHBhc3NlZCB3aGVuIHRhYmxlIHJvdyBhY3RpdmUgYnV0dG9uIGlzIGNsaWNrZWRcbiAgQE91dHB1dCgpIGNvbHVtblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7IHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZywgZGF0YTogYW55W10gfT4oKTtcbiAgQE91dHB1dCgpIHJlbW92ZUNvbHVtbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyB1bmlxdWVJZGVudGlmaWVyOiBzdHJpbmcsIGRhdGE6IGFueVtdIH0+KCk7XG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGVkVmFsdWVzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTsgLy8gdG8gcGFzcyB0aGUgc2VsZWN0ZWQgY2hlY2tib3ggdmFsdWVzXG4gIEBPdXRwdXQoKSBmaWxlRW1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpOyAvLyB0byBwYXNzIHRoZSBmaWxlXG4gIEBPdXRwdXQoKSBOeHRUYWJsZVBhcmFtc0VtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT47IC8vU0tTMTdBUFIyNSB0byBwYXNzIHRoZSB0YWJsZVBhcmFtcyBpbmZvcm1hdGlvblxuICBAT3V0cHV0KCkgTnh0VGFibGVGaWx0ZXJFbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+OyAvL1NLUzNNQVkyNSBmaWx0ZXIgY29sdW1uIHZhbCBnZXQgZW1pdCBcbiAgQE91dHB1dCgpIGhhZGxlRHJvcERvd25EZXBlbmRlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgTnh0VGFibGVFbWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAvLyB7XG4gIC8vICAgXCJwYWdpbmF0aW9uXCI6IHsgICAgICAgLy8gNFxuICAvLyAgICAgICBcInBhZ2VTaXplXCI6IDEwLFxuICAvLyAgICAgICBcInBhZ2VJbmRleFwiOiAxMFxuICAvLyAgIH0sXG4gIC8vICAgXCJ0YWJsZVNlYXJjaFwiOiB7ICAgICAgLy8gMVxuICAvLyAgICAgICBcImZpZWxkc1wiIDogW1xuICAvLyAgICAgICAgICAgXCJsaWdodFR5cGVcIixcbiAgLy8gICAgICAgICAgIFwic3lzdGVtXCIsXG4gIC8vICAgICAgICAgICBcInN0YXR1c1wiXG4gIC8vICAgICAgIF0gLFxuICAvLyAgICAgICBcInZhbHVlXCI6ICdyLTAwMScgXG4gIC8vICAgfSwgIFxuICAvLyAgIFwic2VhcmNoRmlsdGVyRGF0YVwiOiB7ICAvLyAyXG4gIC8vICAgICAgIFwibGlnaHRUeXBlXCI6IFtcbiAgLy8gICAgICAgICAgIFwiQUFcIixcbiAgLy8gICAgICAgICAgIFwiQkJcIiBcbiAgLy8gICAgICAgXVxuICAvLyAgIH0sXG4gIC8vICAgXCJzb3J0XCI6IHsgICAgICAgICAgICAgIC8vIDNcbiAgLy8gICAgICAgXCJjb2x1bW5cIjogXCJhc3NldENvZGVcIixcbiAgLy8gICAgICAgXCJkaXJlY3Rpb25cIjogXCJhc2NcIlxuICAvLyAgIH1cbiAgLy8gfVxuXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydCE6IE1hdFNvcnQ7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlQ29udGFpbmVyJykgdGFibGVDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBzZWxlY3Rpb246IGFueTsgLy8gdG8gZ2V0IHRoZSBzZWxlY3RlZCByb3dcbiAgc3RpY2t5Q29uZGl0aW9uITogbnVtYmVyOyAvLyB0byBnZXQgdGhlIHN0aWNreSBjb2x1bW4gaW5kZXhcbiAgc2VhcmNoRmlsdGVyID0gZmFsc2U7IC8vIHRvIGdldCB0aGUgc2VhcmNoIGZpbHRlclxuICBmaWx0ZXJBcnJheTogQXJyYXk8YW55PiA9IFtdOyAvLyB0byBnZXQgdGhlIGZpbHRlciBhcnJheVxuICBzZWxlY3RlZEZpbHRlcjogYW55OyAvLyB0byBnZXQgdGhlIHNlbGVjdGVkIGZpbHRlclxuICBwYWdlU2l6ZU9wdGlvbnM6IEFycmF5PGFueT4gIC8vIGZvciBwYWdpbmF0aW9uIGdldCB0aGUgcGFnZSBzaXplIG9wdGlvbnNcbiAgZGF0YVNvdXJjZTogYW55OyAgLy8gZm9yIHRhYmxlIGRhdGEgc291cmNlXG4gIHRvdGFsQ291bnQhOiBudW1iZXIgLy8gY291bnQgb2YgdG90YWwgcmVjb3Jkc1xuICBzZWFyY2hCb3hWYWx1ZTogYW55OyAvLyB0byBnZXQgdGhlIHNlYXJjaCBib3ggdmFsdWVcbiAgcHJldlNlYXJjaDogYW55OyAvLyB0byBnZXQgdGhlIHByZXZpb3VzIHNlYXJjaCB2YWx1ZVxuICBhY3RpdmVDb2x1bW46IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyBUcmFjayB0aGUgYWN0aXZlIGNvbHVtblxuICBpc1Njcm9sbGVkID0gZmFsc2U7IC8vIEJvb2xlYW4gZmxhZyB0byB0cmFjayBzY3JvbGwgc3RhdGVcbiAgaXNTaGFkb3dIaWRkZW4gPSBmYWxzZTsgLy8gQm9vbGVhbiBmbGFnIHRvIHRyYWNrIHNoYWRvdyBzdGF0ZVxuICBjdXJyZW50U29ydENvbHVtbjogc3RyaW5nID0gJyc7IC8vIHRvIGdldCB0aGUgY3VycmVudCBzb3J0IGNvbHVtblxuICBjdXJyZW50U29ydERpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgfCAnbm9uZScgPSAnbm9uZSc7IC8vIHRvIGdldCB0aGUgY3VycmVudCBzb3J0IGRpcmVjdGlvblxuICBvcmlnaW5hbERhdGE6IGFueTsgLy8gU3RvcmUgb3JpZ2luYWwgZGF0YSBmb3Igc29ydGluZ1xuICBob3ZlcmVkQ29sdW1uOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gVHJhY2sgdGhlIGhvdmVyZWQgY29sdW1uXG4gIHNlYXJjaFRleHQ6IGFueTsgLy8gdG8gZ2V0IHRoZSBzZWFyY2ggdGV4dFxuICBtdWx0aXBsZUZpbHRlckFycmF5OiBhbnk7IC8vIHRvIGdldCB0aGUgbXVsdGlwbGUgZmlsdGVyIGFycmF5XG4gIHRhYmxlRmlsdGVyQXJyYXk6IGFueTsgLy8gdG8gZ2V0IHRoZSB0YWJsZSBmaWx0ZXIgYXJyYXlcbiAgZmlsdGVyRGF0YUFycmF5OiBhbnkgPSB7fSAvLyB0byBnZXQgdGhlIGZpbHRlciBkYXRhIGFycmF5XG4gIGlzUmVzaXplZDogYm9vbGVhbiA9IGZhbHNlOyAvLyBmb3IgdGFibGUgY29sdW1uIHJlc2l6ZVxuICBzRmlsdGVyRGF0YTogYW55OyAvLyB0byBnZXQgdGhlIHNlYXJjaCBmaWx0ZXIgZGF0YVxuICBjdXJyZW50Q29sdW1uczogQXJyYXk8YW55PiA9IFtdO1xuICBpbmxpbmVFbGVtZW50OiBhbnkgLy8gZm9yIGFkZCBhIG5ldyByb3cgb24gdGFibGVcbiAgcGFnZVNpemU6IGFueSAgLy8gZm9yIHBhZ2luYXRpb24gZ2V0IHRoZSBwYWdlIHNpemVcbiAgcGFnZUluZGV4OiBhbnkgLy8gZm9yIHBhZ2luYXRpb24gZ2V0IHRoZSBwYWdlIGluZGV4XG4gIHRvdGFsUmVjb3JkczogbnVtYmVyOyAvLyBmb3IgcGFnaW5hdGlvbiBnZXQgdGhlIHRvdGFsIHJlY29yZHNcbiAgY29uZmlnUGFnaW5hdGlvbjogYm9vbGVhbiA9IGZhbHNlOyAvLyBmbGFnIGZvciBjb25maWcgcGFnaW5hdGlvblxuICBkZWxldGVEYXRhOiBhbnk7IC8vIHRvIGdldCB0aGUgZGVsZXRlIHJvd1xuICBkZWxldGVNb2RhbCA9IGZhbHNlOyAvLyBmb3IgY29uZm9ybWF0aW9uIHBvcHVwXG4gIGRyb3Bkb3duQWN0aW9uQnV0dG9uOiBhbnk7IC8vIGZvciBhY3Rpb24gY29sdW1uIGRyb3Bkb3duIGJ1dHRvblxuICBjdXJyZW50T3BlbkluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDsgLy8gdHJhY2sgdGhlIGN1cnJlbnQgb3BlbiBhY3Rpb24gZHJvcGRvd24gaWNvbiBpbmRleFxuICBjbGlja0xpc3RlbmVyOiBhbnk7IC8vIGFjdGlvbiBjb2x1bW4gZHJvcGRvd24gYnV0dG9uIGNsaWNrIGxpc3RlbmVyIGZvciBjbG9zZSBhIGRyb3Bkb3duIGJ1dHRvblxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjsgIC8vIGZvciB0YWJsZSBkYXRhIHN1YnNjcmlwdGlvblxuICBkZWxldGVJbmRleDogbnVtYmVyOyAvLyB0byBnZXQgdGhlIGRlbGV0ZSBpbmRleFxuICBzaG93UG9wb3ZlciA9IHRydWU7XG4gIHN1bW1hcnlWYWx1ZXM6IHsgW2xhYmVsOiBzdHJpbmddOiBudW1iZXIgfSA9IHt9OyAvLyBTS1MyME1BUjI1IE9iamVjdCB0byBzdG9yZSBzdW1tYXJ5IHJvdyB2YWx1ZXNcbiAgaXNTdW1tYXJ5Q29sdW1uOiBib29sZWFuID0gZmFsc2U7IC8vIFNLUzIwTUFSMjUgRmxhZyB0byBjaGVjayBpZiB0aGUgY29sdW1uIGlzIGluIHRoZSBkaXNwbHljb2x1bW5zIGFycmF5XG4gIGlzU3VtbWFyeVN0YXJ0Q29sdW1uOiBhbnlbXTtcbiAgaXNTdW1tYXJ5RW5kQ29sdW1uOiBhbnlbXTtcbiAgZmlsdGVyQm94RGF0YTogYW55O1xuICBmaWx0ZXJUYWJsZU5vczogYW55O1xuICBzZWxlY3RlZFZpZXc6IGFueSA9ICcnOyAgICAgICAgIC8vIFNlbGVjdGVkIGxpc3QgdmlldyBuYW1lXG4gIGlzRHJvcGRvd25PcGVuOiBib29sZWFuID0gZmFsc2U7IC8vIFRyYWNrcyBkcm9wZG93biB2aXNpYmlsaXR5XG4gIGN1cnJlbnRWaWV3RmlsdGVyOiBhbnlcbiAgaXNGdWxsVGFibGVTdW1tYXJ5Um93OiBib29sZWFuID0gZmFsc2U7IC8vIFNLUzEzSlVOMjUgRmxhZyB0byBjaGVjayBpZiB0aGUgdGFibGUgaGFzIGZ1bGwgc3VtbWFyeSByb3dcbiAgaXNJbWFnZUhvdmVyID0gZmFsc2U7XG4gIGlzSW1hZ2VFZGl0OiBib29sZWFuID0gZmFsc2U7XG4gIHNlbGVjdGVkSW1hZ2VFbGVtZW50OiBhbnk7XG4gIHByaXZhdGUgcXVlc3Rpb25zQ2FjaGU6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XG4gIGlzUmVzaXppbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjdXJyZW50Q29sdW1uOiBhbnkgPSBudWxsO1xuICBwcml2YXRlIHN0YXJ0WCA9IDA7XG4gIHByaXZhdGUgc3RhcnRXaWR0aCA9IDA7XG4gIHByaXZhdGUgcmVzaXplRnJhbWVJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBUcmFuc2xhdGlvblNlcnZpY2UscHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSwgcHJpdmF0ZSBjaGFuZ2VTZXJ2aWNlOiBDaGFuZ2VTZXJ2aWNlKSB7IH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ2RhdGEnXSB8fCBjaGFuZ2VzWydjb2x1bW5zJ10pIHtcbiAgICAgIHRoaXMucXVlc3Rpb25zQ2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gICAgdGhpcy5kYXRhU291cmNlID0geyBkYXRhOiBbXSB9OyAvLyBvciB1c2UgYSBwcm9wZXIgZGF0YSBzdHJ1Y3R1cmVcbiAgICB0aGlzLmN1cnJlbnRDb2x1bW5zID0gdGhpcy5jb2x1bW5zXG4gICAgaWYgKHRoaXMuZnJvbSA9PT0gJ2Zvcm1CdWlsZGVyJykge1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5xdWVzdGlvbj8uaW5wdXQgPyB0aGlzLnF1ZXN0aW9uPy5pbnB1dCA6IHRoaXMuZGF0YSA/IHRoaXMuZGF0YSA6IFtdXG4gICAgICBsZXQgcGFyc2VkTWV0YSA9IHR5cGVvZiB0aGlzLnF1ZXN0aW9uPy5bJ2ZpZWxkc01ldGEnXSA9PT0gJ29iamVjdCcgPyB0aGlzLnF1ZXN0aW9uPy5bJ2ZpZWxkc01ldGEnXSA6IHRoaXMucXVlc3Rpb24/LlsnZmllbGRzTWV0YSddICA/IEpTT04ucGFyc2UodGhpcy5xdWVzdGlvbj8uWydmaWVsZHNNZXRhJ10pIDogW107XG4gICAgICBpZiAoIHBhcnNlZE1ldGEgPT09IG51bGwgfHwgIHBhcnNlZE1ldGEgPT09IHVuZGVmaW5lZCB8fCAhQXJyYXkuaXNBcnJheShwYXJzZWRNZXRhKSB8fCBwYXJzZWRNZXRhPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gY29uc29sZS53YXJuKCdObyB2YWxpZCBtZXRhZGF0YSBwcm92aWRlZCcpOyBcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gU0tTMjJKVUwyNSBUcmFuc2Zvcm0gdGhlIHBhcnNlZE1ldGFcbiAgICAgIGNvbnN0IHVwZGF0ZWRNZXRhID0gcGFyc2VkTWV0YS5tYXAoaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7IC4uLml0ZW0gfTtcbiAgICAgICAgLy8gUmVuYW1lIGFwaU5hbWUgdG8gZmllbGROYW1lXG4gICAgICAgIGlmIChuZXdJdGVtLmFwaU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5ld0l0ZW0uZmllbGROYW1lID0gbmV3SXRlbS5hcGlOYW1lO1xuICAgICAgICAgIGRlbGV0ZSBuZXdJdGVtLmFwaU5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU0tTMjJKVUwyNSBSZW5hbWUgZmxkVHlwZSB0byB0eXBlIGFuZCBsb3dlcmNhc2UgaXRcbiAgICAgICAgaWYgKG5ld0l0ZW0uZmxkVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbmV3SXRlbS50eXBlID0gbmV3SXRlbS5mbGRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgZGVsZXRlIG5ld0l0ZW0uZmxkVHlwZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3SXRlbTtcbiAgICAgIH0pO1xuICAgICAgcGFyc2VkTWV0YSA9IHVwZGF0ZWRNZXRhO1xuICAgICAgdGhpcy5jdXJyZW50Q29sdW1ucyA9IHVwZGF0ZWRNZXRhXG4gICAgICBpZiAodGhpcy50YWJsZUNvbmZpZykge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLnRhYmxlQ29uZmlnO1xuICAgICAgICB0aGlzLmlzTm9zSW5kaWNhdG9yID0gY29uZmlnPy5pc05vc0luZGljYXRvciAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWRkSW5saW5lUmVjb3JkID0gY29uZmlnLmFkZElubGluZVJlY29yZCAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNQYWdpbmF0aW9uID0gY29uZmlnLmlzUGFnaW5hdGlvbiAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9uID0gY29uZmlnLmFjdGlvbkJ1dHRvbiAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNEZWxldGVSb3cgPSBjb25maWcuaXNEZWxldGVSb3cgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmlzRWRpdFJvdyA9IGNvbmZpZy5pc0VkaXRSb3cgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLnNlYXJjaEJhciA9IGNvbmZpZy5zZWFyY2hCYXIgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQnV0dG9ucyA9IGNvbmZpZy5pc0J1dHRvbnMgIT09IGZhbHNlOyAvL3N1bW1hcnlDb2x1bW5cbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IGNvbmZpZy5pdGVtc1BlclBhZ2UgfHwgNTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdW1tYXJ5Q29sdW1ucyA9IHBhcnNlZE1ldGFcbiAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnN1bW1hcnlDb2x1bW4gPT09IHRydWUpXG4gICAgICAgIC5tYXAoKHsgYXBpTmFtZSwgZmxkVHlwZSwgLi4ucmVzdCB9KSA9PiAoe1xuICAgICAgICAgIGZpZWxkTmFtZTogYXBpTmFtZSxcbiAgICAgICAgICB0eXBlOiBmbGRUeXBlLFxuICAgICAgICAgIC4uLnJlc3RcbiAgICAgICAgfSkpO1xuICAgICAgdGhpcy5zdW1tYXJ5Um93cyA9IHBhcnNlZE1ldGFcbiAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnN1bW1hcnlSb3cgPT09IHRydWUpXG4gICAgICAgIC5tYXAoKHsgYXBpTmFtZSwgZmxkVHlwZSwgLi4ucmVzdCB9KSA9PiAoe1xuICAgICAgICAgIGZpZWxkTmFtZTogYXBpTmFtZSxcbiAgICAgICAgICB0eXBlOiBmbGRUeXBlLFxuICAgICAgICAgIC4uLnJlc3RcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICAvLyBFbnN1cmUgYHRoaXMuZGF0YWAgaXMgYW4gYXJyYXlcbiAgICBpZiAoIXRoaXMuZGF0YSB8fCAhQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0RhdGEgaXMgbm90IGluaXRpYWxpemVkIG9yIGlzIG5vdCBhbiBhcnJheScpO1xuICAgICAgdGhpcy5kYXRhID0gW107ICAvLyBJbml0aWFsaXplIGFzIGFuIGVtcHR5IGFycmF5IGlmIGl0J3Mgbm90IHZhbGlkXG4gICAgfVxuICAgIC8vIEVuc3VyZSBgdGhpcy5kYXRhU291cmNlLmRhdGFgIGlzIGluaXRpYWxpemVkXG4gICAgLy9TS1MxNUZFQjI1IEluaXRpYWxpemUgdGhpcyBpbiB5b3VyIGRhdGEgZmV0Y2ggbWV0aG9kXG4gICAgaWYgKGNoYW5nZXNbJ2RhdGEnXSkge1xuICAgICAgdGhpcy5vcmlnaW5hbERhdGEgPSB0aGlzLmRhdGEubWFwKHJvdyA9PiB0aGlzLmZsYXR0ZW5Sb3cocm93KSk7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMub3JpZ2luYWxEYXRhO1xuICAgICAgdGhpcy5jb21wdXRlU3VtbWFyeVZhbHVlcygnb25DaGFuZ2UnKTsgLy8gSWYgeW91IGhhdmUgc3VtbWFyeSByb3dzXG4gICAgfVxuICAgIHRoaXMub3JpZ2luYWxEYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgdGhpcy5zRmlsdGVyRGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5vcmlnaW5hbERhdGE7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMucGFnaW5hdGlvbj8ucGFnZVNpemUgPyB0aGlzLnBhZ2luYXRpb25bJ3BhZ2VTaXplJ10gOiB0aGlzLnBhZ2VTaXplIHx8IDEwO1xuICAgIHRoaXMucGFnZUluZGV4ID0gdGhpcy5wYWdpbmF0aW9uPy5wYWdlSW5kZXggPyB0aGlzLnBhZ2luYXRpb25bJ3BhZ2VJbmRleCddIDogdGhpcy5wYWdlSW5kZXggfHwgMTtcbiAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IHRoaXMucGFnaW5hdGlvbj8udG90YWxSZWNvcmRzID8gdGhpcy5wYWdpbmF0aW9uWyd0b3RhbFJlY29yZHMnXSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IHRoaXMucGFnaW5hdGlvbj8ucGFnZVNpemVPcHRpb25zID8gdGhpcy5wYWdpbmF0aW9uWydwYWdlU2l6ZU9wdGlvbnMnXSA6IFsnNScsICcxMCcsICcyNScsICc1MCcsICcxMDAnLCAnMjAwJ107XG4gICAgdGhpcy5jb25maWdQYWdpbmF0aW9uID0gISEodGhpcy5wYWdpbmF0aW9uICYmIE9iamVjdC5rZXlzKHRoaXMucGFnaW5hdGlvbikubGVuZ3RoID4gMCk7XG4gICAgdGhpcy5pc1BhZ2luYXRpb24gPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzUGFnaW5hdGlvbiA9PT0gdHJ1ZSA/IHRoaXMuaXNQYWdpbmF0aW9uID0gdHJ1ZSA6IHRoaXMuaXNQYWdpbmF0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5pc05vc0luZGljYXRvciA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaXNOb3NJbmRpY2F0b3IgPT09IHRydWUgPyB0aGlzLmlzTm9zSW5kaWNhdG9yID0gdHJ1ZSA6IHRoaXMuaXNOb3NJbmRpY2F0b3IgPSBmYWxzZTtcbiAgICB0aGlzLmlzRWRpdGFibGUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzRWRpdGFibGUgPT09IGZhbHNlID8gdGhpcy5pc0VkaXRhYmxlID0gZmFsc2UgOiB0aGlzLmlzRWRpdGFibGUgPSB0cnVlXG5cblxuICAgIC8vIFNLUzIwTUFSMjUgQ2hlY2sgaWYgdGhlIGRpc3BseWNvbHVtbidzIGhhdmUgYSBzdW1tYXJ5IGNvbHVtblxuICAgIGlmICh0aGlzLnN1bW1hcnlSb3dzICYmIHRoaXMuc3VtbWFyeVJvd3M/Lmxlbmd0aCA+IDAgJiYgdGhpcy5jdXJyZW50Q29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmlzRnVsbFRhYmxlU3VtbWFyeVJvdyA9IHRoaXMuc3VtbWFyeVJvd3NbMF0udHlwZSA9PT0gJ2Z1bGxSb3cnIHx8ICB0aGlzLnN1bW1hcnlSb3dzWzBdLnR5cGUgPT09ICdmdWxscm93JyA/IHRydWUgOiBmYWxzZTtcbiAgICAgIHRoaXMuaXNTdW1tYXJ5Q29sdW1uID0gdGhpcy5jdXJyZW50Q29sdW1ucy5zb21lKGVsZW1lbnQgPT4gZWxlbWVudCA9PT0gdGhpcy5zdW1tYXJ5Um93c1swXS5jb2x1bW4pO1xuICAgICAgaWYgKHRoaXMuaXNTdW1tYXJ5Q29sdW1uICYmICF0aGlzLmlzRnVsbFRhYmxlU3VtbWFyeVJvdykge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY3VycmVudENvbHVtbnMuaW5kZXhPZih0aGlzLnN1bW1hcnlSb3dzWzBdLmNvbHVtbik7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICB0aGlzLmlzU3VtbWFyeVN0YXJ0Q29sdW1uID0gdGhpcy5jdXJyZW50Q29sdW1ucy5zbGljZSgwLCBpbmRleCAtIDEpO1xuICAgICAgICAgIHRoaXMuaXNTdW1tYXJ5RW5kQ29sdW1uID0gdGhpcy5jdXJyZW50Q29sdW1ucy5zbGljZShpbmRleCArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHRoaXMuaW5saW5lRWxlbWVudCA9IE9iamVjdC5mcm9tRW50cmllcyh0aGlzLmN1cnJlbnRDb2x1bW5zLm1hcChrZXkgPT4gW2tleSwgXCJcIl0pKTtcblxuICAgIHRoaXMuZHJvcGRvd25BY3Rpb25CdXR0b24gPSAodGhpcy5hY3Rpb25CdXR0b25BcnJheT8uYnV0dG9uQXJyYXkgJiYgdGhpcy5hY3Rpb25CdXR0b25BcnJheT8uYnV0dG9uQXJyYXk/Lmxlbmd0aCA+IDApID8gdGhpcy5hY3Rpb25CdXR0b25BcnJheT8uYnV0dG9uQXJyYXk/LnNsaWNlKHRoaXMuYWN0aW9uQnV0dG9uQXJyYXk/LnNpemUpIDogW107XG4gICAgXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgICB9LCAxMDApXG4gICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy50b3RhbFJlY29yZHMgfHwgdGhpcy5kYXRhPy5sZW5ndGhcbiAgICB0aGlzLmZpbHRlclRhYmxlTm9zID0gdGhpcy50b3RhbFJlY29yZHMgfHwgdGhpcy5kYXRhPy5sZW5ndGhcbiAgICBpZiAodGhpcy5zdGlja3lDb2x1bW4gPT09IHRydWUgJiYgdGhpcy5jdXJyZW50Q29sdW1ucykge1xuICAgICAgdGhpcy5zdGlja3lDb25kaXRpb24gPSB0aGlzLmN1cnJlbnRDb2x1bW5zPy5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RpY2t5Q29uZGl0aW9uID0gdGhpcy5jdXJyZW50Q29sdW1ucz8ubGVuZ3RoICsgMTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VhcmNoQ29uZmlncz8uc2VhcmNoRmlsdGVyVmFsKSB7XG4gICAgICB0aGlzLnNlYXJjaEJveFZhbHVlID0gdGhpcy5zZWFyY2hDb25maWdzPy5zZWFyY2hGaWx0ZXJWYWw7IC8vIFNob3cgdmFsdWUgaW4gdGhlIHNlYXJjaCBib3hcbiAgICAgIHRoaXMucHJldlNlYXJjaCA9IHRoaXMuc2VhcmNoQ29uZmlncz8uc2VhcmNoRmlsdGVyVmFsO1xuICAgIH1cbiAgICBpZih0aGlzLmN1cnJlbnRWaWV3RmlsdGVyID09PSB1bmRlZmluZWQgfHwgdGhpcy5jdXJyZW50Vmlld0ZpbHRlciA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5jdXJyZW50Vmlld0ZpbHRlciA9IHRoaXMubGlzdFZpZXdzICYmIHRoaXMubGlzdFZpZXdzLmxlbmd0aCA+IDAgPyB0aGlzLmxpc3RWaWV3c1swXSA6IG51bGw7XG4gICAgfVxuICAgIGlmKHRoaXMuY3VycmVudFZpZXdGaWx0ZXIgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmN1cnJlbnRWaWV3RmlsdGVyICE9PSBudWxsKXtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gdGhpcy5jdXJyZW50Vmlld0ZpbHRlci5maWx0ZXJOYW1lO1xuICAgICAgaWYodGhpcy5jdXJyZW50Vmlld0ZpbHRlci5pc0RlZmF1bHQgfHwgdGhpcy5jdXJyZW50Vmlld0ZpbHRlci5maWx0ZXJOYW1lID09PSBcIkFsbCBEYXRhXCIpe1xuICAgICAgICB0aGlzLmN1cnJlbnRDb2x1bW5zID0gdGhpcy5jb2x1bW5zXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5jdXJyZW50Vmlld0ZpbHRlcj8uY29sdW1ucyB8fCBbXTtcbiAgICAgICAgY29uc3QgdXBkYXRlQ29sdW1uID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgY29uc3QgbWF0Y2ggPSBjb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLm5hbWUgPT09IGNvbHVtbi5maWVsZE5hbWUpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICBpc0hpZGU6ICFtYXRjaCxcbiAgICAgICAgICAgIGZpbHRlcjogISFtYXRjaD8uZmlsdGVyYWJsZSxcbiAgICAgICAgICAgIHNvcnQ6ICEhbWF0Y2g/LnNvcnRhYmxlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY3VycmVudENvbHVtbnMgPSBbLi4udXBkYXRlQ29sdW1uXVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjdXJyZW50RmlsdGVyQ29sdW1ucyA9IHRoaXMuY3VycmVudENvbHVtbnM/LmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZpbHRlciA9PT0gdHJ1ZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKVxuICAgIGlmIChjdXJyZW50RmlsdGVyQ29sdW1ucz8ubGVuZ3RoID4gMCAmJiB0aGlzLmNvbmZpZ1BhZ2luYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXkgPSB7fTtcbiAgICAgIGNvbnN0IGZpbHRPYmpzOiBhbnkgPSB7fTtcbiAgICAgIGN1cnJlbnRGaWx0ZXJDb2x1bW5zLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXlbZWxlbWVudF0gPSBudWxsO1xuICAgICAgICBmaWx0T2Jqc1tlbGVtZW50XSA9IFtdO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmRhdGEuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgY3VycmVudEZpbHRlckNvbHVtbnMuZm9yRWFjaCgoa2V5OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0T2JqVmFsdWUoZWxlbWVudCwga2V5KTsgIC8vIDwtIGdldCBuZXN0ZWQgdmFsdWVcbiAgICBcbiAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZmlsdE9ianNba2V5XS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheVtrZXldID0gbmV3IFNldChmaWx0T2Jqc1trZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXkgPSB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubXVsdGlwbGVGaWx0ZXJBcnJheSA9IHRoaXMubXVsdGlwbGVGaWx0ZXI7XG4gICAgfVxuICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBmaWx0ZXJlZCBhcnJheSB0aGF0IGV4Y2x1ZGVzIGFueSBjb2x1bW4gd2l0aCAnWydcbiAgICBjb25zdCB0ZW1wRmlsdGVyQ29sdW1ucyA9IHRoaXMuY3VycmVudENvbHVtbnM/LmZpbHRlcihjb2wgPT4gIWNvbC5maWVsZE5hbWUuaW5jbHVkZXMoJ1snKSk7XG4gICAgXG4gICAgaWYgKHRlbXBGaWx0ZXJDb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaWx0T2JqczogYW55ID0ge307XG4gICAgXG4gICAgICAvLyBTS1MyNk1BWTI1IEluaXRpYWxpemUgc2V0cyB0byBjb2xsZWN0IHVuaXF1ZSB2YWx1ZXMgZm9yIGVhY2ggY29sdW1uXG4gICAgICB0ZW1wRmlsdGVyQ29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuICAgICAgICBmaWx0T2Jqc1tjb2wuZmllbGROYW1lXSA9IG5ldyBTZXQoKTtcbiAgICAgIH0pO1xuICAgIFxuICAgICAgLy8gU0tTMjZNQVkyNSBDb2xsZWN0IHVuaXF1ZSB2YWx1ZXMgZnJvbSB0YWJsZUZpbHRlckRhdGFcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJEYXRhPy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgdGVtcEZpbHRlckNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0T2JqVmFsdWUoZWxlbWVudCwgY29sLmZpZWxkTmFtZSk7XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZpbHRPYmpzW2NvbC5maWVsZE5hbWVdLmFkZCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIFxuICAgICAgLy8gU0tTMjZNQVkyNSBBcHBlbmQgXCJ2YWx1ZVwiIHByb3BlcnR5IHRvIGVhY2ggY29sdW1uIG9iamVjdCB3aXRoIHRoZSBhcnJheSBvZiB1bmlxdWUgdmFsdWVzXG4gICAgICB0aGlzLnRhYmxlRmlsdGVyQXJyYXkgPSBbLi4udGVtcEZpbHRlckNvbHVtbnMubWFwKChjb2w6IGFueSkgPT4gKHtcbiAgICAgICAgLi4uY29sLFxuICAgICAgICB2YWx1ZTogQXJyYXkuZnJvbShmaWx0T2Jqc1tjb2wuZmllbGROYW1lXSlcbiAgICAgIH0pKV07XG4gICAgfSAgICBcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRhYmxlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHRhYmxlQm9keSA9IHRoaXMudGFibGVDb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcudGFibGUtYm9keScpO1xuICAgICAgICBpZiAodGFibGVCb2R5ICYmIHRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICAgICAgdGhpcy5pc1NoYWRvd0hpZGRlbiA9ICEodGFibGVCb2R5LnNjcm9sbEhlaWdodCA8IDQ1MClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDE1MDApOyAvLyBXYWl0cyAxMDBtcyBmb3IgcmVuZGVyaW5nXG4gICAgLy8gU0tTMjBNQVIyNSBJbml0aWFsaXplIHN1bW1hcnlWYWx1ZXMgZm9yIGlucHV0IHJvd3MgYW5kIGNvbXB1dGUgdmFsdWVzXG4gICAgaWYgKGNoYW5nZXNbJ3N1bW1hcnlSb3dzJ10gfHwgY2hhbmdlc1snc3VtbWFyeUNvbHVtbnMnXSB8fCBjaGFuZ2VzWydkYXRhJ10pIHtcbiAgICAgIHRoaXMuY29tcHV0ZVN1bW1hcnlDb2x1bW5zKCk7IC8vIENvbXB1dGUgcGVyLXJvdyBzdW1tYXJ5IGNvbHVtbnMgZmlyc3RcbiAgICAgIHRoaXMuc3VtbWFyeVJvd3M/LmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgaWYgKHJvdy50eXBlID09PSAnaW5wdXQnICYmIHRoaXMuc3VtbWFyeVZhbHVlc1tyb3cuZmllbGROYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdID0gMDsgLy8gRGVmYXVsdCB0byAwIGZvciBpbnB1dHNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmNvbXB1dGVTdW1tYXJ5VmFsdWVzKCdvbkNoYW5nZScpO1xuICAgIH1cbiAgICB0aGlzLnNlYXJjaENvbmZpZ3MgJiYgdGhpcy5zZWFyY2hCb3hWYWx1ZSA/IHRoaXMuZW1wdHlTZWFyY2godGhpcy5zZWFyY2hCb3hWYWx1ZSkgOiB0aGlzLmFwcGx5RmlsdGVyKHRoaXMudGFibGVQYXJhbXM/LnRhYmxlU2VhcmNoLCdvbkNoYW5nZScpIC8vIFNLUzE3QVBSMjUgdXBkYXRlIHNlYXJjaCBib3ggdmFsdWVcbiAgICBpZiAoY2hhbmdlc1snbGFuZ3VhZ2VDb2RlJ10pIHtcbiAgICAgIGlmICh0aGlzLmxhbmd1YWdlQ29kZSkge1xuICAgICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5zZXRMYW5ndWFnZSh0aGlzLmxhbmd1YWdlQ29kZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odHJ1ZSwgW10pO1xuICAgIGlmICghdGhpcy50b3RhbFJlY29yZHMgJiYgdGhpcy5kYXRhICYmIHRoaXMuaXNQYWdpbmF0aW9uICYmICFjaGFuZ2VzWyd0YWJsZVBhcmFtcyddKSB7XG4gICAgICBjb25zdCBwYWdlSW5kZXggPSBOdW1iZXIodGhpcy5wYWdlSW5kZXgpIHx8IDA7XG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IE51bWJlcih0aGlzLnBhZ2VTaXplKSB8fCAxMDtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gKHBhZ2VJbmRleCAtIDEpICogcGFnZVNpemU7XG4gICAgICBjb25zdCBlbmQgPSBzdGFydCArIHBhZ2VTaXplO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGE/LnNsaWNlKHN0YXJ0LCBlbmQpIHx8IFtdO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YVxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVNvdXJjZSA9IHsgZGF0YTogW10gfTsgLy8gb3IgdXNlIGEgcHJvcGVyIGRhdGEgc3RydWN0dXJlXG4gICAgdGhpcy5jdXJyZW50Q29sdW1ucyA9IHRoaXMuY29sdW1uc1xuICAgIC8vIFNLUzEzTUFSMjUgZ2V0IGRhdGEgZnJvbSBxdWVzdGlvbiBpZiBmcm9tIGZvcm1CdWlsZGVyXG4gICAgaWYgKHRoaXMuZnJvbSA9PT0gJ2Zvcm1CdWlsZGVyJykge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY3VzdG9tQ2hhbmdlJC5zdWJzY3JpYmUoXG4gICAgICAgIChjaGFuZ2VWYWx1ZSkgPT4ge1xuICAgICAgICAgIGlmIChjaGFuZ2VWYWx1ZSA9PSAnZGF0YUJpbmQnKSB7XG4gICAgICAgICAgICB0aGlzLm5nT25DaGFuZ2VzKHt9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICB0aGlzLmRhdGEgPSB0aGlzLnF1ZXN0aW9uPy5pbnB1dCA/IHRoaXMucXVlc3Rpb24/LmlucHV0IDogdGhpcy5kYXRhID8gdGhpcy5kYXRhIDogW11cbiAgICAgIGxldCBwYXJzZWRNZXRhID0gdHlwZW9mIHRoaXMucXVlc3Rpb24/LlsnZmllbGRzTWV0YSddID09PSAnb2JqZWN0JyA/IHRoaXMucXVlc3Rpb24/LlsnZmllbGRzTWV0YSddIDogdGhpcy5xdWVzdGlvbj8uWydmaWVsZHNNZXRhJ10gPyBKU09OLnBhcnNlKHRoaXMucXVlc3Rpb24/LlsnZmllbGRzTWV0YSddKSA6IFtdO1xuICAgICAgaWYgKCBwYXJzZWRNZXRhID09PSBudWxsIHx8ICBwYXJzZWRNZXRhID09PSB1bmRlZmluZWQgfHwgIUFycmF5LmlzQXJyYXkocGFyc2VkTWV0YSkgfHwgcGFyc2VkTWV0YT8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIGNvbnNvbGUud2FybignTm8gdmFsaWQgbWV0YWRhdGEgcHJvdmlkZWQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gU0tTMjJKVUwyNSBUcmFuc2Zvcm0gdGhlIHBhcnNlZE1ldGFcbiAgICAgIGNvbnN0IHVwZGF0ZWRNZXRhID0gcGFyc2VkTWV0YS5tYXAoaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7IC4uLml0ZW0gfTtcbiAgICAgICAgLy8gUmVuYW1lIGFwaU5hbWUgdG8gZmllbGROYW1lXG4gICAgICAgIGlmIChuZXdJdGVtLmFwaU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG5ld0l0ZW0uZmllbGROYW1lID0gbmV3SXRlbS5hcGlOYW1lO1xuICAgICAgICAgIGRlbGV0ZSBuZXdJdGVtLmFwaU5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU0tTMjJKVUwyNSBSZW5hbWUgZmxkVHlwZSB0byB0eXBlIGFuZCBsb3dlcmNhc2UgaXRcbiAgICAgICAgaWYgKG5ld0l0ZW0uZmxkVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbmV3SXRlbS50eXBlID0gbmV3SXRlbS5mbGRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgZGVsZXRlIG5ld0l0ZW0uZmxkVHlwZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3SXRlbTtcbiAgICAgIH0pO1xuICAgICAgcGFyc2VkTWV0YSA9IHVwZGF0ZWRNZXRhO1xuICAgICAgdGhpcy5jdXJyZW50Q29sdW1ucyA9IHVwZGF0ZWRNZXRhXG4gICAgICBpZiAodGhpcy50YWJsZUNvbmZpZykge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLnRhYmxlQ29uZmlnO1xuICAgICAgICB0aGlzLmlzTm9zSW5kaWNhdG9yID0gY29uZmlnPy5pc05vc0luZGljYXRvciAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWRkSW5saW5lUmVjb3JkID0gY29uZmlnLmFkZElubGluZVJlY29yZCAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNQYWdpbmF0aW9uID0gY29uZmlnLmlzUGFnaW5hdGlvbiAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9uID0gY29uZmlnLmFjdGlvbkJ1dHRvbiAhPT0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNEZWxldGVSb3cgPSBjb25maWcuaXNEZWxldGVSb3cgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmlzRWRpdFJvdyA9IGNvbmZpZy5pc0VkaXRSb3cgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLnNlYXJjaEJhciA9IGNvbmZpZy5zZWFyY2hCYXIgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQnV0dG9ucyA9IGNvbmZpZy5pc0J1dHRvbnMgIT09IGZhbHNlO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gY29uZmlnLml0ZW1zUGVyUGFnZSB8fCA1O1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN1bW1hcnlDb2x1bW5zID0gcGFyc2VkTWV0YVxuICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uc3VtbWFyeUNvbHVtbiA9PT0gdHJ1ZSlcbiAgICAgICAgLm1hcCgoeyBhcGlOYW1lLCBmbGRUeXBlLCAuLi5yZXN0IH0pID0+ICh7XG4gICAgICAgICAgZmllbGROYW1lOiBhcGlOYW1lLFxuICAgICAgICAgIHR5cGU6IGZsZFR5cGUsXG4gICAgICAgICAgLi4ucmVzdFxuICAgICAgICB9KSk7XG4gICAgICB0aGlzLnN1bW1hcnlSb3dzID0gcGFyc2VkTWV0YVxuICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uc3VtbWFyeVJvdyA9PT0gdHJ1ZSlcbiAgICAgICAgLm1hcCgoeyBhcGlOYW1lLCBmbGRUeXBlLCAuLi5yZXN0IH0pID0+ICh7XG4gICAgICAgICAgZmllbGROYW1lOiBhcGlOYW1lLFxuICAgICAgICAgIHR5cGU6IGZsZFR5cGUsXG4gICAgICAgICAgLi4ucmVzdFxuICAgICAgICB9KSk7XG4gICAgICAgIGlmICh0aGlzLmFwaU1ldGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxldCBvcHRpb25zID0gW107XG4gICAgICAgICAgLy8gQVAtMjZNQVIyNSBFbnN1cmUgdGhhdCB0aGlzLmFwaU1ldGEgaXMgYWx3YXlzIGFuIG9iamVjdC4gIFxuICAgICAgICAgLy9BUC0yNk1BUjI1IElmIGl0J3MgYWxyZWFkeSBhbiBvYmplY3QsIGtlZXAgaXQgYXMgaXM7IG90aGVyd2lzZSwgcGFyc2UgaXQgZnJvbSBhIEpTT04gc3RyaW5nLlxuICAgICAgICAgIHRoaXMuYXBpTWV0YSA9IHR5cGVvZiB0aGlzLmFwaU1ldGEgPT09ICdvYmplY3QnID8gdGhpcy5hcGlNZXRhIDogSlNPTi5wYXJzZSh0aGlzLmFwaU1ldGEpO1xuICAgICAgICAgIGxldCBhcGlPYmo6IGFueSA9IHRoaXMuYXBpTWV0YTtcbiAgICAgICAgICBpZiAoYXBpT2JqICYmIGFwaU9iai5lbmRwb2ludCkge1xuICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5hcGlSZXNwb25zZShhcGlPYmouZW5kcG9pbnQpPy5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgIGxldCByZXNwb25zZXM7XG4gICAgICAgICAgICAgIGlmIChhcGlPYmoudmFyaWFibGUpIHtcbiAgICAgICAgICAgICAgICAvLyBWRCAyMk1heTI0IC0gaGFuZGxpbmcgbXVsdGlwbGUgY2hpbGQgb2JqZWN0c1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlcyA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoYXBpUmVzcG9uc2UsIGFwaU9iai52YXJpYWJsZSk7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgICAgICAvLyBIQSAxOUpBTjI0IFRvIGF2b2lkIHVuZGVmaW5lZCBlcnJvciBpbiBjb25zb2xlXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXNwb25zZXM/Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgcmVzcCA9IHJlc3BvbnNlc1tpXTtcbiAgICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChyZXNwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHJlc3VsdHM7XG4gICAgICAgICAgICAgIH0gZWxzZSB7ICAvLyBWRCAxOUpBTjI0IC0gaWYgcmVzcG9uc2UgaGFzIHZhbHVlKHdoaWNoIGlzIGFycmF5KSBvbmx5XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VzID0gYXBpUmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHJlc3BvbnNlcztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5tYXAoKG9iajogYW55KSA9PiAoeyAuLi5vYmosIGVkaXQ6IGZhbHNlIH0pKTtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhID0gb3B0aW9ucztcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVkQgTk9WMjMgLSBoYW5kbGUgdGhlIGRlcGVuZGVudCB1cGRhdGUgZm9yIGRyb3Bkb3duXG4gICAgICAgICAgbGV0IHNvdXJjZUlkID0gYXBpT2JqPy5zb3VyY2VRdWVzdGlvbklkO1xuICAgICAgICAgIGxldCBmaWVsZCA9IGFwaU9iaj8uZmllbGQ7ICAgICAgICAvLyBWRCAxM01BWTI0IC0gZHluYW1pYyBmaWVsZCBjaGFuZ2VzXG4gICAgICAgICAgaWYgKHNvdXJjZUlkKSB7XG4gICAgICAgICAgICAvLyAvLyBWRCAxME1heTI0IFN1YnNjcmliZSBmb3IgdGhlIGNoYW5nZXNcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5jaGFuZ2VTZXJ2aWNlLmNoYW5nZUFubm91bmNlZCQuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAoY2hhbmdlVmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2hhbmdlVmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQgJiYgY2hhbmdlVmFsdWUudmFsdWVPYmogIT09IHVuZGVmaW5lZCAmJiAoIEFycmF5LmlzQXJyYXkoYXBpT2JqLnNvdXJjZVF1ZXN0aW9uSWQpPyBhcGlPYmouc291cmNlUXVlc3Rpb25JZC5pbmNsdWRlcyhjaGFuZ2VWYWx1ZS5mcm9tUXVlc3Rpb25JZCkgOiBjaGFuZ2VWYWx1ZS5mcm9tUXVlc3Rpb25JZCA9PT0gYXBpT2JqLnNvdXJjZVF1ZXN0aW9uSWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLm1hcCgob2JqOiBhbnkpID0+ICh7IC4uLm9iaiwgZWRpdDogZmFsc2UgfSkpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsaWRJdGVtID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFGcm9tU291cnNlUXVlcyA9IGNoYW5nZVZhbHVlLnZhbHVlT2JqXG4gICAgICAgICAgICAgICAgICAgIGlmKCBjaGFuZ2VWYWx1ZS52YWx1ZU9iaiAmJiBhcGlPYmoudmFsdWVGaWVsZCl7XG4gICAgICAgICAgICAgICAgICAgICAgZGF0YUZyb21Tb3Vyc2VRdWVzID10aGlzLmRhdGFTZXJ2aWNlLmdldFZhbHVlKGNoYW5nZVZhbHVlLnZhbHVlT2JqLCBhcGlPYmoudmFsdWVGaWVsZClcbiAgICAgICAgICAgICAgICAgICAgfSBcbiAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShkYXRhRnJvbVNvdXJzZVF1ZXMpKXtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBbLi4uZGF0YUZyb21Tb3Vyc2VRdWVzXVxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uaW5wdXQgPSBkYXRhRnJvbVNvdXJzZVF1ZXNcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGEubGVuZ3RoID4gMCkgeyAgLy8gVkQgMTNNQVkyNCAtIGJpbmQgZHluYW1pYyBmaWVsZFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVkQgMjZKdW4yNCAtIHRvIGhhbmRsZSBtdWx0aXBsZSBvYmplY3RzXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmpFbGVtZW50VmFsdWUgPSB0aGlzLmRhdGFTZXJ2aWNlLmdldFZhbHVlKGVsZW1lbnQsIGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iakl0ZW1WYWx1ZSA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoZGF0YUZyb21Tb3Vyc2VRdWVzLCBmaWVsZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmpFbGVtZW50VmFsdWUgPT0gb2JqSXRlbVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkSXRlbSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZEl0ZW0gJiYgZGF0YUZyb21Tb3Vyc2VRdWVzKSB7IC8vVXBkYXRlIFBhZ2luYXRpb24gYmVmb3JlIGVtaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBbLi4udGhpcy5kYXRhLCBkYXRhRnJvbVNvdXJzZVF1ZXNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLnB1c2goZGF0YUZyb21Tb3Vyc2VRdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZihkYXRhRnJvbVNvdXJzZVF1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEucHVzaChkYXRhRnJvbVNvdXJzZVF1ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9yaWdpbmFsRGF0YSA9IFsuLi50aGlzLmRhdGFdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNGaWx0ZXJEYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5vcmlnaW5hbERhdGE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb24uaW5wdXQgPSB0aGlzLm9yaWdpbmFsRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgLy8gU0tTMjBNQVIyNSBNYW51YWxseSB0cmlnZ2VyIG5nT25DaGFuZ2VzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdPbkNoYW5nZXMoe30pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVNlcnZpY2UuY29uZmlybUNoYW5nZShjaGFuZ2VWYWx1ZS5mcm9tUXVlc3Rpb25JZCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlYXJjaEJhciA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuc2VhcmNoQmFyID09PSB0cnVlID8gdGhpcy5zZWFyY2hCYXIgPSB0cnVlIDogdGhpcy5zZWFyY2hCYXIgPSBmYWxzZTtcbiAgICB0aGlzLndpdGhDaGVja0JveCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMud2l0aENoZWNrQm94ID09PSBmYWxzZSA/IHRoaXMud2l0aENoZWNrQm94ID0gZmFsc2UgOiB0aGlzLndpdGhDaGVja0JveCA9IHRydWU7XG4gICAgdGhpcy5pc0VkaXRSb3cgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzRWRpdFJvdyA9PT0gZmFsc2UgPyB0aGlzLmlzRWRpdFJvdyA9IGZhbHNlIDogdGhpcy5pc0VkaXRSb3cgPSB0cnVlO1xuICAgIHRoaXMuaXNEZWxldGVSb3cgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzRGVsZXRlUm93ID09PSBmYWxzZSA/IHRoaXMuaXNEZWxldGVSb3cgPSBmYWxzZSA6IHRoaXMuaXNEZWxldGVSb3cgPSB0cnVlO1xuICAgIHRoaXMuYWN0aW9uQnV0dG9uID09PSB1bmRlZmluZWQgfHwgdGhpcy5hY3Rpb25CdXR0b24gPT09IGZhbHNlID8gdGhpcy5hY3Rpb25CdXR0b24gPSBmYWxzZSA6IHRoaXMuYWN0aW9uQnV0dG9uID0gdHJ1ZTtcbiAgICB0aGlzLmlzQnV0dG9ucyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaXNCdXR0b25zID09PSBmYWxzZSA/IHRoaXMuaXNCdXR0b25zID0gZmFsc2UgOiB0aGlzLmlzQnV0dG9ucyA9IHRydWU7XG4gICAgdGhpcy5hZGRJbmxpbmVSZWNvcmQgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmFkZElubGluZVJlY29yZCA9PT0gZmFsc2UgPyB0aGlzLmFkZElubGluZVJlY29yZCA9IGZhbHNlIDogdGhpcy5hZGRJbmxpbmVSZWNvcmQgPSB0cnVlO1xuICAgIHRoaXMuaXNQYWdpbmF0aW9uID09PSB1bmRlZmluZWQgfHwgdGhpcy5pc1BhZ2luYXRpb24gPT09IHRydWUgPyB0aGlzLmlzUGFnaW5hdGlvbiA9IHRydWUgOiB0aGlzLmlzUGFnaW5hdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNOb3NJbmRpY2F0b3IgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmlzTm9zSW5kaWNhdG9yID09PSB0cnVlID8gdGhpcy5pc05vc0luZGljYXRvciA9IHRydWUgOiB0aGlzLmlzTm9zSW5kaWNhdG9yID0gZmFsc2U7XG4gICAgdGhpcy5pc0VkaXRhYmxlID09PSB1bmRlZmluZWQgfHwgdGhpcy5pc0VkaXRhYmxlID09PSBmYWxzZSA/IHRoaXMuaXNFZGl0YWJsZSA9IGZhbHNlIDogdGhpcy5pc0VkaXRhYmxlID0gdHJ1ZVxuXG4gICAgdGhpcy5pbmxpbmVFbGVtZW50ID0gT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMuY3VycmVudENvbHVtbnMubWFwKGtleSA9PiBba2V5LCBcIlwiXSkpO1xuXG4gICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMucGFnaW5hdGlvbj8ucGFnZVNpemUgPyB0aGlzLnBhZ2luYXRpb25bJ3BhZ2VTaXplJ10gOiB0aGlzLnRhYmxlUGFyYW1zPy5wYWdpbmF0aW9uPy5wYWdlU2l6ZSB8fDEwO1xuICAgIHRoaXMucGFnZUluZGV4ID0gdGhpcy5wYWdpbmF0aW9uPy5wYWdlSW5kZXggPyB0aGlzLnBhZ2luYXRpb25bJ3BhZ2VJbmRleCddIDogdGhpcy50YWJsZVBhcmFtcz8ucGFnaW5hdGlvbj8ucGFnZUluZGV4IHx8MTtcbiAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IHRoaXMucGFnaW5hdGlvbj8udG90YWxSZWNvcmRzID8gdGhpcy5wYWdpbmF0aW9uWyd0b3RhbFJlY29yZHMnXSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IHRoaXMucGFnaW5hdGlvbj8ucGFnZVNpemVPcHRpb25zID8gdGhpcy5wYWdpbmF0aW9uWydwYWdlU2l6ZU9wdGlvbnMnXSA6IFsnNScsICcxMCcsICcyNScsICc1MCcsICcxMDAnLCAnMjAwJ107XG4gICAgdGhpcy5jb25maWdQYWdpbmF0aW9uID0gISEodGhpcy5wYWdpbmF0aW9uICYmIE9iamVjdC5rZXlzKHRoaXMucGFnaW5hdGlvbikubGVuZ3RoID4gMCk7XG5cbiAgICB0aGlzLmRyb3Bkb3duQWN0aW9uQnV0dG9uID0gdGhpcy5hY3Rpb25CdXR0b25BcnJheT8uYnV0dG9uQXJyYXk/LnNsaWNlKHRoaXMuYWN0aW9uQnV0dG9uQXJyYXk/LnNpemUpO1xuXG4gICAgdGhpcy5vcmlnaW5hbERhdGEgPSBbLi4udGhpcy5kYXRhXTtcbiAgICB0aGlzLnNGaWx0ZXJEYXRhID0gWy4uLnRoaXMuZGF0YV07XG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLm9yaWdpbmFsRGF0YTtcblxuICAgIC8vIFNLUzIwTUFSMjUgQ2hlY2sgaWYgdGhlIGRpc3BseWNvbHVtbidzIGhhdmUgYSBzdW1tYXJ5IGNvbHVtblxuICAgIGlmICh0aGlzLnN1bW1hcnlSb3dzICYmIHRoaXMuc3VtbWFyeVJvd3M/Lmxlbmd0aCA+IDAgJiYgdGhpcy5jdXJyZW50Q29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmlzRnVsbFRhYmxlU3VtbWFyeVJvdyA9IHRoaXMuc3VtbWFyeVJvd3NbMF0udHlwZSA9PT0gJ2Z1bGxSb3cnIHx8ICB0aGlzLnN1bW1hcnlSb3dzWzBdLnR5cGUgPT09ICdmdWxscm93JyA/IHRydWUgOiBmYWxzZTtcbiAgICAgIHRoaXMuaXNTdW1tYXJ5Q29sdW1uID0gdGhpcy5jdXJyZW50Q29sdW1ucy5zb21lKGVsZW1lbnQgPT4gZWxlbWVudCA9PT0gdGhpcy5zdW1tYXJ5Um93c1swXS5jb2x1bW4pO1xuICAgICAgaWYgKHRoaXMuaXNTdW1tYXJ5Q29sdW1uICYmICF0aGlzLmlzRnVsbFRhYmxlU3VtbWFyeVJvdykge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY3VycmVudENvbHVtbnMuaW5kZXhPZih0aGlzLnN1bW1hcnlSb3dzWzBdLmNvbHVtbik7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICB0aGlzLmlzU3VtbWFyeVN0YXJ0Q29sdW1uID0gdGhpcy5jdXJyZW50Q29sdW1ucy5zbGljZSgwLCBpbmRleCAtIDEpO1xuICAgICAgICAgIHRoaXMuaXNTdW1tYXJ5RW5kQ29sdW1uID0gdGhpcy5jdXJyZW50Q29sdW1ucy5zbGljZShpbmRleCArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYodGhpcy5jdXJyZW50Vmlld0ZpbHRlciA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuY3VycmVudFZpZXdGaWx0ZXIgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuY3VycmVudFZpZXdGaWx0ZXIgPSB0aGlzLmxpc3RWaWV3cyAmJiB0aGlzLmxpc3RWaWV3cy5sZW5ndGggPiAwID8gdGhpcy5saXN0Vmlld3NbMF0gOiBudWxsO1xuICAgIH1cbiAgICBpZih0aGlzLmN1cnJlbnRWaWV3RmlsdGVyICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jdXJyZW50Vmlld0ZpbHRlciAhPT0gbnVsbCl7XG4gICAgICB0aGlzLnNlbGVjdGVkVmlldyA9IHRoaXMuY3VycmVudFZpZXdGaWx0ZXIuZmlsdGVyTmFtZTtcbiAgICAgIGlmKHRoaXMuY3VycmVudFZpZXdGaWx0ZXIuaXNEZWZhdWx0IHx8IHRoaXMuY3VycmVudFZpZXdGaWx0ZXIuZmlsdGVyTmFtZSA9PT0gXCJBbGwgRGF0YVwiKXtcbiAgICAgICAgdGhpcy5jdXJyZW50Q29sdW1ucyA9IHRoaXMuY29sdW1uc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY3VycmVudFZpZXdGaWx0ZXI/LmNvbHVtbnMgfHwgW107XG4gICAgICAgIGNvbnN0IHVwZGF0ZUNvbHVtbiA9IHRoaXMuY29sdW1ucy5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICAgIGNvbnN0IG1hdGNoID0gY29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5uYW1lID09PSBjb2x1bW4uZmllbGROYW1lKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgaXNIaWRlOiAhbWF0Y2gsXG4gICAgICAgICAgICBmaWx0ZXI6ICEhbWF0Y2g/LmZpbHRlcmFibGUsXG4gICAgICAgICAgICBzb3J0OiAhIW1hdGNoPy5zb3J0YWJsZVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmN1cnJlbnRDb2x1bW5zID0gWy4uLnVwZGF0ZUNvbHVtbl1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY3VycmVudEZpbHRlckNvbHVtbnMgPSB0aGlzLmN1cnJlbnRDb2x1bW5zPy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5maWx0ZXIgPT09IHRydWUpLm1hcChjb2x1bW4gPT4gY29sdW1uLmZpZWxkTmFtZSlcbiAgICBpZiAoY3VycmVudEZpbHRlckNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgdGhpcy5jb25maWdQYWdpbmF0aW9uID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5ID0ge307XG4gICAgICBjb25zdCBmaWx0T2JqczogYW55ID0ge307XG4gICAgICBjdXJyZW50RmlsdGVyQ29sdW1ucy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5W2VsZW1lbnRdID0gbnVsbDtcbiAgICAgICAgZmlsdE9ianNbZWxlbWVudF0gPSBbXTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kYXRhLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIGN1cnJlbnRGaWx0ZXJDb2x1bW5zLmZvckVhY2goKGtleTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldE9ialZhbHVlKGVsZW1lbnQsIGtleSk7ICAvLyA8LSBnZXQgbmVzdGVkIHZhbHVlXG4gICAgXG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZpbHRPYmpzW2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXlba2V5XSA9IG5ldyBTZXQoZmlsdE9ianNba2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5ID0gdGhpcy5tdWx0aXBsZUZpbHRlckFycmF5O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm11bHRpcGxlRmlsdGVyQXJyYXkgPSB0aGlzLm11bHRpcGxlRmlsdGVyO1xuICAgIH1cbiAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgZmlsdGVyZWQgYXJyYXkgdGhhdCBleGNsdWRlcyBhbnkgY29sdW1uIHdpdGggJ1snXG4gICAgY29uc3QgdGVtcEZpbHRlckNvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcihjb2wgPT4gIWNvbC5maWVsZE5hbWUuaW5jbHVkZXMoJ1snKSk7XG4gICAgXG4gICAgaWYgKHRlbXBGaWx0ZXJDb2x1bW5zPy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaWx0T2JqczogYW55ID0ge307XG4gICAgXG4gICAgICAvLyBTS1MyNk1BWTI1IEluaXRpYWxpemUgc2V0cyB0byBjb2xsZWN0IHVuaXF1ZSB2YWx1ZXMgZm9yIGVhY2ggY29sdW1uXG4gICAgICB0ZW1wRmlsdGVyQ29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuICAgICAgICBmaWx0T2Jqc1tjb2wuZmllbGROYW1lXSA9IG5ldyBTZXQoKTtcbiAgICAgIH0pO1xuICAgIFxuICAgICAgLy8gU0tTMjZNQVkyNSBDb2xsZWN0IHVuaXF1ZSB2YWx1ZXMgZnJvbSB0YWJsZUZpbHRlckRhdGFcbiAgICAgIHRoaXMudGFibGVGaWx0ZXJEYXRhPy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgdGVtcEZpbHRlckNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0T2JqVmFsdWUoZWxlbWVudCwgY29sLmZpZWxkTmFtZSk7XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZpbHRPYmpzW2NvbC5maWVsZE5hbWVdLmFkZCh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIFxuICAgICAgLy8gU0tTMjZNQVkyNSBBcHBlbmQgXCJ2YWx1ZVwiIHByb3BlcnR5IHRvIGVhY2ggY29sdW1uIG9iamVjdCB3aXRoIHRoZSBhcnJheSBvZiB1bmlxdWUgdmFsdWVzXG4gICAgICB0aGlzLnRhYmxlRmlsdGVyQXJyYXkgPSBbLi4udGVtcEZpbHRlckNvbHVtbnMubWFwKChjb2w6IGFueSkgPT4gKHtcbiAgICAgICAgLi4uY29sLFxuICAgICAgICB2YWx1ZTogQXJyYXkuZnJvbShmaWx0T2Jqc1tjb2wuZmllbGROYW1lXSlcbiAgICAgIH0pKV1cbiAgICB9ICAgICAgICAgIFxuICAgIHRoaXMuc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odHJ1ZSwgW10pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XG4gICAgfSwgMClcbiAgICB0aGlzLnRvdGFsQ291bnQgPSB0aGlzLnRvdGFsUmVjb3JkcyB8fCB0aGlzLmRhdGE/Lmxlbmd0aFxuICAgIHRoaXMuZmlsdGVyVGFibGVOb3MgPSB0aGlzLnRvdGFsUmVjb3JkcyB8fCB0aGlzLmRhdGE/Lmxlbmd0aFxuICAgIGNvbnN0IE54dERhdGFUYWJsZSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ054dERhdGFUYWJsZScpKTtcbiAgICB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uID0gTnh0RGF0YVRhYmxlPy5jdXJyZW50U29ydENvbHVtbjtcbiAgICB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID0gTnh0RGF0YVRhYmxlPy5jdXJyZW50U29ydERpcmVjdGlvbjtcbiAgICBpZiAoTnh0RGF0YVRhYmxlPy5hZGRSZWNvcmQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMucGFnZVNpemUgPSBOeHREYXRhVGFibGU/LnBhZ2VTaXplXG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IE54dERhdGFUYWJsZT8ucGFnZUluZGV4XG4gICAgICB2YXIgb2JqOiBhbnkgPSB7fTtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmlubGluZUVsZW1lbnQpO1xuICAgICAga2V5cy5mb3JFYWNoKChlbGVtZW50S2V5OiBhbnkpID0+IHtcbiAgICAgICAgb2JqW2VsZW1lbnRLZXldID0gJyc7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGF0YS5wdXNoKG9iaik7XG4gICAgICBjb25zdCBkYXRhOiBhbnkgPSB0aGlzLmRhdGE7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XG5cbiAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdCh0aGlzLmRhdGFbdGhpcy5kYXRhLmxlbmd0aCAtIDFdKTtcbiAgICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmRhdGFbdGhpcy5kYXRhLmxlbmd0aCAtIDFdLmVkaXRSb3cgPSB0cnVlO1xuICAgICAgfSAgICAgIFxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ054dERhdGFUYWJsZScsIEpTT04uc3RyaW5naWZ5KHsgYWRkUmVjb3JkOiBmYWxzZSwgcGFnZVNpemU6IDEwLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LCBjdXJyZW50U29ydENvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgY3VycmVudFNvcnREaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gfSkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGlja3lDb2x1bW4gPT09IHRydWUgJiYgdGhpcy5jdXJyZW50Q29sdW1ucykge1xuICAgICAgdGhpcy5zdGlja3lDb25kaXRpb24gPSB0aGlzLmN1cnJlbnRDb2x1bW5zPy5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RpY2t5Q29uZGl0aW9uID0gdGhpcy5jdXJyZW50Q29sdW1ucz8ubGVuZ3RoICsgMTtcbiAgICB9XG5cbiAgICAvLyBTS1MxOU1BUjI1IGFkZCBmaXJzdCBsaW5lIGZvciBmb3JtYnVpbGRlciB0YWJsZVxuICAgIGlmICh0aGlzLmlzRWRpdGFibGUgJiYgdGhpcy5kYXRhLmxlbmd0aCA9PT0gMCkgeyB0aGlzLmFkZFRhYmxlUmVjb3JkKCB0aGlzLmlubGluZUVsZW1lbnQsIFwib25Jbml0XCIpIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudGFibGVDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgdGFibGVCb2R5ID0gdGhpcy50YWJsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50YWJsZS1ib2R5Jyk7XG4gICAgICAgIGlmICh0YWJsZUJvZHkgJiYgdGhpcy5pc1BhZ2luYXRpb24pIHtcbiAgICAgICAgICB0aGlzLmlzU2hhZG93SGlkZGVuID0gISh0YWJsZUJvZHkuc2Nyb2xsSGVpZ2h0IDwgNDUwKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMTUwMCk7IC8vIFdhaXRzIDEwMG1zIGZvciByZW5kZXJpbmdcbiAgICAvLyBTS1MxN0FQUjI1IHRhYmxlIHBhcmVtcyBkYXRhIHVwZGF0ZVxuICAgIGlmICh0aGlzLnNlYXJjaENvbmZpZ3M/LnNlYXJjaEZpbHRlclZhbCkge1xuICAgICAgdGhpcy5zZWFyY2hCb3hWYWx1ZSA9IHRoaXMuc2VhcmNoQ29uZmlncz8uc2VhcmNoRmlsdGVyVmFsOyAvLyBTaG93IHZhbHVlIGluIHRoZSBzZWFyY2ggYm94XG4gICAgICB0aGlzLnByZXZTZWFyY2ggPSB0aGlzLnNlYXJjaENvbmZpZ3M/LnNlYXJjaEZpbHRlclZhbDtcbiAgICB9IGVsc2UgaWYodGhpcy50YWJsZVBhcmFtcz8udGFibGVTZWFyY2gpe1xuICAgICAgdGhpcy5zZWFyY2hCb3hWYWx1ZSA9IHRoaXMudGFibGVQYXJhbXM/LnRhYmxlU2VhcmNoO1xuICAgIH1cbiAgICB0aGlzLnNlYXJjaENvbmZpZ3MgJiYgdGhpcy5zZWFyY2hCb3hWYWx1ZSA/IHRoaXMuZW1wdHlTZWFyY2godGhpcy5zZWFyY2hCb3hWYWx1ZSkgOiAnJ1xuICAgIHRoaXMuZmlsdGVyRGF0YUFycmF5ID0gdGhpcy50YWJsZVBhcmFtcz8uc2VhcmNoRmlsdGVyRGF0YSA/IHRoaXMudGFibGVQYXJhbXM/LnNlYXJjaEZpbHRlckRhdGEgOiB7fTtcbiAgICB0aGlzLnNvcnREYXRhKHRoaXMudGFibGVQYXJhbXM/LnNvcnQ/LmNvbHVtbiwgdGhpcy50YWJsZVBhcmFtcz8uc29ydD8uZGlyZWN0aW9uLHRydWUpXG4gICAgbGV0IGxhbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbGFuZ3VhZ2UnKVxuICAgIGlmICh0aGlzLmxhbmd1YWdlQ29kZSkge1xuICAgICAgdGhpcy50cmFuc2xhdGlvblNlcnZpY2Uuc2V0TGFuZ3VhZ2UodGhpcy5sYW5ndWFnZUNvZGUpO1xuICAgIH0gZWxzZSBpZihsYW5nICYmIGxhbmcgIT09ICcnKSB7XG4gICAgICB0aGlzLmxhbmd1YWdlQ29kZSA9IGxhbmdcbiAgICB9XG4gICAgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRpb25zTG9hZGVkJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7IC8vIEZvcmNlIHBpcGUgcmUtZXZhbHVhdGlvblxuICAgIH0pO1xuICAgIGlmICh0aGlzLmNvbmZpZ1BhZ2luYXRpb24gPT09IGZhbHNlICYmIHRoaXMuZGF0YSAmJiB0aGlzLmlzUGFnaW5hdGlvbikge1xuICAgICAgY29uc3QgcGFnZUluZGV4ID0gTnVtYmVyKHRoaXMucGFnZUluZGV4KSB8fCAwO1xuICAgICAgY29uc3QgcGFnZVNpemUgPSBOdW1iZXIodGhpcy5wYWdlU2l6ZSkgfHwgMTA7XG4gICAgICBjb25zdCBzdGFydCA9IChwYWdlSW5kZXggLSAxKSAqIHBhZ2VTaXplO1xuICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBwYWdlU2l6ZTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhPy5zbGljZShzdGFydCwgZW5kKSB8fCBbXTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzUGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGFcbiAgICB9XG4gICAgdGhpcy5zdW1tYXJ5Um93cz8ubGVuZ3RoID4gMCA/IHRoaXMuY29tcHV0ZVN1bW1hcnlWYWx1ZXMoJ29uQ2hhbmdlJykgOicnOyAvLyBDb21wdXRlIHBlci1yb3cgc3VtbWFyeSBjb2x1bW5zIGZpcnN0XG4gIH1cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbHVtblJlc2l6ZXJzKCk7XG4gIH1cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29sdW1uUmVzaXplcnMoKSB7XG4gICAgLy8gU0tTMjJKVUwyNSBXYWl0IGZvciB0aGUgdmlldyB0byBiZSBmdWxseSByZW5kZXJlZFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgcmVzaXplSGFuZGxlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5yZXNpemUtaGFuZGxlJyk7XG4gICAgICBcbiAgICAgIHJlc2l6ZUhhbmRsZXMuZm9yRWFjaCgoaGFuZGxlOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICBoYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5vblJlc2l6ZVN0YXJ0LmJpbmQodGhpcykpO1xuICAgICAgfSk7XG4gICAgfSwgMCk7XG4gIH1cbiAgb25SZXNpemVTdGFydChldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIFxuICAgIHRoaXMuaXNSZXNpemluZyA9IHRydWU7XG4gICAgdGhpcy5zdGFydFggPSBldmVudC5jbGllbnRYO1xuICBcbiAgICAvLyBTS1MyMkpVTDI1IEZpbmQgdGhlIGNvbHVtbiBoZWFkZXIgdGhhdCBjb250YWlucyB0aGlzIHJlc2l6ZSBoYW5kbGVcbiAgICBjb25zdCBjb2x1bW5IZWFkZXIgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCcudGFibGUtY2VsbCcpO1xuICAgIGlmIChjb2x1bW5IZWFkZXIgJiYgY29sdW1uSGVhZGVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgY29sdW1uSGVhZGVyLnBhcmVudE5vZGUpIHtcbiAgICAgIHRoaXMuc3RhcnRXaWR0aCA9IGNvbHVtbkhlYWRlci5vZmZzZXRXaWR0aDtcbiAgXG4gICAgICAvLyBTS1MyMkpVTDI1IEZpbmQgdGhlIGNvbHVtbiBpbmRleFxuICAgICAgY29uc3Qgc2libGluZ3MgPSBBcnJheS5mcm9tKGNvbHVtbkhlYWRlci5wYXJlbnROb2RlLmNoaWxkcmVuKTtcbiAgICAgIGNvbnN0IGNvbHVtbkluZGV4ID0gc2libGluZ3MuaW5kZXhPZihjb2x1bW5IZWFkZXIpO1xuICAgICAgY29uc3QgYWRqdXN0ZWRJbmRleCA9IHRoaXMud2l0aENoZWNrQm94ID8gY29sdW1uSW5kZXggLSAxIDogY29sdW1uSW5kZXg7XG4gIFxuICAgICAgaWYgKGFkanVzdGVkSW5kZXggPj0gMCAmJiBhZGp1c3RlZEluZGV4IDwgdGhpcy5jdXJyZW50Q29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q29sdW1uID0gdGhpcy5jdXJyZW50Q29sdW1uc1thZGp1c3RlZEluZGV4XTtcbiAgICAgIH1cbiAgICB9XG4gIFxuICAgIC8vIFNLUzIySlVMMjUgQWRkIGN1cnNvciBzdHlsZSB0byBib2R5XG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnY29sLXJlc2l6ZSc7XG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJ25vbmUnO1xuICAgIHRoaXMuaXNSZXNpemluZyA9IHRydWU7XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uUmVzaXplTW92ZSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25SZXNpemVFbmQpO1xuICB9XG4gIFxuICBwcml2YXRlIG9uUmVzaXplTW92ZSA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgIGlmICghdGhpcy5pc1Jlc2l6aW5nIHx8ICF0aGlzLmN1cnJlbnRDb2x1bW4pIHJldHVybjtcbiAgICBpZiAodGhpcy5yZXNpemVGcmFtZUlkKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnJlc2l6ZUZyYW1lSWQpO1xuICAgIH1cblxuICAgIHRoaXMucmVzaXplRnJhbWVJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBjb25zdCBkZWx0YVggPSBldmVudC5jbGllbnRYIC0gdGhpcy5zdGFydFg7XG4gICAgICBjb25zdCBuZXdXaWR0aCA9IE1hdGgubWF4KDUwLCB0aGlzLnN0YXJ0V2lkdGggKyBkZWx0YVgpO1xuICAgICAgLy8gU0tTMjJKVUwyNSBVcGRhdGUgdGhlIGNvbHVtbiB3aWR0aFxuICAgICAgaWYodGhpcy5jdXJyZW50Q29sdW1uLndpZHRoKSB0aGlzLmN1cnJlbnRDb2x1bW4ud2lkdGggPSBuZXdXaWR0aCArICdweCc7XG4gICAgICB0aGlzLnVwZGF0ZUNvbHVtbldpZHRoKHRoaXMuY3VycmVudENvbHVtbiwgbmV3V2lkdGgpO1xuICAgIH0pO1xuICB9O1xuICBwcml2YXRlIG9uUmVzaXplRW5kID0gKF9ldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgIGlmICghdGhpcy5pc1Jlc2l6aW5nKSByZXR1cm47XG4gICAgdGhpcy5pc1Jlc2l6aW5nID0gZmFsc2U7XG4gICAgdGhpcy5jdXJyZW50Q29sdW1uID0gbnVsbDtcbiAgICBcbiAgICAvLyBTS1MyMkpVTDI1IFJlbW92ZSBjdXJzb3Igc3R5bGUgZnJvbSBib2R5XG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnJztcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QgPSAnJztcbiAgXG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vblJlc2l6ZU1vdmUpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uUmVzaXplRW5kKTtcbiAgfTtcblxuICBwcml2YXRlIHVwZGF0ZUNvbHVtbldpZHRoKGNvbHVtbjogYW55LCBuZXdXaWR0aDogbnVtYmVyKSB7IFxuICAgIC8vIFNLUzIySlVMMjUgVXNlIEFuZ3VsYXIncyBSZW5kZXJlcjIgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvblxuICAgIGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5jdXJyZW50Q29sdW1ucy5maW5kSW5kZXgoY29sID0+IGNvbC51bmlxdWVJZGVudGlmaWVyID09PSBjb2x1bW4udW5pcXVlSWRlbnRpZmllcik7XG4gICAgaWYgKGNvbHVtbkluZGV4ID09PSAtMSkgcmV0dXJuO1xuICAgIFxuICAgIC8vIFNLUzIySlVMMjUgQWRqdXN0IGluZGV4IGlmIGNoZWNrYm94IGNvbHVtbiBleGlzdHNcbiAgICBjb25zdCBhZGp1c3RlZEluZGV4ID0gdGhpcy53aXRoQ2hlY2tCb3ggPyBjb2x1bW5JbmRleCArIDEgOiBjb2x1bW5JbmRleDtcbiAgICBcbiAgICAvLyBVcGRhdGUgaGVhZGVyIGNlbGxcbiAgICBjb25zdCBoZWFkZXJDZWxsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLnRhYmxlLWhlYWRlciAudGFibGUtcm93IC50YWJsZS1jZWxsOm50aC1jaGlsZCgke2FkanVzdGVkSW5kZXggKyAxfSlgKTtcbiAgICBpZiAoaGVhZGVyQ2VsbCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShoZWFkZXJDZWxsLCAnd2lkdGgnLCBuZXdXaWR0aCArICdweCcpO1xuICAgIH1cblxuICAgIC8vIFNLUzIySlVMMjUgVXBkYXRlIGFsbCBib2R5IGNlbGxzIGluIHRoaXMgY29sdW1uXG4gICAgY29uc3QgYm9keSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50YWJsZS1ib2R5Jyk7XG4gICAgaWYgKGJvZHkpIHtcbiAgICAgIGNvbnN0IHJvd3MgPSBib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoJy50YWJsZS1yb3cnKTtcbiAgICAgIHJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICBjb25zdCBjZWxsID0gcm93LmNoaWxkcmVuW2FkanVzdGVkSW5kZXhdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoY2VsbCkge1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2VsbCwgJ3dpZHRoJywgbmV3V2lkdGggKyAncHgnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vblJlc2l6ZU1vdmUpO1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uUmVzaXplRW5kKTtcbiAgfVxuICBwcml2YXRlIGZsYXR0ZW5Sb3cocm93OiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGZsYXR0ZW5lZCA9IHRoaXMuY3VycmVudENvbHVtbnMucmVkdWNlKChhY2MsIGNvbCkgPT4ge1xuICAgICAgYWNjW2NvbC5maWVsZE5hbWVdID0gdGhpcy5nZXRPYmpWYWx1ZShyb3csIGNvbC5maWVsZE5hbWUpID8/ICctJzsgLy8gRGVmYXVsdCB0byAnLScgaWYgbnVsbC91bmRlZmluZWRcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgeyBba2V5OiBzdHJpbmddOiBhbnkgfSk7XG4gICAgcmV0dXJuIHsgLi4ucm93LCBmbGF0dGVuZWQgfTtcbiAgfVxuICAvLyBTS1MyME1BUjI1IHN1bW1hcnkgY29sdW1ucyBjYWxjXG4gIGNvbXB1dGVTdW1tYXJ5Q29sdW1ucygpIHtcbiAgICBpZiAodGhpcy5zdW1tYXJ5Q29sdW1ucyAmJiB0aGlzLnN1bW1hcnlDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5tYXAocm93ID0+IHtcbiAgICAgICAgY29uc3QgbmV3Um93ID0geyAuLi5yb3cgfTtcbiAgICAgICAgdGhpcy5zdW1tYXJ5Q29sdW1ucy5mb3JFYWNoKHN1bW1hcnlDb2wgPT4ge1xuICAgICAgICAgIGlmIChzdW1tYXJ5Q29sLnR5cGUgPT09ICdjYWxjdWxhdGlvbicgJiYgc3VtbWFyeUNvbC5vcGVyYXRpb24gPT09ICdzdW0nICYmIHN1bW1hcnlDb2wub3BlcmFuZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1bSA9IHN1bW1hcnlDb2wub3BlcmFuZHMucmVkdWNlKChhY2MsIG9wZXJhbmQpID0+IGFjYyArIChOdW1iZXIobmV3Um93W29wZXJhbmRdKSB8fCAwKSwgMCk7XG4gICAgICAgICAgICBuZXdSb3dbc3VtbWFyeUNvbC5maWVsZE5hbWVdID0gc3VtO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3VtbWFyeUNvbC50eXBlID09PSAnY2FsY3VsYXRpb24nICYmIHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnc3VidHJhY3QnICYmIHN1bW1hcnlDb2wub3BlcmFuZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IFtmaXJzdE9wZXJhbmQsIC4uLnJlc3RPcGVyYW5kc10gPSBzdW1tYXJ5Q29sLm9wZXJhbmRzO1xuICAgICAgICAgICAgbGV0IHN1bSA9IE51bWJlcihuZXdSb3dbZmlyc3RPcGVyYW5kXSkgfHwgMDsgLy8gU3RhcnQgd2l0aCB0aGUgZmlyc3Qgb3BlcmFuZFxuICAgICAgICAgICAgc3VtID0gcmVzdE9wZXJhbmRzLnJlZHVjZSgoYWNjLCBvcGVyYW5kKSA9PiBhY2MgLSAoTnVtYmVyKG5ld1Jvd1tvcGVyYW5kXSkgfHwgMCksIHN1bSk7XG4gICAgICAgICAgICBuZXdSb3dbc3VtbWFyeUNvbC5maWVsZE5hbWVdID0gc3VtO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3VtbWFyeUNvbC50eXBlID09PSAnY2FsY3VsYXRpb24nICYmIHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnbXVsdGlwbHknICYmIHN1bW1hcnlDb2wub3BlcmFuZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y3QgPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnJlZHVjZSgoYWNjLCBvcGVyYW5kKSA9PiBhY2MgKiAoTnVtYmVyKG5ld1Jvd1tvcGVyYW5kXSkgfHwgMCksIDEpOyAvLyBTdGFydCB3aXRoIDFcbiAgICAgICAgICAgIG5ld1Jvd1tzdW1tYXJ5Q29sLmZpZWxkTmFtZV0gPSBwcm9kdWN0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXdSb3c7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhOyAvLyBVcGRhdGUgZGF0YVNvdXJjZVxuICAgICAgaWYgKCF0aGlzLnRvdGFsUmVjb3JkcyAmJiB0aGlzLmRhdGEgJiYgdGhpcy5pc1BhZ2luYXRpb24pIHtcbiAgICAgICAgY29uc3QgcGFnZUluZGV4ID0gTnVtYmVyKHRoaXMucGFnZUluZGV4KSB8fCAwO1xuICAgICAgICBjb25zdCBwYWdlU2l6ZSA9IE51bWJlcih0aGlzLnBhZ2VTaXplKSB8fCAxMDtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSAocGFnZUluZGV4IC0gMSkgKiBwYWdlU2l6ZTtcbiAgICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBwYWdlU2l6ZTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGE/LnNsaWNlKHN0YXJ0LCBlbmQpIHx8IFtdO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5pc1BhZ2luYXRpb24pIHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmRhdGFcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gU0tTMjBNQVIyNSBDb21wdXRlIHZhbHVlcyBmb3Igc3VtbWFyeSByb3dzXG4gIGNvbXB1dGVTdW1tYXJ5VmFsdWVzKGZyb20/KSB7XG4gICAgdGhpcy5zdW1tYXJ5Um93cz8uZm9yRWFjaChyb3cgPT4ge1xuICAgICAgaWYgKHJvdy50eXBlID09PSAnY2FsY3VsYXRpb24nKSB7XG4gICAgICAgIGlmIChyb3cub3BlcmF0aW9uID09PSAnc3VtJyAmJiByb3cuY29sdW1uKSB7XG4gICAgICAgICAgLy8gQ29ycmVjdCBzdW0gb3BlcmF0aW9uXG4gICAgICAgICAgdGhpcy5zdW1tYXJ5VmFsdWVzW3Jvdy5maWVsZE5hbWVdID0gdGhpcy5kYXRhU291cmNlLmRhdGEucmVkdWNlKFxuICAgICAgICAgICAgKGFjYywgZGF0YVJvdykgPT4gYWNjICsgKE51bWJlcihkYXRhUm93W3Jvdy5jb2x1bW5dKSB8fCAwKSxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHJvdy5vcGVyYXRpb24gPT09ICdzdWJ0cmFjdCcgJiYgcm93LmNvbHVtbikge1xuICAgICAgICAgIC8vIFN1YnRyYWN0IHNob3VsZCBzdGFydCB3aXRoIHRoZSBmaXJzdCB2YWx1ZVxuICAgICAgICAgIHRoaXMuc3VtbWFyeVZhbHVlc1tyb3cuZmllbGROYW1lXSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLnJlZHVjZShcbiAgICAgICAgICAgIChhY2MsIGRhdGFSb3csIGluZGV4KSA9PiBpbmRleCA9PT0gMCA/IE51bWJlcihkYXRhUm93W3Jvdy5jb2x1bW5dKSB8fCAwIDogYWNjIC0gKE51bWJlcihkYXRhUm93W3Jvdy5jb2x1bW5dKSB8fCAwKSxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHJvdy5vcGVyYXRpb24gPT09ICdtdWx0aXBseScgJiYgcm93LmNvbHVtbikge1xuICAgICAgICAgIC8vIE11bHRpcGx5IHNob3VsZCBzdGFydCB3aXRoIDFcbiAgICAgICAgICB0aGlzLnN1bW1hcnlWYWx1ZXNbcm93LmZpZWxkTmFtZV0gPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCBkYXRhUm93KSA9PiBhY2MgKiAoTnVtYmVyKGRhdGFSb3dbcm93LmNvbHVtbl0pIHx8IDApLCAvLyBVc2UgMSBpbnN0ZWFkIG9mIDBcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHJvdy5vcGVyYXRpb24gPT09ICdzdWJ0cmFjdCcgJiYgcm93Lm9wZXJhbmRzKSB7XG4gICAgICAgICAgLy8gU3VidHJhY3QgYmFzZWQgb24gb3BlcmFuZHNcbiAgICAgICAgICBjb25zdCBbb3AxLCBvcDJdID0gcm93Lm9wZXJhbmRzO1xuICAgICAgICAgIHRoaXMuc3VtbWFyeVZhbHVlc1tyb3cuZmllbGROYW1lXSA9ICh0aGlzLnN1bW1hcnlWYWx1ZXNbb3AxXSB8fCAwKSAtICh0aGlzLnN1bW1hcnlWYWx1ZXNbb3AyXSB8fCAwKTtcbiAgICAgICAgfSBlbHNlIGlmIChyb3cub3BlcmF0aW9uID09PSAnc3VtJyAmJiByb3cub3BlcmFuZHMpIHtcbiAgICAgICAgICAvLyBTdW0gYmFzZWQgb24gb3BlcmFuZHNcbiAgICAgICAgICBjb25zdCBbb3AxLCBvcDJdID0gcm93Lm9wZXJhbmRzO1xuICAgICAgICAgIHRoaXMuc3VtbWFyeVZhbHVlc1tyb3cuZmllbGROYW1lXSA9ICh0aGlzLnN1bW1hcnlWYWx1ZXNbb3AxXSB8fCAwKSArICh0aGlzLnN1bW1hcnlWYWx1ZXNbb3AyXSB8fCAwKTtcbiAgICAgICAgfSBlbHNlIGlmIChyb3cub3BlcmF0aW9uID09PSAnbXVsdGlwbHknICYmIHJvdy5vcGVyYW5kcykge1xuICAgICAgICAgIC8vIE11bHRpcGx5IGJhc2VkIG9uIG9wZXJhbmRzXG4gICAgICAgICAgY29uc3QgW29wMSwgb3AyXSA9IHJvdy5vcGVyYW5kcztcbiAgICAgICAgICB0aGlzLnN1bW1hcnlWYWx1ZXNbcm93LmZpZWxkTmFtZV0gPSAodGhpcy5zdW1tYXJ5VmFsdWVzW29wMV0gfHwgMCkgKiAodGhpcy5zdW1tYXJ5VmFsdWVzW29wMl0gfHwgMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNLUzEzSlVOMjUgU3VtIHRoZSB2YWx1ZXMgYnkgZGVmYXVsdC5cbiAgICAgIGlmKHJvdy50eXBlID09PSAnZnVsbFJvdycgfHwgcm93LnR5cGUgPT09ICdmdWxscm93Jyl7XG4gICAgICAgIHJvdz8uY29sdW1ucz8uZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICB0aGlzLnN1bW1hcnlWYWx1ZXNbZWxlbWVudF0gPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCBkYXRhUm93KSA9PiBhY2MgKyAoTnVtYmVyKGRhdGFSb3dbZWxlbWVudF0pIHx8IDApLFxuICAgICAgICAgICAgMFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChmcm9tICE9PSAnb25DaGFuZ2UnICYmIGZyb20gIT09ICdvbkluaXQnICYmIHRoaXMuZnJvbSA9PT0gJ2Zvcm1CdWlsZGVyJykge1xuICAgICAgaWYodGhpcy5mcm9tID09PSAnZm9ybUJ1aWxkZXInKSAgdGhpcy5vcmlnaW5hbERhdGEgPSB0aGlzLmRhdGEubGVuZ3RoID4gdGhpcy5vcmlnaW5hbERhdGEubGVuZ3RoID8gdGhpcy5kYXRhIDogdGhpcy5vcmlnaW5hbERhdGEvL1NLUzdKVU4yNSBPbmx5IGFzc2lnbiBkYXRhIHRvIG9yaWdpbmFsRGF0YSBpZiBmcm9tIGZvcm1CdWlsZGVyXG4gICAgICB0aGlzLmVtaXRUYWJsZURhdGFWYWx1ZSh7ZGF0YTogdGhpcy5vcmlnaW5hbERhdGEsIHN1bW1hcnlWYWx1ZXM6IHRoaXMuc3VtbWFyeVZhbHVlc30pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNLUzIwTUFSMjUgSGFuZGxlIG1hbnVhbCBpbnB1dCBjaGFuZ2VzIGluIHN1bW1hcnkgcm93cyBcbiAgb25TdW1tYXJ5SW5wdXRDaGFuZ2UoKSB7XG4gICAgdGhpcy5jb21wdXRlU3VtbWFyeVZhbHVlcygpO1xuICB9XG4gIC8vIFNLUzE1RkVCMjUgQ3VzdG9tIHNvcnQgZnVuY3Rpb25cbiAgc29ydERhdGEoY29sdW1uOiBzdHJpbmcsIHNvcnRpbmdTdGF0ZT86IGFueSB8IHVuZGVmaW5lZCwgY3VycmVudFN0YXRlPzphbnkgfHVuZGVmaW5lZCwgZnJvbT86YW55KSB7XG4gICAgLy8gRGVmaW5lIHNvcnRpbmcgc3RhdGVzXG4gICAgY29uc3Qgc29ydGluZ1N0YXRlcyA9IFsnYXNjJywgJ2Rlc2MnLCAnbm9uZSddO1xuICAgIGlmICh0aGlzLmNvbmZpZ1BhZ2luYXRpb24gPT09IGZhbHNlIHx8IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA9PT0gdGhpcy50b3RhbFJlY29yZHMpIHtcbiAgICAgIC8vIERldGVybWluZSB0aGUgY3VycmVudCBzb3J0aW5nIHN0YXRlXG4gICAgICBpZiAodGhpcy5jdXJyZW50U29ydENvbHVtbiA9PT0gY29sdW1uICYmICFzb3J0aW5nU3RhdGUpIHtcbiAgICAgICAgLy8gTW92ZSB0byB0aGUgbmV4dCBzb3J0aW5nIHN0YXRlXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHNvcnRpbmdTdGF0ZXMuaW5kZXhPZih0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uKTtcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9IHNvcnRpbmdTdGF0ZXNbKGN1cnJlbnRJbmRleCArIDEpICUgc29ydGluZ1N0YXRlcy5sZW5ndGhdIGFzIFwiYXNjXCIgfCBcImRlc2NcIiB8IFwibm9uZVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgYSBuZXcgY29sdW1uIGlzIHNlbGVjdGVkLCBzdGFydCB3aXRoIGFzY2VuZGluZyBzb3J0XG4gICAgICAgIHRoaXMuY3VycmVudFNvcnRDb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPSBzb3J0aW5nU3RhdGUgfHwgJ2FzYyc7XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5maWx0ZXJCb3hEYXRhICYmIHRoaXMuZmlsdGVyQm94RGF0YS5sZW5ndGggPiAwID8gdGhpcy5maWx0ZXJCb3hEYXRhIDogdGhpcy5kYXRhU291cmNlLmRhdGE7XG4gICAgICAvLyBPbmx5IHNvcnQgaWYgdGhlIGRpcmVjdGlvbiBpcyAnYXNjJyBvciAnZGVzYydcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnYXNjJyB8fCB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnZGVzYycpIHtcbiAgICAgICAgZGF0YS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgbGV0IHZhbHVlQSA9IHRoaXMuZ2V0T2JqVmFsdWUoYSwgY29sdW1uKTtcbiAgICAgICAgICBsZXQgdmFsdWVCID0gdGhpcy5nZXRPYmpWYWx1ZShiLCBjb2x1bW4pO1xuICAgICAgICAgIC8vIEhhbmRsZSB1bmRlZmluZWQgb3IgbnVsbCB2YWx1ZXNcbiAgICAgICAgICBpZiAodmFsdWVBID09IG51bGwgJiYgdmFsdWVCID09IG51bGwpIHJldHVybiAwOyAvLyBCb3RoIGFyZSBudWxsL3VuZGVmaW5lZFxuICAgICAgICAgIGlmICh2YWx1ZUEgPT0gbnVsbCkgcmV0dXJuIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xOyAvLyB2YWx1ZUEgaXMgbnVsbFxuICAgICAgICAgIGlmICh2YWx1ZUIgPT0gbnVsbCkgcmV0dXJuIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gLTEgOiAxOyAvLyB2YWx1ZUIgaXMgbnVsbFxuICAgICAgICAgIC8vIEhhbmRsZSBkYXRlIHNvcnRpbmdcbiAgICAgICAgICBpZiAodGhpcy5jb2x1bW5zPy5zb21lKGNvbCA9PiBjb2wuZmllbGROYW1lID09PSBjb2x1bW4gJiYgY29sLnR5cGUgPT09ICdkYXRlJykpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVBID0gbmV3IERhdGUodmFsdWVBKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVCID0gbmV3IERhdGUodmFsdWVCKTtcbiAgICAgICAgICAgIHZhbHVlQSA9IGRhdGVBLmdldFRpbWUoKTtcbiAgICAgICAgICAgIHZhbHVlQiA9IGRhdGVCLmdldFRpbWUoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZUEgPT09ICdudW1iZXInICYmIHR5cGVvZiB2YWx1ZUIgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgbnVtYmVyIHNvcnRpbmdcbiAgICAgICAgICAgIHZhbHVlQSA9IE51bWJlcih2YWx1ZUEpO1xuICAgICAgICAgICAgdmFsdWVCID0gTnVtYmVyKHZhbHVlQik7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWVBID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFsdWVCID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgLy8gSGFuZGxlIHN0cmluZyBjb21wYXJpc29uXG4gICAgICAgICAgICB2YWx1ZUEgPSB2YWx1ZUEudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHZhbHVlQiA9IHZhbHVlQi50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBDb21wYXJlIHZhbHVlc1xuICAgICAgICAgIGlmICh2YWx1ZUEgPCB2YWx1ZUIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/IC0xIDogMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlQSA+IHZhbHVlQikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiB2YWx1ZXMgYXJlIHRoZSBzYW1lLCByZXR1cm4gMCB0byBtYWludGFpbiBvcmlnaW5hbCBvcmRlclxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBbLi4uZGF0YV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBwYWdlSW5kZXggPSBOdW1iZXIodGhpcy5wYWdlSW5kZXgpIHx8IDA7XG4gICAgICAgIGNvbnN0IHBhZ2VTaXplID0gTnVtYmVyKHRoaXMucGFnZVNpemUpIHx8IDEwO1xuICAgICAgICBjb25zdCBzdGFydCA9IChwYWdlSW5kZXggLSAxKSAqIHBhZ2VTaXplO1xuICAgICAgICBjb25zdCBlbmQgPSBzdGFydCArIHBhZ2VTaXplO1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZmlsdGVyQm94RGF0YSA/IHRoaXMuZmlsdGVyQm94RGF0YT8uc2xpY2Uoc3RhcnQsIGVuZCkgfHwgW10gOiB0aGlzLmRhdGE/LnNsaWNlKHN0YXJ0LCBlbmQpIHx8IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZXRlcm1pbmUgdGhlIGN1cnJlbnQgc29ydGluZyBzdGF0ZVxuICAgICAgaWYgKHRoaXMuY3VycmVudFNvcnRDb2x1bW4gPT09IGNvbHVtbikge1xuICAgICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IHNvcnRpbmcgc3RhdGVcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gc29ydGluZ1N0YXRlcy5pbmRleE9mKHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uID0gc29ydGluZ1N0YXRlc1soY3VycmVudEluZGV4ICsgMSkgJSBzb3J0aW5nU3RhdGVzLmxlbmd0aF0gYXMgXCJhc2NcIiB8IFwiZGVzY1wiIHwgXCJub25lXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiBhIG5ldyBjb2x1bW4gaXMgc2VsZWN0ZWQsIHN0YXJ0IHdpdGggYXNjZW5kaW5nIHNvcnRcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydENvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiA9ICdhc2MnO1xuICAgICAgfVxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ054dERhdGFUYWJsZScsIEpTT04uc3RyaW5naWZ5KHsgYWRkUmVjb3JkOiBmYWxzZSwgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsIGN1cnJlbnRTb3J0Q29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBjdXJyZW50U29ydERpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiB9KSk7XG4gICAgICAvLyBPbmx5IHNvcnQgaWYgdGhlIGRpcmVjdGlvbiBpcyAnYXNjJyBvciAnZGVzYydcbiAgICAgIGlmKGN1cnJlbnRTdGF0ZSAhPT0gdHJ1ZSAmJiBmcm9tICE9PSAnb25DaGFuZ2UnKXRoaXMuTnh0VGFibGVFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4IH0sIHRhYmxlU2VhcmNoOiB7IGZpZWxkczogdGhpcy5jdXJyZW50Q29sdW1ucywgdmFsdWU6IHRoaXMuc2VhcmNoQm94VmFsdWUgfSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24sbGlzdFZpZXc6IHRoaXMuc2VsZWN0ZWRWaWV3fSB9KVxuICAgIH1cbiAgICBpZihmcm9tICE9PSAnb25DaGFuZ2UnKXRoaXMuTnh0VGFibGVQYXJhbXNFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4IH0sdGFibGVTZWFyY2g6IHRoaXMuc2VhcmNoQm94VmFsdWUsIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uICxsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9fSlcbiAgICBpZihmcm9tID09PSAnb25DaGFuZ2UnKSB0aGlzLnBhZ2VQYXJhbXModGhpcy50YWJsZVBhcmFtcz8ucGFnaW5hdGlvbiwnb25DaGFuZ2UnKVxuICAgIHRoaXMub25TdW1tYXJ5SW5wdXRDaGFuZ2UoKVxuICB9XG5cbiAgb25TY3JvbGwodGFibGVDb250YWluZXI6IEhUTUxFbGVtZW50KSB7XG4gICAgdGhpcy5pc1Njcm9sbGVkID0gdGFibGVDb250YWluZXIuc2Nyb2xsVG9wID4gMDtcbiAgICBjb25zdCB0YWJsZUJvZHlIZWlnaHQgPSB0YWJsZUNvbnRhaW5lci5zY3JvbGxIZWlnaHQ7XG4gICAgY29uc3QgaXNBdEJvdHRvbSA9IHRhYmxlQm9keUhlaWdodCAtIHRhYmxlQ29udGFpbmVyLnNjcm9sbFRvcCA8PSB0YWJsZUNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyAxO1xuICAgIC8vU0tTMTVGRUIyNSBFbnN1cmUgc2hhZG93IGlzIGhpZGRlbiBvbmx5IGlmIHRhYmxlIGJvZHkgaGVpZ2h0IGlzIGdyZWF0ZXIgdGhhbiA0MDBweFxuICAgIGlmICh0aGlzLmlzUGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5pc1NoYWRvd0hpZGRlbiA9ICEoaXNBdEJvdHRvbSB8fCB0YWJsZUJvZHlIZWlnaHQgPCA0NTApO1xuICAgIH1cbiAgfVxuXG4gIC8vU0tTMTVGRUIyNSBsb3NpbmcgdGhlIGZpbHRlciBjb21wb25lbnQgd2hlbiB0aGUgbW91c2UgaXMgY2xpY2tlZCBvdXRzaWRlIHRhYmxlXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSkgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNlYXJjaEZpbHRlciA9IGZhbHNlO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyBwcmV2ZW50cyBhbnkgb3RoZXIgZGVmYXVsdCBhY3Rpb25cbiAgfVxuXG4gIC8vU0tTMTVGRUIyNSBmaWx0ZXIgZGF0YSB0aGF0IHRvIGJlIGRpc3BsYXllZCBpbiBoZWFkZXIgZmlsdGVyIGljb24gaXMgcGFzc2VkIGluICdmaWx0ZXJBcnJheScgYXJyYXlcbiAgZmlsdGVyKGRhdGFzOiBhbnkpIHtcbiAgICB0aGlzLmZpbHRlckFycmF5ID0gW107XG4gICAgdGhpcy5zZWxlY3RlZEZpbHRlciA9IGRhdGFzO1xuICAgIHRoaXMuZmlsdGVyQXJyYXkgPSBbLi4udGhpcy5tdWx0aXBsZUZpbHRlckFycmF5Py5bZGF0YXNdXTtcbiAgICB0aGlzLnNlYXJjaEZpbHRlciA9ICF0aGlzLnNlYXJjaEZpbHRlcjtcbiAgICB0aGlzLmlzUmVzaXplZCA9IHRoaXMuZmlsdGVyRGF0YUFycmF5W3RoaXMuc2VsZWN0ZWRGaWx0ZXJdPy5sZW5ndGggPiAwXG4gIH1cblxuICAvLyBTS1MxNUZFQjI1ICBlbWl0dGluZyBwYWdyIHNpemUgYW5kIGluZGV4IHRvIHBhcmVudCBvbiBwYWdpbmF0aW5nXG4gIHBhZ2VQYXJhbXMoZXZlbnQ6IGFueSwgZnJvbT86YW55KSB7XG4gICAgdGhpcy5wYWdlSW5kZXggPSBldmVudD8ucGFnZUluZGV4IHx8IHRoaXMucGFnZUluZGV4XG4gICAgdGhpcy5wYWdlU2l6ZSA9IGV2ZW50Py5wYWdlU2l6ZSB8fCB0aGlzLnBhZ2VTaXplXG4gICAgdGhpcy5maWx0ZXJUYWJsZU5vcyA9IHRoaXMuZmlsdGVyQm94RGF0YT8ubGVuZ3RoXG4gICAgaWYodGhpcy5mcm9tID09PSAnZm9ybUJ1aWxkZXInKSB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZmlsdGVyQm94RGF0YSA9IHRoaXMuZGF0YVxuICAgIGlmICh0aGlzLmNvbmZpZ1BhZ2luYXRpb24gPT09IGZhbHNlIHx8IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA9PT0gdGhpcy50b3RhbFJlY29yZHMpIHtcbiAgICAgIGlmKGZyb20gIT09ICdvbkNoYW5nZScpdGhpcy5hcHBseUZpbHRlcih0aGlzLnNlYXJjaEJveFZhbHVlICwgJ3BhZ2VQYXJhbXMnKVxuICAgICAgY29uc3Qgc3RhcnQgPSAoTnVtYmVyKHRoaXMucGFnZUluZGV4KSAtIDEpICogTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBOdW1iZXIodGhpcy5wYWdlU2l6ZSk7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZmlsdGVyQm94RGF0YT8uc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICB0aGlzLm9uU3VtbWFyeUlucHV0Q2hhbmdlKClcbiAgICB9IGVsc2Uge1xuICAgICAgaWYoZnJvbSAhPT0gJ29uQ2hhbmdlJyl0aGlzLk54dFRhYmxlRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCB9LCB0YWJsZVNlYXJjaDogeyBmaWVsZHM6IHRoaXMuY3VycmVudENvbHVtbnMsIHZhbHVlOiB0aGlzLnNlYXJjaEJveFZhbHVlIH0sIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uICxsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9IH0pXG4gICAgfVxuICAgIGlmKGZyb20gIT09ICdvbkNoYW5nZScpdGhpcy5OeHRUYWJsZVBhcmFtc0VtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXggfSx0YWJsZVNlYXJjaDogdGhpcy5zZWFyY2hCb3hWYWx1ZSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gLGxpc3RWaWV3OiB0aGlzLnNlbGVjdGVkVmlld319KVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBhcHBseSBzZWFyY2ggYmFyIGZpbHRlciB1c2luZyBtYXRcbiAgYXBwbHlGaWx0ZXIoZXZlbnQ6IGFueSwgZnJvbT86IGFueSkge1xuICAgIGxldCBmaWx0ZXJWYWx1ZSA9IGV2ZW50O1xuICAgIGZpbHRlclZhbHVlID8gZmlsdGVyVmFsdWUgPSBmaWx0ZXJWYWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSA6IGZpbHRlclZhbHVlID0gJyc7XG4gICAgdGhpcy5zZWFyY2hCb3hWYWx1ZSA9IGZpbHRlclZhbHVlXG4gICAgaWYgKCFmaWx0ZXJWYWx1ZSkge1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLm9yaWdpbmFsRGF0YVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMub3JpZ2luYWxEYXRhLmZpbHRlcihpdGVtID0+XG4gICAgICAgIHRoaXMuY3VycmVudENvbHVtbnMuc29tZShjb2x1bW4gPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRPYmpWYWx1ZShpdGVtLGNvbHVtbi5maWVsZE5hbWUpPy50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLmluY2x1ZGVzKGZpbHRlclZhbHVlKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmKGZyb20gIT09ICdwYWdlUGFyYW1zJyAmJiBmcm9tICE9PSAnb25DaGFuZ2UnKSB0aGlzLnBhZ2VJbmRleCA9IDFcbiAgICB0aGlzLnNGaWx0ZXJEYXRhID0gdGhpcy5kYXRhU291cmNlLmRhdGFcbiAgICB0aGlzLmZpbHRlclRhYmxlTm9zID0gdGhpcy5zRmlsdGVyRGF0YT8ubGVuZ3RoXG4gICAgdGhpcy50b3RhbENvdW50ID0gdGhpcy5kYXRhLmxlbmd0aFxuICAgIGNvbnN0IHN0YXJ0ID0gKE51bWJlcih0aGlzLnBhZ2VJbmRleCkgLSAxKSAqIE51bWJlcih0aGlzLnBhZ2VTaXplKTtcbiAgICBjb25zdCBlbmQgPSBzdGFydCArIE51bWJlcih0aGlzLnBhZ2VTaXplKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhPy5zbGljZShzdGFydCwgZW5kKTtcbiAgICB0aGlzLmZpbHRlclJldGFpbihmcm9tID09PSAnb25DaGFuZ2UnID8gdGhpcy50YWJsZVBhcmFtcz8uc2VhcmNoRmlsdGVyRGF0YSB8fCB0aGlzLmZpbHRlckRhdGFBcnJheSA6IHRoaXMuZmlsdGVyRGF0YUFycmF5LGZyb20gKVxuICB9XG5cbiAgLyoqIFNLUzE1RkVCMjUgV2hldGhlciB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGVsZW1lbnRzIG1hdGNoZXMgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzLiAqL1xuICBpc0FsbFNlbGVjdGVkKCkge1xuICAgIC8vIGNoZWNrIGlmIGFsbCByb3dzIGFyZSBzZWxlY3RlZFxuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoO1xuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGg7XG4gICAgcmV0dXJuIG51bVNlbGVjdGVkID09PSBudW1Sb3dzO1xuICB9XG5cbiAgLyoqIFNLUzE1RkVCMjUgU2VsZWN0cyBhbGwgcm93cyBpZiB0aGV5IGFyZSBub3QgYWxsIHNlbGVjdGVkOyBvdGhlcndpc2UgY2xlYXIgc2VsZWN0aW9uLiAqL1xuICBtYXN0ZXJUb2dnbGUoKSB7XG4gICAgLy8gaWYgdGhlcmUgaXMgYSBzZWxlY3Rpb24gdGhlbiBjbGVhciB0aGF0IHNlbGVjdGlvblxuICAgIC8vIGVtaXQgdGhlIHNlbGVjdGVkIHZhbHVlIG9ubHkgdG8gcGFyZW50XG4gICAgaWYgKHRoaXMuaXNTb21lU2VsZWN0ZWQoKSkge1xuICAgICAgLy8gICB0byByZW1vdmUgdGhlIGVkaXRSb3csIGlmIHRoZSBjaGVja2JveCBpcyB1bmNoZWNrZWRcbiAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudD8uZWRpdFJvdykgZWxlbWVudFsnZWRpdFJvdyddID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLmVtaXQodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiBubyBpdGVtcyBhcmUgc2VsZWN0ZWQsIGVpdGhlciBzZWxlY3QgYWxsIGl0ZW1zIG9yIGNsZWFyIHRoZSBzZWxlY3Rpb25cbiAgICAgIC8vIGVtaXQgdGhlIHNlbGVjdGVkIHZhbHVlcyB0byBwYXJlbnRcbiAgICAgIHRoaXMuaXNBbGxTZWxlY3RlZCgpID8gdGhpcy5zZWxlY3Rpb24uY2xlYXIoKSA6IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB0aGlzLnNlbGVjdGlvbi5zZWxlY3Qocm93KSk7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLmVtaXQodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgQ2hlY2tzIHdoZXRoZXIgYW55IGl0ZW1zIGFyZSBjdXJyZW50bHkgc2VsZWN0ZWQgaW4gdGhlIHRhYmxlLlxuICBpc1NvbWVTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgZW1pdCB0aGUgY2hlY2sgYm94IHZhbHVlcywgdGhhdCBzZWxlY3RlZCBzZXBhcmF0ZWx5XG4gIHNlcGFyYXRlUm93U2VsZWN0KGRhdGE6IGFueSwgZWxlbWVudDogYW55KSB7XG4gICAgLy8gICB0byByZW1vdmUgdGhlIGVkaXRSb3cgaWQgY2hlY2sgYm94IGlzIHVuY2hlY2tlZCBvbiBzZXBhcmF0ZSByb3dcbiAgICBpZiAoZGF0YSAmJiBlbGVtZW50Py5lZGl0Um93KSB7XG4gICAgICBlbGVtZW50WydlZGl0Um93J10gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuZW1pdCh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZClcbiAgICB9XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgZGF0YSB0aGF0IHRvIGJlIHBhc3NlZCwgd2hlbiB0YWJsZSByb3cgaXMgY2xpY2tlZFxuICB0YWJsZUNsaWNrKGRhdGE6IGFueSkge1xuICAgIHRoaXMudGFibGVSb3dDbGljay5lbWl0KGRhdGEpO1xuICB9XG4gIGdldE5lc3RlZFZhbHVlKG9iajogYW55LCBwYXRoOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghb2JqIHx8ICFwYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xuICBcbiAgICByZXR1cm4gcGF0aFxuICAgICAgLnJlcGxhY2UoL1xcWyhcXGQrKVxcXS9nLCAnLiQxJykgLy8gdHVybnMgXCJtZW1iZXJzWzBdXCIgaW50byBcIm1lbWJlcnMuMFwiXG4gICAgICAuc3BsaXQoJy4nKVxuICAgICAgLnJlZHVjZSgoYWNjLCBwYXJ0KSA9PiAoYWNjICYmIGFjY1twYXJ0XSAhPT0gdW5kZWZpbmVkKSA/IGFjY1twYXJ0XSA6IHVuZGVmaW5lZCwgb2JqKTtcbiAgfVxuICBcbiAgLy9TS1MxNUZFQjI1IFJldGFpbiB0aGUgZmlsdGVyZGF0YVxuICBmaWx0ZXJSZXRhaW4oZmlsdGVya2V5OiBhbnksIGZyb20/OmFueSkge1xuICAgIGlmIChmaWx0ZXJrZXkgJiYgT2JqZWN0LmtleXMoZmlsdGVya2V5KS5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5zRmlsdGVyRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhID0gW107XG4gICAgICBsZXQgaXNEYXRhQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgZm9yIChsZXQga2V5IG9mIE9iamVjdC5rZXlzKGZpbHRlcmtleSkpIHtcbiAgICAgICAgaWYgKGZpbHRlcmtleVtrZXldICYmIGZpbHRlcmtleVtrZXldLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpc0RhdGFDaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFpc0RhdGFDaGVja2VkKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuc0ZpbHRlckRhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoZmlsdGVya2V5KSkge1xuICAgICAgICAgIGlmIChmaWx0ZXJrZXlba2V5XSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuc0ZpbHRlckRhdGEuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldE5lc3RlZFZhbHVlKGl0ZW0sIGtleSk7XG4gICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJrZXlba2V5XS5pbmNsdWRlcyh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICBcbiAgICAgICAgICAgIGNvbnN0IGRhdGExID0gWy4uLnRoaXMuZGF0YSwgLi4uZGF0YV07XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLnJlbW92ZUR1cGxpY2F0ZXMoZGF0YTEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZihmcm9tICE9PSAncGFnZVBhcmFtcycgJiYgZnJvbSAhPT0gJ29uQ2hhbmdlJykgdGhpcy5wYWdlSW5kZXggPSAxXG4gICAgY29uc3Qgc3RhcnQgPSAoTnVtYmVyKHRoaXMucGFnZUluZGV4KSAtIDEpICogTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgIHRoaXMuZmlsdGVyQm94RGF0YSA9IHRoaXMuZGF0YVxuICAgIHRoaXMuZmlsdGVyVGFibGVOb3MgPSB0aGlzLmZpbHRlckJveERhdGE/Lmxlbmd0aFxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhPy5zbGljZShzdGFydCwgZW5kKTtcbiAgICB0aGlzLmRhdGEgPSB0aGlzLm9yaWdpbmFsRGF0YVxuICAgIHRoaXMuc29ydERhdGEodGhpcy5jdXJyZW50U29ydENvbHVtbiAsdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbix1bmRlZmluZWQsZnJvbSlcbiAgfVxuXG4vLyBTS1MxNUZFQjI1IHRvIHJlbW92ZSBkdXBsaWNhdGUgb2JqZWN0IGZyb20gdHdvIGFycmF5cyAoc2FmZSBzdHJpbmdpZnkpXG5yZW1vdmVEdXBsaWNhdGVzKG9iamVjdHM6IGFueSkge1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHVuaXF1ZU9iamVjdHM6IGFueVtdID0gW107XG5cbiAgY29uc3Qgc2FmZVN0cmluZ2lmeSA9IChvYmo6IGFueSkgPT4ge1xuICAgIGNvbnN0IHNlZW5PYmpzID0gbmV3IFdlYWtTZXQoKTtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBudWxsOyAvLyByZXBsYWNlIHVuZGVmaW5lZCB0byBhdm9pZCBpc3N1ZXNcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNlZW5PYmpzLmhhcyh2YWx1ZSkpIHJldHVybjsgLy8gc2tpcCBjaXJjdWxhclxuICAgICAgICBzZWVuT2Jqcy5hZGQodmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuICB9O1xuXG4gIG9iamVjdHMuZm9yRWFjaCgob2JqOiBhbnkpID0+IHtcbiAgICBjb25zdCBrZXkgPSBzYWZlU3RyaW5naWZ5KG9iaik7XG4gICAgaWYgKCFzZWVuLmhhcyhrZXkpKSB7XG4gICAgICBzZWVuLmFkZChrZXkpO1xuICAgICAgdW5pcXVlT2JqZWN0cy5wdXNoKG9iaik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdW5pcXVlT2JqZWN0cztcbn1cblxuICAvLyBTS1MxNUZFQjI1ICBvbiBkZWxldGUgY2xpY2sgc2F2ZSB0aGUgZGF0YSBpbiB2YXJpYWJsZXNcbiAgZGVsZXRlUmVjb3JkKGRhdGE6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmZyb20gPT09ICdmb3JtQnVpbGRlcicpIHtcbiAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gWy4uLnRoaXMuZGF0YVNvdXJjZS5kYXRhXTsgLy8gQ3JlYXRlIGEgbmV3IHJlZmVyZW5jZVxuICAgICAgdXBkYXRlZERhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdXBkYXRlZERhdGE7IC8vIFJlYXNzaWduIHRvIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxuICAgICAgdGhpcy5kYXRhID0gdXBkYXRlZERhdGE7IC8vIFN5bmMgdGhpcy5kYXRhXG4gICAgICB0aGlzLmNvbXB1dGVTdW1tYXJ5VmFsdWVzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVsZXRlRGF0YSA9IGRhdGE7XG4gICAgICB0aGlzLmRlbGV0ZUluZGV4ID0gaW5kZXg7XG4gICAgICB0aGlzLmRlbGV0ZU1vZGFsID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1ICBhZnRlciBjbGlja2luZyB5ZXMgaW4gZGVsZXRlIGFsZXJ0IG1vZGFsLCBlbWl0IHRvIHBhcmVudFxuICBkZWxldGVSZWNvcmREYXRhKCkge1xuICAgIHRoaXMub25EZWxldGVEYXRhLmVtaXQoeyBkYXRhOiB0aGlzLmRlbGV0ZURhdGEsIGFsbERhdGE6IHRoaXMuZGF0YSB9KTtcbiAgICB0aGlzLmRlbGV0ZU1vZGFsID0gZmFsc2U7XG4gIH1cblxuICAvL1NLUzE1RkVCMjUgdG8gc2F2ZSB0aGUgZWRpdGVkIGRhdGEgaW4gdGFibGU7XG4gIHNhdmVCdXR0b24oKSB7XG4gICAgLy8gZW1pdHRpbmcgYWxsIGRhdGEgd2l0aCBzZWxlY3RlZCBkYXRhXG4gICAgdGhpcy5zYXZlQnV0dG9uRGF0YS5lbWl0KHsgc2VsZWN0ZWREYXRhOiB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCwgYWxsRGF0YTogdGhpcy5kYXRhIH0pO1xuICB9XG5cbiAgLy9TS1MxNUZFQjI1IHBhc3MgdGhlIHJlamVjdGVkIHJlYXNvblxuICBvbkVkaXQoZGF0YTogYW55KSB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JykgZGF0YVsnZWRpdFJvdyddID0gdHJ1ZTsgLy8gbWFkZSBlZGl0aW5nIHJvdyBhcyB0cnVlIC8vICBzb2x2ZSB1bmRlZmluZWQgZXJyb3Igb24gc3RyaW5nXG4gICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KGRhdGEpO1xuICAgIHRoaXMub25FZGl0RGF0YS5lbWl0KHsgZGF0YTogZGF0YSwgYWxsRGF0YTogdGhpcy5kYXRhIH0pO1xuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSB0YWJsZSB0b3AgYnV0dG9ucyBlbWl0XG4gIGNvbW1vbkJ1dHRvbkNsaWNrKGJ1dHRvbjogYW55KSB7XG4gICAgdGhpcy5idXR0b25FbWl0LmVtaXQoYnV0dG9uKTtcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJldHJpZXZlIGRhdGEgZnJvbSBvYmplY3RzLiBcbiAgLy8gSW4gJ2VsZW1lbnQnIHdlIHdpbGwgcGFzcyBvYmplY3QgYW5kIGluICdjb2x1bW4nIHdlIHdpbGwgcGFzcyBwYXRoIGFzIHN0cmluZyBlZy5lbXBsb3llZS5maW5hbmNlSW5mb1swXS51YW4gdG8gcmV0aWV2ZSB1YW4gdmFsdWUgXG4gIGdldE9ialZhbHVlKGVsZW1lbnQ6IGFueSwgY29sdW1uOiBzdHJpbmcpIHtcbiAgICBpZiAoIWVsZW1lbnQgfHwgIWNvbHVtbikge1xuICAgICAgcmV0dXJuICcnOyAvLyBSZXR1cm4gZW1wdHkgc3RyaW5nIG9yIG51bGwgaWYgZWxlbWVudCBvciBjb2x1bW4gaXMgaW52YWxpZFxuICAgIH1cbiAgICBsZXQgZmxkcyA9IGNvbHVtbi5zcGxpdCgnLicpO1xuICAgIGxldCBjdXJyZW50ID0gZWxlbWVudDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBzcGxpdEZsZHMgPSBmbGRzW2ldLnNwbGl0KCdbJyk7XG4gICAgICBpZiAoc3BsaXRGbGRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjdXJyZW50ID0gY3VycmVudFtmbGRzW2ldXSA/PyAnJzsgLy8gVXNlIG51bGxpc2ggY29hbGVzY2luZyB0byBoYW5kbGUgdW5kZWZpbmVkL251bGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBpbmRleCA9IE51bWJlcihzcGxpdEZsZHNbMV0uc3BsaXQoJ10nKVswXSk7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W3NwbGl0Rmxkc1swXV0/LltpbmRleF0gPz8gJyc7IC8vIFNhZmVseSBhY2Nlc3MgYXJyYXkgaW5kZXhcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cbiAgLy9TS1MxNUZFQjI1IGh5cGVybGlubCBjb2x1bW5zIG9ubHkgZW1pdHRlZFxuICBvbkNsaWNrSHlwZXJsaW5rKGNvbHVtbjogYW55LCBlbGVtZW50OiBhbnksIGlzSHlwZXJMaW5rOiBhbnkpIHtcbiAgICBpZiAoaXNIeXBlckxpbmspIHRoaXMuaHlwZXJMaW5rRW1pdC5lbWl0KHsgY29sdW1uOiBjb2x1bW4sIGVsZW1lbnQ6IGVsZW1lbnQgfSk7XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IG9uIGFkZCByZWNvcmQgaW4gdGFibGUsIHRoZSAnaW5saW5lRWxlbWVudCcgdmFsdWVzIHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIHRhYmxlIGRhdGEgXG4gIGFkZFRhYmxlUmVjb3JkKGVsZW1lbnQ6IGFueSxmcm9tPzphbnkpIHtcbiAgICBpZiAodGhpcy5jb25maWdQYWdpbmF0aW9uID09PSBmYWxzZSB8fCB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IHRoaXMudG90YWxSZWNvcmRzKSB7XG4gICAgICB2YXIgb2JqOiBhbnkgPSB7fTtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhlbGVtZW50KTtcbiAgICAgIGtleXMuZm9yRWFjaCgoZWxlbWVudEtleTogYW55KSA9PiB7XG4gICAgICAgIG9ialtlbGVtZW50S2V5XSA9ICcnO1xuICAgICAgfSk7XG4gICAgICAvLyBTS1MyME1BUjI1IENvbXB1dGUgc3VtbWFyeSBjb2x1bW5zIGZvciB0aGUgbmV3IHJvd1xuICAgICAgaWYgKHRoaXMuc3VtbWFyeUNvbHVtbnMgJiYgdGhpcy5zdW1tYXJ5Q29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc3VtbWFyeUNvbHVtbnMuZm9yRWFjaChzdW1tYXJ5Q29sID0+IHtcbiAgICAgICAgICBpZiAoc3VtbWFyeUNvbC50eXBlID09PSAnY2FsY3VsYXRpb24nICYmIHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnc3VtJyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzKSB7XG4gICAgICAgICAgICBjb25zdCBzdW0gPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnJlZHVjZSgoYWNjLCBvcGVyYW5kKSA9PiBhY2MgKyAoTnVtYmVyKG9ialtvcGVyYW5kXSkgfHwgMCksIDApO1xuICAgICAgICAgICAgb2JqW3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHN1bTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN1bW1hcnlDb2wudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJyAmJiBzdW1tYXJ5Q29sLm9wZXJhdGlvbiA9PT0gJ3N1YnRyYWN0JyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzKSB7XG4gICAgICAgICAgICBjb25zdCBzdW0gPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnJlZHVjZSgoYWNjLCBvcGVyYW5kKSA9PiBhY2MgLSAoTnVtYmVyKG9ialtvcGVyYW5kXSkgfHwgMCksIDApO1xuICAgICAgICAgICAgb2JqW3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHN1bTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN1bW1hcnlDb2wudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJyAmJiBzdW1tYXJ5Q29sLm9wZXJhdGlvbiA9PT0gJ211bHRpcGx5JyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzKSB7XG4gICAgICAgICAgICBjb25zdCBzdW0gPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnJlZHVjZSgoYWNjLCBvcGVyYW5kKSA9PiBhY2MgKiAoTnVtYmVyKG9ialtvcGVyYW5kXSkgfHwgMCksIDApO1xuICAgICAgICAgICAgb2JqW3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHN1bTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoc3VtbWFyeUNvbC50eXBlID09PSAnY2FsY3VsYXRpb24nICYmIHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnc3VidHJhY3QnICYmIHN1bW1hcnlDb2wub3BlcmFuZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1bSA9IHN1bW1hcnlDb2wub3BlcmFuZHMuc2xpY2UoMSkucmVkdWNlKFxuICAgICAgICAgICAgICAoYWNjLCBvcGVyYW5kKSA9PiBhY2MgLSAoTnVtYmVyKG9ialtvcGVyYW5kXSkgfHwgMCksXG4gICAgICAgICAgICAgIE51bWJlcihvYmpbc3VtbWFyeUNvbC5vcGVyYW5kc1swXV0pIHx8IDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBvYmpbc3VtbWFyeUNvbC5maWVsZE5hbWVdID0gc3VtO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChzdW1tYXJ5Q29sLnR5cGUgPT09ICdjYWxjdWxhdGlvbicgJiYgc3VtbWFyeUNvbC5vcGVyYXRpb24gPT09ICdtdWx0aXBseScgJiYgc3VtbWFyeUNvbC5vcGVyYW5kcykge1xuICAgICAgICAgICAgY29uc3QgcHJvZHVjdCA9IHN1bW1hcnlDb2wub3BlcmFuZHMucmVkdWNlKFxuICAgICAgICAgICAgICAoYWNjLCBvcGVyYW5kKSA9PiBhY2MgKiAoTnVtYmVyKG9ialtvcGVyYW5kXSkgfHwgMCksXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBvYmpbc3VtbWFyeUNvbC5maWVsZE5hbWVdID0gcHJvZHVjdDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5kYXRhLnB1c2gob2JqKTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gIHRoaXMuZGF0YTtcbiAgICAgIHRoaXMub3JpZ2luYWxEYXRhID0gIHRoaXMuZGF0YTtcblxuICAgICAgaWYgKHRoaXMuc3RpY2t5Q29sdW1uID09PSB0cnVlICYmIHRoaXMuY3VycmVudENvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5zdGlja3lDb25kaXRpb24gPSB0aGlzLmN1cnJlbnRDb2x1bW5zPy5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0aWNreUNvbmRpdGlvbiA9IHRoaXMuY3VycmVudENvbHVtbnM/Lmxlbmd0aCArIDE7XG4gICAgICB9XG4gICAgICB0aGlzLnBhZ2VTaXplID0gMTBcbiAgICAgIHRoaXMudG90YWxDb3VudCA9IHRoaXMuZGF0YS5sZW5ndGhcbiAgICAgIHRoaXMuZmlsdGVyVGFibGVOb3MgKz0gMSBcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gTWF0aC5jZWlsKHRoaXMudG90YWxDb3VudCAvIHRoaXMucGFnZVNpemUpO1xuICAgICAgY29uc3Qgc3RhcnQgPSAoTnVtYmVyKHRoaXMucGFnZUluZGV4KSAtIDEpICogTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBOdW1iZXIodGhpcy5wYWdlU2l6ZSk7XG4gICAgICBpZiAoIXRoaXMuaXNQYWdpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YT8uc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QodGhpcy5kYXRhW3RoaXMuZGF0YS5sZW5ndGggLSAxXSk7XG4gICAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5kYXRhW3RoaXMuZGF0YS5sZW5ndGggLSAxXS5lZGl0Um93ID0gdHJ1ZTtcbiAgICAgIH0gICAgICBcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGFnZUluZGV4ID0gTWF0aC5jZWlsKHRoaXMudG90YWxSZWNvcmRzIC8gMTApO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ054dERhdGFUYWJsZScsIEpTT04uc3RyaW5naWZ5KHsgYWRkUmVjb3JkOiB0cnVlLCBwYWdlU2l6ZTogMTAsIHBhZ2VJbmRleDogcGFnZUluZGV4LCBjdXJyZW50U29ydENvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgY3VycmVudFNvcnREaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gfSkpO1xuICAgICAgaWYoZnJvbSAhPT0gJ29uQ2hhbmdlJyl0aGlzLk54dFRhYmxlRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogMTAsIHBhZ2VJbmRleDogcGFnZUluZGV4IH0sIHRhYmxlU2VhcmNoOiB7IGZpZWxkczogdGhpcy5jdXJyZW50Q29sdW1ucywgdmFsdWU6IHRoaXMuc2VhcmNoQm94VmFsdWUgfSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gLGxpc3RWaWV3OiB0aGlzLnNlbGVjdGVkVmlld30gfSlcbiAgICB9XG4gICAgdGhpcy5jb21wdXRlU3VtbWFyeVZhbHVlcyhmcm9tKTtcbiAgICBpZihmcm9tICE9PSAnb25DaGFuZ2UnKXRoaXMuTnh0VGFibGVQYXJhbXNFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4IH0sdGFibGVTZWFyY2g6IHRoaXMuc2VhcmNoQm94VmFsdWUsIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uICxsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9fSlcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgQWN0aW9uIGJ1dHRvbiBjb25kaXRpb25hbGx5IGRpc3BsYXllZCBmdW5jdGlvblxuICBpc0NvbmRpdGlvbk1ldChlbGVtZW50OiBhbnksIGNvbmRpdGlvbnM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChjb25kaXRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHsgYW5kQ29uZGl0aW9uTGlzdCwgb3JDb25kaXRpb25MaXN0IH0gPSBjb25kaXRpb25zO1xuICAgICAgLy8gIElmIGFuZENvbmRpdGlvbkxpc3QgZXhpc3RzLCBjaGVjayB0aGF0IGFsbCBjb25kaXRpb25zIGFyZSBtZXRcbiAgICAgIGNvbnN0IGlzQW5kQ29uZGl0aW9uTWV0ID0gYW5kQ29uZGl0aW9uTGlzdCA/IGFuZENvbmRpdGlvbkxpc3QuZXZlcnkoKGNvbmQ6IHsgY29uZGl0aW9uOiBzdHJpbmcgfCBhbnlbXTsgY29sdW1uOiBzdHJpbmcgfCBudW1iZXI7IH0pID0+XG4gICAgICAgIGNvbmQuY29uZGl0aW9uLmluY2x1ZGVzKGVsZW1lbnRbY29uZC5jb2x1bW5dKVxuICAgICAgKSA6IHRydWU7IC8vICBJZiBubyBhbmRDb25kaXRpb25MaXN0LCBjb25zaWRlciBpdCBhcyBhbHdheXMgbWV0XG4gICAgICAvLyAgSWYgb3JDb25kaXRpb25MaXN0IGV4aXN0cywgY2hlY2sgaWYgYXQgbGVhc3Qgb25lIGNvbmRpdGlvbiBpcyBtZXRcbiAgICAgIGNvbnN0IGlzT3JDb25kaXRpb25NZXQgPSBvckNvbmRpdGlvbkxpc3QgPyBvckNvbmRpdGlvbkxpc3Quc29tZSgoY29uZDogeyBjb25kaXRpb246IHN0cmluZyB8IGFueVtdOyBjb2x1bW46IHN0cmluZyB8IG51bWJlcjsgfSkgPT5cbiAgICAgICAgY29uZC5jb25kaXRpb24uaW5jbHVkZXMoZWxlbWVudFtjb25kLmNvbHVtbl0pXG4gICAgICApIDogdHJ1ZTsgLy8gIElmIG5vIG9yQ29uZGl0aW9uTGlzdCwgY29uc2lkZXIgaXQgYXMgYWx3YXlzIG1ldFxuICAgICAgLy8gIFJldHVybiB0cnVlIGlmIHRoZSBBTkQgY29uZGl0aW9uIGlzIG1ldCBhbmQgdGhlIE9SIGNvbmRpdGlvbiBpcyBtZXRcbiAgICAgIHJldHVybiBpc0FuZENvbmRpdGlvbk1ldCAmJiBpc09yQ29uZGl0aW9uTWV0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IGNvbmZpZyBzZWFyY2ggZmlsdGVyIGJveCBmdW5jdGlvblxuICBvblNlYXJjaChldmVudDogYW55LGZyb20/OmFueSkge1xuICAgIHRoaXMuc2VhcmNoQm94VmFsdWUgPSBldmVudDsgLy8gVXBkYXRlIHRoZSBkaXNwbGF5ZWQgdmFsdWUgaW4gdGhlIHNlYXJjaCBib3hcbiAgICBpZiAodGhpcy5zZWFyY2hDb25maWdzIHx8IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA9PT0gdGhpcy50b3RhbFJlY29yZHMpIHtcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gMVxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IDEwXG4gICAgICBpZihmcm9tICE9PSAnb25DaGFuZ2UnKXRoaXMuTnh0VGFibGVFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IE51bWJlcih0aGlzLnBhZ2VJbmRleCkgfSwgdGFibGVTZWFyY2g6IHsgZmllbGRzOiB0aGlzLmN1cnJlbnRDb2x1bW5zLCB2YWx1ZTogdGhpcy5zZWFyY2hCb3hWYWx1ZSB9LCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiAsbGlzdFZpZXc6IHRoaXMuc2VsZWN0ZWRWaWV3fSB9KVxuICAgIH1cbiAgICBpZihmcm9tICE9PSAnb25DaGFuZ2UnKXRoaXMuTnh0VGFibGVQYXJhbXNFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4IH0sdGFibGVTZWFyY2g6IHRoaXMuc2VhcmNoQm94VmFsdWUsIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uICxsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9fSlcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgSWYgdGhlIHZhbHVlIGluIHRoZSBzZWFyY2ggYm94IGlzIGVtcHR5LCBjYWxsIHRoZSBvblNlYXJjaCBmdW5jdGlvbiBhdXRvbWF0aWNhbGx5XG4gIGVtcHR5U2VhcmNoKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoIWV2ZW50LnRyaW0oKSAmJiAodGhpcy5wcmV2U2VhcmNoICE9IGV2ZW50LnRyaW0oKSkpIHtcbiAgICAgIHRoaXMub25TZWFyY2goZXZlbnQpXG4gICAgfVxuICAgIHRoaXMucHJldlNlYXJjaCA9IGV2ZW50LnRyaW0oKVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSBpbmZvU2lkZXNjcmVlbiBlbWl0IFxuICBvblNpZGVOYXZJbmZvQ2xpY2soZGF0YTogYW55LCBjb2w6IGFueSkge1xuICAgIHRoaXMuc2lkZU5hdkVtaXQuZW1pdCh7XG4gICAgICBkYXRhLCBjb2wsXG4gICAgICBjb25maWc6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IGZvciBhY3RpdmUgY29sdW1uIHNlbGVjdFxuICBvbkNvbHVtbkNsaWNrKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZykge1xuICAgIHRoaXMuYWN0aXZlQ29sdW1uID0gdW5pcXVlSWRlbnRpZmllcjtcbiAgICBpZiAoIXRoaXMuaXNFZGl0YWJsZSkge1xuICAgICAgLy8gRXhpc3Rpbmcgc29ydC9maWx0ZXIgbG9naWNcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbiA9PT0gdW5pcXVlSWRlbnRpZmllcikge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbiA9IG51bGw7XG4gICAgICB0aGlzLmNvbHVtblNlbGVjdGVkLmVtaXQobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW4gPSB1bmlxdWVJZGVudGlmaWVyO1xuICAgICAgY29uc3QgY29sdW1uRGF0YSA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLm1hcChyb3cgPT4gKHtcbiAgICAgICAgdmFsdWU6IHJvd1t1bmlxdWVJZGVudGlmaWVyXSxcbiAgICAgICAgaWQ6IHJvdy5pZCAvLyBvciB1bmlxdWUgaWRlbnRpZmllclxuICAgICAgfSkpO1xuICAgICAgdGhpcy5jb2x1bW5TZWxlY3RlZC5lbWl0KHsgdW5pcXVlSWRlbnRpZmllciwgZGF0YTogY29sdW1uRGF0YSB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBTS1MxNUZFQjI1IGZvciBjbG9zZSBzZWFyY2ggZmlsdGVyIGJveFxuICBjbG9zZWZpbHRlcihmcm9tPzphbnkpIHtcbiAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZSB8fCAxMFxuICAgIHRoaXMucGFnZUluZGV4ID0gMVxuICAgIHRoaXMuZmlsdGVyRGF0YUFycmF5W3RoaXMuc2VsZWN0ZWRGaWx0ZXJdID0gW11cbiAgICB0aGlzLmlzUmVzaXplZCA9IGZhbHNlXG4gICAgaWYgKHRoaXMuY29uZmlnUGFnaW5hdGlvbiA9PT0gZmFsc2UgfHwgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSB0aGlzLnRvdGFsUmVjb3Jkcykge1xuICAgICAgdGhpcy5maWx0ZXJSZXRhaW4odGhpcy5maWx0ZXJEYXRhQXJyYXkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKGZyb20gIT09ICdvbkNoYW5nZScpdGhpcy5OeHRUYWJsZUVtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IDEwLCBwYWdlSW5kZXg6IDEgfSwgdGFibGVTZWFyY2g6IHsgZmllbGRzOiB0aGlzLmN1cnJlbnRDb2x1bW5zLCB2YWx1ZTogdGhpcy5zZWFyY2hCb3hWYWx1ZSB9LCBzZWFyY2hGaWx0ZXJEYXRhOiB0aGlzLmZpbHRlckRhdGFBcnJheSwgc29ydDogeyBjb2x1bW46IHRoaXMuY3VycmVudFNvcnRDb2x1bW4sIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50U29ydERpcmVjdGlvbiAsbGlzdFZpZXc6IHRoaXMuc2VsZWN0ZWRWaWV3fSB9KVxuICAgIH1cbiAgICBpZihmcm9tICE9PSAnb25DaGFuZ2UnKXRoaXMuTnh0VGFibGVQYXJhbXNFbWl0LmVtaXQoeyBwYWdpbmF0aW9uOiB7IHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLCBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4IH0sdGFibGVTZWFyY2g6IHRoaXMuc2VhcmNoQm94VmFsdWUsIHNlYXJjaEZpbHRlckRhdGE6IHRoaXMuZmlsdGVyRGF0YUFycmF5LCBzb3J0OiB7IGNvbHVtbjogdGhpcy5jdXJyZW50U29ydENvbHVtbiwgZGlyZWN0aW9uOiB0aGlzLmN1cnJlbnRTb3J0RGlyZWN0aW9uICxsaXN0VmlldzogdGhpcy5zZWxlY3RlZFZpZXd9fSlcbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgc2VhcmNoIGZpbHRlciBib3ggY2hlY2tib3ggcmV0YWluXG4gIGlzU2VsZWN0ZWQoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmZpbHRlckRhdGFBcnJheVt0aGlzLnNlbGVjdGVkRmlsdGVyXSAmJiB0aGlzLmZpbHRlckRhdGFBcnJheVt0aGlzLnNlbGVjdGVkRmlsdGVyXS5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgc2VhcmNoIGZpbHRlciBib3ggY2hlY2tib3ggc2VsZWN0XG4gIGNoZWNrZWREYXRhKGV2ZW50OiBhbnksZnJvbT86YW55KSB7XG4gICAgbGV0IHNlbGVjdGVkQXJyYXkgPSBbXVxuICAgIHNlbGVjdGVkQXJyYXkgPSB0aGlzLmZpbHRlckRhdGFBcnJheVt0aGlzLnNlbGVjdGVkRmlsdGVyXSA/IHRoaXMuZmlsdGVyRGF0YUFycmF5W3RoaXMuc2VsZWN0ZWRGaWx0ZXJdIDogW11cbiAgICBpZiAoc2VsZWN0ZWRBcnJheSAmJiBzZWxlY3RlZEFycmF5LmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgc2VsZWN0ZWRBcnJheSA9IHNlbGVjdGVkQXJyYXkuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0gIT09IGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0ZWRBcnJheS5wdXNoKGV2ZW50KTtcbiAgICB9XG4gICAgdGhpcy5maWx0ZXJEYXRhQXJyYXlbdGhpcy5zZWxlY3RlZEZpbHRlcl0gPSBzZWxlY3RlZEFycmF5XG4gICAgdGhpcy5pc1Jlc2l6ZWQgPSBzZWxlY3RlZEFycmF5Py5sZW5ndGggPiAwXG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAhPT0gdGhpcy50b3RhbFJlY29yZHMgJiYgdGhpcy5jb25maWdQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IDFcbiAgICAgIHRoaXMucGFnZVNpemUgPSAxMFxuICAgICAgaWYoZnJvbSAhPT0gJ29uQ2hhbmdlJyl0aGlzLk54dFRhYmxlRW1pdC5lbWl0KHsgcGFnaW5hdGlvbjogeyBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwgcGFnZUluZGV4OiBOdW1iZXIodGhpcy5wYWdlSW5kZXgpIH0sIHRhYmxlU2VhcmNoOiB7IGZpZWxkczogdGhpcy5jdXJyZW50Q29sdW1ucywgdmFsdWU6IHRoaXMuc2VhcmNoQm94VmFsdWUgfSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gLGxpc3RWaWV3OiB0aGlzLnNlbGVjdGVkVmlld30gfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJSZXRhaW4odGhpcy5maWx0ZXJEYXRhQXJyYXkpXG4gICAgfVxuICAgIGlmKGZyb20gIT09ICdvbkNoYW5nZScpdGhpcy5OeHRUYWJsZVBhcmFtc0VtaXQuZW1pdCh7IHBhZ2luYXRpb246IHsgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXggfSx0YWJsZVNlYXJjaDogdGhpcy5zZWFyY2hCb3hWYWx1ZSwgc2VhcmNoRmlsdGVyRGF0YTogdGhpcy5maWx0ZXJEYXRhQXJyYXksIHNvcnQ6IHsgY29sdW1uOiB0aGlzLmN1cnJlbnRTb3J0Q29sdW1uLCBkaXJlY3Rpb246IHRoaXMuY3VycmVudFNvcnREaXJlY3Rpb24gLGxpc3RWaWV3OiB0aGlzLnNlbGVjdGVkVmlld319KVxuICB9XG5cbiAgLy8gU0tTMTVGRUIyNSAgYWN0aW9uIGNvbHVtbiBkcm9wZG93biBidXR0b25zIGNsb3NlXG4gIHByaXZhdGUgYWRkQ2xpY2tPdXRzaWRlTGlzdGVuZXIoKSB7XG4gICAgaWYgKCF0aGlzLmNsaWNrTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuY2xpY2tMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5jbG9zZXN0KCcuZHJvcGRvd24nKSkge1xuICAgICAgICAgIHRoaXMuY3VycmVudE9wZW5JbmRleCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vU0tTMTVGRUIyNSBpZiBjbG9zZSB0aGUgZHJvcGRvd24gbWVudSBzdG9wIHRoZSBjbGljayBsaXN0ZW5lclxuICBwcml2YXRlIHJlbW92ZUNsaWNrTGlzdGVuZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xpY2tMaXN0ZW5lcikge1xuICAgICAgdGhpcy5jbGlja0xpc3RlbmVyKCk7XG4gICAgICB0aGlzLmNsaWNrTGlzdGVuZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNLUzE1RkVCMjUgIGFjdGlvbiBjb2x1bW4gZHJvcGRvd24gYnV0dG9ucyBvcGVuIC8gY2xvc2VcbiAgdG9nZ2xlRHJvcGRvd24oaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuY3VycmVudE9wZW5JbmRleCA9IHRoaXMuY3VycmVudE9wZW5JbmRleCA9PT0gaW5kZXggPyBudWxsIDogaW5kZXg7XG4gICAgdGhpcy5hZGRDbGlja091dHNpZGVMaXN0ZW5lcigpO1xuICB9XG5cbiAgLy9TS1MxNUZFQjI1IGFjdGlvbiBidXR0b24gZXZudCBlbWl0XG4gIGFjdGlvbkJ1dHRvbkNsaWNrZWQoZXZlbnQ6IGFueSwgZGF0YTogYW55KSB7XG4gICAgdGhpcy5hY3Rpb25CdXR0b25FbWl0LmVtaXQoeyBldmVudCwgZGF0YSB9KVxuICB9XG5cbiAgcmVtb3ZlQ29sKHVuaXF1ZUlkZW50aWZpZXI6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW4gPSBudWxsO1xuICAgIC8vIEVtaXQgZGVzZWxlY3Rpb25cbiAgICBpZiAoIXRoaXMuaXNFZGl0YWJsZSkge1xuICAgICAgLy8gRXhpc3Rpbmcgc29ydC9maWx0ZXIgbG9naWNcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW5EYXRhID0gdGhpcy5kYXRhU291cmNlLmRhdGEubWFwKHJvdyA9PiAoe1xuICAgICAgdmFsdWU6IHJvd1t1bmlxdWVJZGVudGlmaWVyXSxcbiAgICAgIGlkOiByb3cuaWQgLy8gb3IgdW5pcXVlIGlkZW50aWZpZXJcbiAgICB9KSk7XG4gICAgdGhpcy5yZW1vdmVDb2x1bW4uZW1pdCh7IHVuaXF1ZUlkZW50aWZpZXIsIGRhdGE6IGNvbHVtbkRhdGEgfSk7XG5cbiAgfVxuICBlbWl0VGFibGVEYXRhVmFsdWUodXBkYXRlZFRhYmxlRGF0YTogYW55KTogdm9pZCB7XG4gICAgbGV0IGNoYW5nZTogYW55ID17fTtcbiAgICBjaGFuZ2VbJ2Zyb21RdWVzdGlvbklkJ10gPSB0aGlzLnF1ZXN0aW9uLmlkO1xuICAgIGNoYW5nZVsndmFsdWVPYmonXSA9IHVwZGF0ZWRUYWJsZURhdGE7XG4gICAgY2hhbmdlWydyZWZlcmVuY2VGaWVsZCddID0gdGhpcy5xdWVzdGlvbi5yZWZlcmVuY2VGaWVsZDtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoY2hhbmdlKTtcbiAgfVxuXG4gIHVwZGF0ZUVkaXQoaW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSwgZWxlbWVudDogYW55LCBjb2x1bW46IGFueSx0eXBlPzphbnkpOiB2b2lkIHsgXG4gICAgaWYodHlwZSA9PT0gJ2xpc3QnKXtcbiAgICAgIHZhbHVlID0gKHZhbHVlLnZhbHVlT2JqICYmIHR5cGVvZiB2YWx1ZS52YWx1ZU9iaiA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUudmFsdWVPYmopKSA/IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUodmFsdWU/LnZhbHVlT2JqLCB2YWx1ZT8uZmllbGQpIDogdmFsdWUudmFsdWVPYmo7XG4gICAgfVxuICAgIGNvbnN0IHVwZGF0ZWRFbGVtZW50ID0gdGhpcy51cGRhdGVWYWx1ZShlbGVtZW50LCBjb2x1bW4sIHZhbHVlKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YVtpbmRleF0gPSB1cGRhdGVkRWxlbWVudDtcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YVxuICAgIC8vIFNLUzIySlVMMjUgSW52YWxpZGF0ZSBjYWNoZSBmb3IgdGhpcyByb3cgYW5kIGNvbHVtblxuICAgIGNvbnN0IHJvd0lkID0gZWxlbWVudD8uaWQgPz8gaW5kZXg7XG4gICAgY29uc3Qga2V5ID0gYCR7cm93SWR9LSR7Y29sdW1uID8/ICd1bmtub3duJ31gO1xuICAgIHRoaXMucXVlc3Rpb25zQ2FjaGUuZGVsZXRlKGtleSk7XG4gICAgLy8gU0tTMjBNQVIyNSBFbnN1cmUgdGhpcy5kYXRhIGlzIHVwZGF0ZWQgc2luY2Ugc3VtbWFyeSB1c2VzIHRoZSBmdWxsIGRhdGFzZXRcbiAgICBjb25zdCBkYXRhSW5kZXggPSB0aGlzLmRhdGEuZmluZEluZGV4KChpdGVtOiBhbnkpID0+IGl0ZW0gPT09IGVsZW1lbnQpO1xuICAgIGlmIChkYXRhSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmRhdGFbZGF0YUluZGV4XSA9IHVwZGF0ZWRFbGVtZW50O1xuICAgIH1cbiAgICAvLyBSZWNvbXB1dGUgc3VtbWFyeSBjb2x1bW5zIGZvciB0aGUgdXBkYXRlZCByb3dcbiAgICBpZiAodGhpcy5zdW1tYXJ5Q29sdW1ucyAmJiB0aGlzLnN1bW1hcnlDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc3VtbWFyeUNvbHVtbnMuZm9yRWFjaChzdW1tYXJ5Q29sID0+IHtcbiAgICAgICAgaWYgKHN1bW1hcnlDb2wudHlwZSA9PT0gJ2NhbGN1bGF0aW9uJyAmJiBzdW1tYXJ5Q29sLm9wZXJhbmRzICYmIHN1bW1hcnlDb2wub3BlcmFuZHMubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnc3VtJykge1xuICAgICAgICAgICAgdXBkYXRlZEVsZW1lbnRbc3VtbWFyeUNvbC5maWVsZE5hbWVdID0gc3VtbWFyeUNvbC5vcGVyYW5kcy5yZWR1Y2UoXG4gICAgICAgICAgICAgIChhY2MsIG9wZXJhbmQpID0+IGFjYyArIChOdW1iZXIodXBkYXRlZEVsZW1lbnRbb3BlcmFuZF0pIHx8IDApLFxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3VtbWFyeUNvbC5vcGVyYXRpb24gPT09ICdtdWx0aXBseScpIHtcbiAgICAgICAgICAgIHVwZGF0ZWRFbGVtZW50W3N1bW1hcnlDb2wuZmllbGROYW1lXSA9IHN1bW1hcnlDb2wub3BlcmFuZHMucmVkdWNlKFxuICAgICAgICAgICAgICAoYWNjLCBvcGVyYW5kKSA9PiBhY2MgKiAoTnVtYmVyKHVwZGF0ZWRFbGVtZW50W29wZXJhbmRdKSB8fCAwKSwgIC8vIFN0YXJ0IHdpdGggMSBpbnN0ZWFkIG9mIDBcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN1bW1hcnlDb2wub3BlcmF0aW9uID09PSAnc3VidHJhY3QnKSB7XG4gICAgICAgICAgICB1cGRhdGVkRWxlbWVudFtzdW1tYXJ5Q29sLmZpZWxkTmFtZV0gPSBzdW1tYXJ5Q29sLm9wZXJhbmRzLnNsaWNlKDEpLnJlZHVjZShcbiAgICAgICAgICAgICAgKGFjYywgb3BlcmFuZCkgPT4gYWNjIC0gKE51bWJlcih1cGRhdGVkRWxlbWVudFtvcGVyYW5kXSkgfHwgMCksXG4gICAgICAgICAgICAgIE51bWJlcih1cGRhdGVkRWxlbWVudFtzdW1tYXJ5Q29sLm9wZXJhbmRzWzBdXSkgfHwgMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGFbaW5kZXhdID0gdXBkYXRlZEVsZW1lbnQ7XG4gICAgICBpZiAoZGF0YUluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLmRhdGFbZGF0YUluZGV4XSA9IHVwZGF0ZWRFbGVtZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5mcm9tID09PSAnZm9ybUJ1aWxkZXInKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YVtpbmRleF0gPSB0aGlzLnVwZGF0ZVZhbHVlKGVsZW1lbnQsIGNvbHVtbiwgdmFsdWUpO1xuICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhU291cmNlLmRhdGFcbiAgICB9XG4gICAgdGhpcy5jb21wdXRlU3VtbWFyeVZhbHVlcygpO1xuICB9XG4gIC8vIFNLUzE4TUFSMjUgdXBkYXRlIGVsZW1lbnRcbiAgdXBkYXRlVmFsdWUoZWxlbWVudDogYW55LCBjb2x1bW46IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIGxldCBmbGRzID0gY29sdW1uPy5zcGxpdCgnLicpO1xuICAgIGxldCBvYmogPSBlbGVtZW50OyAvLyBLZWVwIHJlZmVyZW5jZSB0byB0aGUgb3JpZ2luYWwgb2JqZWN0XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZsZHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBsZXQgc3BsaXRGbGRzID0gZmxkc1tpXS5zcGxpdCgnWycpO1xuICAgICAgaWYgKHNwbGl0Rmxkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgb2JqID0gb2JqW2ZsZHNbaV1dIHx8IChvYmpbZmxkc1tpXV0gPSB7fSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgaW5kZXggPSBOdW1iZXIoc3BsaXRGbGRzWzFdLnNwbGl0KCddJylbMF0pO1xuICAgICAgICBvYmogPSBvYmpbc3BsaXRGbGRzWzBdXSB8fCAob2JqW3NwbGl0Rmxkc1swXV0gPSBbXSk7XG4gICAgICAgIG9iaiA9IG9ialtpbmRleF0gfHwgKG9ialtpbmRleF0gPSB7fSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBmaW5hbCBwcm9wZXJ0eVxuICAgIGxldCBsYXN0S2V5ID0gZmxkc1tmbGRzLmxlbmd0aCAtIDFdO1xuICAgIGxldCBzcGxpdExhc3RLZXkgPSBsYXN0S2V5LnNwbGl0KCdbJyk7XG4gICAgaWYgKHNwbGl0TGFzdEtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgIG9ialtsYXN0S2V5XSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgaW5kZXggPSBOdW1iZXIoc3BsaXRMYXN0S2V5WzFdLnNwbGl0KCddJylbMF0pO1xuICAgICAgb2JqW3NwbGl0TGFzdEtleVswXV1baW5kZXhdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBleHBlbnNlQXR0YWNobWVudChldmVudDogYW55KSB7XG4gICAgdGhpcy5maWxlRW1pdC5lbWl0KGV2ZW50KVxuICB9XG4gIGxpc3RWaWV3RW1pdChldmVudCl7XG4gICAgaWYoZXZlbnQuYWN0aW9uID09PSAnZmlsdGVyR2V0Jyl7XG4gICAgICBldmVudFsnZGF0YSddPSB0aGlzLmNvbHVtbnM/LmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmZpbHRlciA9PT0gdHJ1ZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4uZmllbGROYW1lKVxuICAgICAgaWYoIXRoaXMudGFibGVGaWx0ZXJEYXRhIHx8IHRoaXMudGFibGVGaWx0ZXJEYXRhLmxlbmd0aCA9PT0gMCl7XG4gICAgICAgIHRoaXMuTnh0VGFibGVGaWx0ZXJFbWl0LmVtaXQoZXZlbnQpXG4gICAgICB9XG4gICAgfSBlbHNleyBcbiAgICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdzZWxlY3QnIHx8IGV2ZW50LmFjdGlvbiA9PT0gJ3NhdmUnKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gZXZlbnQuZGF0YS5maWx0ZXJOYW1lO1xuICAgICAgICB0aGlzLmN1cnJlbnRWaWV3RmlsdGVyID0gZXZlbnQuZGF0YTtcbiAgICAgICAgdGhpcy5uZ09uQ2hhbmdlcyh7fSlcbiAgICAgIH1cbiAgICAgIHRoaXMuTnh0VGFibGVGaWx0ZXJFbWl0LmVtaXQoZXZlbnQpXG4gICAgfVxuICB9XG4gIGFzeW5jIG9uSW1hZ2VFZGl0KHF1ZXM6IGFueSkge1xuICAgIHRoaXMuaXNJbWFnZUVkaXQgPSB0cnVlO1xuICAgIHRoaXMuc2VsZWN0ZWRJbWFnZUVsZW1lbnQgPSBxdWVzO1xuICB9XG4gIGFzeW5jIG9uSW1hZ2VEZWxldGUocXVlczogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIHF1ZXMuaW1hZ2VEYXRhID0gJyc7XG4gICAgICBxdWVzLm9yZ0ltYWdlRGF0YSA9ICcnO1xuICAgICAgLy8gU0tTMjJKVUwyNSBJbml0aWFsaXplIGxvZ28gc2l6ZSBpZiBub3QgYWxyZWFkeSBzZXRcbiAgICAgIGlmICghcXVlcy5pbWFnZVNpemUpIHtcbiAgICAgICAgcXVlcy5pbWFnZVNpemUgPSB7IHdpZHRoOiAxNTAsIGhlaWdodDogMTUwIH07XG4gICAgICB9XG4gICAgICAvLyBhd2FpdCB0aGlzLmNoaWxkRXZlbnRDYXB0dXJlKHF1ZXMuaW1hZ2VEYXRhLCBxdWVzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHJlYWRpbmcgZmlsZTpcIiwgZXJyb3IpO1xuICAgIH1cbiAgfVxuICAgLy8gU0tTMjVNQVIyNSBpbWFnZSBhZGRcbiAgIGFzeW5jIGZpbGVDaGFuZ2VFdmVudChxdWVzOiBhbnksIGV2ZW50OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBhd2FpdCB0aGlzLnJlYWRGaWxlQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgICBxdWVzLmltYWdlRGF0YSA9IGltYWdlRGF0YTtcbiAgICAgICAgcXVlcy5vcmdJbWFnZURhdGEgPSBpbWFnZURhdGE7XG4gICAgICAgIC8vIEluaXRpYWxpemUgbG9nbyBzaXplIGlmIG5vdCBhbHJlYWR5IHNldFxuICAgICAgICBpZiAoIXF1ZXMuaW1hZ2VTaXplKSB7XG4gICAgICAgICAgcXVlcy5pbWFnZVNpemUgPSB7IHdpZHRoOiAxNTAsIGhlaWdodDogMTUwIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhd2FpdCB0aGlzLmNoaWxkRXZlbnRDYXB0dXJlKGltYWdlRGF0YSwgcXVlcyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcmVhZGluZyBmaWxlOlwiLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZWFkRmlsZUFzRGF0YVVSTChmaWxlOiBGaWxlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKTtcbiAgICAgIHJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiByZWplY3QoZXJyb3IpO1xuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXREcm9wRG93bihldmVudDogYW55KSB7XG4gICAgdGhpcy5oYWRsZURyb3BEb3duRGVwZW5kZW50LmVtaXQoZXZlbnQpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGFibGUtbGF5b3V0XCIgW2lkXT1cInRhYmxlSWRcIiBbbmdTdHlsZV09XCJ7J3BhZGRpbmctdG9wJzogJzFweCcsICd3aWR0aCc6IHRhYmxlV2lkdGh9XCIgW2Rpcl09XCJkaXJlY3Rpb25cIj5cbiAgICA8ZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwidGl0bGVcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHRhYmxlLXRpdGxlIGFsaWduLXRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICB7e3RpdGxlfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc05vc0luZGljYXRvciB8fCBzZWFyY2hCYXIgfHwgaXNCdXR0b25zXCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCJcbiAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1ib3R0b206IDIwcHg7XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMjZBUFIyNSBMaXN0IFZpZXcgRmlsdGVyIC0tPlxuICAgICAgICAgICAgICAgIDxhcHAtbGlzdC12aWV3LWZpbHRlciAqbmdJZj1cImxpc3RWaWV3cyAmJiBsaXN0Vmlld3MubGVuZ3RoID4gMFwiIFtsaXN0Vmlld3NdPVwibGlzdFZpZXdzXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkVmlld109XCJzZWxlY3RlZFZpZXdcIiBbZGlzcGxheWVkQ29sdW1uc109J2NvbHVtbnMnIFt0YWJsZUZpbHRlckFycmF5XT1cInRhYmxlRmlsdGVyQXJyYXlcIlxuICAgICAgICAgICAgICAgICAgICAobGlzdFZpZXdFbWl0KT1cImxpc3RWaWV3RW1pdCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtbGlzdC12aWV3LWZpbHRlcj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiKCFsaXN0Vmlld3MgfHwgbGlzdFZpZXdzLmxlbmd0aCA9PT0gMCkgJiYgaXNOb3NJbmRpY2F0b3JcIiBjbGFzcz1cIm5vT2ZSZWNcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9XCJmb250LXdlaWdodDogNTAwOyBtYXJnaW4tcmlnaHQ6IDVweDsgbWFyZ2luLWJvdHRvbTogMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ05PUycgfCBueHRDdXN0b21UcmFuc2xhdGUgOiAnTm9zJ319IDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImNvbG9yOiByZ2IoNDMsIDg3LCAyNDkpO1wiPnt7dG90YWxSZWNvcmRzIHx8IHRvdGFsQ291bnR9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hCYXJcIiBjbGFzcz1cInNlYXJjaFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBzZWFyY2gtYmFyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjY0MTMgMTkuMjVDMTYuNjMyMiAxOS4yNSAyMC42NzgxIDE1LjM1MTEgMjAuNjc4MSAxMC41NDE3QzIwLjY3ODEgNS43MzIxOCAxNi42MzIyIDEuODMzMzMgMTEuNjQxMyAxLjgzMzMzQzYuNjUwNCAxLjgzMzMzIDIuNjA0NDkgNS43MzIxOCAyLjYwNDQ5IDEwLjU0MTdDMi42MDQ0OSAxNS4zNTExIDYuNjUwNCAxOS4yNSAxMS42NDEzIDE5LjI1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM3ODc0ODZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjEuNjI5NSAyMC4xNjY3TDE5LjcyNzEgMTguMzMzM1wiIHN0cm9rZT1cIiM3ODc0ODZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cInt7ICdTRUFSQ0gnIHwgbnh0Q3VzdG9tVHJhbnNsYXRlIDogJ1NlYXJjaCcgIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwic2VhcmNoQ29uZmlncyA/IGVtcHR5U2VhcmNoKCRldmVudC50YXJnZXQudmFsdWUpIDogYXBwbHlGaWx0ZXIoJGV2ZW50LnRhcmdldC52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hCb3hWYWx1ZSB8fCAnJ1wiICNpbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCJzZWFyY2hDb25maWdzICYmIHNlYXJjaEJhclwiIGNsYXNzPVwiY29uZmlnU2VhcmNoXCIgKGNsaWNrKT1cIm9uU2VhcmNoKGlucHV0LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQgNUgyMFwiIHN0cm9rZT1cIiNmZmZmZmZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQgOEgxN1wiIHN0cm9rZT1cIiNmZmZmZmZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjEgMTEuNUMyMSAxNi43NSAxNi43NSAyMSAxMS41IDIxQzYuMjUgMjEgMiAxNi43NSAyIDExLjVDMiA2LjI1IDYuMjUgMiAxMS41IDJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjZmZmZmZmXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIyIDIyTDIwIDIwXCIgc3Ryb2tlPVwiI2ZmZmZmZlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiICpuZ0lmPVwiaXNCdXR0b25zXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDdweDsgZ2FwOiA3cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCIgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBidXR0b25BcnJheVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG54dC1idXR0b24gY2xhc3M9XCJkYXRhLXRhYmxlLWZzYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2tFbWl0KT1cIihidXR0b24udHlwZSA9PT0gJ2dyb3VwJyB8fCBidXR0b24udHlwZSA9PT0gJ2Ryb3Bkb3duJykgPyBjb21tb25CdXR0b25DbGljaygkZXZlbnQpIDogY29tbW9uQnV0dG9uQ2xpY2soYnV0dG9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2J1dHRvblR5cGVdPVwiYnV0dG9uLmNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYnV0dG9uVmFsdWVdPVwiYnV0dG9uLmxhYmVsUGF0aCB8fCBidXR0b24ubGFiZWwgfHwgYnV0dG9uLm5hbWUgfCBueHRDdXN0b21UcmFuc2xhdGUgOiBidXR0b24ubGFiZWwgfHwgYnV0dG9uLm5hbWUgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYnV0dG9uQ29uZmlnXT1cImJ1dHRvbi5idXR0b25Db25maWdcIiBbdHlwZV09XCJidXR0b24udHlwZVwiIGNsYXNzPVwibXMtMiBtZS0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYnRuSWNvbkxlZnRTcmNdPVwiYnV0dG9uLmJ0bkljb25MZWZ0U3JjXCIgW2lzSW1hZ2VTdmddPVwiYnV0dG9uLmlzSW1hZ2VTdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbnh0LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLW1hcmdpblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncmVzaXppbmcnOiBpc1Jlc2l6aW5nIH1cIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgbWF4SGVpZ2h0OiBpc1BhZ2luYXRpb24gPyAnNDUwcHgnIDogJ2F1dG8nLCBtaW5IZWlnaHQ6IGRhdGFTb3VyY2UuZGF0YSAmJiBkYXRhU291cmNlPy5kYXRhPy5sZW5ndGggPT09IDAgJiYgIWlzTG9hZGluZyAmJiBmcm9tICE9PSAnZm9ybUJ1aWxkZXInID8gJzBweCcgOiAnMTAwcHgnIH1cIlxuICAgICAgICAgICAgICAgICN0YWJsZUNvbnRhaW5lciAoc2Nyb2xsKT1cIm9uU2Nyb2xsKHRhYmxlQ29udGFpbmVyKVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tdGFibGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IFRhYmxlIEhlYWRlciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkZXJcIiBbbmdDbGFzc109XCJ7ICdzaGFkb3cnOiBpc1Njcm9sbGVkIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IENoZWNrYm94IENvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndpdGhDaGVja0JveFwiIGNsYXNzPVwidGFibGUtY2VsbCBzdGlja3ktY29sdW1uIGhlYWQtY29sb3JcIiBbc3R5bGUud2lkdGhdPVwiJzUwcHgnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIChjaGFuZ2UpPVwibWFzdGVyVG9nZ2xlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvbj8uaGFzVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0aW9uPy5oYXNWYWx1ZSgpICYmICFpc0FsbFNlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tLWNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgRGF0YSBDb2x1bW5zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY3VycmVudENvbHVtbnM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4uc3VtbWFyeUNvbHVtbiAhPT0gdHJ1ZSAmJiBjb2x1bW4uc3VtbWFyeVJvdyAhPT0gdHJ1ZSAmJiBjb2x1bW4uaXNIaWRlICE9PSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYmxlLWNlbGwgdGFibGVIZWFkZXIgaGVhZC1jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnN0aWNreS1jb2x1bW5dPVwiaSA9PT0gKHN0aWNreUNvbmRpdGlvbiAtIDEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlLWNvbHVtbl09XCJhY3RpdmVDb2x1bW4gPT09IGNvbHVtbi51bmlxdWVJZGVudGlmaWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWQtY29sdW1uXT1cIm1vZGUgPT09ICdlZGl0JyAmJiBpc0VkaXRhYmxlICYmIHNlbGVjdGVkQ29sdW1uID09PSBjb2x1bW4udW5pcXVlSWRlbnRpZmllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25Db2x1bW5DbGljayhjb2x1bW4udW5pcXVlSWRlbnRpZmllcik7IGNvbHVtbi5zb3J0ID8gc29ydERhdGEoY29sdW1uLmZpZWxkTmFtZSkgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZENvbHVtbiA9IGNvbHVtbi5maWVsZE5hbWVcIiAobW91c2VsZWF2ZSk9XCJob3ZlcmVkQ29sdW1uID0gbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbHVtbi53aWR0aCB8fCAnMTAwcHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZmxleF09XCInMCAwICcgKyAoY29sdW1uLndpZHRoIHx8ICcxMDBweCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cIic1MHB4J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5EaXZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbi1oZWFkZXJcIiBbc3R5bGUud2lkdGhdPVwiY29sdW1uLndpZHRoIHx8ICcxMDBweCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWRkIGNsb3NlIGJ1dHRvbiBmb3Igc2VsZWN0ZWQgY29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1vZGUgPT09ICdlZGl0JyAmJiBpc0VkaXRhYmxlICYmIHNlbGVjdGVkQ29sdW1uID09PSBjb2x1bW4udW5pcXVlSWRlbnRpZmllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjbG9zZS1jb2x1bW4tYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyByZW1vdmVDb2woY29sdW1uLnVuaXF1ZUlkZW50aWZpZXIpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pyVXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbGxpcHNpc1wiIHN0eWxlPVwiZmxleDogMTtcIiBbdGl0bGVdPVwiY29sdW1uLmxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGNvbHVtbi5sYWJlbFBhdGgpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb2x1bW4ubGFiZWxQYXRoIHwgbnh0Q3VzdG9tVHJhbnNsYXRlIDogY29sdW1uLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGVsc2UgaWYoZnJvbSAhPT0gJ2Zvcm1CdWlsZGVyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IChjb2x1bW4udW5pcXVlSWRlbnRpZmllcisnLmxhYmVsJykgfCBueHRDdXN0b21UcmFuc2xhdGUgOiBjb2x1bW4ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb2x1bW4ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiY29sdW1uLmZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGZpbHRlcihjb2x1bW4uZmllbGROYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1yaWdodDogMnB4O1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTIgMTFcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAuNzUgMS4yNUgwLjc1TDQuNzUgNS43MTcyMlY4LjgwNTU2TDYuNzUgOS43NVY1LjcxNzIyTDEwLjc1IDEuMjVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMyNDI1MzNcIiBzdHJva2Utd2lkdGg9XCIxLjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgUmVkIGRvdCBmb3IgYWN0aXZlIGZpbHRlciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJEYXRhQXJyYXkgJiYgZmlsdGVyRGF0YUFycmF5W2NvbHVtbi5maWVsZE5hbWVdPy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN4PVwiOVwiIGN5PVwiMlwiIHI9XCIyLjVcIiBmaWxsPVwicmVkXCI+PC9jaXJjbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbHVtbi5zb3J0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzb3J0LWluZGljYXRvcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjdXJyZW50U29ydENvbHVtbiA9PT0gY29sdW1uLmZpZWxkTmFtZVwiIGNsYXNzPVwic29ydC1kaXJlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRTb3J0RGlyZWN0aW9uID09PSAnYXNjJyA/ICfihpEnIDogY3VycmVudFNvcnREaXJlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09PSAnZGVzYycgPyAn4oaTJyA6ICcnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaG92ZXJlZENvbHVtbiA9PT0gY29sdW1uLmZpZWxkTmFtZSAmJiBjdXJyZW50U29ydENvbHVtbiAhPT0gY29sdW1uLmZpZWxkTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNvcnQtZGlyZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDihpFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hGaWx0ZXIgJiYgY29sdW1uLmZpZWxkTmFtZSA9PT0gc2VsZWN0ZWRGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1jb21wb25lbnQgcG9zaXRpb24tYWJzb2x1dGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnNlYXJjaFwiIFtjbGFzcy5yZXNpemVkXT1cImlzUmVzaXplZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzZWFyY2gtYmFyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInNlYXJjaFN2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIyMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjJcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEuNjQxMyAxOS4yNUMxNi42MzIyIDE5LjI1IDIwLjY3ODEgMTUuMzUxMSAyMC42NzgxIDEwLjU0MTdDMjAuNjc4MSA1LjczMjE4IDE2LjYzMjIgMS44MzMzMyAxMS42NDEzIDEuODMzMzNDNi42NTA0IDEuODMzMzMgMi42MDQ0OSA1LjczMjE4IDIuNjA0NDkgMTAuNTQxN0MyLjYwNDQ5IDE1LjM1MTEgNi42NTA0IDE5LjI1IDExLjY0MTMgMTkuMjVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM3ODc0ODZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjEuNjI5NSAyMC4xNjY3TDE5LjcyNzEgMTguMzMzM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNzg3NDg2XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cIndpZHRoLTEwMFwiIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnU0VBUkNIJyB8IG54dEN1c3RvbVRyYW5zbGF0ZSA6ICdTZWFyY2gnICB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cImlzUmVzaXplZFwiIChjbGljayk9XCJjbG9zZWZpbHRlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2xvc2UtaWNvblwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05LjE2OTk4IDE0LjgzTDE0LjgzIDkuMTcwMDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNC44MyAxNC44M0w5LjE2OTk4IDkuMTcwMDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkgMjJIMTVDMjAgMjIgMjIgMjAgMjIgMTVWOUMyMiA0IDIwIDIgMTUgMkg5QzQgMiAyIDQgMiA5VjE1QzIgMjAgNCAyMiA5IDIyWlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY29udGVudFwiIFtzdHlsZV09XCInb3ZlcmZsb3cteTogYXV0bydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZGF0YSBvZiBmaWx0ZXJBcnJheSB8IHNlYXJjaEZpbHRlciA6IHNlYXJjaFRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIG1iLTMgY2hlY2tib3hkaXZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZ2FwOiA1cHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0ZWQoZGF0YSlcIiBbdmFsdWVdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJkYXRhXCIgKGNoYW5nZSk9XCJjaGVja2VkRGF0YShkYXRhKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtcy0yIGxhYmVsLWRhdGFcIj57e2RhdGF9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEVuaGFuY2VkIHJlc2l6ZSBoYW5kbGUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXNpemUtaGFuZGxlXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25SZXNpemVTdGFydCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJEcmFnIHRvIHJlc2l6ZSBjb2x1bW5cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBBY3Rpb24gQ29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aW9uQnV0dG9uIHx8IGlzRGVsZXRlUm93IHx8IGlzRWRpdFJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYmxlLWNlbGwgaGVhZC1jb2xvciBhY3Rpb25Db2wgc3RpY2t5LWNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiJzE1MHB4J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDEycHggIWltcG9ydGFudDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGlvbkNvbHVtSGVhZGVyIHwgbnh0Q3VzdG9tVHJhbnNsYXRlIDogJ0FjdGlvbid9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBUYWJsZSBCb2R5IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWJvZHlcIiAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIGRhdGFTb3VyY2UuZGF0YTsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwidGFibGUtcm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRhYmxlQ2xpY2soZWxlbWVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgQ2hlY2tib3ggQ2VsbCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndpdGhDaGVja0JveFwiIGNsYXNzPVwidGFibGUtY29sLWNlbGwgc3RpY2t5LWNvbHVtbiBib2R5LWNvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJjdXN0b20tY2hlY2tib3hcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlcGFyYXRlUm93U2VsZWN0KHNlbGVjdGlvbi50b2dnbGUoZWxlbWVudCksIGVsZW1lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaXNTZWxlY3RlZChlbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIihlbGVtZW50LmlzUGF5UHJvY2Vzc2VkID09PSB0cnVlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBEYXRhIENlbGxzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY3VycmVudENvbHVtbnM7IGxldCBsYXN0ID0gbGFzdDsgZWxsaXBzaXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4uc3VtbWFyeUNvbHVtbiAhPT0gdHJ1ZSAmJiBjb2x1bW4uc3VtbWFyeVJvdyAhPT0gdHJ1ZSAmJiBjb2x1bW4uaXNIaWRlICE9PSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhYmxlLWNvbC1jZWxsIGJvZHktY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZC1jZWxsXT1cIm1vZGUgPT09ICdlZGl0JyAmJiBpc0VkaXRhYmxlICYmIHNlbGVjdGVkQ29sdW1uID09PSBjb2x1bW4udW5pcXVlSWRlbnRpZmllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbHVtbi53aWR0aCB8fCAnMTAwcHgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuZmxleF09XCInMCAwICcgKyAoY29sdW1uLndpZHRoIHx8ICcxMDBweCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cIic1MHB4J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aF09XCJjb2x1bW4ud2lkdGggfHwgJzEwMHB4J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0tTMjJKVUwyNSBjYWxlbmRhciAgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdjYWxlbmRhcidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxhcHAtY3VzdG9tLWNhbGVuZGFyIFtxdWVzdGlvbl09XCJjb2x1bW4gfCBxdWVzdGlvbkJ5Um93OmVsZW1lbnQ6aVwiIChldmVudFNlbGVjdGVkKT1cImdldENhbGVuZGFyRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlU2VsZWN0ZWQpPVwiZ2V0Q3VycmVudENhbGVuZGFyKCRldmVudClcIiAob3Blbk1vZGFsKT1cIm9wZW5DYWxlbmRhck1vZGFsKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xvc2VNb2RhbCk9XCJjbG9zZUNhbGVuZGFyTW9kYWwoJGV2ZW50KVwiPjwvYXBwLWN1c3RvbS1jYWxlbmRhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1tb2RlbCAqbmdJZj1cImlzQ2FsZW5kYXJNb2RhbE9wZW5cIiBbbW9kYWxUaXRsZV09XCJjYWxlbmRhck1vZGFsVGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNNb2RhbE9wZW5dPVwiaXNDYWxlbmRhck1vZGFsT3BlblwiIFttb2RhbFNpemVdPVwiY2FsZW5kYXJNb2RhbFNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2F2ZUJ1dHRvblZhbHVlXT1cImNhbGVuZGFyU2F2ZUJ1dHRvblZhbHVlXCIgW21vZGFsRm9vdGVyXT1cIm1vZGFsQ2FsZW5kYXJNb2RhbEZvb3RlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzYXZlQnV0dG9uRW1pdCk9XCJvbkNhbGVuZGFyTW9kYWxTYXZlKClcIiAoY2FuY2VsQnV0dG9uRW1pdCk9XCJjbG9zZUNhbGVuZGFyTW9kYWwoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uYm9vayBbcWJJdGVtXT1cInFiUmVmcmVuY2VCb29rXCIgW3F1ZXN0aW9uc109XCJyZWZlcmVuY2VRdWVzdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhhbmRsZVF1ZXN0aW9uKT1cImhhbmRsZVF1ZXN0aW9uRXZlbnQoJGV2ZW50KVwiPjwvbGliLXF1ZXN0aW9uYm9vaz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tbW9kZWw+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0tTMjJKVUwyNSBmb3IgcGljayBsb2NhdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtcGljay1sb2NhdGlvbiAgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2xvY2F0aW9uJ1wiIFthcGlLZXldPVwiY29sdW1uWydhcGlLZXknXVwiIFthZGRyZXNzXT1cInF1ZXN0aW9uLnNlbGVjdGVkVmFsdWVcIiBbcXVlc3Rpb25dPVwiY29sdW1uIHwgcXVlc3Rpb25CeVJvdzplbGVtZW50OmlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImZyb20gPT09ICdmb3JtQnVpbGRlcicgPyBlbGVtZW50Py5lZGl0Um93ICYmICFjb2x1bW4ucXVlc3Rpb24/LmlzUmVhZE9ubHkgPyAnZWRpdCcgOiAndmlldycgOiBlbGVtZW50Py5lZGl0Um93ICYmIChpc0VkaXRSb3cgfHwgYWRkSW5saW5lUmVjb3JkKSA/ICdlZGl0JyA6ICd2aWV3J1wiIFtmcm9tXT1cIidueHRUYWJsZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb2NhdGlvblNlbGVjdGVkKT1cInVwZGF0ZUVkaXQoaSwkZXZlbnQsZWxlbWVudCxjb2x1bW4uZmllbGROYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtcGljay1sb2NhdGlvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTS1MyMkpVTDI1IEltYWdlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnaW1hZ2UnXCIgKG1vdXNlZW50ZXIpPVwiaXNJbWFnZUhvdmVyID0gdHJ1ZTtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImlzSW1hZ2VIb3ZlciA9IGZhbHNlO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cImlzSW1hZ2VIb3ZlclwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBlbmQ7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCIhY29sdW1uLnF1ZXN0aW9uPy5pc1JlYWRPbmx5XCIgKGNsaWNrKT1cIm9uSW1hZ2VFZGl0KGNvbHVtbi5xdWVzdGlvbilcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjEwNjcgNi4wNzE3NEw5LjkyODMzIDQuODkzNEwyLjE2NjY3IDEyLjY1NTFWMTMuODMzNEgzLjM0NUwxMS4xMDY3IDYuMDcxNzRaTTEyLjI4NSA0Ljg5MzRMMTMuNDYzMyAzLjcxNTA3TDEyLjI4NSAyLjUzNjc0TDExLjEwNjcgMy43MTUwN0wxMi4yODUgNC44OTM0Wk00LjAzNSAxNS41MDAxSDAuNVYxMS45NjQyTDExLjY5NTggMC43Njg0MDNDMTEuODUyMSAwLjYxMjE3NyAxMi4wNjQgMC41MjQ0MTQgMTIuMjg1IDAuNTI0NDE0QzEyLjUwNiAwLjUyNDQxNCAxMi43MTc5IDAuNjEyMTc3IDEyLjg3NDIgMC43Njg0MDNMMTUuMjMxNyAzLjEyNTlDMTUuMzg3OSAzLjI4MjE4IDE1LjQ3NTcgMy40OTQxIDE1LjQ3NTcgMy43MTUwN0MxNS40NzU3IDMuOTM2MDQgMTUuMzg3OSA0LjE0Nzk2IDE1LjIzMTcgNC4zMDQyNEw0LjAzNTgzIDE1LjUwMDFINC4wMzVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzZDNzU3RFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIWNvbHVtbi5xdWVzdGlvbj8uaXNSZWFkT25seVwiIChjbGljayk9XCJvbkltYWdlRGVsZXRlKGNvbHVtbi5xdWVzdGlvbilcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE0IDMuOTg3MjZDMTEuNzggMy43NjcyNiA5LjU0NjY3IDMuNjUzOTMgNy4zMiAzLjY1MzkzQzYgMy42NTM5MyA0LjY4IDMuNzIwNiAzLjM2IDMuODUzOTNMMiAzLjk4NzI2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk01LjY2NjUgMy4zMTM2Mkw1LjgxMzE3IDIuNDQwMjhDNS45MTk4NCAxLjgwNjk1IDUuOTk5ODQgMS4zMzM2MiA3LjEyNjUgMS4zMzM2Mkg4Ljg3MzE3QzkuOTk5ODQgMS4zMzM2MiAxMC4wODY1IDEuODMzNjIgMTAuMTg2NSAyLjQ0Njk1TDEwLjMzMzIgMy4zMTM2MlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIuNTY2NyA2LjA5Mzc1TDEyLjEzMzQgMTIuODA3MUMxMi4wNiAxMy44NTM3IDEyIDE0LjY2NzEgMTAuMTQgMTQuNjY3MUg1Ljg2MDAyQzQuMDAwMDIgMTQuNjY3MSAzLjk0MDAyIDEzLjg1MzcgMy44NjY2OCAxMi44MDcxTDMuNDMzMzUgNi4wOTM3NVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuODg2NDcgMTEuMDAwNEg5LjEwNjQ3XCIgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4zMzM1IDguMzMzMjVIOS42NjY4M1wiIHN0cm9rZT1cIiNGRjJDMTBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiY29sdW1uLnF1ZXN0aW9uPy5pc1JlYWRPbmx5XCIgW3NyY109XCJjb2x1bW4ucXVlc3Rpb24/LmltYWdlRGF0YVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiIWNvbHVtbi5xdWVzdGlvbj8uaXNSZWFkT25seVwiIGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nbyBwcmV2aWV3IGFyZWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ28tcHJldmlld1wiICpuZ0lmPVwiY29sdW1uLnF1ZXN0aW9uPy5pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImNvbHVtbi5xdWVzdGlvbj8uaW1hZ2VEYXRhXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXBsb2FkIGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWNvbHVtbi5xdWVzdGlvbj8uaW1hZ2VEYXRhXCIgY2xhc3M9XCJsb2dvLXVwbG9hZC1wbGFjZWhvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImxvZ28tdXBsb2FkLXt7aX19XCIgY2xhc3M9XCJsb2dvLXVwbG9hZC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL0ltYWdlLnN2Z1wiIGFsdD1cIlVwbG9hZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+VXBsb2FkIEltYWdlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGlkPVwibG9nby11cGxvYWQte3tpfX1cIiBhY2NlcHQ9XCJpbWFnZS8qXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImZpbGVDaGFuZ2VFdmVudChjb2x1bW4ucXVlc3Rpb24sICRldmVudClcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzIySlVMMjUgaWNvbi1zZWxlY3RvciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxueHQtaWNvbi1zZWxlY3RvciBbYWxsSWNvbnNdPVwiYWxsSWNvbnNcIiAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnaWNvbidcIiBbcmVxdWlyZWRdPVwiY29sdW1uLnF1ZXN0aW9uPy5pc09wdGlvbmFsXCIgW21vZGVdPVwibW9kZVwiIFtxdWVzdGlvbl09XCJjb2x1bW4gfCBxdWVzdGlvbkJ5Um93OmVsZW1lbnQ6aVwiIFtsYWJlbEZvbnRdPVwiY29sdW1uLnF1ZXN0aW9uPy5mb250XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29sdW1uLnF1ZXN0aW9uPy5xdWVzdGlvblRleHQgPyAoKGNvbHVtbj8ucXVlc3Rpb24/LmlkKycucXVlc3Rpb25UZXh0JykgfCBueHRDdXN0b21UcmFuc2xhdGUgOiBjb2x1bW4/LnF1ZXN0aW9uPy5xdWVzdGlvblRleHQpIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbG9yXT1cImNvbHVtbi5xdWVzdGlvbj8uZm9udENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxTaXplXT1cImNvbHVtbi5xdWVzdGlvbj8uZm9udFNpemVcIiBbbGFiZWxXZWlnaHRdPVwiY29sdW1uLnF1ZXN0aW9uPy5mb250V2VpZ2h0XCIgW3Nob3dMYWJlbF09XCJjb2x1bW4ucXVlc3Rpb24/LnN0eWxlPy5zaG93TGFiZWxcIiAoaWNvblNlbGVjdGVkKT1cInVwZGF0ZUVkaXQoaSwkZXZlbnQsZWxlbWVudCxjb2x1bW4uZmllbGROYW1lKVwiPjwvbnh0LWljb24tc2VsZWN0b3I+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0tTMjJKVUwyNSBsaW5lIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdsaW5lJ1wiIGNsYXNzPVwiY3VzdG9tLWxpbmVcIiBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1mbGV4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0tTMjJKVUwyNSBkYXRhIHRhYmxlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG54dC1kYXRhdGFibGUgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ3RhYmxlJ1wiIGlzRWRpdFJvdyBpc0RlbGV0ZVJvdyBhY3Rpb25CdXR0b24gaXNCdXR0b25zIFtxdWVzdGlvbl09XCJjb2x1bW4gfCBxdWVzdGlvbkJ5Um93OmVsZW1lbnQ6aVwiIGZyb209XCJmb3JtQnVpbGRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInVwZGF0ZUVkaXQoaSwkZXZlbnQuZGF0YSxlbGVtZW50LGNvbHVtbi5maWVsZE5hbWUpXCIgW2FwaU1ldGFdPVwiY29sdW1uLnF1ZXN0aW9uPy5zdWJUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJmcm9tID09PSAnZm9ybUJ1aWxkZXInID8gZWxlbWVudD8uZWRpdFJvdyAmJiAhY29sdW1uLnF1ZXN0aW9uPy5pc1JlYWRPbmx5ID8gJ2VkaXQnIDogJ3ZpZXcnIDogZWxlbWVudD8uZWRpdFJvdyAmJiAoaXNFZGl0Um93IHx8IGFkZElubGluZVJlY29yZCkgPyAnZWRpdCcgOiAndmlldydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJsZUNvbmZpZ109XCJjb2x1bW4ucXVlc3Rpb24/LnRhYmxlQ29uZmlnXCIgdGFibGVJZD1cIlwiIGRpcmVjdGlvbj1cImx0clwiIHRhYmxlV2lkdGg9XCJhdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L254dC1kYXRhdGFibGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzIySlVMMjUgbGlzdCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxueHQtc2VhcmNoLWJveCAgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2xpc3QnXCIgW3F1ZXN0aW9uXT1cImNvbHVtbiB8IHF1ZXN0aW9uQnlSb3c6ZWxlbWVudDppXCIgW3JlYWRPbmx5XT1cImNvbHVtbi5xdWVzdGlvbj8uaXNSZWFkT25seVwiIFthcGlNZXRhXT1cImNvbHVtbi5xdWVzdGlvbj8uc3ViVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImNvbHVtbi5xdWVzdGlvbj8uaWRcIiBbcGxhY2VIb2xkZXJUZXh0XT1cImNvbHVtbi5xdWVzdGlvbj8ucXVlc3Rpb24gfHwgJydcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJmcm9tID09PSAnZm9ybUJ1aWxkZXInID8gZWxlbWVudD8uZWRpdFJvdyAmJiAhY29sdW1uLnF1ZXN0aW9uPy5pc1JlYWRPbmx5ID8gJ2VkaXQnIDogJ3ZpZXcnOiBlbGVtZW50Py5lZGl0Um93ICYmIChpc0VkaXRSb3cgfHwgYWRkSW5saW5lUmVjb3JkKSA/ICdlZGl0JyA6ICd2aWV3J1wiIFtmcm9tXT1cIidueHRUYWJsZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWFyY2hWYWx1ZUNoYW5nZSk9XCJ1cGRhdGVFZGl0KGksJGV2ZW50LnZhbHVlLGVsZW1lbnQsY29sdW1uLmZpZWxkTmFtZSxjb2x1bW4udHlwZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbnh0LXNlYXJjaC1ib3g+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0tTMjJKVUwyNSBEcm9wZG93biAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWRyb3Bkb3duICpuZ0lmPVwiY29sdW1uPy50eXBlID09PSAnZHJvcGRvd24nICYmIGNvbHVtbi5xdWVzdGlvbj8ub3B0aW9uc1wiIFtvcHRpb25zXT1cImNvbHVtbi5xdWVzdGlvbj8ub3B0aW9uc1wiIFthcGlNZXRhXT1cImNvbHVtbi5xdWVzdGlvbj8uc3ViVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImNvbHVtbi5xdWVzdGlvbj8uaWRcIiBbc2VsZWN0ZWRWYWx1ZV09XCJjb2x1bW4uaXNTaGVuZ2VsID8gY29sdW1uLnF1ZXN0aW9uPy5pbnB1dCA6IGNvbHVtbi5xdWVzdGlvbj8uc2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlcnJvck1lc3NhZ2VdPVwiY29sdW1uLnF1ZXN0aW9uPy5lcnJvck1lc3NhZ2VcIiBbZXJyb3JdPVwiY29sdW1uLnF1ZXN0aW9uPy5lcnJvclwiIFtyZWZlcmVuY2VGaWVsZF09XCJjb2x1bW4ucXVlc3Rpb24/LnJlZmVyZW5jZUZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiY29sdW1uLnF1ZXN0aW9uPy5pc1JlYWRPbmx5XCIgW3F1ZXN0aW9uXT1cImNvbHVtbiB8IHF1ZXN0aW9uQnlSb3c6ZWxlbWVudDppXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJmcm9tID09PSAnZm9ybUJ1aWxkZXInID8gZWxlbWVudD8uZWRpdFJvdyAmJiAhY29sdW1uLnF1ZXN0aW9uPy5pc1JlYWRPbmx5ID8gJ2VkaXQnIDogJ3ZpZXcnIDogZWxlbWVudD8uZWRpdFJvdyAmJiAoaXNFZGl0Um93IHx8IGFkZElubGluZVJlY29yZCkgPyAnZWRpdCcgOiAndmlldydcIiBbZnJvbV09XCInbnh0VGFibGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwidXBkYXRlRWRpdChpLCRldmVudC52YWx1ZS52YWx1ZU9iaixlbGVtZW50LGNvbHVtbi5maWVsZE5hbWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzIySlVMMjUgY3VzdG9tLXJhZGlvIGNvbXBvbmVudCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ3JhZGlvJyAmJiBjb2x1bW4ucXVlc3Rpb24/Lm9wdGlvbnNcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLXJhZGlvIFtvcHRpb25zXT1cImNvbHVtbi5xdWVzdGlvbj8ub3B0aW9uc1wiIFtxdWVzdGlvbl09XCJjb2x1bW4gfCBxdWVzdGlvbkJ5Um93OmVsZW1lbnQ6aVwiIFthcGlNZXRhXT1cImNvbHVtbi5xdWVzdGlvbj8uc3ViVGV4dFwiIFtpZF09XCJjb2x1bW4ucXVlc3Rpb24/LmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwiY29sdW1uLnF1ZXN0aW9uPy5zZWxlY3RlZFZhbHVlXCIgW2Vycm9yTWVzc2FnZV09XCJjb2x1bW4ucXVlc3Rpb24/LmVycm9yTWVzc2FnZVwiIFtlcnJvcl09XCJjb2x1bW4ucXVlc3Rpb24/LmVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZmVyZW5jZUZpZWxkXT1cImNvbHVtbi5xdWVzdGlvbj8ucmVmZXJlbmNlRmllbGRcIiBbcmVhZE9ubHldPVwiY29sdW1uLnF1ZXN0aW9uPy5pc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiZnJvbSA9PT0gJ2Zvcm1CdWlsZGVyJyA/IGVsZW1lbnQ/LmVkaXRSb3cgJiYgIWNvbHVtbi5xdWVzdGlvbj8uaXNSZWFkT25seSA/ICdlZGl0JyA6ICd2aWV3JyA6IGVsZW1lbnQ/LmVkaXRSb3cgJiYgKGlzRWRpdFJvdyB8fCBhZGRJbmxpbmVSZWNvcmQpID8gJ2VkaXQnIDogJ3ZpZXcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInVwZGF0ZUVkaXQoaSwkZXZlbnQudmFsdWUudmFsdWVPYmosZWxlbWVudCxjb2x1bW4uZmllbGROYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1yYWRpbz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzIySlVMMjUgQXR0YWNobWVudCAvIEZpbGVzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1maWxlLXVwbG9hZCAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnZmlsZSdcIiBbbGltaXRGaWxlVXBsb2FkaW5nXT1cIjVcIiBbZXJyb3JdPVwiY29sdW1uLnF1ZXN0aW9uPy5lcnJvclwiIFtxdWVzdGlvbl09XCJjb2x1bW4gfCBxdWVzdGlvbkJ5Um93OmVsZW1lbnQ6aVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiZnJvbSA9PT0gJ2Zvcm1CdWlsZGVyJyA/IGVsZW1lbnQ/LmVkaXRSb3cgJiYgIWNvbHVtbi5xdWVzdGlvbj8uaXNSZWFkT25seSA/ICdlZGl0JyA6ICd2aWV3JyA6IGVsZW1lbnQ/LmVkaXRSb3cgJiYgKGlzRWRpdFJvdyB8fCBhZGRJbmxpbmVSZWNvcmQpID8gJ2VkaXQnIDogJ3ZpZXcnXCIgW2Zyb21dPVwiJ254dFRhYmxlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsbEZpbGVzXT1cImNvbHVtbi5xdWVzdGlvbj8uaW5wdXRcIiAoc2VsZWN0ZWRGaWxlRGF0YSk9XCJ1cGRhdGVFZGl0KGksJGV2ZW50LnZhbHVlLnZhbHVlT2JqLGVsZW1lbnQsY29sdW1uLmZpZWxkTmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLWZpbGUtdXBsb2FkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTS1MyMkpVTDI1IEJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxueHQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2J1dHRvbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImZyb20gPT09ICdmb3JtQnVpbGRlcicgPyBlbGVtZW50Py5lZGl0Um93ICYmICFjb2x1bW4ucXVlc3Rpb24/LmlzUmVhZE9ubHkgPyAnZWRpdCcgOiAndmlldycgOiBlbGVtZW50Py5lZGl0Um93ICYmIChpc0VkaXRSb3cgfHwgYWRkSW5saW5lUmVjb3JkKSA/ICdlZGl0JyA6ICd2aWV3J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2J0bkhlaWdodF09XCInNTBweCdcIiBbYnRuV2lkdGhdPVwiJzE1MHB4J1wiIFtidXR0b25WYWx1ZV09XCJjb2x1bW4ucXVlc3Rpb24/LnF1ZXN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2tFbWl0KT1cInVwZGF0ZUVkaXQoaSwkZXZlbnQsZWxlbWVudCxjb2x1bW4uZmllbGROYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ueHQtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTS1MyMkpVTDI1IGJvb2sgdHlwZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGxpYi1xdWVzdGlvbmJvb2sgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2Jvb2snXCIgW3FiSXRlbV09XCJjb2x1bW4ucXVlc3Rpb24/LnFiSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uc109XCJyZWFkUXVlc3Rpb25zKGNvbHVtbi5xdWVzdGlvbj8ucWJSZWZlcmVuY2UsIGNvbHVtbi5xdWVzdGlvbj8ucWJSZWZlcmVuY2VRdWVzdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGFuZGxlRHJvcERvd24pPVwiZ2V0RHJvcERvd24oJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItcXVlc3Rpb25ib29rPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0tTMjJKVUwyNSBUZXh0LCBFbWFpbCwgbGFiZWwsIG51bWJlciwgQm9vbGVhbiwgcmljaCB0ZXh0IGVkaXRvciwgRGF0ZVRpbWUsIERhdGUsIFRpbWUtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxueHQtaW5wdXQgICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09IHVuZGVmaW5lZCB8fCBjb2x1bW4udHlwZSA9PT0gJ3RleHQnIHx8IGNvbHVtbi50eXBlID09PSAnZW1haWwnIHx8IGNvbHVtbi50eXBlID09PSAnbnVtYmVyJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2xhYmVsJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2Jvb2xlYW4nIHx8IGNvbHVtbi50eXBlID09PSAncmljaHRleHRhcmVhJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2RhdGV0aW1lJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2RhdGUnIHx8IGNvbHVtbi50eXBlID09PSAndGltZScgfHwgY29sdW1uLnR5cGUgPT09ICd0ZXh0YXJlYSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImNvbHVtbi50eXBlID09PSAnYm9vbGVhbicgPyAnY2hlY2tib3gnIDogY29sdW1uLnR5cGUgPT09ICdyaWNodGV4dGFyZWEnID8gJ3JpY2h0ZXh0JyA6IGNvbHVtbi50eXBlID09PSB1bmRlZmluZWQgPyAndGV4dCcgOiBjb2x1bW4udHlwZSBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImZyb20gPT09ICdmb3JtQnVpbGRlcicgPyBlbGVtZW50Py5lZGl0Um93ICYmICFjb2x1bW4ucXVlc3Rpb24/LmlzUmVhZE9ubHkgPyAnZWRpdCcgOiAndmlldycgOiBlbGVtZW50Py5lZGl0Um93ICYmIChpc0VkaXRSb3cgfHwgYWRkSW5saW5lUmVjb3JkKSA/ICdlZGl0JyA6ICd2aWV3J1wiIFtmcm9tXT1cIidueHRUYWJsZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJlbGVtZW50IHwgZ2V0VmFsdWU6IGNvbHVtbi5maWVsZE5hbWUgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHlwZXJMaW5rXT1cImNvbHVtbi5oeXBlckxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoeXBlcmxpbmtFbWl0KT1cIm9uQ2xpY2tIeXBlcmxpbmsoY29sdW1uLmZpZWxkTmFtZSxlbGVtZW50LCBjb2x1bW4uaHlwZXJMaW5rKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cImNvbHVtbiB8IHF1ZXN0aW9uQnlSb3c6ZWxlbWVudDppXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxGb250XT1cImNvbHVtbi5xdWVzdGlvbj8uZm9udFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbHVtbi5xdWVzdGlvbj8ucXVlc3Rpb25UZXh0ID8gKChjb2x1bW4ucXVlc3Rpb24/LmlkKycucXVlc3Rpb25UZXh0JykgfCBueHRDdXN0b21UcmFuc2xhdGUgOiBjb2x1bW4ucXVlc3Rpb24/LnF1ZXN0aW9uVGV4dCk6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxDb2xvcl09XCJjb2x1bW4ucXVlc3Rpb24/LmZvbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsU2l6ZV09XCJjb2x1bW4ucXVlc3Rpb24/LmZvbnRTaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRWYWx1ZVNpemVdPVwiY29sdW1uLnF1ZXN0aW9uPy5mb250U2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsV2VpZ2h0XT1cImNvbHVtbi5xdWVzdGlvbj8uZm9udFdlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0V2VpZ2h0XT1cImNvbHVtbi5xdWVzdGlvbj8uZm9udFdlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dMYWJlbF09XCJjb2x1bW4ucXVlc3Rpb24/LnN0eWxlPy5zaG93TGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Qm9yZGVyPVwibm9uZVwiIHN2Z0hlaWdodD1cIjIwcHhcIiBzdmdXaWR0aD1cIjIwcHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjb2x1bW4ucXVlc3Rpb24/LnF1ZXN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiY29sdW1uLnF1ZXN0aW9uPy5pc09wdGlvbmFsXCIgaW5wdXRCZ0NvbG9yPVwiI0ZBRkFGQVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SWRdPVwiY29sdW1uLnF1ZXN0aW9uPy50cmFja2luZ0lkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JNZXNzYWdlc109XCJ7IHJlcXVpcmVkOiAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCcgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SWNvbkxlZnRTcmNdPVwiY29sdW1uLnF1ZXN0aW9uPy5pY29uTGVmdFNyY1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5EYXRlXT1cImNvbHVtbi5xdWVzdGlvbj8ubWluRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd3NdPVwiM1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0VmFsdWUpPVwidXBkYXRlRWRpdChpLCRldmVudC52YWx1ZS52YWx1ZU9iaixlbGVtZW50LGNvbHVtbi5maWVsZE5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L254dC1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgQWN0aW9uIEJ1dHRvbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25CdXR0b24gfHwgaXNEZWxldGVSb3cgfHwgaXNFZGl0Um93XCIgY2xhc3M9XCJ0YWJsZS1jb2wtY2VsbCBhY3Rpb25Db2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25CdXR0b25cIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tU0tTMTVGRUIyNSBFZGl0IEJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNFZGl0Um93XCIgY2xhc3M9XCJlaWNvbi1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwie3sgJ0VESVRfUkVDT1JEJyB8IG54dEN1c3RvbVRyYW5zbGF0ZSA6ICdFZGl0IFJlY29yZCcgIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAycHg7IGJvcmRlcjogMXB4IHNvbGlkICNkY2RjZGM7IGJvcmRlci1yYWRpdXM6IDVweDsgbWFyZ2luLWxlZnQ6IDNweDsgbWFyZ2luLXJpZ2h0OiAzcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgZWRpdC1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMnB4IDRweDsgYm9yZGVyLXJhZGl1czogNXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwib25FZGl0KGVsZW1lbnQpXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMS4xMDY3IDYuMDcxNzRMOS45MjgzMyA0Ljg5MzRMMi4xNjY2NyAxMi42NTUxVjEzLjgzMzRIMy4zNDVMMTEuMTA2NyA2LjA3MTc0Wk0xMi4yODUgNC44OTM0TDEzLjQ2MzMgMy43MTUwN0wxMi4yODUgMi41MzY3NEwxMS4xMDY3IDMuNzE1MDdMMTIuMjg1IDQuODkzNFpNNC4wMzUgMTUuNTAwMUgwLjVWMTEuOTY0MkwxMS42OTU4IDAuNzY4NDAzQzExLjg1MjEgMC42MTIxNzcgMTIuMDY0IDAuNTI0NDE0IDEyLjI4NSAwLjUyNDQxNEMxMi41MDYgMC41MjQ0MTQgMTIuNzE3OSAwLjYxMjE3NyAxMi44NzQyIDAuNzY4NDAzTDE1LjIzMTcgMy4xMjU5QzE1LjM4NzkgMy4yODIxOCAxNS40NzU3IDMuNDk0MSAxNS40NzU3IDMuNzE1MDdDMTUuNDc1NyAzLjkzNjA0IDE1LjM4NzkgNC4xNDc5NiAxNS4yMzE3IDQuMzA0MjRMNC4wMzU4MyAxNS41MDAxSDQuMDM1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNkM3NTdEXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgRGVsZXRlIEJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNEZWxldGVSb3dcIiBjbGFzcz1cImRpY29uLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidERUxFVEVfUkVDT1JEJyB8IG54dEN1c3RvbVRyYW5zbGF0ZSA6ICdEZWxldGUgUmVjb3JkJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMnB4OyBib3JkZXI6IDFweCBzb2xpZCAjZmZiNWI1OyBib3JkZXItcmFkaXVzOiA1cHg7IG1hcmdpbi1sZWZ0OiAzcHg7IG1hcmdpbi1yaWdodDogM3B4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVsZXRlLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAycHggNHB4OyBib3JkZXItcmFkaXVzOiA1cHg7IGJhY2tncm91bmQtY29sb3I6ICNmZWVlZWQ7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIChjbGljayk9XCJkZWxldGVSZWNvcmQoZWxlbWVudCxpKVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQgMy45ODcyNkMxMS43OCAzLjc2NzI2IDkuNTQ2NjcgMy42NTM5MyA3LjMyIDMuNjUzOTNDNiAzLjY1MzkzIDQuNjggMy43MjA2IDMuMzYgMy44NTM5M0wyIDMuOTg3MjZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTUuNjY2NSAzLjMxMzYyTDUuODEzMTcgMi40NDAyOEM1LjkxOTg0IDEuODA2OTUgNS45OTk4NCAxLjMzMzYyIDcuMTI2NSAxLjMzMzYySDguODczMTdDOS45OTk4NCAxLjMzMzYyIDEwLjA4NjUgMS44MzM2MiAxMC4xODY1IDIuNDQ2OTVMMTAuMzMzMiAzLjMxMzYyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMi41NjY3IDYuMDkzNzVMMTIuMTMzNCAxMi44MDcxQzEyLjA2IDEzLjg1MzcgMTIgMTQuNjY3MSAxMC4xNCAxNC42NjcxSDUuODYwMDJDNC4wMDAwMiAxNC42NjcxIDMuOTQwMDIgMTMuODUzNyAzLjg2NjY4IDEyLjgwNzFMMy40MzMzNSA2LjA5Mzc1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02Ljg4NjQ3IDExLjAwMDRIOS4xMDY0N1wiIHN0cm9rZT1cIiNGRjJDMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4zMzM1IDguMzMzMjVIOS42NjY4M1wiIHN0cm9rZT1cIiNGRjJDMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgUmVuZGVyIGlubGluZSBidXR0b25zIHVwIHRvIFNpemUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGFjdGlvbkJ1dHRvbkFycmF5Py5idXR0b25BcnJheTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaSA8IGFjdGlvbkJ1dHRvbkFycmF5Py5zaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiIG1hcmdpbi1sZWZ0OiAzcHg7IG1hcmdpbi1yaWdodDogM3B4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzQ29uZGl0aW9uTWV0KGVsZW1lbnQsIGJ1dHRvbi5jb25kaXRpb25zKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiYnV0dG9uLnRvb2x0aXBQYXRoIHx8IGJ1dHRvbi50b29sdGlwIHwgbnh0Q3VzdG9tVHJhbnNsYXRlIDogYnV0dG9uLnRvb2x0aXAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uQnV0dG9uQ2xpY2tlZChidXR0b24sZWxlbWVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIiRldmVudC50YXJnZXQuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAnICsgYnV0dG9uLmhvdmVyQm9yZGVyQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIiRldmVudC50YXJnZXQuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAnICsgYnV0dG9uLmJvcmRlckNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDJweDsgYm9yZGVyLXJhZGl1czoge3tidXR0b24uYm9yZGVyUmFkaXVzfX1weDsgIGJvcmRlcjogMXB4IHNvbGlkIHt7YnV0dG9uLmJvcmRlckNvbG9yfX07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAobW91c2VlbnRlcik9XCIkZXZlbnQudGFyZ2V0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGJ1dHRvbi5ob3ZlckJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIiRldmVudC50YXJnZXQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gYnV0dG9uLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzoge3tidXR0b24ucGFkZGluZ319cHgge3tidXR0b24ucGFkZGluZyArIDJ9fXB4OyBib3JkZXItcmFkaXVzOiB7e2J1dHRvbi5ib3JkZXJSYWRpdXN9fXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiB7e2J1dHRvbi5iYWNrZ3JvdW5kQ29sb3J9fTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImJ1dHRvbi5pY29uU3JjXCIgI2ltZ0VsZW1lbnQgW3NyY109XCJidXR0b24uaWNvblNyY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJpbWdFbGVtZW50LnNyYyA9IGJ1dHRvbi5ob3Zlckljb25TcmMgfHwgYnV0dG9uLmljb25TcmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiaW1nRWxlbWVudC5zcmMgPSBidXR0b24uaWNvblNyY1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkcm9wZG93bkFjdGlvbkJ1dHRvbiAmJiBkcm9wZG93bkFjdGlvbkJ1dHRvbi5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xpY2thYmxlLWltZ1wiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bihpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIiBtYXJnaW4tbGVmdDogM3B4OyBtYXJnaW4tcmlnaHQ6IDNweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7IHBhZGRpbmc6IDJweCA0cHg7IGJvcmRlci1yYWRpdXM6IDVweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTsgYm9yZGVyLXJhZGl1czogNXB4OyBib3JkZXI6IDFweCBzb2xpZCAjNmM3NTdkO1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgNDAgNDBcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTkuOTk5OSAyNS42NjY3QzIzLjY4MTggMjUuNjY2NyAyNi42NjY2IDIyLjY4MTkgMjYuNjY2NiAxOUMyNi42NjY2IDE1LjMxODEgMjMuNjgxOCAxMi4zMzM0IDE5Ljk5OTkgMTIuMzMzNEMxNi4zMTggMTIuMzMzNCAxMy4zMzMzIDE1LjMxODEgMTMuMzMzMyAxOUMxMy4zMzMzIDIyLjY4MTkgMTYuMzE4IDI1LjY2NjcgMTkuOTk5OSAyNS42NjY3WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzI5MkQzMlwiIHN0cm9rZT1cIiMyOTJEMzJcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLW1pdGVybGltaXQ9XCIxMFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3LjY0NjcgMTguMTZMMjAuMDAwMSAyMC41MDY3TDIyLjM1MzQgMTguMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUucmlnaHRdPVwiKChhY3Rpb25CdXR0b25BcnJheT8uc2l6ZSA/PyAwKSAtIChhY3Rpb25CdXR0b25BcnJheT8uYnV0dG9uQXJyYXk/LnNpemUgPz8gMCkgKyAoaXNFZGl0Um93ID8gMSA6IDApICsgKGlzRGVsZXRlUm93ID8gMSA6IDApICsgKGRyb3Bkb3duQWN0aW9uQnV0dG9uPy5sZW5ndGggPiAwID8gMSA6IDApKSAqIDEwMCArICclJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImN1cnJlbnRPcGVuSW5kZXggPT09IGlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGJ0biBvZiBkcm9wZG93bkFjdGlvbkJ1dHRvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc0NvbmRpdGlvbk1ldChlbGVtZW50LCBidG4uY29uZGl0aW9ucylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWlkXT1cImVsZW1lbnQuaWRcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1pY29uIHt7YnRuLmJ1dHRvblR5cGV9fSB0b29sdGlwLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImJ0bi50b29sdGlwUGF0aCB8fCBidG4udG9vbHRpcCB8IG54dEN1c3RvbVRyYW5zbGF0ZSA6IGJ0bi50b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ0bi5idXR0b25EaXNhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbkJ1dHRvbkNsaWNrZWQoYnRuLGVsZW1lbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJidG4uaWNvblNyY1wiIFtzcmNdPVwiYnRuLmljb25TcmNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZjLWJ0bi10ZXh0XCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDEwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2J0bi5uYW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzIwTUFSMjUgU3VtbWFyeSBSb3dzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3VtbWFyeVJvd3MgJiYgc3VtbWFyeVJvd3MubGVuZ3RoID4gMCAmJiBkYXRhU291cmNlLmRhdGEgJiYgZGF0YVNvdXJjZT8uZGF0YT8ubGVuZ3RoID4gMCAmJiAhaXNMb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0Z1bGxUYWJsZVN1bW1hcnlSb3cgJiYgaXNTdW1tYXJ5Q29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBzdW1tYXJ5Um93c1wiIGNsYXNzPVwidGFibGUtcm93IHN1bW1hcnktcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIExhYmVsIGluIHRoZSBmaXJzdCBjb2x1bW4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwid2l0aENoZWNrQm94XCIgY2xhc3M9XCJub24tc3VtbWFyeS10YWJsZS1jZWxsXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEVtcHR5IGNlbGxzIHRvIGFsaWduIHdpdGggZGF0YSBjb2x1bW5zIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY29sIG9mIGlzU3VtbWFyeVN0YXJ0Q29sdW1uOyBsZXQgbGFzdCA9IGxhc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibm9uLXN1bW1hcnktdGFibGUtY2VsbFwiIFtjbGFzcy5sYXN0LWNlbGxdPVwibGFzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IDwhLS0gVmFsdWUgb3IgaW5wdXQgaW4gdGhlIGxhc3QgY29sdW1uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnktdGFibGUtY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkLWNlbGxdPVwibW9kZSA9PT0gJ2VkaXQnICYmIGlzRWRpdGFibGUgJiYgc2VsZWN0ZWRDb2x1bW4gPT09IHJvdy51bmlxdWVJZGVudGlmaWVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvbkNvbHVtbkNsaWNrKHJvdy51bmlxdWVJZGVudGlmaWVyKVwiPnt7IChyb3cuaWQrJy5sYWJlbCcpIHwgbnh0Q3VzdG9tVHJhbnNsYXRlIDogcm93Py5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VtbWFyeS10YWJsZS1jZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWQtY2VsbF09XCJtb2RlID09PSAnZWRpdCcgJiYgaXNFZGl0YWJsZSAmJiBzZWxlY3RlZENvbHVtbiA9PT0gcm93LnVuaXF1ZUlkZW50aWZpZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LnR5cGUgPT09ICdjYWxjdWxhdGlvbidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBZGQgY2xvc2UgYnV0dG9uIGZvciBzZWxlY3RlZCBjb2x1bW4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJtb2RlID09PSAnZWRpdCcgJiYgaXNFZGl0YWJsZSAmJiBzZWxlY3RlZENvbHVtbiA9PT0gcm93LnVuaXF1ZUlkZW50aWZpZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjbG9zZS1jb2x1bW4tYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHJlbW92ZUNvbChyb3cudW5pcXVlSWRlbnRpZmllcilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKclVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc3VtbWFyeVZhbHVlc1tyb3cuZmllbGROYW1lXSB8IG51bWJlciB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cudHlwZSA9PT0gJ2lucHV0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIFsobmdNb2RlbCldPVwic3VtbWFyeVZhbHVlc1tyb3cuZmllbGROYW1lXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblN1bW1hcnlJbnB1dENoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibnh0LWxvcC1pbnB1dCB0YWJsZS13aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZToge3sgcm93VGV4dFNpemUgPyByb3dUZXh0U2l6ZSA6ICcxM3B4JyB9fTsgY29sb3I6IHt7cm93VGV4dENvbG9yID8gcm93VGV4dENvbG9yIDogJyMyYzMxMzcnfX07XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0tTMjBNQVIyNSBFbXB0eSBjZWxscyB0byBhbGlnbiB3aXRoIGRhdGEgY29sdW1ucyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbCBvZiBpc1N1bW1hcnlFbmRDb2x1bW47IGxldCBsYXN0ID0gbGFzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJub24tc3VtbWFyeS10YWJsZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25CdXR0b24gfHwgaXNEZWxldGVSb3cgfHwgaXNFZGl0Um93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5vbi1zdW1tYXJ5LXRhYmxlLWNlbGwgYWN0aW9uQ29sIHN0aWNreS1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzEzSlVOMjUgZnVsbCB0YWJsZSBzdW1tYXJ5IHJvdyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNGdWxsVGFibGVTdW1tYXJ5Um93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBzdW1tYXJ5Um93c1wiIGNsYXNzPVwidGFibGUtcm93IHN1bW1hcnktcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzEzSlVOMjUgQ2hlY2tib3ggY29sdW1uIChpZiBlbmFibGVkKSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ3aXRoQ2hlY2tCb3hcIiBjbGFzcz1cImhvcml6b250YWwtc3VtbWFyeS10YWJsZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcm93LmxhYmVsUGF0aCB8fCByb3cubGFiZWwgfCBueHRDdXN0b21UcmFuc2xhdGUgOiByb3cubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzEzSlVOMjUgc3VtbWFyeSBjZWxsIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY29sIG9mIGN1cnJlbnRDb2x1bW5zOyBsZXQgbGFzdCA9IGxhc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaG9yaXpvbnRhbC1zdW1tYXJ5LXRhYmxlLWNlbGxcIiBzdHlsZT1cInRleHQtYWxpZ246IGxlZnQ7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChyb3c/LmNvbHVtbnM/LmluY2x1ZGVzKGNvbC5maWVsZE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc3VtbWFyeVZhbHVlc1tjb2wuZmllbGROYW1lXSB8IG51bWJlciB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGlvbkJ1dHRvbiB8fCBpc0RlbGV0ZVJvdyB8fCBpc0VkaXRSb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaG9yaXpvbnRhbC1zdW1tYXJ5LXRhYmxlLWNlbGwgYWN0aW9uQ29sIHN0aWNreS1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzI4TUFSMjUgSW4gdGhlIExvYWRpbmcgc2VjdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1ib2R5XCIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJlcGVhdCBmb3IgNSBza2VsZXRvbiByb3dzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IF8gb2YgWzEsMiwzLDQsNV1cIiBjbGFzcz1cInRhYmxlLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENoZWNrYm94IENvbHVtbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndpdGhDaGVja0JveFwiIGNsYXNzPVwic2tlbGV0b24tY2VsbCBzdGlja3ktY29sdW1uXCI+PC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEYXRhIENvbHVtbnMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbCBvZiBjdXJyZW50Q29sdW1uc1wiIGNsYXNzPVwic2tlbGV0b24tY2VsbCBcIj48L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFjdGlvbiBDb2x1bW4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25CdXR0b24gfHwgaXNEZWxldGVSb3cgfHwgaXNFZGl0Um93XCIgY2xhc3M9XCJza2VsZXRvbi1jZWxsIGFjdGlvbkNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiZGF0YVNvdXJjZS5kYXRhICYmIGRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCA9PT0gMCAmJiAhaXNMb2FkaW5nICYmIGZyb20gPT09ICdmb3JtQnVpbGRlcidcIiBjbGFzcz1cImZvcm0tYnVpbGRlci10YWJsZS1ib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgIC8gZHJhZ3MgZmllbGRzIGZyb20gZWxlbWVudHMgc2VjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IE5vIERhdGEgUm93IC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRhdGFTb3VyY2UuZGF0YSAmJiBkYXRhU291cmNlPy5kYXRhPy5sZW5ndGggPT09IDAgJiYgIWlzTG9hZGluZyAmJiBmcm9tICE9PSAnZm9ybUJ1aWxkZXInXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm5vLWRhdGFcIj5cbiAgICAgICAgICAgICAgICB7eydOT19SRUNPUkRTX09SX0RBVEFfRk9VTkQnIHwgbnh0Q3VzdG9tVHJhbnNsYXRlIDogJ05vIHJlY29yZHMvZGF0YSBmb3VuZC4nfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgUGFnaW5hdGlvbiAtLT5cbiAgICAgICAgICAgIDxkaXYgW2NsYXNzLnNoYWRvdy1oaWRkZW5dPVwiaXNTaGFkb3dIaWRkZW5cIj5cbiAgICAgICAgICAgICAgICA8IS0tIHRhYmxlIGlucHV0IHNhdmUgYnV0dG9uIGNoYW5nZXMgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBpbmxpbmVBZGQganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhZGRJY29uQm9yIGN1cnNvci1wb2ludGVyXCIgKm5nSWY9XCJhZGRJbmxpbmVSZWNvcmQgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGRUYWJsZVJlY29yZChpbmxpbmVFbGVtZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwie3sgJ0FERF9SRUNPUkQnfCBueHRDdXN0b21UcmFuc2xhdGUgOiAnQWRkIFJlY29yZCd9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZEljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibmF2LWljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiB3aWR0aD1cIjI0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTQ0MC0yODBoODB2LTE2MGgxNjB2LTgwSDUyMHYtMTYwaC04MHYxNjBIMjgwdjgwaDE2MHYxNjBabTQwIDIwMHEtODMgMC0xNTYtMzEuNVQxOTctMTk3cS01NC01NC04NS41LTEyN1Q4MC00ODBxMC04MyAzMS41LTE1NlQxOTctNzYzcTU0LTU0IDEyNy04NS41VDQ4MC04ODBxODMgMCAxNTYgMzEuNVQ3NjMtNzYzcTU0IDU0IDg1LjUgMTI3VDg4MC00ODBxMCA4My0zMS41IDE1NlQ3NjMtMTk3cS01NCA1NC0xMjcgODUuNVQ0ODAtODBabTAtODBxMTM0IDAgMjI3LTkzdDkzLTIyN3EwLTEzNC05My0yMjd0LTIyNy05M3EtMTM0IDAtMjI3IDkzdC05MyAyMjdxMCAxMzQgOTMgMjI3dDIyNyA5M1ptMC0zMjBaXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLVNLUzE1RkVCMjUgcmVtb3ZlZCBidXR0b24gZGlzYWJsZSBsb2dpYywgYWRkZWQgYW5vdGhlciBjb25kaXRpb24gZm9yIGJ1dHRvbiBzaG93aW5nLS0+XG4gICAgICAgICAgICAgICAgICAgIDwhLS1TS1MxNUZFQjI1IFNSMDZKQU4yMDI1IGJ1dHRvbiBkaXNhYmxlIGxvZ2ljIGZvciBub3Qgc2VsZWN0IGFueSBlbXBsb3llZS0tPlxuICAgICAgICAgICAgICAgICAgICA8bnh0LWJ1dHRvbiAqbmdJZj1cIih0YWJsZVNhdmVCdXR0b24gfHwgaXNFZGl0Um93IHx8IGFkZElubGluZVJlY29yZCkgJiYgZnJvbSAhPSAnZm9ybUJ1aWxkZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvblR5cGU9XCJidG4gYnRuLXByaW1hcnlcIiBbYnV0dG9uRGlzYWJsZV09XCJzZWxlY3Rpb24/LnNlbGVjdGVkPy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGJ1dHRvbkNsaWNrRW1pdCk9XCJzYXZlQnV0dG9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uVmFsdWU9XCJ7eyAnU0FWRScgfCBueHRDdXN0b21UcmFuc2xhdGUgOiAnU2F2ZScgIH19XCI+PC9ueHQtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxueHQtcGFnaW5hdGlvbiAqbmdJZj1cImlzUGFnaW5hdGlvblwiIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbGxlY3Rpb25TaXplXT1cImNvbmZpZ1BhZ2luYXRpb24gPyB0b3RhbFJlY29yZHMgfHwgdG90YWxDb3VudCA6IGZpbHRlclRhYmxlTm9zXCJcbiAgICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCIgW2N1cnJlbnRQYWdlXT1cInBhZ2VJbmRleFwiIFtmaXJzdExhc3RCdXR0b25zXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAoZXZlbnQpPVwicGFnZVBhcmFtcygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9ueHQtcGFnaW5hdGlvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tU0tTMTVGRUIyNSBhbGVydCBvbiBkZWxldGluZyByZWNvcmQgLS0+XG48ZGl2ICpuZ0lmPVwiZGVsZXRlTW9kYWxcIiBjbGFzcz1cIm1vZGFsIG1vZGFsLWJhY2tkcm9wIHNob3cgIGQtYmxvY2tcIiBpZD1cImRlbGV0ZVJlY29yZFwiIHRhYmluZGV4PVwiLTFcIlxuICAgIGFyaWEtbGFiZWxsZWRieT1cImRlbGV0ZVJlY29yZExhYmVsXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwiIWRlbGV0ZU1vZGFsXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxiIGNsYXNzPVwibW9kYWwtdGl0bGUgZnMtNVwiIGlkPVwiZGVsZXRlUmVjb3JkTGFiZWxcIj57eyAnREVMRVRFX1JFQ09SRCd8IG54dEN1c3RvbVRyYW5zbGF0ZSA6ICdEZWxldGUgUmVjb3JkJ319PC9iPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlTW9kYWwgPSBmYWxzZVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgICAgICAgIHt7ICdBUkVfWU9VX1NVUkVfWU9VX1dBTlRfVE9fREVMRVRFX1RIRV9SRUMnfCBueHRDdXN0b21UcmFuc2xhdGUgOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgcmVjb3JkJ319ID9cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJkZWxldGVNb2RhbCA9IGZhbHNlXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgJ05PJ3wgbnh0Q3VzdG9tVHJhbnNsYXRlIDogJ05vJ319PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVSZWNvcmREYXRhKClcIj57eyAnWUVTJ3wgbnh0Q3VzdG9tVHJhbnNsYXRlIDogJ1llcyd9fTwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|