@annalib/anna-core 20.2.50 → 20.2.51

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.
@@ -46,6 +46,7 @@ export class AnnaNonEditableGenericTableComponent {
46
46
  this.hideSomeTds = false;
47
47
  this.tdsHaveRowSpan = false;
48
48
  this.multipleTablesPresent = false;
49
+ this.showOrHideToggleForTotalRow = false;
49
50
  this.toggleCheckbox = new EventEmitter();
50
51
  this.toggleRowCheckbox = new EventEmitter();
51
52
  this.toggleHeaderCheckbox = new EventEmitter();
@@ -92,6 +93,7 @@ export class AnnaNonEditableGenericTableComponent {
92
93
  this.setMarginLeftForFilterIcon();
93
94
  }
94
95
  ngOnInit() {
96
+ document.documentElement.style.setProperty(`--hide-total-row-scrollbar-offset`, '0px');
95
97
  this.setFilterAlignmentBasedOnScreenResolution();
96
98
  }
97
99
  detectChanges() {
@@ -170,6 +172,15 @@ export class AnnaNonEditableGenericTableComponent {
170
172
  checkIfAllTheElementsAreZero() {
171
173
  return !this.tableData.some((item) => item != 0);
172
174
  }
175
+ showHideTotalRow() {
176
+ this.gtGeneralConfig.totalRow = !this.gtGeneralConfig.totalRow;
177
+ if (!this.gtGeneralConfig.totalRow) {
178
+ document.documentElement.style.setProperty(`--hide-total-row-scrollbar-offset`, '50px');
179
+ }
180
+ else {
181
+ document.documentElement.style.setProperty(`--hide-total-row-scrollbar-offset`, '0px');
182
+ }
183
+ }
173
184
  setTableHeight() {
174
185
  let viewportHeight = window.innerHeight;
175
186
  let rowHeight = this.gtDimension.rowHeight;
@@ -750,7 +761,7 @@ export class AnnaNonEditableGenericTableComponent {
750
761
  this.closeTooltip();
751
762
  }
752
763
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AnnaNonEditableGenericTableComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AnnaSortService }, { token: i2.AnnaDateTimeFormatService }, { token: i3.AnnaFilterService }], target: i0.ɵɵFactoryTarget.Component }); }
753
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AnnaNonEditableGenericTableComponent, isStandalone: true, selector: "anna-core-non-editable-generic-table-lib", inputs: { showSkeletonLoading: "showSkeletonLoading", tableHeaders: "tableHeaders", tableData: "tableData", clonedTableData: "clonedTableData", gtGeneralConfig: "gtGeneralConfig", totalRowInfo: "totalRowInfo", gtDimension: "gtDimension", tableClass: "tableClass", maximumRowsWhichCanBeRenderedWithoutScroll: "maximumRowsWhichCanBeRenderedWithoutScroll", fixNumberOfRowsForPopup: "fixNumberOfRowsForPopup", limit: "limit", includeBorderInTableHeight: "includeBorderInTableHeight", downloadInProgress: "downloadInProgress", percentDone: "percentDone", starredInProgress: "starredInProgress", clickableRow: "clickableRow", setTableHeightWhenRowSizeIsFixed: "setTableHeightWhenRowSizeIsFixed", tableBorderBottomClassRequired: "tableBorderBottomClassRequired", hideSomeTds: "hideSomeTds", tdsHaveRowSpan: "tdsHaveRowSpan", multipleTablesPresent: "multipleTablesPresent" }, outputs: { toggleCheckbox: "toggleCheckbox", toggleRowCheckbox: "toggleRowCheckbox", toggleHeaderCheckbox: "toggleHeaderCheckbox", undoIconClicked: "undoIconClicked", filterAppliedToTable: "filterAppliedToTable", sortingAppliedToTable: "sortingAppliedToTable", rowClicked: "rowClicked", radioButtonSelected: "radioButtonSelected", columnFilterOpened: "columnFilterOpened", columnFilterClosed: "columnFilterClosed", gtIconClicked: "gtIconClicked", gtSVGIconClicked: "gtSVGIconClicked", gtTextActionClicked: "gtTextActionClicked", gtViewDetailClicked: "gtViewDetailClicked", gtInnerHTMLClicked: "gtInnerHTMLClicked", downloadSpotDetails: "downloadSpotDetails", clickableDataClicked: "clickableDataClicked", totalRowIconClicked: "totalRowIconClicked", notificationIconHover: "notificationIconHover", notificationIconHoverLeave: "notificationIconHoverLeave", editableInputEdited: "editableInputEdited", radioButtonMessageIconClicked: "radioButtonMessageIconClicked" }, viewQueries: [{ propertyName: "viewChildTableHeaders", predicate: ["tableHeader"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n id=\"generic-table-conatiner\"\n class=\"table-container {{ gtGeneralConfig?.tableOuterContainerName }} {{ tableBottomBorderClass }}\"\n [ngClass]=\"{\n 'scroll-left-shadow-effect': isScrolledLeft,\n 'scroll-right-shadow-effect': !isScrollEnded,\n 'clickable-row': clickableRow,\n 'no-data-table': (isNoDataToDisplaySubject$ | async)\n }\"\n (scroll)=\"onTableContainerScroll($event)\"\n>\n <div\n [class]=\"gtGeneralConfig.tableContainerName\"\n class=\"horizontal-scroll-for-table-container\"\n [ngStyle]=\"{\n height:\n tableData.length < maximumRowsWhichCanBeRenderedWithoutScroll\n ? 'calc(' +\n (gtDimension.rowHeight * tableData.length +\n (!tableData.length || !gtGeneralConfig.totalRow\n ? gtDimension.headerHeight\n : gtDimension.headerHeight + gtDimension.rowHeight)) +\n 'px)'\n : gtDimension.tableHeight\n }\"\n >\n <table\n class=\"gt\"\n [ngClass]=\"tableClass\"\n mat-table\n [dataSource]=\"renderedData\"\n >\n <tr\n class=\"header-row\"\n mat-header-row\n *matHeaderRowDef=\"tableColumns; sticky: true\"\n [style.height.px]=\"gtDimension.headerHeight\"\n ></tr>\n <tr\n class=\"total-row\"\n mat-header-row\n [style.height.px]=\"gtDimension.rowHeight\"\n *matHeaderRowDef=\"totalRowColumns; sticky: true\"\n [class.hidden]=\"\n showSkeletonLoading ||\n (!showSkeletonLoading && !tableData.length) ||\n (isNoDataToDisplaySubject$ | async) ||\n (!showSkeletonLoading && !gtGeneralConfig.totalRow)\n \"\n ></tr>\n <tr\n [class]=\"rowData.gtClass\"\n [ngClass]=\"{ 'no-border-tr': (isNoDataToDisplaySubject$ | async) }\"\n mat-row\n *matRowDef=\"let rowData; columns: tableColumns\"\n [style.height.px]=\"gtDimension.rowHeight\"\n (click)=\"dataRowClicked(rowData)\"\n ></tr>\n\n <!-- TOTAL ROW -->\n <ng-container\n [matColumnDef]=\"column.colName\"\n *ngFor=\"let column of totalRowInfo; trackBy: trackByFn\"\n >\n <td\n mat-header-cell\n *matHeaderCellDef\n [attr.colspan]=\"column.colspan\"\n class=\"{{ column.class }}\"\n >\n <ng-container *ngIf=\"column['isActionColumn']\">\n <a\n *ngFor=\"let data of column.actionData\"\n [class]=\"data.class\"\n (click)=\"onClickableDataClicked({}, data.id)\"\n >\n {{ data.name }}\n </a>\n </ng-container>\n\n <ng-container *ngIf=\"column['isIconColumn']\">\n <i\n class=\"{{ column?.iconData?.class }}\"\n (click)=\"iconClickedInTotalRow(column?.colName)\"\n >\n </i>\n </ng-container>\n\n <ng-container *ngIf=\"!column['isActionColumn']\">\n <strong class=\"upper-label\">{{ column.data }}</strong>\n <ng-container *ngIf=\"column.lowerData\">\n <br />\n <span\n *ngIf=\"\n column.colName == 'total-potential-booked-unit' &&\n gtGeneralConfig.component == 'RATING';\n else columnLowerData\n \"\n class=\"clickable-data\"\n (click)=\"spotDetailsDownloadClicked('TOTALROW')\"\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\"\n >{{ column.lowerData }}\n <span class=\"material-icons spot-details-download-icons\">get_app</span>\n <ng-container *ngIf=\"downloadInProgress && selectedRowTypeForDownload == 'TOTALROW'\">\n <ng-container [ngTemplateOutlet]=\"circularProgressBar\"></ng-container>\n </ng-container>\n </span>\n <ng-template #columnLowerData>\n <span class=\"lower-label\">{{ column.lowerData }}</span>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"column.tooltipMessage && gtGeneralConfig.component != 'LUR_VIOLATIONS'\">\n <i\n class=\"{{ column.tooltipIconClass }}\"\n container=\"body\"\n [ngbTooltip]=\"column.tooltipMessage\"\n tooltipClass=\"gt-total-row-tooltip\"\n placement=\"bottom\"\n ></i>\n </ng-container>\n <ng-container *ngIf=\"gtGeneralConfig.component == 'LUR_VIOLATIONS' && column.tooltipMessage\">\n <i\n class=\"mi mdi-info-outline info-label\"\n container=\"body\"\n [ngbTooltip]=\"lurViolationTotalRowToolTip\"\n tooltipClass=\"gt-total-row-tooltip\"\n placement=\"bottom\"\n ></i>\n </ng-container>\n </ng-container>\n </td>\n </ng-container>\n\n <!-- MAIN ROW -->\n <ng-container\n [matColumnDef]=\"columnDef.headerInfo[0].objectKey\"\n *ngFor=\"let columnDef of tableHeaders; trackBy: trackByFn\"\n >\n <th\n #tableHeader\n nowrap\n mat-header-cell\n *matHeaderCellDef\n [style.width]=\"columnDef.width\"\n >\n <div\n class=\"row mx-0\"\n *ngFor=\"let header of columnDef.headerInfo; let j = index\"\n >\n <p\n *ngIf=\"header.typeOfHeaderData === 'STRING'\"\n [ngClass]=\"{ 'upper-label': j === 0, 'lower-label': j === 1 }\"\n >\n <ngx-skeleton-loader\n *ngIf=\"header.name == null\"\n count=\"1\"\n [theme]=\"{\n height: '10px',\n display: 'block',\n width: columnDef.width,\n 'max-width': 'calc(100% - 20px)'\n }\"\n >\n </ngx-skeleton-loader>\n <ng-container *ngIf=\"header.name\">\n {{ header.name }}\n </ng-container>\n <ng-container *ngIf=\"header.tooltip && header.tooltip.tooltipMessage\">\n <i\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"header.tooltip.tooltipMessage\"\n container=\"body\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n </ng-container>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'impsInfoTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"impsInfoTooltip\"\n container=\"body\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"\n header.tooltip && header.tooltip.name == 'spotsColumnEquivalizationMessageTooltip'\n \"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n container=\"body\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"spotsColumnEquivalizationMessageTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'underDeliveryTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n container=\"body\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"underDeliveryTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'overDeliveryTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n container=\"body\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"overDeliveryTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'ratingInfoTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"ratingInfoTooltip\"\n container=\"body\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'rateInfoTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"rateInfoTooltip\"\n container=\"body\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'ongoingRevBookedColumnTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"ongoingRevBookedColumnTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'completedRevBookedColumnTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"completedRevBookedColumnTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRate'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"avgBookedRate\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRtg'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"avgBookedRtg\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedImps'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"avgBookedImps\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'automationTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"automationTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'rebateImpact'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"rebateImpact\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'projectedImpsRtg'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"projectedImpsRtg\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n </p>\n\n <ng-container *ngIf=\"header.typeOfHeaderData === 'CHECKBOX'\">\n <span\n *ngIf=\"gtGeneralConfig.isHeaderChecked\"\n class=\"material-icons custom-column-checkbox-checked\"\n (click)=\"selectUnselectAllRows()\"\n >\n check_box\n </span>\n <span\n *ngIf=\"!gtGeneralConfig.isHeaderChecked\"\n class=\"material-icons custom-column-checkbox-unchecked\"\n [ngClass]=\"{ 'disable-checkbox': gtGeneralConfig.disableHeaderCheckbox }\"\n (click)=\"selectUnselectAllRows()\"\n >\n check_box_outline_blank\n </span>\n </ng-container>\n\n <div\n *ngIf=\"gtGeneralConfig.showAllColumnFilter\"\n class=\"sort-filter-container\"\n >\n <ng-container *ngIf=\"header.showTooltipIcon\">\n <!-- Active tooltip Functionality -->\n <ng-container *ngIf=\"header.filter === 'CHECKBOX'\">\n <span\n class=\"mdi mdi-filter-variant\"\n [ngClass]=\"{\n active:\n annaFilterService.isFilterSortActive &&\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\n disabled: header.disableTooltipIcon || showSkeletonLoading\n }\"\n [ngbTooltip]=\"filterTooltip\"\n placement=\"{{ filterAlignment }}\"\n container=\"body\"\n tooltipClass=\"non-edit-checkbox-tooltip\"\n [autoClose]=\"'outside'\"\n triggers=\"manual\"\n #t=\"ngbTooltip\"\n (click)=\"bindTheValueToToolTip(t, header)\"\n (hidden)=\"closeTooltip()\"\n >\n </span\n ><br />\n </ng-container>\n <ng-container *ngIf=\"header.filter === 'SLIDER'\">\n <span\n class=\"mdi mdi-filter-variant\"\n [ngClass]=\"{\n active:\n annaFilterService.isFilterSortActive &&\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\n disabled: header.disableTooltipIcon || showSkeletonLoading\n }\"\n [ngbTooltip]=\"sliderToolTip\"\n placement=\"bottom left-top\"\n container=\"body\"\n tooltipClass=\"non-edit-slider-tooltip\"\n [autoClose]=\"'outside'\"\n triggers=\"manual\"\n #t1=\"ngbTooltip\"\n (click)=\"bindTheValueToToolTip(t1, header)\"\n (hidden)=\"closeTooltip()\"\n >\n </span\n ><br />\n </ng-container>\n <ng-container *ngIf=\"header.filter === 'DATE'\">\n <span\n class=\"mdi mdi-filter-variant\"\n [ngClass]=\"{\n active:\n annaFilterService.isFilterSortActive &&\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\n disabled: header.disableTooltipIcon || showSkeletonLoading\n }\"\n [ngbTooltip]=\"datePickerTooltip\"\n placement=\"bottom auto\"\n container=\"body\"\n tooltipClass=\"non-edit-datepicker-tooltip\"\n [autoClose]=\"'outside'\"\n triggers=\"manual\"\n #t2=\"ngbTooltip\"\n (click)=\"bindTheValueToToolTip(t2, header)\"\n (hidden)=\"closeTooltip()\"\n >\n </span\n ><br />\n </ng-container>\n <ng-container *ngIf=\"header.filter === 'WEEK'\">\n <span\n class=\"mdi mdi-filter-variant\"\n [ngClass]=\"{\n active:\n annaFilterService.isFilterSortActive &&\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\n disabled: header.disableTooltipIcon || showSkeletonLoading\n }\"\n [ngbTooltip]=\"weekPickerToolTip\"\n placement=\"bottom left-top\"\n container=\"body\"\n [autoClose]=\"'outside'\"\n triggers=\"manual\"\n #t3=\"ngbTooltip\"\n (click)=\"bindTheValueToToolTip(t3, header)\"\n (hidden)=\"closeTooltip()\"\n >\n </span\n ><br />\n </ng-container>\n <ng-container *ngIf=\"header.filter === 'TIME'\">\n <span\n class=\"mdi mdi-filter-variant\"\n [ngClass]=\"{\n active:\n annaFilterService.isFilterSortActive &&\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\n disabled: header.disableTooltipIcon || showSkeletonLoading\n }\"\n [ngbTooltip]=\"timeFilterToolTip\"\n placement=\"bottom left-top auto\"\n container=\"body\"\n tooltipClass=\"non-edit-time-tooltip\"\n [autoClose]=\"'outside'\"\n triggers=\"manual\"\n #t4=\"ngbTooltip\"\n (click)=\"bindTheValueToToolTip(t4, header)\"\n (hidden)=\"closeTooltip()\"\n >\n </span\n ><br />\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!header.showTooltipIcon\">\n <span id=\"no-filter-space\"></span><br />\n </ng-container>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'lurViolationInfoTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"lurViolationInfoTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n </div>\n </div>\n </th>\n\n <ng-container *matCellDef=\"let ROW_DATA\">\n <td\n mat-cell\n [style.background]=\"ROW_DATA.backgroundColor\"\n [style.border]=\"ROW_DATA.border\"\n class=\"{{ ROW_DATA.rowClass }}\"\n [ngClass]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'TdClass']\"\n [attr.rowspan]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'Rowspan']\"\n *ngIf=\"\n !hideSomeTds ||\n (hideSomeTds && !ROW_DATA['hide' + columnDef.headerInfo[0].objectKey + 'Td'])\n \"\n >\n <ngx-skeleton-loader\n *ngIf=\"showSkeletonLoading\"\n count=\"1\"\n [theme]=\"{ height: '10px', display: 'block' }\"\n >\n </ngx-skeleton-loader>\n\n <ng-container *ngIf=\"!showSkeletonLoading\">\n <ng-container *ngIf=\"tableData.length > 0 && !(isNoDataToDisplaySubject$ | async)\">\n <ng-container\n *ngFor=\"\n let subline of columnDef.headerInfo;\n let subLineIndex = index;\n trackBy: trackByFn\n \"\n >\n <div showEllipsisTextOnHover>\n <ng-container [ngSwitch]=\"columnDef.headerInfo[subLineIndex].typeOfBodyData\">\n <ng-container *ngSwitchCase=\"'ICON'\">\n <i\n *ngIf=\"\n !(\n starredInProgress &&\n ROW_DATA.orderId == selectedStarredOrderId\n )\n \"\n [class]=\"ROW_DATA.iconClass\"\n (click)=\"iconClicked(ROW_DATA, ROW_DATA.iconClass)\"\n ngbTooltip=\"{{ ROW_DATA.iconTitleText }}\"\n placement=\"bottom\"\n container=\"body\"\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\n ></i>\n <ng-container\n *ngIf=\"\n starredInProgress && ROW_DATA.orderId == selectedStarredOrderId\n \"\n >\n <div class=\"spinner-for-button-directive\"></div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'ICON_CELL'\">\n <ng-container\n *ngFor=\"\n let action of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n >\n <ng-container *ngIf=\"action.showObjectKey\">\n {{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] }}\n </ng-container>\n\n <i\n *ngIf=\"action.showIcon\"\n [class]=\"action.iconClass\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionType(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n tooltipClass=\"team-user-tooltip remove-on-scroll-class\"\n [ngbTooltip]=\"action.showTooltip ? action.tooltipData : null\"\n (click)=\"\n textActionClicked(\n ROW_DATA,\n action.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n [disableTooltip]=\"!action.showTooltip\"\n >\n </i>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'HTML_STRING'\">\n <p\n [innerHTML]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n (click)=\"innerHTMLCellClicked($event, ROW_DATA)\"\n ></p>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'SVG_ICON'\">\n <anna-core-anna-icon-column\n [componentName]=\"gtGeneralConfig.component\"\n [dataObject]=\"ROW_DATA\"\n [iconToShow]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n \"\n (onColumnIconClicked)=\"svgIconClicked($event)\"\n ></anna-core-anna-icon-column>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'TEXT_ACTIONS'\">\n <ng-container\n *ngFor=\"\n let text of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n >\n <button\n *ngIf=\"text.showTooltip\"\n (click)=\"\n textActionClicked(\n ROW_DATA,\n text.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n [disabled]=\"text.isDisabled\"\n class=\"{{ text.class }}\"\n (mouseenter)=\"\n mouseEnterOnTextActionType(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n [ngbTooltip]=\"textActionTooltipTemplate\"\n placement=\"auto\"\n container=\"body\"\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\n >\n {{ text.name }}\n </button>\n\n <button\n *ngIf=\"!text.showTooltip\"\n (click)=\"\n textActionClicked(\n ROW_DATA,\n text.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n [disabled]=\"text.isDisabled\"\n class=\"{{ text.class }}\"\n >\n {{ text.name }}\n </button>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\n <span\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n [ngClass]=\"{\n 'disable-checkbox':\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\n }\"\n class=\"material-icons custom-column-checkbox-checked\"\n (click)=\"\n selectOrUnselectCheckbox(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].objectKey,\n false\n )\n \"\n >\n check_box\n </span>\n <span\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n class=\"material-icons custom-column-checkbox-unchecked\"\n [ngClass]=\"{\n 'disable-checkbox':\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\n }\"\n (click)=\"\n selectOrUnselectCheckbox(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].objectKey,\n true\n )\n \"\n >\n check_box_outline_blank\n </span>\n\n <ng-container\n *ngFor=\"\n let action of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n >\n <i\n *ngIf=\"action.showIcon\"\n [class]=\"action.iconClass\"\n [ngClass]=\"{ disabled: action.disabledIcon }\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionTypeContainingTable(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\n [ngbTooltip]=\"tooltipContainingTableTemplate\"\n >\n </i>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'CLICKABLE_DATA'\">\n <a\n *ngFor=\"\n let text of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n [class]=\"text.class\"\n (click)=\"onClickableDataClicked(ROW_DATA, text.id)\"\n >\n {{ text.name }}\n </a>\n <span\n *ngIf=\"\n subline.objectKey == 'displayBookedUnits' &&\n gtGeneralConfig.component == 'RATING'\n \"\n class=\"clickable-data\"\n (click)=\"spotDetailsDownloadClicked('DATAROW', ROW_DATA)\"\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\"\n >{{ ROW_DATA.displayBookedUnits }}\n <span class=\"material-icons spot-details-download-icons\"\n >get_app</span\n >\n <ng-container\n *ngIf=\"\n downloadInProgress &&\n ROW_DATA.inventoryCodeId ==\n selectedInventoryIdForDownload &&\n ROW_DATA.demographic == selectedDemographicForDownload\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"circularProgressBar\"\n ></ng-container>\n </ng-container>\n </span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'STRING___ICON_OR_TEXT_ACTION'\">\n <ng-container\n *ngFor=\"\n let action of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n >\n <span\n [class]=\"action.additionalTextBeforeLinkClass\"\n [innerHtml]=\"action.additionalTextBeforeLink\"\n ngbTooltip=\"{{ action.additionalTextBeforeLink }}\"\n placement=\"bottom\"\n container=\"body\"\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\n [disableTooltip]=\"!action.enableTooltipForAdditionalText\"\n ></span>\n\n <ng-container *ngIf=\"action && action.typeOfData == 'STRING'\">\n {{ action.data }}\n </ng-container>\n\n <a\n [id]=\"action.id\"\n *ngIf=\"action.showLink\"\n (click)=\"\n textActionClicked(\n ROW_DATA,\n action.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n [class]=\"action.linkClass\"\n [ngClass]=\"{ disabled: action.disabledLink }\"\n >{{ action.data }}</a\n >\n <span\n ngbTooltip=\"{{ action.additionalTextAfterLink }}\"\n placement=\"bottom\"\n container=\"body\"\n [class]=\"action.additionalTextAfterLinkClass\"\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\n [disableTooltip]=\"!action.enableTooltipForAdditionalAfterText\"\n >\n {{ action.additionalTextAfterLink }}\n </span>\n\n <ng-container *ngIf=\"action.showTooltip\">\n <ng-container *ngIf=\"action.tooltipData.innerHtml\">\n <i\n *ngIf=\"action.showIcon\"\n [class]=\"action.iconClass\"\n [ngClass]=\"{ disabled: action.disabledIcon }\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionTypeContainingTable(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\n [ngbTooltip]=\"tooltipContainingTableTemplate\"\n >\n </i>\n </ng-container>\n\n <ng-container *ngIf=\"!action.tooltipData.tooltipTableBody\">\n <i\n *ngIf=\"action.showIcon\"\n [class]=\"action.iconClass\"\n [ngClass]=\"{ disabled: action.disabledIcon }\"\n (click)=\"\n iconClickedOnStringIconActionType(\n ROW_DATA,\n action.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionType(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n [placement]=\"\n action.tooltipPlacement\n ? action.tooltipPlacement\n : 'bottom auto'\n \"\n container=\"body\"\n [autoClose]=\"true\"\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{\n action.tooltipClass\n }}\"\n [ngbTooltip]=\"userLoggedInDetails\"\n >\n </i>\n <ng-container *ngIf=\"action['showSvgIcon']\">\n <anna-core-anna-est-icon-template\n class=\"float-right\"\n *ngIf=\"action['svgIconName'] == 'anna-icon'\"\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionType(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex]\n .tooltipKey\n )\n \"\n [placement]=\"\n action.tooltipPlacement\n ? action.tooltipPlacement\n : 'bottom auto'\n \"\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{\n action['tooltipClass']\n }}\"\n [ngbTooltip]=\"userLoggedInDetails\"\n container=\"body\"\n [autoClose]=\"true\"\n >\n </anna-core-anna-est-icon-template>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!action.showTooltip\">\n <i\n *ngIf=\"action.showIcon\"\n [class]=\"action.iconClass\"\n [ngClass]=\"{ disabled: action.disabledIcon }\"\n (click)=\"\n iconClickedOnStringIconActionType(\n ROW_DATA,\n action.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n >\n </i>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'STRING_OR_INPUT'\">\n <ng-container\n *ngIf=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.type ==\n 'STRING';\n else inputBox\n \"\n >\n <span\n [innerHtml]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n ?.value\n \"\n ></span>\n </ng-container>\n <ng-template #inputBox>\n <input\n placeholder=\"{{\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n ?.placeholder\n }}\"\n showEllipsisTextOnHover\n class=\"{{\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .className\n }}\"\n (keydown)=\"\n changesMadeInEditableInputBox(\n $event,\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey],\n false\n )\n \"\n (paste)=\"\n changesMadeInEditableInputBox(\n $event,\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey],\n true\n )\n \"\n (ngModelChange)=\"\n editableInputValueChanged(\n $event,\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].objectKey\n )\n \"\n [ngModel]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].value\n \"\n [disabled]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .disabled\n \"\n [ngClass]=\"{\n 'red-border':\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .hasError\n }\"\n />\n\n <i\n *ngIf=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .showIcon\n \"\n container=\"body\"\n [ngbTooltip]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .iconTooltip\n \"\n tooltipClass=\"gt-total-row-tooltip\"\n placement=\"bottom\"\n class=\"{{\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .iconClass\n }}\"\n >\n </i>\n <ng-container\n *ngIf=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey][\n 'showSvgIcon'\n ]\n \"\n >\n <anna-core-anna-est-icon-template\n class=\"float-right\"\n *ngIf=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey][\n 'svgIconName'\n ] == 'anna-icon'\n \"\n [placement]=\"'bottom auto'\"\n tooltipClass=\"gt-total-row-tooltip\"\n [ngbTooltip]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .iconTooltip\n \"\n container=\"body\"\n >\n </anna-core-anna-est-icon-template>\n </ng-container>\n </ng-template>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'HTML'\">\n <span\n [innerHtml]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n ></span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'SINGLE_RADIO'\">\n <span\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n [ngClass]=\"{\n 'disable-checkbox':\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\n }\"\n class=\"mdi mdi-radiobox-marked\"\n (click)=\"(null)\"\n >\n </span>\n <span\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n class=\"mdi mdi-radiobox-blank\"\n [ngClass]=\"{\n 'disable-checkbox':\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\n }\"\n (click)=\"\n selectOrUnselectCheckbox(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].objectKey,\n true\n )\n \"\n >\n </span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'RADIO'\">\n <mat-radio-group\n *ngIf=\"ROW_DATA['RadioButtonConfig']\"\n [ngModel]=\"ROW_DATA[subline.objectKey]\"\n [disabled]=\"ROW_DATA['RadioButtonConfig'][0].isDisabled\"\n >\n <ng-container\n *ngFor=\"\n let radioButton of ROW_DATA['RadioButtonConfig'];\n let last = last\n \"\n >\n <mat-radio-button\n value=\"{{ radioButton.value }}\"\n class=\"{{ radioButton.class }}\"\n (click)=\"\n radioButtonClicked(\n ROW_DATA,\n radioButton.value,\n ROW_DATA['RadioButtonConfig'][0].isDisabled\n )\n \"\n >{{ radioButton.label }}\n </mat-radio-button>\n <i\n class=\" {{ radioButton.iconClass }}\"\n (click)=\"radioButtonIconClicked(ROW_DATA)\"\n ></i>\n <br *ngIf=\"!last\" />\n </ng-container>\n </mat-radio-group>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'STRING_WITH_TOOLTIP'\">\n <ng-container\n *ngFor=\"\n let action of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n >\n <span> {{ action?.dataToDisplay }}</span>\n <span\n *ngIf=\"action?.showTooltip\"\n [ngbTooltip]=\"textActionTooltipTemplate\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionType(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n [placement]=\"action?.tooltipPosition\"\n container=\"body\"\n [class]=\"action?.tooltipIconClass\"\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\n [disableTooltip]=\"action?.disableTooltip\"\n >\n </span>\n <span> {{ action?.dataToDisplayAfterTooltip }}</span>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"subline.objectKey != 'description'\">\n <span>{{\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n }}</span>\n <i\n *ngIf=\"\n subline.objectKey == 'inventoryCode' &&\n ROW_DATA['isSellerGroup'] &&\n gtGeneralConfig.component == 'RATING'\n \"\n class=\"mi mdi-info-outline seller-tooltip\"\n [ngbTooltip]=\"sellerHierarchyTooltip\"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n triggers=\"manual\"\n (hidden)=\"closeTooltip()\"\n #info=\"ngbTooltip\"\n tooltipClass=\"hierarchy-tooltip remove-on-scroll-class\"\n (mouseenter)=\"\n bindTheValueToSellerGroupTooltip(\n ROW_DATA.sellerGroupHierarchy,\n info\n )\n \"\n >\n </i>\n\n <i\n *ngIf=\"\n subline.objectKey == 'displayBookedAverageRating' &&\n gtGeneralConfig.component == 'RATING' &&\n ROW_DATA['showRatingAverageIcon']\n \"\n class=\"mi mdi-info-outline seller-tooltip\"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n (mouseenter)=\"\n setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\n \"\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\n [ngbTooltip]=\"postedRatingDifference\"\n >\n </i>\n\n <i\n *ngIf=\"\n subline.objectKey == 'displayBookedAverageImpression' &&\n gtGeneralConfig.component == 'RATING' &&\n ROW_DATA['showImpressionAverageIcon']\n \"\n class=\"mi mdi-info-outline seller-tooltip\"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n (mouseenter)=\"\n setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\n \"\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\n [ngbTooltip]=\"postedImpDifference\"\n >\n </i>\n </ng-container>\n <ng-container *ngIf=\"subline.objectKey == 'description'\">\n <p\n *ngIf=\"\n ROW_DATA.descriptionMessage ||\n ROW_DATA.descriptionEmailReferenceNum\n \"\n >\n <ng-container *ngIf=\"ROW_DATA.descriptionMessage\">\n {{ ROW_DATA.descriptionMessage }}\n <br />\n </ng-container>\n <ng-container\n *ngIf=\"\n ROW_DATA.descriptionEmailReferenceNum != '-' &&\n ROW_DATA.descriptionEmailReferenceNum != ''\n \"\n >\n Email Ref: {{ ROW_DATA.descriptionEmailReferenceNum }}\n <br />\n </ng-container>\n </p>\n <a\n href=\"{{ ROW_DATA.descriptionDetailsUrl }}\"\n target=\"_blank\"\n *ngIf=\"\n ROW_DATA.descriptionDetailsUrlType === 'PDF' ||\n ROW_DATA.descriptionDetailsUrlType === 'EXCEL'\n \"\n >\n <button class=\"btn viewDetailsAndEmailBtn\">Download</button>\n </a>\n <ng-container\n *ngIf=\"ROW_DATA.activityname.toLowerCase() == 'order onboarded'\"\n >\n <a\n *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'LINK'\"\n (click)=\"viewDetailsClicked(ROW_DATA)\"\n >\n <button class=\"btn viewDetailsAndEmailBtn order-onboarded\">\n View details\n </button>\n </a>\n </ng-container>\n\n <a\n href=\"{{ ROW_DATA.descriptionEmailUrl }}\"\n target=\"_blank\"\n *ngIf=\"\n ROW_DATA.descriptionEmailUrl != '-' &&\n ROW_DATA.descriptionEmailUrl != ''\n \"\n >\n <button class=\"btn viewDetailsAndEmailBtn\">View email</button>\n </a>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"isNoDataToDisplaySubject$ | async\">\n <div>\n {{ null }}\n </div>\n </ng-container>\n </ng-container>\n </td>\n </ng-container>\n </ng-container>\n </table>\n </div>\n <anna-core-no-data-lib\n [width]=\"noDataWidth\"\n [marginTop]=\"marginTop\"\n *ngIf=\"isNoDataToDisplaySubject$ | async\"\n >\n </anna-core-no-data-lib>\n</div>\n\n<!-- Checkbox template -->\n<ng-template #filterTooltip>\n <anna-core-anna-column-checkbox-filter\n [tableData]=\"tableData\"\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\n [isLurAndCsrComponent]=\"false\"\n [clonedTableData]=\"clonedTableData\"\n [filterTabObjects]=\"filterTabObjects\"\n (filterAppliedToTable)=\"filterApplied($event)\"\n (sortingAppliedToTable)=\"sortingApplied($event)\"\n (closeTooltip)=\"closeTooltip()\"\n >\n </anna-core-anna-column-checkbox-filter>\n</ng-template>\n\n<!-- Slider template -->\n<ng-template #sliderToolTip>\n <anna-core-anna-column-slider-filter\n [tableData]=\"tableData\"\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\n [isLurAndCsrComponent]=\"false\"\n [clonedTableData]=\"clonedTableData\"\n [filterTabObjects]=\"filterTabObjects\"\n (filterAppliedToTable)=\"filterApplied($event)\"\n (sortingAppliedToTable)=\"sortingApplied($event)\"\n (closeTooltip)=\"closeTooltip()\"\n >\n </anna-core-anna-column-slider-filter>\n</ng-template>\n\n<!-- Date Picker Template -->\n<ng-template #datePickerTooltip>\n <anna-core-anna-column-date-range-filter\n [tableData]=\"tableData\"\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\n [isLurAndCsrComponent]=\"false\"\n [clonedTableData]=\"clonedTableData\"\n [filterTabObjects]=\"filterTabObjects\"\n (filterAppliedToTable)=\"filterApplied($event)\"\n (sortingAppliedToTable)=\"sortingApplied($event)\"\n (closeTooltip)=\"closeTooltip()\"\n >\n </anna-core-anna-column-date-range-filter>\n</ng-template>\n\n<!-- Week Picker Template -->\n<ng-template #weekPickerToolTip>\n <!-- <div class=\"weekpicker-container\">\n <anna-core-week-calendar-filter-lib\n [week-calendar-config]=\"gtGeneralConfig.multiWeekPickerConfig\"\n (apply)=\"applyWeekFilter($event)\"\n [from-date]=\"calendarMinEnabledDate\"\n [to-date]=\"calendarMaxEnabledDate\"\n >\n </anna-core-week-calendar-filter-lib>\n </div> -->\n</ng-template>\n\n<!-- Time Filter Template -->\n<ng-template #timeFilterToolTip>\n <anna-core-anna-column-time-filter\n [tableData]=\"tableData\"\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\n [isLurAndCsrComponent]=\"false\"\n [showAllTimeRangeCheckboxes]=\"showCheckboxesForTimeFilter\"\n [clonedTableData]=\"clonedTableData\"\n [filterTabObjects]=\"filterTabObjects\"\n (filterAppliedToTable)=\"filterApplied($event)\"\n (sortingAppliedToTable)=\"sortingApplied($event)\"\n (closeTooltip)=\"closeTooltip()\"\n >\n </anna-core-anna-column-time-filter>\n</ng-template>\n\n<ng-template #columnInfoTooltip>\n <p style=\"color: black; white-space: nowrap\">This preemption is rejected and not marked for credit.</p>\n</ng-template>\n\n<ng-template #ratingInfoTooltip>\n <p class=\"first-row\">Shows 'Booked Rating' for Preemptions & MakeGood Offered spot(s).</p>\n <p class=\"second-row\">Shows 'Projected Rating' for ADU Offered spot(s).</p>\n</ng-template>\n\n<ng-template #impsInfoTooltip>\n <p class=\"first-row\">Shows 'Booked IMPS' for Preemptions & MakeGood Offered spot(s).</p>\n <p class=\"second-row\">Shows 'Projected IMPS' for ADU Offered spot(s).</p>\n</ng-template>\n\n<ng-template #spotsColumnEquivalizationMessageTooltip>\n <p class=\"spot-column-tooltip-message\">\n This consists of equivalized spots and un-equivalized Paid Programs & un-equivalized Non-spots.\n </p>\n</ng-template>\n\n<ng-template #underDeliveryTooltip>\n <p class=\"spot-column-tooltip-message\">\n Indicates the Under-delivery percentage based on booked and posted RTG/IMPS.\n </p>\n</ng-template>\n\n<ng-template #overDeliveryTooltip>\n <p class=\"spot-column-tooltip-message\">\n Indicates the Over-delivery percentage based on booked and posted RTG/IMPS.\n </p>\n</ng-template>\n\n<ng-template #rateInfoTooltip>\n <p class=\"first-row\">Shows 'Booked Rate' for Preemptions & MakeGood Offered spot(s).</p>\n <p class=\"second-row\">Shows 'Projected $ Value' for ADU Offered spot(s).</p>\n</ng-template>\n\n<ng-template #sellerHierarchyTooltip>\n <ng-container *ngIf=\"sellerGroupHierarchy.length > 0\">\n <section class=\"hierarchy-table-container\">\n <table class=\"seller-hierarchy-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>Inventory Codes</th>\n <th>Program/Description</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let data of sellerGroupHierarchy; let tooltipIndex = index\">\n <td>{{ tooltipIndex + 1 }}</td>\n <td>\n <span showEllipsisTextOnHover>{{ data.InventoryCode }}</span>\n </td>\n <td>\n <span showEllipsisTextOnHover>{{ data.Program }}</span>\n </td>\n </tr>\n </tbody>\n </table>\n </section>\n </ng-container>\n <ng-container *ngIf=\"sellerGroupHierarchy.length == 0\">\n <span style=\"color: #000\">Seller group not available for this inventory code</span>\n </ng-container>\n</ng-template>\n\n<ng-template #lurViolationInfoTooltip>\n <p class=\"first-row\">The values are for the entire week.</p>\n</ng-template>\n\n<ng-template #postedRatingDifference>\n <p class=\"difference-text\">\n The difference between posted and booked average rating is\n {{ isDifferenceLessThan25Percent ? \"less\" : \"more\" }} than 25%.\n </p>\n</ng-template>\n\n<ng-template #postedImpDifference>\n <p class=\"difference-text\">\n The difference between posted and booked average impression is\n {{ isDifferenceLessThan25Percent ? \"less\" : \"more\" }} than 25%.\n </p>\n</ng-template>\n\n<ng-template #ongoingRevBookedColumnTooltip>\n <p>The Booked $ value, Spots, GRP, CPP, IMPS, CPM corresponds on the last permanent revision generated</p>\n</ng-template>\n\n<ng-template #completedRevBookedColumnTooltip>\n <p>The Booked $ value corresponds on the last permanent revision generated</p>\n</ng-template>\n\n<ng-template #avgBookedRate>\n <p>This is the booked average Rate</p>\n</ng-template>\n\n<ng-template #avgBookedRtg>\n <p>This is the booked average RTG</p>\n</ng-template>\n\n<ng-template #avgBookedImps>\n <p>This is the booked average IMP(\u2019000)</p>\n</ng-template>\n\n<ng-template #projectedImpsRtg>\n <p>\n All projections are derived from the sum of actual posted information until the last posted date and estimates\n for the remaining selected period.\n </p>\n</ng-template>\n\n<ng-template #automationTooltip>\n <p>\n Please get the order business rules approved to activate the order for automation. Only for the\n automation-activated orders, any approved MGs, ADUs, or credited spots on ANNA will be fed into the traffic\n system i.e. ANNA revisions.\n <!-- removed below line as part of enhancmennt in 14.0 releas -->\n <!-- Additionally, ANNA will only enter buyer revisions into traffic for the selected\n Medialine/WOC orders. -->\n </p>\n</ng-template>\n\n<ng-template #rebateImpact>\n <p>Rebate impact value is for the originally ordered spot length and is not equivalized.</p>\n</ng-template>\n\n<ng-template #lurViolationTotalRowToolTip>\n <ul>\n <li>\n <strong>POLITICAL RATE VIOLATIONS:</strong>\n Violations flagged when non-political spots are booked at a rate lower than the minimum booked rate for\n political candidates for the same week, Inventory Code and Revenue Class.\n </li>\n <li>\n <strong>CANDIDATE TO CANDIDATE VIOLATION:</strong>\n Violations flagged when political spots are booked at different rates to other political spots for the same\n week, Inventory Code and Revenue Class.\n </li>\n </ul>\n</ng-template>\n\n<ng-template #circularProgressBar>\n <circle-progress\n [percent]=\"percentDone\"\n [radius]=\"5\"\n [showTitle]=\"false\"\n [showUnits]=\"false\"\n [showSubtitle]=\"false\"\n [outerStrokeWidth]=\"3\"\n [innerStrokeWidth]=\"3\"\n [space]=\"-3\"\n [outerStrokeColor]=\"'#268bff'\"\n [innerStrokeColor]=\"'#d5d5d5'\"\n [animationDuration]=\"10\"\n ></circle-progress>\n</ng-template>\n\n<ng-template #userLoggedInDetails>\n <div class=\"tooltip-div-container\">\n <ng-container *ngFor=\"let data of textActionTooltip\">\n <span *ngIf=\"data.key != 'read'\">\n {{ data.key }} <b> {{ data.value }}</b>\n </span>\n <span *ngIf=\"data.key == 'read'\">\n {{ data.value }}\n </span>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #markAsReadTip>\n <div class=\"notification-tooltip-div-container\">\n <ng-container *ngFor=\"let data of textActionTooltip\">\n {{ data.value }}\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #textActionTooltipTemplate>\n <ng-container *ngFor=\"let data of textActionTooltip\">\n {{ data.key }} <b> {{ data.value }}</b>\n </ng-container>\n</ng-template>\n\n<ng-template #tooltipContainingTableTemplate>\n <div\n *ngIf=\"tooltipContainingTable\"\n [innerHTML]=\"tooltipContainingTable.innerHtml\"\n class=\"notification-tooltip-div-container\"\n >\n <!-- <ul>\n <li *ngFor=\"let headerMsg of tooltipContainingTable.tableHeaderMsg\">\n <b> {{headerMsg}} </b>\n </li>\n </ul>\n\n <table class=\"tooltip-table\">\n <thead>\n <tr>\n <th *ngFor=\"let header of tooltipContainingTable.tooltipTableHeader\">\n {{ header}}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let rows of tooltipContainingTable.tooltipTableBody\">\n <td *ngFor=\"let data of rows\">\n {{ data }}\n </td>\n </tr>\n </tbody>\n </table>\n\n <ul>\n <li style=\"margin-top:10px; padding:0\" *ngFor=\"let footerMsg of tooltipContainingTable.tableFooterMsg\">\n {{ footerMsg }} \n </li>\n </ul> -->\n </div>\n</ng-template>\n<!-- <ng-template #textActionTooltipTemplate>\n <ng-container *ngFor=\"let data of textActionTooltip\">\n {{ data.key }} <b> {{data.value}}</b>\n </ng-container>\n</ng-template> -->\n", styles: [".sort-btn{background:#fff;border:none;border-right:1px solid #1b88ff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.07;letter-spacing:normal;color:#1b88ff;cursor:pointer;flex:1;text-align:center}.sort-btn:last-of-type{border-right:none}.sort-btn.active{color:#202b47;text-decoration:none}p.sort-container{margin-top:8px;padding-bottom:8px;border-bottom:1px solid #e6e6e6;margin-bottom:0;display:flex}::ng-deep .tooltip-inner{max-height:22rem;background-color:#fff;border:1px solid white;border-radius:5px;box-shadow:0 2px 2px #0000003d,0 0 2px #0000001f;max-width:251px;width:100%;padding:0!important}::ng-deep .tooltip-inner div.radio-container{flex-wrap:wrap}::ng-deep .md-drppicker{box-shadow:unset!important}::ng-deep .available{color:#999}::ng-deep .bs-tooltip-bottom .arrow:before{border-bottom-color:#fff!important}::ng-deep .bs-tooltip-left .arrow:before{border-left-color:#fff!important}::ng-deep .tooltip.show{opacity:1}.input{text-align:left;margin:5px 10px 5px 5px;display:flex;align-items:center;width:230px;white-space:nowrap}.data{color:#000;font-weight:700;margin-left:5px;margin-right:5px}span.data{display:inline-block;text-overflow:ellipsis;white-space:pre;width:100%;overflow:hidden}.check-box{font-size:14px;cursor:pointer;position:relative;top:-1px}span.mdi-filter.active{color:#000;opacity:1!important;pointer-events:all!important}p{margin-bottom:0;line-height:initial}span.mdi-filter{color:#cbcbcb}::ng-deep .ngx-slider-pointer{top:-5px!important;width:12px!important;height:12px!important;background:#bdbdbd!important;border:1px solid #ffffff!important;box-shadow:0 1px 3px #0000004d!important;border-radius:16px!important}input:focus{outline:none}input::placeholder{color:#c8c8c8}.cancel-btn{background:#c7e1ff;color:#268bff}.apply-btn{background:#268bff;color:#fff;margin-left:.3125rem}div.radio-container{display:flex;white-space:nowrap;justify-content:space-between;background-color:#f4f4f4;border-radius:.125rem;margin:.4375rem .4375rem .25rem}div.radio-container div{flex:1;width:50%}div.radio-container div.full-width{width:100%}div.radio-container input{position:relative;top:.125rem;margin-right:.25rem}div.radio-container label{font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:0;color:#4a4a4a;margin:0;padding-left:.125rem}div.radio-container label:first-of-type{margin-right:.188rem}div.radio-container input[type=radio]{appearance:none;display:inline-block;width:.9375rem;height:.9375rem;padding:.125rem;background-clip:content-box;border:.125rem solid #268bff;background-color:transparent;border-radius:50%}div.radio-container input[type=radio]:checked{background-color:#268bff}.checkbox-filter-buttons-container{padding:0 8px!important}.buttons-container{display:flex;margin:0px auto .4375rem;justify-content:center;padding:0 12px}.buttons-container .button{padding:0 10px;width:100%;margin:8px 0 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.buttons-container button:last-of-type{background-color:#268bff;color:#fff;margin-left:.5rem}.buttons-container button.disabled{background:#bdbdbd;opacity:.5;color:#4a4a4a}.button{display:inline-block;margin:8px 4px 0 8px;padding:0 16px;border-radius:4px;text-align:center;outline:none;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;border:none;color:#268bff;background-color:#e5f1ff}.search-box{display:flex;align-items:center;color:#c8c8c8;border:1px solid #e6e6e6;border-radius:.125rem;margin:.25rem .4375rem .188rem;height:1.5rem;padding:.188rem 8px .188rem .5rem}.search-box .search-bar-close{margin-left:auto;float:right}.search-icon{margin:0 4px 0 0;font-size:1.125rem;color:#9b9b9b}.filter-icon{justify-content:right;margin-left:auto;color:#d4d4d4;color:#a1a1a1;font-size:16px;cursor:pointer}.data{margin:0 13px 0 8px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.86;letter-spacing:\"\";color:#4a4a4a}.search-input{margin:1px 0 1px 4px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#c8c8c8;width:calc(100% - 38px)}.check-box{color:#268bff}.tooltip-data-container{overflow-y:scroll;max-height:8rem}.searchbar{width:100%;display:flex;justify-content:flex-end;align-items:flex-end}.clear-button{opacity:.5;font-family:Roboto;font-size:.9375rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;text-decoration:underline;border:none;background-color:#fff;color:#4a4a4a;margin-left:.625rem;padding:0}.clear-button:focus{outline:none;box-shadow:none}.unchecked{color:#268bff}cdk-virtual-scroll-viewport.dropdown-data-container{max-height:12.3rem;width:100%;overflow-y:auto;overflow-x:hidden}cdk-virtual-scroll-viewport.dropdown-data-container p.input{margin-left:0}cdk-virtual-scroll-viewport.dropdown-data-container p.input span.mi{padding-left:.4375rem}cdk-virtual-scroll-viewport.dropdown-data-container p.input:hover{background-color:#ebebeb;cursor:pointer}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar{width:.188rem}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar-thumb{color:#d3d3d3;background:#d3d3d3}section.min-maxContainer{display:flex;justify-content:center;margin-bottom:-.125rem;margin-top:.5rem;width:100%}section.min-maxContainer input{width:30%;height:1.875rem;border:1px solid lightgray;color:gray}section.min-maxContainer span{display:inline-block;padding-left:.5rem;padding-right:.5rem;position:relative;top:.3125rem;color:#666}.time-container{width:100%;display:flex;padding:0 .75rem}.time-container input.form-control:disabled{background-color:#fff;width:2.813rem}.time-container input.numberInput:focus{box-shadow:none;border-color:#c2cfd6}.time-container .dot{color:#cbcbcb;position:relative;left:-7px;font-size:17px}.time-container div.arrow-container{flex-direction:column;display:flex;margin-top:.375rem;width:9px;height:18px;margin-right:1.1875rem}.time-container div.arrow-container i{color:#000;cursor:pointer;max-height:9px;font-size:25px;width:10px}.time-container div.arrow-container i:before{width:0;height:0;pointer-events:none;position:relative;left:-9px;top:-11px}.mdi-filter{cursor:pointer}.time-label-container{display:flex;justify-content:flex-start}.time-label-container label{margin-bottom:0;color:#4a4a4a;margin-top:.125rem;margin-left:.75rem;font-weight:700}.time-heading{color:#000;font-size:.8125rem;text-align:left;padding-left:.625rem;margin-top:.625rem;font-weight:700}.column-clear-all{width:94%;text-align:center;border:none;font-size:14px;background:none;text-decoration:underline;color:#268bff}.checkbox-container{display:flex;padding-inline:.625rem}.checkbox-container .data{text-align:left}.checkbox-container:first-of-type{margin-top:.625rem;font-weight:500}.column-clear-all{width:94%;text-align:center;border:none;background:none;text-decoration:underline;color:#268bff}.column-clear-all:disabled{opacity:.5;color:#4a4a4a;font-weight:400}.column-clear-all.align-center{text-align:center}span.mdi-filter-variant.disabled{pointer-events:none;opacity:.5}.datepicker-container{width:100%}span.mdi-filter-variant{color:#cbcbcb;cursor:pointer;font-size:.875rem}span.mdi-filter-variant.active{color:#000}p.filter-tab{font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:normal;color:#1b88ff;border-radius:5px;background-color:#f4f4f4;padding-inline:8px;cursor:pointer;overflow:hidden;text-align:center;text-overflow:ellipsis}p.filter-tab.active{color:#fff;background-color:#1b88ff}button.filter-text-btn{background:#fff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;border:none;color:#268bff;margin-inline:4px;margin-top:2px}button.filter-text-btn:disabled{color:#b1b1b1;cursor:not-allowed}::ng-deep .non-edit-datepicker-tooltip .tooltip-inner{max-width:310px!important;width:283px!important;overflow-y:initial!important;padding:0!important}input.slider-text::-webkit-outer-spin-button,input.slider-text::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input.slider-text{-moz-appearance:textfield}input.slider-text.red-border{border:1px solid #f44336!important}::ng-deep .checkbox-sort p.sort-container{margin-top:8px!important;padding-bottom:8px!important}i.mdi-close{cursor:pointer}i.mdi-close.disable-close-icon{pointer-events:none;cursor:not-allowed}input.error-border{border:1px solid #f44336!important}::ng-deep .non-edit-checkbox-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-slider-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-time-tooltip .tooltip-inner{width:250px!important;padding:0!important}::ng-deep .non-edit-time-tooltip.bs-tooltip-start{padding:.4rem}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow{right:0;top:5px!important;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow:before{border-left-color:#fff;left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height)}::ng-deep .no-bottom-border p.sort-container{border-bottom:none!important}::ng-deep .ngx-slider-pointer-min:after{display:none}::ng-deep .ngx-slider-pointer-max:after{display:none}::ng-deep .ngx-slider span.ngx-slider-pointer{width:12px;height:12px;top:-5px;background-color:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bar{height:3px;background:#ededed}::ng-deep .ngx-slider span.ngx-slider-selection{background:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bubble{bottom:-22px;font-size:12px;color:#333}::ng-deep .show-min.ngx-slider span.ngx-slider-model-value{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .show-max.ngx-slider span.ngx-slider-model-high{background:#fff;box-shadow:none}::ng-deep .ngx-slider span.ngx-slider-combined{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .ngx-slider{top:10px!important;margin:5px 0 2px!important}::ng-deep .ngx-slider-animate{top:0!important}.sidebar-slider{margin-bottom:35px!important;margin-left:5px;margin-right:5px}.slider-placeholder{height:14px}::ng-deep .filter-calendar select.form-select:focus{border-color:#c2cfd6;box-shadow:none}::ng-deep .filter-calendar select.form-select{background-color:#fff}.no-data-case{padding-left:.4375rem!important;font-size:.875rem!important;margin-top:10px!important;cursor:pointer}.check-mark,.unread-mark{cursor:pointer}.on-hover:hover .unread-mark,.notificationHover .check-mark{opacity:0;cursor:pointer}.on-hover:hover .check-mark{opacity:1;cursor:pointer}:host ::ng-deep .gt{table-layout:fixed;margin-bottom:0;width:100%}:host ::ng-deep .gt th,:host ::ng-deep .gt td{padding:2px 8px;line-height:normal}:host ::ng-deep .gt thead tr th .upper-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#4a4a4a;margin-bottom:0}:host ::ng-deep .gt thead tr th .lower-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#a7a7a7;margin-bottom:0}:host ::ng-deep .gt thead tr th{background-color:#ededed;position:sticky;position:-webkit-sticky;top:0;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .gt thead tr th br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt thead tr th div.row{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;width:max-content}:host ::ng-deep .gt thead tr th div.sort-filter-container{display:flex;flex-wrap:nowrap;align-items:center;margin-left:.25rem;margin-right:auto}:host ::ng-deep .gt thead tr th span.mdi-filter-variant{font-size:13px!important;top:-1px!important;position:relative}:host ::ng-deep .gt thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4}:host ::ng-deep .gt tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td .upper-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#000;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr td .lower-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#a7a7a7;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt tbody tr:nth-of-type(1) td{border-top:none!important}:host ::ng-deep .gt .custom-column-checkbox-checked,:host ::ng-deep .gt .custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}:host ::ng-deep .gt .custom-column-checkbox-checked{color:#268bff}:host ::ng-deep .gt .custom-column-checkbox-unchecked{color:#4a4a4a}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4}.table-container{overflow-x:auto;overflow-y:auto}.rowSelectCheckbox,#selectAllRowsCheckbox{cursor:pointer}.disable-checkbox{color:#dedede!important;pointer-events:none!important}.mdi-warning{color:#f3c639;font-size:16px;line-height:28px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{opacity:1}.redcolor-status{color:#c62a2a}#no-filter-space{width:.875rem}::ng-deep .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:1.875rem!important;width:2.625rem;padding:0 .625rem}input.numberInput{margin-right:-.8125rem;padding:0 0 0 .625rem;height:1.875rem}::ng-deep .mat-button-toggle-checked{background-color:#268bff!important;color:#fff!important}::ng-deep .mat-button-toggle-group-appearance-standard{border-radius:0}.hidden{display:none}.no-data-div{margin-top:2.5px}.no-data-div label{margin:0;width:auto;font-weight:500;background-color:#d3d3d3;padding:.3125rem 1.125rem;border-radius:.25rem}.column-values:nth-of-type(2){color:#a7a7a7!important}.custom-column-checkbox-checked,.custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}.custom-column-checkbox-checked{color:#268bff}.custom-column-checkbox-unchecked{color:#4a4a4a}.time-filter-checkboxes>div>p{color:#151b1e}::ng-deep .margin-bottom-zero .mat-radio-label{margin-bottom:0}:host ::ng-deep mat-radio-group br{margin-top:0!important}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__background{width:var(--mat-radio-size);height:var(--mat-radio-size)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__inner-circle{border-width:calc(var(--mat-radio-size) / 2)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{margin:0 0 0 4px;padding:0;top:-2px;position:relative}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio--disabled+label{color:var(--primary-text-color-dark)!important}:host ::ng-deep mat-radio-group mat-radio-button.mat-mdc-radio-button .mdc-form-field .mdc-radio{padding:0}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{left:-94px;font-size:12px;color:#4a4a4a;position:relative}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:red}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:red}::ng-deep .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:#00000061!important}::ng-deep .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-inner-circle{background-color:#00000061!important}::ng-deep tr.white-background-row{background:#fff}::ng-deep tr.gray-background-row{background:#e9e9e980!important}.remarks-tooltip,.mdi-information,.mdi-information-outline,.seller-tooltip{font-size:.875rem;color:#268bff;position:relative;top:.1875rem;cursor:pointer}.seller-tooltip{top:-1px;float:right}::ng-deep .remarks-info-tooltip .tooltip-inner{max-width:19.25rem!important}.rating-icon,.lur-violation-icon{color:#268bff;cursor:pointer;position:relative;left:-2px}::ng-deep .rating-info-tooltip .tooltip-inner{max-width:800px!important}.spots-info-icon{color:#268bff;cursor:pointer;margin:1px 2px 0 -14px}.spots-info-icon-ol{color:#268bff;cursor:pointer;margin:1px 4px 0 -2px}::ng-deep .spot-info-tooltip .tooltip-inner{position:relative;max-width:220px!important;background:#fff;word-break:break-word;display:flex}::ng-deep .spot-info-tooltip-for-orderlisting-table .tooltip-inner{max-width:220px!important;background:#fff;word-break:break-word;display:flex}p.first-row{padding:.5rem .5rem 0;color:#000;white-space:nowrap;text-align:left}p.second-row{padding:2px .5rem .5rem;color:#000;white-space:nowrap;text-align:left}::ng-deep .gt-total-row-tooltip{opacity:1!important}::ng-deep .gt-total-row-tooltip .tooltip-inner{color:#000;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;background-color:#fff;padding:4px!important;width:100%;border-radius:2px!important}::ng-deep .gt-total-row-tooltip .arrow:before{border-top-color:#fff!important}.info-label{margin-left:4px;color:#268bff;vertical-align:text-top}::ng-deep .hierarchy-tooltip{max-width:-moz-fit-content;max-width:fit-content;width:310px!important}::ng-deep .hierarchy-tooltip .tooltip-inner{padding:4px!important;max-width:22.75rem;max-height:11.25rem}table.seller-hierarchy-table{table-layout:fixed}table.seller-hierarchy-table tr th{font-family:Roboto;font-size:.75rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;color:#5e5e5e;white-space:nowrap;background:#ededed;position:sticky;box-shadow:inset 0 1px #d4d4d4;top:0;z-index:1}table.seller-hierarchy-table tr th:nth-child(1){width:20px}table.seller-hierarchy-table tr th:first-of-type,table.seller-hierarchy-table tr td:first-of-type{width:20px;border-left:1px solid #d4d4d4}table.seller-hierarchy-table tr th:last-of-type,table.seller-hierarchy-table tr td:last-of-type{border-right:1px solid #d4d4d4;width:7.875rem!important}table.seller-hierarchy-table tr th:nth-of-type(2){width:7.75rem!important}table.seller-hierarchy-table tr td{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#4a4a4a;box-shadow:none!important;border-top:1px solid #d4d4d4;border-bottom:1px solid #d4d4d4}table.seller-hierarchy-table tr td:nth-of-type(2),table.seller-hierarchy-table tr td:nth-of-type(3){padding-top:.25rem}table.seller-hierarchy-table tr td span{display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}section.hierarchy-table-container{max-height:8.75rem;overflow:auto}section.hierarchy-table-container::-webkit-scrollbar-track{margin-top:1.5rem}.difference-text{padding:.5rem;color:#000;text-align:left}::ng-deep .posted-avg-tooltip .tooltip-inner{width:13.8125rem!important}::ng-deep .drrBooked-info-tooltip{transform:translate(26px,6px)}::ng-deep .drrBooked-info-tooltip .tooltip-inner{max-width:307px!important;width:242px!important;background:#fff;word-break:break-word;display:flex;padding:4px!important;text-align:left}::ng-deep .drrBooked-info-tooltip .tooltip-inner p{color:#000}::ng-deep .drrBooked-info-tooltip .arrow:before{border-right-color:#fff!important}.clickable-data{cursor:pointer;color:#268bff!important;display:flex!important;align-items:center}.clickable-data .spot-details-download-icons{font-size:12px}.disabled-clickable-data{pointer-events:none;color:#d4d4d4!important}.spot-column-tooltip-message{color:#000;width:max-content;text-align:left}div.spinner-for-button-directive{position:relative;left:-1px}.clickable-row table tr.mat-row td{cursor:pointer!important}.tooltip-div-container{text-align:left!important;padding:12px 4px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.notification-tooltip-div-container{text-align:left!important;padding:6px 8px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.mdi-information,.mdi-information-outline{left:3px;top:1px}.mdi-information-outline{position:static}::ng-deep .team-user-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .team-user-tooltip .tooltip-inner{opacity:1!important;width:-moz-fit-content!important;width:fit-content!important;max-width:520px;border-radius:2px;padding:0 4px!important}::ng-deep .team-user-tooltip .tooltip-inner .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip{opacity:1!important}::ng-deep .gt-icon-column-tooltip .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .gt-icon-column-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip .tooltip-inner{width:100%}::ng-deep .tooltip-containing-table{opacity:1!important}::ng-deep .tooltip-containing-table .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .tooltip-containing-table.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .tooltip-containing-table li{margin:0!important;padding:0!important}::ng-deep .tooltip-containing-table ul{margin:0!important;padding-left:8px!important}::ng-deep .tooltip-containing-table .tooltip-inner{width:100%;max-width:230px}table.tooltip-table{table-layout:fixed;margin:4px 0 0;width:100%}table.tooltip-table th,table.tooltip-table td{padding:2px 8px;line-height:normal}table.tooltip-table thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4!important;border:none}table.tooltip-table thead tr th{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67;background-color:#ededed;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}table.tooltip-table thead tr th div.row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}table.tooltip-table tbody tr td{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67}table.tooltip-table tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}table.tooltip-table tbody tr td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}.bottom-border{border-bottom:1px solid #d4d4d4!important}i.disabled{pointer-events:none!important}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "ngmodule", type: NgxSkeletonLoaderModule }, { kind: "component", type: i5.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "directive", type: showEllipsisTextOnHoverDirective, selector: "[showEllipsisTextOnHover]" }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: AnnaIconColumnComponent, selector: "anna-core-anna-icon-column", inputs: ["componentName", "iconToShow", "dataObject"], outputs: ["onColumnIconClicked"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i7.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i7.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "directive", type: NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: AnnaNoDataComponent, selector: "anna-core-no-data-lib", inputs: ["width", "marginTop"] }, { kind: "component", type: AnnaColumnCheckboxFilterComponent, selector: "anna-core-anna-column-checkbox-filter", inputs: ["showFilterHeaderTabs", "isLurAndCsrComponent", "tableData", "clonedTableData", "filterTabObjects"], outputs: ["filterAppliedToTable", "sortingAppliedToTable", "getSortType", "closeTooltip"] }, { kind: "component", type: AnnaColumnSliderFilterComponent, selector: "anna-core-anna-column-slider-filter", inputs: ["filterTabObjects", "isLurAndCsrComponent", "tableData", "showFilterHeaderTabs", "clonedTableData"], outputs: ["closeTooltip", "filterAppliedToTable", "getSortType", "sortingAppliedToTable"] }, { kind: "component", type: AnnaColumnDateRangeFilterComponent, selector: "anna-core-anna-column-date-range-filter", inputs: ["tableData", "clonedTableData", "filterTabObjects", "isLurAndCsrComponent", "showFilterHeaderTabs"], outputs: ["filterAppliedToTable", "sortingAppliedToTable", "getSortType", "closeTooltip"] }, { kind: "component", type: AnnaColumnTimeFilterComponent, selector: "anna-core-anna-column-time-filter", inputs: ["tableData", "clonedTableData", "filterTabObjects", "showFilterHeaderTabs", "showAllTimeRangeCheckboxes", "isLurAndCsrComponent", "gtGeneralConfig", "showClearAllFilter", "startFromText", "endToText", "isSortAndFilterAbsent"], outputs: ["timeChanges", "filterAppliedToTable", "sortingAppliedToTable", "getSortType", "closeTooltip"] }, { kind: "ngmodule", type: NgCircleProgressModule }, { kind: "component", type: i8.CircleProgressComponent, selector: "circle-progress", inputs: ["name", "class", "backgroundGradient", "backgroundColor", "backgroundGradientStopColor", "backgroundOpacity", "backgroundStroke", "backgroundStrokeWidth", "backgroundPadding", "radius", "space", "percent", "toFixed", "maxPercent", "renderOnClick", "units", "unitsFontSize", "unitsFontWeight", "unitsColor", "outerStrokeGradient", "outerStrokeWidth", "outerStrokeColor", "outerStrokeGradientStopColor", "outerStrokeLinecap", "innerStrokeColor", "innerStrokeWidth", "titleFormat", "title", "titleColor", "titleFontSize", "titleFontWeight", "subtitleFormat", "subtitle", "subtitleColor", "subtitleFontSize", "subtitleFontWeight", "imageSrc", "imageHeight", "imageWidth", "animation", "animateTitle", "animateSubtitle", "animationDuration", "showTitle", "showSubtitle", "showUnits", "showImage", "showBackground", "showInnerStroke", "clockwise", "responsive", "startFromZero", "showZeroOuterStroke", "lazy", "options"], outputs: ["onClick"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
764
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AnnaNonEditableGenericTableComponent, isStandalone: true, selector: "anna-core-non-editable-generic-table-lib", inputs: { showSkeletonLoading: "showSkeletonLoading", tableHeaders: "tableHeaders", tableData: "tableData", clonedTableData: "clonedTableData", gtGeneralConfig: "gtGeneralConfig", totalRowInfo: "totalRowInfo", gtDimension: "gtDimension", tableClass: "tableClass", maximumRowsWhichCanBeRenderedWithoutScroll: "maximumRowsWhichCanBeRenderedWithoutScroll", fixNumberOfRowsForPopup: "fixNumberOfRowsForPopup", limit: "limit", includeBorderInTableHeight: "includeBorderInTableHeight", downloadInProgress: "downloadInProgress", percentDone: "percentDone", starredInProgress: "starredInProgress", clickableRow: "clickableRow", setTableHeightWhenRowSizeIsFixed: "setTableHeightWhenRowSizeIsFixed", tableBorderBottomClassRequired: "tableBorderBottomClassRequired", hideSomeTds: "hideSomeTds", tdsHaveRowSpan: "tdsHaveRowSpan", multipleTablesPresent: "multipleTablesPresent", showOrHideToggleForTotalRow: "showOrHideToggleForTotalRow" }, outputs: { toggleCheckbox: "toggleCheckbox", toggleRowCheckbox: "toggleRowCheckbox", toggleHeaderCheckbox: "toggleHeaderCheckbox", undoIconClicked: "undoIconClicked", filterAppliedToTable: "filterAppliedToTable", sortingAppliedToTable: "sortingAppliedToTable", rowClicked: "rowClicked", radioButtonSelected: "radioButtonSelected", columnFilterOpened: "columnFilterOpened", columnFilterClosed: "columnFilterClosed", gtIconClicked: "gtIconClicked", gtSVGIconClicked: "gtSVGIconClicked", gtTextActionClicked: "gtTextActionClicked", gtViewDetailClicked: "gtViewDetailClicked", gtInnerHTMLClicked: "gtInnerHTMLClicked", downloadSpotDetails: "downloadSpotDetails", clickableDataClicked: "clickableDataClicked", totalRowIconClicked: "totalRowIconClicked", notificationIconHover: "notificationIconHover", notificationIconHoverLeave: "notificationIconHoverLeave", editableInputEdited: "editableInputEdited", radioButtonMessageIconClicked: "radioButtonMessageIconClicked" }, viewQueries: [{ propertyName: "viewChildTableHeaders", predicate: ["tableHeader"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\r\n id=\"generic-table-conatiner\"\r\n class=\"table-container {{ gtGeneralConfig?.tableOuterContainerName }} {{ tableBottomBorderClass }}\"\r\n [ngClass]=\"{\r\n 'scroll-left-shadow-effect': isScrolledLeft,\r\n 'scroll-right-shadow-effect': !isScrollEnded,\r\n 'clickable-row': clickableRow,\r\n 'no-data-table': (isNoDataToDisplaySubject$ | async),\r\n 'table-with-show-hide-total-row-toggle': showOrHideToggleForTotalRow\r\n }\"\r\n (scroll)=\"onTableContainerScroll($event)\"\r\n>\r\n <div\r\n [class]=\"gtGeneralConfig.tableContainerName\"\r\n class=\"horizontal-scroll-for-table-container\"\r\n [ngStyle]=\"{\r\n height:\r\n tableData.length < maximumRowsWhichCanBeRenderedWithoutScroll\r\n ? 'calc(' +\r\n (gtDimension.rowHeight * tableData.length +\r\n (!tableData.length || !gtGeneralConfig.totalRow\r\n ? gtDimension.headerHeight\r\n : gtDimension.headerHeight + gtDimension.rowHeight)) +\r\n 'px)'\r\n : gtDimension.tableHeight\r\n }\"\r\n >\r\n <button\r\n *ngIf=\"showOrHideToggleForTotalRow && !showSkeletonLoading && !(isNoDataToDisplaySubject$ | async)\"\r\n [ngClass]=\"{\r\n 'shift-toggle-top-on-total-row-click': !gtGeneralConfig.totalRow\r\n }\"\r\n class=\"show-or-hide-toggle-btn\"\r\n (click)=\"showHideTotalRow()\"\r\n >\r\n <i\r\n class=\"mdi mdi-menu-swap\"\r\n tooltipClass=\"show-or-hide-toggle-tooltip\"\r\n placement=\"auto\"\r\n container=\"body\"\r\n [ngbTooltip]=\"showOrHideToggleForTotalRowTooltip\"\r\n ></i>\r\n </button>\r\n <table\r\n class=\"gt\"\r\n [ngClass]=\"tableClass\"\r\n mat-table\r\n [dataSource]=\"renderedData\"\r\n >\r\n <tr\r\n class=\"header-row\"\r\n mat-header-row\r\n *matHeaderRowDef=\"tableColumns; sticky: true\"\r\n [style.height.px]=\"gtDimension.headerHeight\"\r\n ></tr>\r\n <tr\r\n class=\"total-row\"\r\n mat-header-row\r\n [style.height.px]=\"gtDimension.rowHeight\"\r\n *matHeaderRowDef=\"totalRowColumns; sticky: true\"\r\n [class.hidden]=\"\r\n showSkeletonLoading ||\r\n (!showSkeletonLoading && !tableData.length) ||\r\n (isNoDataToDisplaySubject$ | async) ||\r\n (!showSkeletonLoading && !gtGeneralConfig.totalRow)\r\n \"\r\n ></tr>\r\n <tr\r\n [class]=\"rowData.gtClass\"\r\n [ngClass]=\"{ 'no-border-tr': (isNoDataToDisplaySubject$ | async) }\"\r\n mat-row\r\n *matRowDef=\"let rowData; columns: tableColumns\"\r\n [style.height.px]=\"gtDimension.rowHeight\"\r\n (click)=\"dataRowClicked(rowData)\"\r\n ></tr>\r\n\r\n <!-- TOTAL ROW -->\r\n <ng-container\r\n [matColumnDef]=\"column.colName\"\r\n *ngFor=\"let column of totalRowInfo; trackBy: trackByFn\"\r\n >\r\n <td\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [attr.colspan]=\"column.colspan\"\r\n class=\"{{ column.class }}\"\r\n >\r\n <ng-container *ngIf=\"column['isActionColumn']\">\r\n <a\r\n *ngFor=\"let data of column.actionData\"\r\n [class]=\"data.class\"\r\n (click)=\"onClickableDataClicked({}, data.id)\"\r\n >\r\n {{ data.name }}\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column['isIconColumn']\">\r\n <i\r\n class=\"{{ column?.iconData?.class }}\"\r\n (click)=\"iconClickedInTotalRow(column?.colName)\"\r\n >\r\n </i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!column['isActionColumn']\">\r\n <strong class=\"upper-label\">{{ column.data }}</strong>\r\n <ng-container *ngIf=\"column.lowerData\">\r\n <br />\r\n <span\r\n *ngIf=\"\r\n column.colName == 'total-potential-booked-unit' &&\r\n gtGeneralConfig.component == 'RATING';\r\n else columnLowerData\r\n \"\r\n class=\"clickable-data\"\r\n (click)=\"spotDetailsDownloadClicked('TOTALROW')\"\r\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\"\r\n >{{ column.lowerData }}\r\n <span class=\"material-icons spot-details-download-icons\">get_app</span>\r\n <ng-container *ngIf=\"downloadInProgress && selectedRowTypeForDownload == 'TOTALROW'\">\r\n <ng-container [ngTemplateOutlet]=\"circularProgressBar\"></ng-container>\r\n </ng-container>\r\n </span>\r\n <ng-template #columnLowerData>\r\n <span class=\"lower-label\">{{ column.lowerData }}</span>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.tooltipMessage && gtGeneralConfig.component != 'LUR_VIOLATIONS'\">\r\n <i\r\n class=\"{{ column.tooltipIconClass }}\"\r\n container=\"body\"\r\n [ngbTooltip]=\"column.tooltipMessage\"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"\r\n ></i>\r\n </ng-container>\r\n <ng-container *ngIf=\"gtGeneralConfig.component == 'LUR_VIOLATIONS' && column.tooltipMessage\">\r\n <i\r\n class=\"mi mdi-info-outline info-label\"\r\n container=\"body\"\r\n [ngbTooltip]=\"lurViolationTotalRowToolTip\"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"\r\n ></i>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- MAIN ROW -->\r\n <ng-container\r\n [matColumnDef]=\"columnDef.headerInfo[0].objectKey\"\r\n *ngFor=\"let columnDef of tableHeaders; trackBy: trackByFn\"\r\n >\r\n <th\r\n #tableHeader\r\n nowrap\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [style.width]=\"columnDef.width\"\r\n >\r\n <div\r\n class=\"row mx-0\"\r\n *ngFor=\"let header of columnDef.headerInfo; let j = index\"\r\n >\r\n <p\r\n *ngIf=\"header.typeOfHeaderData === 'STRING'\"\r\n [ngClass]=\"{ 'upper-label': j === 0, 'lower-label': j === 1 }\"\r\n >\r\n <ngx-skeleton-loader\r\n *ngIf=\"header.name == null\"\r\n count=\"1\"\r\n [theme]=\"{\r\n height: '10px',\r\n display: 'block',\r\n width: columnDef.width,\r\n 'max-width': 'calc(100% - 20px)'\r\n }\"\r\n >\r\n </ngx-skeleton-loader>\r\n <ng-container *ngIf=\"header.name\">\r\n {{ header.name }}\r\n </ng-container>\r\n <ng-container *ngIf=\"header.tooltip && header.tooltip.tooltipMessage\">\r\n <i\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"header.tooltip.tooltipMessage\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </ng-container>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'impsInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"impsInfoTooltip\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"\r\n header.tooltip && header.tooltip.name == 'spotsColumnEquivalizationMessageTooltip'\r\n \"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n container=\"body\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"spotsColumnEquivalizationMessageTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'underDeliveryTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n container=\"body\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"underDeliveryTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'overDeliveryTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n container=\"body\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"overDeliveryTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'ratingInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"ratingInfoTooltip\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'rateInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"rateInfoTooltip\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'ongoingRevBookedColumnTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"ongoingRevBookedColumnTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'completedRevBookedColumnTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"completedRevBookedColumnTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRate'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"avgBookedRate\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRtg'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"avgBookedRtg\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedImps'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"avgBookedImps\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'automationTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"automationTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'rebateImpact'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"rebateImpact\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'projectedImpsRtg'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"projectedImpsRtg\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </p>\r\n\r\n <ng-container *ngIf=\"header.typeOfHeaderData === 'CHECKBOX'\">\r\n <span\r\n *ngIf=\"gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectUnselectAllRows()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{ 'disable-checkbox': gtGeneralConfig.disableHeaderCheckbox }\"\r\n (click)=\"selectUnselectAllRows()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n\r\n <div\r\n *ngIf=\"gtGeneralConfig.showAllColumnFilter\"\r\n class=\"sort-filter-container\"\r\n >\r\n <ng-container *ngIf=\"header.showTooltipIcon\">\r\n <!-- Active tooltip Functionality -->\r\n <ng-container *ngIf=\"header.filter === 'CHECKBOX'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"filterTooltip\"\r\n placement=\"{{ filterAlignment }}\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-checkbox-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'SLIDER'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"sliderToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-slider-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t1=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t1, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'DATE'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"datePickerTooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-datepicker-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t2=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t2, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'WEEK'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"weekPickerToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t3=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t3, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'TIME'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"timeFilterToolTip\"\r\n placement=\"bottom left-top auto\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-time-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t4=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t4, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!header.showTooltipIcon\">\r\n <span id=\"no-filter-space\"></span><br />\r\n </ng-container>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'lurViolationInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"lurViolationInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </div>\r\n </div>\r\n </th>\r\n\r\n <ng-container *matCellDef=\"let ROW_DATA\">\r\n <td\r\n mat-cell\r\n [style.background]=\"ROW_DATA.backgroundColor\"\r\n [style.border]=\"ROW_DATA.border\"\r\n class=\"{{ ROW_DATA.rowClass }}\"\r\n [ngClass]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'TdClass']\"\r\n [attr.rowspan]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'Rowspan']\"\r\n *ngIf=\"\r\n !hideSomeTds ||\r\n (hideSomeTds && !ROW_DATA['hide' + columnDef.headerInfo[0].objectKey + 'Td'])\r\n \"\r\n >\r\n <ngx-skeleton-loader\r\n *ngIf=\"showSkeletonLoading\"\r\n count=\"1\"\r\n [theme]=\"{ height: '10px', display: 'block' }\"\r\n >\r\n </ngx-skeleton-loader>\r\n\r\n <ng-container *ngIf=\"!showSkeletonLoading\">\r\n <ng-container *ngIf=\"tableData.length > 0 && !(isNoDataToDisplaySubject$ | async)\">\r\n <ng-container\r\n *ngFor=\"\r\n let subline of columnDef.headerInfo;\r\n let subLineIndex = index;\r\n trackBy: trackByFn\r\n \"\r\n >\r\n <div showEllipsisTextOnHover>\r\n <ng-container [ngSwitch]=\"columnDef.headerInfo[subLineIndex].typeOfBodyData\">\r\n <ng-container *ngSwitchCase=\"'ICON'\">\r\n <i\r\n *ngIf=\"\r\n !(\r\n starredInProgress &&\r\n ROW_DATA.orderId == selectedStarredOrderId\r\n )\r\n \"\r\n [class]=\"ROW_DATA.iconClass\"\r\n (click)=\"iconClicked(ROW_DATA, ROW_DATA.iconClass)\"\r\n ngbTooltip=\"{{ ROW_DATA.iconTitleText }}\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n ></i>\r\n <ng-container\r\n *ngIf=\"\r\n starredInProgress && ROW_DATA.orderId == selectedStarredOrderId\r\n \"\r\n >\r\n <div class=\"spinner-for-button-directive\"></div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'ICON_CELL'\">\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <ng-container *ngIf=\"action.showObjectKey\">\r\n {{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] }}\r\n </ng-container>\r\n\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"action.showTooltip ? action.tooltipData : null\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [disableTooltip]=\"!action.showTooltip\"\r\n >\r\n </i>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'HTML_STRING'\">\r\n <p\r\n [innerHTML]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n (click)=\"innerHTMLCellClicked($event, ROW_DATA)\"\r\n ></p>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SVG_ICON'\">\r\n <anna-core-anna-icon-column\r\n [componentName]=\"gtGeneralConfig.component\"\r\n [dataObject]=\"ROW_DATA\"\r\n [iconToShow]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n \"\r\n (onColumnIconClicked)=\"svgIconClicked($event)\"\r\n ></anna-core-anna-icon-column>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'TEXT_ACTIONS'\">\r\n <ng-container\r\n *ngFor=\"\r\n let text of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <button\r\n *ngIf=\"text.showTooltip\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n text.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [disabled]=\"text.isDisabled\"\r\n class=\"{{ text.class }}\"\r\n (mouseenter)=\"\r\n mouseEnterOnTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n [ngbTooltip]=\"textActionTooltipTemplate\"\r\n placement=\"auto\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n >\r\n {{ text.name }}\r\n </button>\r\n\r\n <button\r\n *ngIf=\"!text.showTooltip\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n text.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [disabled]=\"text.isDisabled\"\r\n class=\"{{ text.class }}\"\r\n >\r\n {{ text.name }}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\r\n <span\r\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n false\r\n )\r\n \"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionTypeContainingTable(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\r\n [ngbTooltip]=\"tooltipContainingTableTemplate\"\r\n >\r\n </i>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CLICKABLE_DATA'\">\r\n <a\r\n *ngFor=\"\r\n let text of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n [class]=\"text.class\"\r\n (click)=\"onClickableDataClicked(ROW_DATA, text.id)\"\r\n >\r\n {{ text.name }}\r\n </a>\r\n <span\r\n *ngIf=\"\r\n subline.objectKey == 'displayBookedUnits' &&\r\n gtGeneralConfig.component == 'RATING'\r\n \"\r\n class=\"clickable-data\"\r\n (click)=\"spotDetailsDownloadClicked('DATAROW', ROW_DATA)\"\r\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\"\r\n >{{ ROW_DATA.displayBookedUnits }}\r\n <span class=\"material-icons spot-details-download-icons\"\r\n >get_app</span\r\n >\r\n <ng-container\r\n *ngIf=\"\r\n downloadInProgress &&\r\n ROW_DATA.inventoryCodeId ==\r\n selectedInventoryIdForDownload &&\r\n ROW_DATA.demographic == selectedDemographicForDownload\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"circularProgressBar\"\r\n ></ng-container>\r\n </ng-container>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING___ICON_OR_TEXT_ACTION'\">\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <span\r\n [class]=\"action.additionalTextBeforeLinkClass\"\r\n [innerHtml]=\"action.additionalTextBeforeLink\"\r\n ngbTooltip=\"{{ action.additionalTextBeforeLink }}\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"!action.enableTooltipForAdditionalText\"\r\n ></span>\r\n\r\n <ng-container *ngIf=\"action && action.typeOfData == 'STRING'\">\r\n {{ action.data }}\r\n </ng-container>\r\n\r\n <a\r\n [id]=\"action.id\"\r\n *ngIf=\"action.showLink\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [class]=\"action.linkClass\"\r\n [ngClass]=\"{ disabled: action.disabledLink }\"\r\n >{{ action.data }}</a\r\n >\r\n <span\r\n ngbTooltip=\"{{ action.additionalTextAfterLink }}\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n [class]=\"action.additionalTextAfterLinkClass\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"!action.enableTooltipForAdditionalAfterText\"\r\n >\r\n {{ action.additionalTextAfterLink }}\r\n </span>\r\n\r\n <ng-container *ngIf=\"action.showTooltip\">\r\n <ng-container *ngIf=\"action.tooltipData.innerHtml\">\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionTypeContainingTable(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\r\n [ngbTooltip]=\"tooltipContainingTableTemplate\"\r\n >\r\n </i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!action.tooltipData.tooltipTableBody\">\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (click)=\"\r\n iconClickedOnStringIconActionType(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n [placement]=\"\r\n action.tooltipPlacement\r\n ? action.tooltipPlacement\r\n : 'bottom auto'\r\n \"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{\r\n action.tooltipClass\r\n }}\"\r\n [ngbTooltip]=\"userLoggedInDetails\"\r\n >\r\n </i>\r\n <ng-container *ngIf=\"action['showSvgIcon']\">\r\n <anna-core-anna-est-icon-template\r\n class=\"float-right\"\r\n *ngIf=\"action['svgIconName'] == 'anna-icon'\"\r\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex]\r\n .tooltipKey\r\n )\r\n \"\r\n [placement]=\"\r\n action.tooltipPlacement\r\n ? action.tooltipPlacement\r\n : 'bottom auto'\r\n \"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{\r\n action['tooltipClass']\r\n }}\"\r\n [ngbTooltip]=\"userLoggedInDetails\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n >\r\n </anna-core-anna-est-icon-template>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!action.showTooltip\">\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (click)=\"\r\n iconClickedOnStringIconActionType(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n >\r\n </i>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING_OR_INPUT'\">\r\n <ng-container\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.type ==\r\n 'STRING';\r\n else inputBox\r\n \"\r\n >\r\n <span\r\n [innerHtml]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n ?.value\r\n \"\r\n ></span>\r\n </ng-container>\r\n <ng-template #inputBox>\r\n <input\r\n placeholder=\"{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n ?.placeholder\r\n }}\"\r\n showEllipsisTextOnHover\r\n class=\"{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .className\r\n }}\"\r\n (keydown)=\"\r\n changesMadeInEditableInputBox(\r\n $event,\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey],\r\n false\r\n )\r\n \"\r\n (paste)=\"\r\n changesMadeInEditableInputBox(\r\n $event,\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey],\r\n true\r\n )\r\n \"\r\n (ngModelChange)=\"\r\n editableInputValueChanged(\r\n $event,\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey\r\n )\r\n \"\r\n [ngModel]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].value\r\n \"\r\n [disabled]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .disabled\r\n \"\r\n [ngClass]=\"{\r\n 'red-border':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .hasError\r\n }\"\r\n />\r\n\r\n <i\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .showIcon\r\n \"\r\n container=\"body\"\r\n [ngbTooltip]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .iconTooltip\r\n \"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"\r\n class=\"{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .iconClass\r\n }}\"\r\n >\r\n </i>\r\n <ng-container\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey][\r\n 'showSvgIcon'\r\n ]\r\n \"\r\n >\r\n <anna-core-anna-est-icon-template\r\n class=\"float-right\"\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey][\r\n 'svgIconName'\r\n ] == 'anna-icon'\r\n \"\r\n [placement]=\"'bottom auto'\"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n [ngbTooltip]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .iconTooltip\r\n \"\r\n container=\"body\"\r\n >\r\n </anna-core-anna-est-icon-template>\r\n </ng-container>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'HTML'\">\r\n <span\r\n [innerHtml]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n ></span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SINGLE_RADIO'\">\r\n <span\r\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n class=\"mdi mdi-radiobox-marked\"\r\n (click)=\"(null)\"\r\n >\r\n </span>\r\n <span\r\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"mdi mdi-radiobox-blank\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \"\r\n >\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'RADIO'\">\r\n <mat-radio-group\r\n *ngIf=\"ROW_DATA['RadioButtonConfig']\"\r\n [ngModel]=\"ROW_DATA[subline.objectKey]\"\r\n [disabled]=\"ROW_DATA['RadioButtonConfig'][0].isDisabled\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let radioButton of ROW_DATA['RadioButtonConfig'];\r\n let last = last\r\n \"\r\n >\r\n <mat-radio-button\r\n value=\"{{ radioButton.value }}\"\r\n class=\"{{ radioButton.class }}\"\r\n (click)=\"\r\n radioButtonClicked(\r\n ROW_DATA,\r\n radioButton.value,\r\n ROW_DATA['RadioButtonConfig'][0].isDisabled\r\n )\r\n \"\r\n >{{ radioButton.label }}\r\n </mat-radio-button>\r\n <i\r\n class=\" {{ radioButton.iconClass }}\"\r\n (click)=\"radioButtonIconClicked(ROW_DATA)\"\r\n ></i>\r\n <br *ngIf=\"!last\" />\r\n </ng-container>\r\n </mat-radio-group>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING_WITH_TOOLTIP'\">\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <span> {{ action?.dataToDisplay }}</span>\r\n <span\r\n *ngIf=\"action?.showTooltip\"\r\n [ngbTooltip]=\"textActionTooltipTemplate\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n [placement]=\"action?.tooltipPosition\"\r\n container=\"body\"\r\n [class]=\"action?.tooltipIconClass\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"action?.disableTooltip\"\r\n >\r\n </span>\r\n <span> {{ action?.dataToDisplayAfterTooltip }}</span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n <ng-container *ngIf=\"subline.objectKey != 'description'\">\r\n <span>{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n }}</span>\r\n <i\r\n *ngIf=\"\r\n subline.objectKey == 'inventoryCode' &&\r\n ROW_DATA['isSellerGroup'] &&\r\n gtGeneralConfig.component == 'RATING'\r\n \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n [ngbTooltip]=\"sellerHierarchyTooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n triggers=\"manual\"\r\n (hidden)=\"closeTooltip()\"\r\n #info=\"ngbTooltip\"\r\n tooltipClass=\"hierarchy-tooltip remove-on-scroll-class\"\r\n (mouseenter)=\"\r\n bindTheValueToSellerGroupTooltip(\r\n ROW_DATA.sellerGroupHierarchy,\r\n info\r\n )\r\n \"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"\r\n subline.objectKey == 'displayBookedAverageRating' &&\r\n gtGeneralConfig.component == 'RATING' &&\r\n ROW_DATA['showRatingAverageIcon']\r\n \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n (mouseenter)=\"\r\n setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\r\n \"\r\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"postedRatingDifference\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"\r\n subline.objectKey == 'displayBookedAverageImpression' &&\r\n gtGeneralConfig.component == 'RATING' &&\r\n ROW_DATA['showImpressionAverageIcon']\r\n \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n (mouseenter)=\"\r\n setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\r\n \"\r\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"postedImpDifference\"\r\n >\r\n </i>\r\n </ng-container>\r\n <ng-container *ngIf=\"subline.objectKey == 'description'\">\r\n <p\r\n *ngIf=\"\r\n ROW_DATA.descriptionMessage ||\r\n ROW_DATA.descriptionEmailReferenceNum\r\n \"\r\n >\r\n <ng-container *ngIf=\"ROW_DATA.descriptionMessage\">\r\n {{ ROW_DATA.descriptionMessage }}\r\n <br />\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n ROW_DATA.descriptionEmailReferenceNum != '-' &&\r\n ROW_DATA.descriptionEmailReferenceNum != ''\r\n \"\r\n >\r\n Email Ref: {{ ROW_DATA.descriptionEmailReferenceNum }}\r\n <br />\r\n </ng-container>\r\n </p>\r\n <a\r\n href=\"{{ ROW_DATA.descriptionDetailsUrl }}\"\r\n target=\"_blank\"\r\n *ngIf=\"\r\n ROW_DATA.descriptionDetailsUrlType === 'PDF' ||\r\n ROW_DATA.descriptionDetailsUrlType === 'EXCEL'\r\n \"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn\">Download</button>\r\n </a>\r\n <ng-container\r\n *ngIf=\"ROW_DATA.activityname.toLowerCase() == 'order onboarded'\"\r\n >\r\n <a\r\n *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'LINK'\"\r\n (click)=\"viewDetailsClicked(ROW_DATA)\"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn order-onboarded\">\r\n View details\r\n </button>\r\n </a>\r\n </ng-container>\r\n\r\n <a\r\n href=\"{{ ROW_DATA.descriptionEmailUrl }}\"\r\n target=\"_blank\"\r\n *ngIf=\"\r\n ROW_DATA.descriptionEmailUrl != '-' &&\r\n ROW_DATA.descriptionEmailUrl != ''\r\n \"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn\">View email</button>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"isNoDataToDisplaySubject$ | async\">\r\n <div>\r\n {{ null }}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </table>\r\n </div>\r\n <anna-core-no-data-lib\r\n [width]=\"noDataWidth\"\r\n [marginTop]=\"marginTop\"\r\n *ngIf=\"isNoDataToDisplaySubject$ | async\"\r\n >\r\n </anna-core-no-data-lib>\r\n</div>\r\n\r\n<!-- Checkbox template -->\r\n<ng-template #filterTooltip>\r\n <anna-core-anna-column-checkbox-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-checkbox-filter>\r\n</ng-template>\r\n\r\n<!-- Slider template -->\r\n<ng-template #sliderToolTip>\r\n <anna-core-anna-column-slider-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-slider-filter>\r\n</ng-template>\r\n\r\n<!-- Date Picker Template -->\r\n<ng-template #datePickerTooltip>\r\n <anna-core-anna-column-date-range-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-date-range-filter>\r\n</ng-template>\r\n\r\n<!-- Week Picker Template -->\r\n<ng-template #weekPickerToolTip>\r\n <!-- <div class=\"weekpicker-container\">\r\n <anna-core-week-calendar-filter-lib\r\n [week-calendar-config]=\"gtGeneralConfig.multiWeekPickerConfig\"\r\n (apply)=\"applyWeekFilter($event)\"\r\n [from-date]=\"calendarMinEnabledDate\"\r\n [to-date]=\"calendarMaxEnabledDate\"\r\n >\r\n </anna-core-week-calendar-filter-lib>\r\n </div> -->\r\n</ng-template>\r\n\r\n<!-- Time Filter Template -->\r\n<ng-template #timeFilterToolTip>\r\n <anna-core-anna-column-time-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [showAllTimeRangeCheckboxes]=\"showCheckboxesForTimeFilter\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-time-filter>\r\n</ng-template>\r\n\r\n<ng-template #columnInfoTooltip>\r\n <p style=\"color: black; white-space: nowrap\">This preemption is rejected and not marked for credit.</p>\r\n</ng-template>\r\n\r\n<ng-template #ratingInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rating' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected Rating' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #impsInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked IMPS' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected IMPS' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #spotsColumnEquivalizationMessageTooltip>\r\n <p class=\"spot-column-tooltip-message\">\r\n This consists of equivalized spots and un-equivalized Paid Programs & un-equivalized Non-spots.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #underDeliveryTooltip>\r\n <p class=\"spot-column-tooltip-message\">\r\n Indicates the Under-delivery percentage based on booked and posted RTG/IMPS.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #overDeliveryTooltip>\r\n <p class=\"spot-column-tooltip-message\">\r\n Indicates the Over-delivery percentage based on booked and posted RTG/IMPS.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #rateInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rate' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected $ Value' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #sellerHierarchyTooltip>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length > 0\">\r\n <section class=\"hierarchy-table-container\">\r\n <table class=\"seller-hierarchy-table\">\r\n <thead>\r\n <tr>\r\n <th>#</th>\r\n <th>Inventory Codes</th>\r\n <th>Program/Description</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of sellerGroupHierarchy; let tooltipIndex = index\">\r\n <td>{{ tooltipIndex + 1 }}</td>\r\n <td>\r\n <span showEllipsisTextOnHover>{{ data.InventoryCode }}</span>\r\n </td>\r\n <td>\r\n <span showEllipsisTextOnHover>{{ data.Program }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </section>\r\n </ng-container>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length == 0\">\r\n <span style=\"color: #000\">Seller group not available for this inventory code</span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationInfoTooltip>\r\n <p class=\"first-row\">The values are for the entire week.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedRatingDifference>\r\n <p class=\"difference-text\">\r\n The difference between posted and booked average rating is\r\n {{ isDifferenceLessThan25Percent ? \"less\" : \"more\" }} than 25%.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #postedImpDifference>\r\n <p class=\"difference-text\">\r\n The difference between posted and booked average impression is\r\n {{ isDifferenceLessThan25Percent ? \"less\" : \"more\" }} than 25%.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #ongoingRevBookedColumnTooltip>\r\n <p>The Booked $ value, Spots, GRP, CPP, IMPS, CPM corresponds on the last permanent revision generated</p>\r\n</ng-template>\r\n\r\n<ng-template #completedRevBookedColumnTooltip>\r\n <p>The Booked $ value corresponds on the last permanent revision generated</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedRate>\r\n <p>This is the booked average Rate</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedRtg>\r\n <p>This is the booked average RTG</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedImps>\r\n <p>This is the booked average IMP(\u2019000)</p>\r\n</ng-template>\r\n\r\n<ng-template #projectedImpsRtg>\r\n <p>\r\n All projections are derived from the sum of actual posted information until the last posted date and estimates\r\n for the remaining selected period.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #automationTooltip>\r\n <p>\r\n Please get the order business rules approved to activate the order for automation. Only for the\r\n automation-activated orders, any approved MGs, ADUs, or credited spots on ANNA will be fed into the traffic\r\n system i.e. ANNA revisions.\r\n <!-- removed below line as part of enhancmennt in 14.0 releas -->\r\n <!-- Additionally, ANNA will only enter buyer revisions into traffic for the selected\r\n Medialine/WOC orders. -->\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #rebateImpact>\r\n <p>Rebate impact value is for the originally ordered spot length and is not equivalized.</p>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationTotalRowToolTip>\r\n <ul>\r\n <li>\r\n <strong>POLITICAL RATE VIOLATIONS:</strong>\r\n Violations flagged when non-political spots are booked at a rate lower than the minimum booked rate for\r\n political candidates for the same week, Inventory Code and Revenue Class.\r\n </li>\r\n <li>\r\n <strong>CANDIDATE TO CANDIDATE VIOLATION:</strong>\r\n Violations flagged when political spots are booked at different rates to other political spots for the same\r\n week, Inventory Code and Revenue Class.\r\n </li>\r\n </ul>\r\n</ng-template>\r\n\r\n<ng-template #circularProgressBar>\r\n <circle-progress\r\n [percent]=\"percentDone\"\r\n [radius]=\"5\"\r\n [showTitle]=\"false\"\r\n [showUnits]=\"false\"\r\n [showSubtitle]=\"false\"\r\n [outerStrokeWidth]=\"3\"\r\n [innerStrokeWidth]=\"3\"\r\n [space]=\"-3\"\r\n [outerStrokeColor]=\"'#268bff'\"\r\n [innerStrokeColor]=\"'#d5d5d5'\"\r\n [animationDuration]=\"10\"\r\n ></circle-progress>\r\n</ng-template>\r\n\r\n<ng-template #userLoggedInDetails>\r\n <div class=\"tooltip-div-container\">\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n <span *ngIf=\"data.key != 'read'\">\r\n {{ data.key }} <b> {{ data.value }}</b>\r\n </span>\r\n <span *ngIf=\"data.key == 'read'\">\r\n {{ data.value }}\r\n </span>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #markAsReadTip>\r\n <div class=\"notification-tooltip-div-container\">\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.value }}\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #textActionTooltipTemplate>\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.key }} <b> {{ data.value }}</b>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #showOrHideToggleForTotalRowTooltip>\r\n <div>\r\n {{ showOrHideToggleForTotalRow && !gtGeneralConfig.totalRow ? \"Show Total Row\" : \"Hide Total Row\" }}\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #tooltipContainingTableTemplate>\r\n <div\r\n *ngIf=\"tooltipContainingTable\"\r\n [innerHTML]=\"tooltipContainingTable.innerHtml\"\r\n class=\"notification-tooltip-div-container\"\r\n >\r\n <!-- <ul>\r\n <li *ngFor=\"let headerMsg of tooltipContainingTable.tableHeaderMsg\">\r\n <b> {{headerMsg}} </b>\r\n </li>\r\n </ul>\r\n\r\n <table class=\"tooltip-table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let header of tooltipContainingTable.tooltipTableHeader\">\r\n {{ header}}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let rows of tooltipContainingTable.tooltipTableBody\">\r\n <td *ngFor=\"let data of rows\">\r\n {{ data }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <ul>\r\n <li style=\"margin-top:10px; padding:0\" *ngFor=\"let footerMsg of tooltipContainingTable.tableFooterMsg\">\r\n {{ footerMsg }} \r\n </li>\r\n </ul> -->\r\n </div>\r\n</ng-template>\r\n<!-- <ng-template #textActionTooltipTemplate>\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.key }} <b> {{data.value}}</b>\r\n </ng-container>\r\n</ng-template> -->\r\n", styles: ["::ng-deep .show-or-hide-toggle-tooltip .tooltip-inner{max-width:229px}.show-or-hide-toggle-btn.shift-toggle-top-on-total-row-click{transform:translate(calc(var(--app-left-space-show-hide-total-row-icon) - 12px),48px)}.show-or-hide-toggle-btn{width:16px;height:16px;padding:0;margin:0;border-radius:50%;position:absolute;transform:translate(calc(var(--app-left-space-show-hide-total-row-icon) - 12px),73px);z-index:1000;background-color:#d9d9d9}.show-or-hide-toggle-btn i.mdi.mdi-menu-swap{font-size:16px;display:flex}#generic-table-conatiner.table-with-show-hide-total-row-toggle .total-row td:nth-of-type(2){padding-left:16px!important}.sort-btn{background:#fff;border:none;border-right:1px solid #1b88ff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.07;letter-spacing:normal;color:#1b88ff;cursor:pointer;flex:1;text-align:center}.sort-btn:last-of-type{border-right:none}.sort-btn.active{color:#202b47;text-decoration:none}p.sort-container{margin-top:8px;padding-bottom:8px;border-bottom:1px solid #e6e6e6;margin-bottom:0;display:flex}::ng-deep .tooltip-inner{max-height:22rem;background-color:#fff;border:1px solid white;border-radius:5px;box-shadow:0 2px 2px #0000003d,0 0 2px #0000001f;max-width:251px;width:100%;padding:0!important}::ng-deep .tooltip-inner div.radio-container{flex-wrap:wrap}::ng-deep .md-drppicker{box-shadow:unset!important}::ng-deep .available{color:#999}::ng-deep .bs-tooltip-bottom .arrow:before{border-bottom-color:#fff!important}::ng-deep .bs-tooltip-left .arrow:before{border-left-color:#fff!important}::ng-deep .tooltip.show{opacity:1}.input{text-align:left;margin:5px 10px 5px 5px;display:flex;align-items:center;width:230px;white-space:nowrap}.data{color:#000;font-weight:700;margin-left:5px;margin-right:5px}span.data{display:inline-block;text-overflow:ellipsis;white-space:pre;width:100%;overflow:hidden}.check-box{font-size:14px;cursor:pointer;position:relative;top:-1px}span.mdi-filter.active{color:#000;opacity:1!important;pointer-events:all!important}p{margin-bottom:0;line-height:initial}span.mdi-filter{color:#cbcbcb}::ng-deep .ngx-slider-pointer{top:-5px!important;width:12px!important;height:12px!important;background:#bdbdbd!important;border:1px solid #ffffff!important;box-shadow:0 1px 3px #0000004d!important;border-radius:16px!important}input:focus{outline:none}input::placeholder{color:#c8c8c8}.cancel-btn{background:#c7e1ff;color:#268bff}.apply-btn{background:#268bff;color:#fff;margin-left:.3125rem}div.radio-container{display:flex;white-space:nowrap;justify-content:space-between;background-color:#f4f4f4;border-radius:.125rem;margin:.4375rem .4375rem .25rem}div.radio-container div{flex:1;width:50%}div.radio-container div.full-width{width:100%}div.radio-container input{position:relative;top:.125rem;margin-right:.25rem}div.radio-container label{font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:0;color:#4a4a4a;margin:0;padding-left:.125rem}div.radio-container label:first-of-type{margin-right:.188rem}div.radio-container input[type=radio]{appearance:none;display:inline-block;width:.9375rem;height:.9375rem;padding:.125rem;background-clip:content-box;border:.125rem solid #268bff;background-color:transparent;border-radius:50%}div.radio-container input[type=radio]:checked{background-color:#268bff}.checkbox-filter-buttons-container{padding:0 8px!important}.buttons-container{display:flex;margin:0px auto .4375rem;justify-content:center;padding:0 12px}.buttons-container .button{padding:0 10px;width:100%;margin:8px 0 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.buttons-container button:last-of-type{background-color:#268bff;color:#fff;margin-left:.5rem}.buttons-container button.disabled{background:#bdbdbd;opacity:.5;color:#4a4a4a}.button{display:inline-block;margin:8px 4px 0 8px;padding:0 16px;border-radius:4px;text-align:center;outline:none;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;border:none;color:#268bff;background-color:#e5f1ff}.search-box{display:flex;align-items:center;color:#c8c8c8;border:1px solid #e6e6e6;border-radius:.125rem;margin:.25rem .4375rem .188rem;height:1.5rem;padding:.188rem 8px .188rem .5rem}.search-box .search-bar-close{margin-left:auto;float:right}.search-icon{margin:0 4px 0 0;font-size:1.125rem;color:#9b9b9b}.filter-icon{justify-content:right;margin-left:auto;color:#d4d4d4;color:#a1a1a1;font-size:16px;cursor:pointer}.data{margin:0 13px 0 8px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.86;letter-spacing:\"\";color:#4a4a4a}.search-input{margin:1px 0 1px 4px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#c8c8c8;width:calc(100% - 38px)}.check-box{color:#268bff}.tooltip-data-container{overflow-y:scroll;max-height:8rem}.searchbar{width:100%;display:flex;justify-content:flex-end;align-items:flex-end}.clear-button{opacity:.5;font-family:Roboto;font-size:.9375rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;text-decoration:underline;border:none;background-color:#fff;color:#4a4a4a;margin-left:.625rem;padding:0}.clear-button:focus{outline:none;box-shadow:none}.unchecked{color:#268bff}cdk-virtual-scroll-viewport.dropdown-data-container{max-height:12.3rem;width:100%;overflow-y:auto;overflow-x:hidden}cdk-virtual-scroll-viewport.dropdown-data-container p.input{margin-left:0}cdk-virtual-scroll-viewport.dropdown-data-container p.input span.mi{padding-left:.4375rem}cdk-virtual-scroll-viewport.dropdown-data-container p.input:hover{background-color:#ebebeb;cursor:pointer}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar{width:.188rem}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar-thumb{color:#d3d3d3;background:#d3d3d3}section.min-maxContainer{display:flex;justify-content:center;margin-bottom:-.125rem;margin-top:.5rem;width:100%}section.min-maxContainer input{width:30%;height:1.875rem;border:1px solid lightgray;color:gray}section.min-maxContainer span{display:inline-block;padding-left:.5rem;padding-right:.5rem;position:relative;top:.3125rem;color:#666}.time-container{width:100%;display:flex;padding:0 .75rem}.time-container input.form-control:disabled{background-color:#fff;width:2.813rem}.time-container input.numberInput:focus{box-shadow:none;border-color:#c2cfd6}.time-container .dot{color:#cbcbcb;position:relative;left:-7px;font-size:17px}.time-container div.arrow-container{flex-direction:column;display:flex;margin-top:.375rem;width:9px;height:18px;margin-right:1.1875rem}.time-container div.arrow-container i{color:#000;cursor:pointer;max-height:9px;font-size:25px;width:10px}.time-container div.arrow-container i:before{width:0;height:0;pointer-events:none;position:relative;left:-9px;top:-11px}.mdi-filter{cursor:pointer}.time-label-container{display:flex;justify-content:flex-start}.time-label-container label{margin-bottom:0;color:#4a4a4a;margin-top:.125rem;margin-left:.75rem;font-weight:700}.time-heading{color:#000;font-size:.8125rem;text-align:left;padding-left:.625rem;margin-top:.625rem;font-weight:700}.column-clear-all{width:94%;text-align:center;border:none;font-size:14px;background:none;text-decoration:underline;color:#268bff}.checkbox-container{display:flex;padding-inline:.625rem}.checkbox-container .data{text-align:left}.checkbox-container:first-of-type{margin-top:.625rem;font-weight:500}.column-clear-all{width:94%;text-align:center;border:none;background:none;text-decoration:underline;color:#268bff}.column-clear-all:disabled{opacity:.5;color:#4a4a4a;font-weight:400}.column-clear-all.align-center{text-align:center}span.mdi-filter-variant.disabled{pointer-events:none;opacity:.5}.datepicker-container{width:100%}span.mdi-filter-variant{color:#cbcbcb;cursor:pointer;font-size:.875rem}span.mdi-filter-variant.active{color:#000}p.filter-tab{font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:normal;color:#1b88ff;border-radius:5px;background-color:#f4f4f4;padding-inline:8px;cursor:pointer;overflow:hidden;text-align:center;text-overflow:ellipsis}p.filter-tab.active{color:#fff;background-color:#1b88ff}button.filter-text-btn{background:#fff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;border:none;color:#268bff;margin-inline:4px;margin-top:2px}button.filter-text-btn:disabled{color:#b1b1b1;cursor:not-allowed}::ng-deep .non-edit-datepicker-tooltip .tooltip-inner{max-width:310px!important;width:283px!important;overflow-y:initial!important;padding:0!important}input.slider-text::-webkit-outer-spin-button,input.slider-text::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input.slider-text{-moz-appearance:textfield}input.slider-text.red-border{border:1px solid #f44336!important}::ng-deep .checkbox-sort p.sort-container{margin-top:8px!important;padding-bottom:8px!important}i.mdi-close{cursor:pointer}i.mdi-close.disable-close-icon{pointer-events:none;cursor:not-allowed}input.error-border{border:1px solid #f44336!important}::ng-deep .non-edit-checkbox-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-slider-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-time-tooltip .tooltip-inner{width:250px!important;padding:0!important}::ng-deep .non-edit-time-tooltip.bs-tooltip-start{padding:.4rem}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow{right:0;top:5px!important;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow:before{border-left-color:#fff;left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height)}::ng-deep .no-bottom-border p.sort-container{border-bottom:none!important}::ng-deep .ngx-slider-pointer-min:after{display:none}::ng-deep .ngx-slider-pointer-max:after{display:none}::ng-deep .ngx-slider span.ngx-slider-pointer{width:12px;height:12px;top:-5px;background-color:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bar{height:3px;background:#ededed}::ng-deep .ngx-slider span.ngx-slider-selection{background:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bubble{bottom:-22px;font-size:12px;color:#333}::ng-deep .show-min.ngx-slider span.ngx-slider-model-value{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .show-max.ngx-slider span.ngx-slider-model-high{background:#fff;box-shadow:none}::ng-deep .ngx-slider span.ngx-slider-combined{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .ngx-slider{top:10px!important;margin:5px 0 2px!important}::ng-deep .ngx-slider-animate{top:0!important}.sidebar-slider{margin-bottom:35px!important;margin-left:5px;margin-right:5px}.slider-placeholder{height:14px}::ng-deep .filter-calendar select.form-select:focus{border-color:#c2cfd6;box-shadow:none}::ng-deep .filter-calendar select.form-select{background-color:#fff}.no-data-case{padding-left:.4375rem!important;font-size:.875rem!important;margin-top:10px!important;cursor:pointer}.check-mark,.unread-mark{cursor:pointer}.on-hover:hover .unread-mark,.notificationHover .check-mark{opacity:0;cursor:pointer}.on-hover:hover .check-mark{opacity:1;cursor:pointer}:host ::ng-deep .gt{table-layout:fixed;margin-bottom:0;width:100%}:host ::ng-deep .gt th,:host ::ng-deep .gt td{padding:2px 8px;line-height:normal}:host ::ng-deep .gt thead tr th .upper-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#4a4a4a;margin-bottom:0}:host ::ng-deep .gt thead tr th .lower-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#a7a7a7;margin-bottom:0}:host ::ng-deep .gt thead tr th{background-color:#ededed;position:sticky;position:-webkit-sticky;top:0;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .gt thead tr th br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt thead tr th div.row{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;width:max-content}:host ::ng-deep .gt thead tr th div.sort-filter-container{display:flex;flex-wrap:nowrap;align-items:center;margin-left:.25rem;margin-right:auto}:host ::ng-deep .gt thead tr th span.mdi-filter-variant{font-size:13px!important;top:-1px!important;position:relative}:host ::ng-deep .gt thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4}:host ::ng-deep .gt tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td .upper-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#000;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr td .lower-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#a7a7a7;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt tbody tr:nth-of-type(1) td{border-top:none!important}:host ::ng-deep .gt .custom-column-checkbox-checked,:host ::ng-deep .gt .custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}:host ::ng-deep .gt .custom-column-checkbox-checked{color:#268bff}:host ::ng-deep .gt .custom-column-checkbox-unchecked{color:#4a4a4a}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4}.table-container{overflow-x:auto;overflow-y:auto}.rowSelectCheckbox,#selectAllRowsCheckbox{cursor:pointer}.disable-checkbox{color:#dedede!important;pointer-events:none!important}.mdi-warning{color:#f3c639;font-size:16px;line-height:28px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{opacity:1}.redcolor-status{color:#c62a2a}#no-filter-space{width:.875rem}::ng-deep .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:1.875rem!important;width:2.625rem;padding:0 .625rem}input.numberInput{margin-right:-.8125rem;padding:0 0 0 .625rem;height:1.875rem}::ng-deep .mat-button-toggle-checked{background-color:#268bff!important;color:#fff!important}::ng-deep .mat-button-toggle-group-appearance-standard{border-radius:0}.hidden{display:none}.no-data-div{margin-top:2.5px}.no-data-div label{margin:0;width:auto;font-weight:500;background-color:#d3d3d3;padding:.3125rem 1.125rem;border-radius:.25rem}.column-values:nth-of-type(2){color:#a7a7a7!important}.custom-column-checkbox-checked,.custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}.custom-column-checkbox-checked{color:#268bff}.custom-column-checkbox-unchecked{color:#4a4a4a}.time-filter-checkboxes>div>p{color:#151b1e}::ng-deep .margin-bottom-zero .mat-radio-label{margin-bottom:0}:host ::ng-deep mat-radio-group br{margin-top:0!important}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__background{width:var(--mat-radio-size);height:var(--mat-radio-size)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__inner-circle{border-width:calc(var(--mat-radio-size) / 2)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{margin:0 0 0 4px;padding:0;top:-2px;position:relative}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio--disabled+label{color:var(--primary-text-color-dark)!important}:host ::ng-deep mat-radio-group mat-radio-button.mat-mdc-radio-button .mdc-form-field .mdc-radio{padding:0}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{left:-94px;font-size:12px;color:#4a4a4a;position:relative}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:red}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:red}::ng-deep .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:#00000061!important}::ng-deep .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-inner-circle{background-color:#00000061!important}::ng-deep tr.white-background-row{background:#fff}::ng-deep tr.gray-background-row{background:#e9e9e980!important}.remarks-tooltip,.mdi-information,.mdi-information-outline,.seller-tooltip{font-size:.875rem;color:#268bff;position:relative;top:.1875rem;cursor:pointer}.seller-tooltip{top:-1px;float:right}::ng-deep .remarks-info-tooltip .tooltip-inner{max-width:19.25rem!important}.rating-icon,.lur-violation-icon{color:#268bff;cursor:pointer;position:relative;left:-2px}::ng-deep .rating-info-tooltip .tooltip-inner{max-width:800px!important}.spots-info-icon{color:#268bff;cursor:pointer;margin:1px 2px 0 -14px}.spots-info-icon-ol{color:#268bff;cursor:pointer;margin:1px 4px 0 -2px}::ng-deep .spot-info-tooltip .tooltip-inner{position:relative;max-width:220px!important;background:#fff;word-break:break-word;display:flex}::ng-deep .spot-info-tooltip-for-orderlisting-table .tooltip-inner{max-width:220px!important;background:#fff;word-break:break-word;display:flex}p.first-row{padding:.5rem .5rem 0;color:#000;white-space:nowrap;text-align:left}p.second-row{padding:2px .5rem .5rem;color:#000;white-space:nowrap;text-align:left}::ng-deep .gt-total-row-tooltip{opacity:1!important}::ng-deep .gt-total-row-tooltip .tooltip-inner{color:#000;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;background-color:#fff;padding:4px!important;width:100%;border-radius:2px!important}::ng-deep .gt-total-row-tooltip .arrow:before{border-top-color:#fff!important}.info-label{margin-left:4px;color:#268bff;vertical-align:text-top}::ng-deep .hierarchy-tooltip{max-width:-moz-fit-content;max-width:fit-content;width:310px!important}::ng-deep .hierarchy-tooltip .tooltip-inner{padding:4px!important;max-width:22.75rem;max-height:11.25rem}table.seller-hierarchy-table{table-layout:fixed}table.seller-hierarchy-table tr th{font-family:Roboto;font-size:.75rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;color:#5e5e5e;white-space:nowrap;background:#ededed;position:sticky;box-shadow:inset 0 1px #d4d4d4;top:0;z-index:1}table.seller-hierarchy-table tr th:nth-child(1){width:20px}table.seller-hierarchy-table tr th:first-of-type,table.seller-hierarchy-table tr td:first-of-type{width:20px;border-left:1px solid #d4d4d4}table.seller-hierarchy-table tr th:last-of-type,table.seller-hierarchy-table tr td:last-of-type{border-right:1px solid #d4d4d4;width:7.875rem!important}table.seller-hierarchy-table tr th:nth-of-type(2){width:7.75rem!important}table.seller-hierarchy-table tr td{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#4a4a4a;box-shadow:none!important;border-top:1px solid #d4d4d4;border-bottom:1px solid #d4d4d4}table.seller-hierarchy-table tr td:nth-of-type(2),table.seller-hierarchy-table tr td:nth-of-type(3){padding-top:.25rem}table.seller-hierarchy-table tr td span{display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}section.hierarchy-table-container{max-height:8.75rem;overflow:auto}section.hierarchy-table-container::-webkit-scrollbar-track{margin-top:1.5rem}.difference-text{padding:.5rem;color:#000;text-align:left}::ng-deep .posted-avg-tooltip .tooltip-inner{width:13.8125rem!important}::ng-deep .drrBooked-info-tooltip{transform:translate(26px,6px)}::ng-deep .drrBooked-info-tooltip .tooltip-inner{max-width:307px!important;width:242px!important;background:#fff;word-break:break-word;display:flex;padding:4px!important;text-align:left}::ng-deep .drrBooked-info-tooltip .tooltip-inner p{color:#000}::ng-deep .drrBooked-info-tooltip .arrow:before{border-right-color:#fff!important}.clickable-data{cursor:pointer;color:#268bff!important;display:flex!important;align-items:center}.clickable-data .spot-details-download-icons{font-size:12px}.disabled-clickable-data{pointer-events:none;color:#d4d4d4!important}.spot-column-tooltip-message{color:#000;width:max-content;text-align:left}div.spinner-for-button-directive{position:relative;left:-1px}.clickable-row table tr.mat-row td{cursor:pointer!important}.tooltip-div-container{text-align:left!important;padding:12px 4px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.notification-tooltip-div-container{text-align:left!important;padding:6px 8px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.mdi-information,.mdi-information-outline{left:3px;top:1px}.mdi-information-outline{position:static}::ng-deep .team-user-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .team-user-tooltip .tooltip-inner{opacity:1!important;width:-moz-fit-content!important;width:fit-content!important;max-width:520px;border-radius:2px;padding:0 4px!important}::ng-deep .team-user-tooltip .tooltip-inner .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip{opacity:1!important}::ng-deep .gt-icon-column-tooltip .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .gt-icon-column-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip .tooltip-inner{width:100%}::ng-deep .tooltip-containing-table{opacity:1!important}::ng-deep .tooltip-containing-table .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .tooltip-containing-table.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .tooltip-containing-table li{margin:0!important;padding:0!important}::ng-deep .tooltip-containing-table ul{margin:0!important;padding-left:8px!important}::ng-deep .tooltip-containing-table .tooltip-inner{width:100%;max-width:230px}table.tooltip-table{table-layout:fixed;margin:4px 0 0;width:100%}table.tooltip-table th,table.tooltip-table td{padding:2px 8px;line-height:normal}table.tooltip-table thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4!important;border:none}table.tooltip-table thead tr th{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67;background-color:#ededed;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}table.tooltip-table thead tr th div.row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}table.tooltip-table tbody tr td{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67}table.tooltip-table tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}table.tooltip-table tbody tr td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}.bottom-border{border-bottom:1px solid #d4d4d4!important}i.disabled{pointer-events:none!important}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "ngmodule", type: NgxSkeletonLoaderModule }, { kind: "component", type: i5.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "directive", type: showEllipsisTextOnHoverDirective, selector: "[showEllipsisTextOnHover]" }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: AnnaIconColumnComponent, selector: "anna-core-anna-icon-column", inputs: ["componentName", "iconToShow", "dataObject"], outputs: ["onColumnIconClicked"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i7.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i7.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "directive", type: NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: AnnaNoDataComponent, selector: "anna-core-no-data-lib", inputs: ["width", "marginTop"] }, { kind: "component", type: AnnaColumnCheckboxFilterComponent, selector: "anna-core-anna-column-checkbox-filter", inputs: ["showFilterHeaderTabs", "isLurAndCsrComponent", "tableData", "clonedTableData", "filterTabObjects"], outputs: ["filterAppliedToTable", "sortingAppliedToTable", "getSortType", "closeTooltip"] }, { kind: "component", type: AnnaColumnSliderFilterComponent, selector: "anna-core-anna-column-slider-filter", inputs: ["filterTabObjects", "isLurAndCsrComponent", "tableData", "showFilterHeaderTabs", "clonedTableData"], outputs: ["closeTooltip", "filterAppliedToTable", "getSortType", "sortingAppliedToTable"] }, { kind: "component", type: AnnaColumnDateRangeFilterComponent, selector: "anna-core-anna-column-date-range-filter", inputs: ["tableData", "clonedTableData", "filterTabObjects", "isLurAndCsrComponent", "showFilterHeaderTabs"], outputs: ["filterAppliedToTable", "sortingAppliedToTable", "getSortType", "closeTooltip"] }, { kind: "component", type: AnnaColumnTimeFilterComponent, selector: "anna-core-anna-column-time-filter", inputs: ["tableData", "clonedTableData", "filterTabObjects", "showFilterHeaderTabs", "showAllTimeRangeCheckboxes", "isLurAndCsrComponent", "gtGeneralConfig", "showClearAllFilter", "startFromText", "endToText", "isSortAndFilterAbsent"], outputs: ["timeChanges", "filterAppliedToTable", "sortingAppliedToTable", "getSortType", "closeTooltip"] }, { kind: "ngmodule", type: NgCircleProgressModule }, { kind: "component", type: i8.CircleProgressComponent, selector: "circle-progress", inputs: ["name", "class", "backgroundGradient", "backgroundColor", "backgroundGradientStopColor", "backgroundOpacity", "backgroundStroke", "backgroundStrokeWidth", "backgroundPadding", "radius", "space", "percent", "toFixed", "maxPercent", "renderOnClick", "units", "unitsFontSize", "unitsFontWeight", "unitsColor", "outerStrokeGradient", "outerStrokeWidth", "outerStrokeColor", "outerStrokeGradientStopColor", "outerStrokeLinecap", "innerStrokeColor", "innerStrokeWidth", "titleFormat", "title", "titleColor", "titleFontSize", "titleFontWeight", "subtitleFormat", "subtitle", "subtitleColor", "subtitleFontSize", "subtitleFontWeight", "imageSrc", "imageHeight", "imageWidth", "animation", "animateTitle", "animateSubtitle", "animationDuration", "showTitle", "showSubtitle", "showUnits", "showImage", "showBackground", "showInnerStroke", "clockwise", "responsive", "startFromZero", "showZeroOuterStroke", "lazy", "options"], outputs: ["onClick"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
754
765
  }
755
766
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AnnaNonEditableGenericTableComponent, decorators: [{
756
767
  type: Component,
@@ -777,7 +788,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
777
788
  AnnaColumnTimeFilterComponent,
778
789
  NgCircleProgressModule,
779
790
  AsyncPipe,
780
- ], template: "<div\n id=\"generic-table-conatiner\"\n class=\"table-container {{ gtGeneralConfig?.tableOuterContainerName }} {{ tableBottomBorderClass }}\"\n [ngClass]=\"{\n 'scroll-left-shadow-effect': isScrolledLeft,\n 'scroll-right-shadow-effect': !isScrollEnded,\n 'clickable-row': clickableRow,\n 'no-data-table': (isNoDataToDisplaySubject$ | async)\n }\"\n (scroll)=\"onTableContainerScroll($event)\"\n>\n <div\n [class]=\"gtGeneralConfig.tableContainerName\"\n class=\"horizontal-scroll-for-table-container\"\n [ngStyle]=\"{\n height:\n tableData.length < maximumRowsWhichCanBeRenderedWithoutScroll\n ? 'calc(' +\n (gtDimension.rowHeight * tableData.length +\n (!tableData.length || !gtGeneralConfig.totalRow\n ? gtDimension.headerHeight\n : gtDimension.headerHeight + gtDimension.rowHeight)) +\n 'px)'\n : gtDimension.tableHeight\n }\"\n >\n <table\n class=\"gt\"\n [ngClass]=\"tableClass\"\n mat-table\n [dataSource]=\"renderedData\"\n >\n <tr\n class=\"header-row\"\n mat-header-row\n *matHeaderRowDef=\"tableColumns; sticky: true\"\n [style.height.px]=\"gtDimension.headerHeight\"\n ></tr>\n <tr\n class=\"total-row\"\n mat-header-row\n [style.height.px]=\"gtDimension.rowHeight\"\n *matHeaderRowDef=\"totalRowColumns; sticky: true\"\n [class.hidden]=\"\n showSkeletonLoading ||\n (!showSkeletonLoading && !tableData.length) ||\n (isNoDataToDisplaySubject$ | async) ||\n (!showSkeletonLoading && !gtGeneralConfig.totalRow)\n \"\n ></tr>\n <tr\n [class]=\"rowData.gtClass\"\n [ngClass]=\"{ 'no-border-tr': (isNoDataToDisplaySubject$ | async) }\"\n mat-row\n *matRowDef=\"let rowData; columns: tableColumns\"\n [style.height.px]=\"gtDimension.rowHeight\"\n (click)=\"dataRowClicked(rowData)\"\n ></tr>\n\n <!-- TOTAL ROW -->\n <ng-container\n [matColumnDef]=\"column.colName\"\n *ngFor=\"let column of totalRowInfo; trackBy: trackByFn\"\n >\n <td\n mat-header-cell\n *matHeaderCellDef\n [attr.colspan]=\"column.colspan\"\n class=\"{{ column.class }}\"\n >\n <ng-container *ngIf=\"column['isActionColumn']\">\n <a\n *ngFor=\"let data of column.actionData\"\n [class]=\"data.class\"\n (click)=\"onClickableDataClicked({}, data.id)\"\n >\n {{ data.name }}\n </a>\n </ng-container>\n\n <ng-container *ngIf=\"column['isIconColumn']\">\n <i\n class=\"{{ column?.iconData?.class }}\"\n (click)=\"iconClickedInTotalRow(column?.colName)\"\n >\n </i>\n </ng-container>\n\n <ng-container *ngIf=\"!column['isActionColumn']\">\n <strong class=\"upper-label\">{{ column.data }}</strong>\n <ng-container *ngIf=\"column.lowerData\">\n <br />\n <span\n *ngIf=\"\n column.colName == 'total-potential-booked-unit' &&\n gtGeneralConfig.component == 'RATING';\n else columnLowerData\n \"\n class=\"clickable-data\"\n (click)=\"spotDetailsDownloadClicked('TOTALROW')\"\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\"\n >{{ column.lowerData }}\n <span class=\"material-icons spot-details-download-icons\">get_app</span>\n <ng-container *ngIf=\"downloadInProgress && selectedRowTypeForDownload == 'TOTALROW'\">\n <ng-container [ngTemplateOutlet]=\"circularProgressBar\"></ng-container>\n </ng-container>\n </span>\n <ng-template #columnLowerData>\n <span class=\"lower-label\">{{ column.lowerData }}</span>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"column.tooltipMessage && gtGeneralConfig.component != 'LUR_VIOLATIONS'\">\n <i\n class=\"{{ column.tooltipIconClass }}\"\n container=\"body\"\n [ngbTooltip]=\"column.tooltipMessage\"\n tooltipClass=\"gt-total-row-tooltip\"\n placement=\"bottom\"\n ></i>\n </ng-container>\n <ng-container *ngIf=\"gtGeneralConfig.component == 'LUR_VIOLATIONS' && column.tooltipMessage\">\n <i\n class=\"mi mdi-info-outline info-label\"\n container=\"body\"\n [ngbTooltip]=\"lurViolationTotalRowToolTip\"\n tooltipClass=\"gt-total-row-tooltip\"\n placement=\"bottom\"\n ></i>\n </ng-container>\n </ng-container>\n </td>\n </ng-container>\n\n <!-- MAIN ROW -->\n <ng-container\n [matColumnDef]=\"columnDef.headerInfo[0].objectKey\"\n *ngFor=\"let columnDef of tableHeaders; trackBy: trackByFn\"\n >\n <th\n #tableHeader\n nowrap\n mat-header-cell\n *matHeaderCellDef\n [style.width]=\"columnDef.width\"\n >\n <div\n class=\"row mx-0\"\n *ngFor=\"let header of columnDef.headerInfo; let j = index\"\n >\n <p\n *ngIf=\"header.typeOfHeaderData === 'STRING'\"\n [ngClass]=\"{ 'upper-label': j === 0, 'lower-label': j === 1 }\"\n >\n <ngx-skeleton-loader\n *ngIf=\"header.name == null\"\n count=\"1\"\n [theme]=\"{\n height: '10px',\n display: 'block',\n width: columnDef.width,\n 'max-width': 'calc(100% - 20px)'\n }\"\n >\n </ngx-skeleton-loader>\n <ng-container *ngIf=\"header.name\">\n {{ header.name }}\n </ng-container>\n <ng-container *ngIf=\"header.tooltip && header.tooltip.tooltipMessage\">\n <i\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"header.tooltip.tooltipMessage\"\n container=\"body\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n </ng-container>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'impsInfoTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"impsInfoTooltip\"\n container=\"body\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"\n header.tooltip && header.tooltip.name == 'spotsColumnEquivalizationMessageTooltip'\n \"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n container=\"body\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"spotsColumnEquivalizationMessageTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'underDeliveryTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n container=\"body\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"underDeliveryTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'overDeliveryTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n container=\"body\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"overDeliveryTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'ratingInfoTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"ratingInfoTooltip\"\n container=\"body\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'rateInfoTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"rateInfoTooltip\"\n container=\"body\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'ongoingRevBookedColumnTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"ongoingRevBookedColumnTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'completedRevBookedColumnTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"completedRevBookedColumnTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRate'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"avgBookedRate\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRtg'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"avgBookedRtg\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedImps'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"avgBookedImps\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'automationTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"automationTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'rebateImpact'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"rebateImpact\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'projectedImpsRtg'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"projectedImpsRtg\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n </p>\n\n <ng-container *ngIf=\"header.typeOfHeaderData === 'CHECKBOX'\">\n <span\n *ngIf=\"gtGeneralConfig.isHeaderChecked\"\n class=\"material-icons custom-column-checkbox-checked\"\n (click)=\"selectUnselectAllRows()\"\n >\n check_box\n </span>\n <span\n *ngIf=\"!gtGeneralConfig.isHeaderChecked\"\n class=\"material-icons custom-column-checkbox-unchecked\"\n [ngClass]=\"{ 'disable-checkbox': gtGeneralConfig.disableHeaderCheckbox }\"\n (click)=\"selectUnselectAllRows()\"\n >\n check_box_outline_blank\n </span>\n </ng-container>\n\n <div\n *ngIf=\"gtGeneralConfig.showAllColumnFilter\"\n class=\"sort-filter-container\"\n >\n <ng-container *ngIf=\"header.showTooltipIcon\">\n <!-- Active tooltip Functionality -->\n <ng-container *ngIf=\"header.filter === 'CHECKBOX'\">\n <span\n class=\"mdi mdi-filter-variant\"\n [ngClass]=\"{\n active:\n annaFilterService.isFilterSortActive &&\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\n disabled: header.disableTooltipIcon || showSkeletonLoading\n }\"\n [ngbTooltip]=\"filterTooltip\"\n placement=\"{{ filterAlignment }}\"\n container=\"body\"\n tooltipClass=\"non-edit-checkbox-tooltip\"\n [autoClose]=\"'outside'\"\n triggers=\"manual\"\n #t=\"ngbTooltip\"\n (click)=\"bindTheValueToToolTip(t, header)\"\n (hidden)=\"closeTooltip()\"\n >\n </span\n ><br />\n </ng-container>\n <ng-container *ngIf=\"header.filter === 'SLIDER'\">\n <span\n class=\"mdi mdi-filter-variant\"\n [ngClass]=\"{\n active:\n annaFilterService.isFilterSortActive &&\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\n disabled: header.disableTooltipIcon || showSkeletonLoading\n }\"\n [ngbTooltip]=\"sliderToolTip\"\n placement=\"bottom left-top\"\n container=\"body\"\n tooltipClass=\"non-edit-slider-tooltip\"\n [autoClose]=\"'outside'\"\n triggers=\"manual\"\n #t1=\"ngbTooltip\"\n (click)=\"bindTheValueToToolTip(t1, header)\"\n (hidden)=\"closeTooltip()\"\n >\n </span\n ><br />\n </ng-container>\n <ng-container *ngIf=\"header.filter === 'DATE'\">\n <span\n class=\"mdi mdi-filter-variant\"\n [ngClass]=\"{\n active:\n annaFilterService.isFilterSortActive &&\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\n disabled: header.disableTooltipIcon || showSkeletonLoading\n }\"\n [ngbTooltip]=\"datePickerTooltip\"\n placement=\"bottom auto\"\n container=\"body\"\n tooltipClass=\"non-edit-datepicker-tooltip\"\n [autoClose]=\"'outside'\"\n triggers=\"manual\"\n #t2=\"ngbTooltip\"\n (click)=\"bindTheValueToToolTip(t2, header)\"\n (hidden)=\"closeTooltip()\"\n >\n </span\n ><br />\n </ng-container>\n <ng-container *ngIf=\"header.filter === 'WEEK'\">\n <span\n class=\"mdi mdi-filter-variant\"\n [ngClass]=\"{\n active:\n annaFilterService.isFilterSortActive &&\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\n disabled: header.disableTooltipIcon || showSkeletonLoading\n }\"\n [ngbTooltip]=\"weekPickerToolTip\"\n placement=\"bottom left-top\"\n container=\"body\"\n [autoClose]=\"'outside'\"\n triggers=\"manual\"\n #t3=\"ngbTooltip\"\n (click)=\"bindTheValueToToolTip(t3, header)\"\n (hidden)=\"closeTooltip()\"\n >\n </span\n ><br />\n </ng-container>\n <ng-container *ngIf=\"header.filter === 'TIME'\">\n <span\n class=\"mdi mdi-filter-variant\"\n [ngClass]=\"{\n active:\n annaFilterService.isFilterSortActive &&\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\n disabled: header.disableTooltipIcon || showSkeletonLoading\n }\"\n [ngbTooltip]=\"timeFilterToolTip\"\n placement=\"bottom left-top auto\"\n container=\"body\"\n tooltipClass=\"non-edit-time-tooltip\"\n [autoClose]=\"'outside'\"\n triggers=\"manual\"\n #t4=\"ngbTooltip\"\n (click)=\"bindTheValueToToolTip(t4, header)\"\n (hidden)=\"closeTooltip()\"\n >\n </span\n ><br />\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!header.showTooltipIcon\">\n <span id=\"no-filter-space\"></span><br />\n </ng-container>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'lurViolationInfoTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"lurViolationInfoTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n </div>\n </div>\n </th>\n\n <ng-container *matCellDef=\"let ROW_DATA\">\n <td\n mat-cell\n [style.background]=\"ROW_DATA.backgroundColor\"\n [style.border]=\"ROW_DATA.border\"\n class=\"{{ ROW_DATA.rowClass }}\"\n [ngClass]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'TdClass']\"\n [attr.rowspan]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'Rowspan']\"\n *ngIf=\"\n !hideSomeTds ||\n (hideSomeTds && !ROW_DATA['hide' + columnDef.headerInfo[0].objectKey + 'Td'])\n \"\n >\n <ngx-skeleton-loader\n *ngIf=\"showSkeletonLoading\"\n count=\"1\"\n [theme]=\"{ height: '10px', display: 'block' }\"\n >\n </ngx-skeleton-loader>\n\n <ng-container *ngIf=\"!showSkeletonLoading\">\n <ng-container *ngIf=\"tableData.length > 0 && !(isNoDataToDisplaySubject$ | async)\">\n <ng-container\n *ngFor=\"\n let subline of columnDef.headerInfo;\n let subLineIndex = index;\n trackBy: trackByFn\n \"\n >\n <div showEllipsisTextOnHover>\n <ng-container [ngSwitch]=\"columnDef.headerInfo[subLineIndex].typeOfBodyData\">\n <ng-container *ngSwitchCase=\"'ICON'\">\n <i\n *ngIf=\"\n !(\n starredInProgress &&\n ROW_DATA.orderId == selectedStarredOrderId\n )\n \"\n [class]=\"ROW_DATA.iconClass\"\n (click)=\"iconClicked(ROW_DATA, ROW_DATA.iconClass)\"\n ngbTooltip=\"{{ ROW_DATA.iconTitleText }}\"\n placement=\"bottom\"\n container=\"body\"\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\n ></i>\n <ng-container\n *ngIf=\"\n starredInProgress && ROW_DATA.orderId == selectedStarredOrderId\n \"\n >\n <div class=\"spinner-for-button-directive\"></div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'ICON_CELL'\">\n <ng-container\n *ngFor=\"\n let action of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n >\n <ng-container *ngIf=\"action.showObjectKey\">\n {{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] }}\n </ng-container>\n\n <i\n *ngIf=\"action.showIcon\"\n [class]=\"action.iconClass\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionType(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n tooltipClass=\"team-user-tooltip remove-on-scroll-class\"\n [ngbTooltip]=\"action.showTooltip ? action.tooltipData : null\"\n (click)=\"\n textActionClicked(\n ROW_DATA,\n action.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n [disableTooltip]=\"!action.showTooltip\"\n >\n </i>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'HTML_STRING'\">\n <p\n [innerHTML]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n (click)=\"innerHTMLCellClicked($event, ROW_DATA)\"\n ></p>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'SVG_ICON'\">\n <anna-core-anna-icon-column\n [componentName]=\"gtGeneralConfig.component\"\n [dataObject]=\"ROW_DATA\"\n [iconToShow]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n \"\n (onColumnIconClicked)=\"svgIconClicked($event)\"\n ></anna-core-anna-icon-column>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'TEXT_ACTIONS'\">\n <ng-container\n *ngFor=\"\n let text of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n >\n <button\n *ngIf=\"text.showTooltip\"\n (click)=\"\n textActionClicked(\n ROW_DATA,\n text.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n [disabled]=\"text.isDisabled\"\n class=\"{{ text.class }}\"\n (mouseenter)=\"\n mouseEnterOnTextActionType(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n [ngbTooltip]=\"textActionTooltipTemplate\"\n placement=\"auto\"\n container=\"body\"\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\n >\n {{ text.name }}\n </button>\n\n <button\n *ngIf=\"!text.showTooltip\"\n (click)=\"\n textActionClicked(\n ROW_DATA,\n text.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n [disabled]=\"text.isDisabled\"\n class=\"{{ text.class }}\"\n >\n {{ text.name }}\n </button>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\n <span\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n [ngClass]=\"{\n 'disable-checkbox':\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\n }\"\n class=\"material-icons custom-column-checkbox-checked\"\n (click)=\"\n selectOrUnselectCheckbox(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].objectKey,\n false\n )\n \"\n >\n check_box\n </span>\n <span\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n class=\"material-icons custom-column-checkbox-unchecked\"\n [ngClass]=\"{\n 'disable-checkbox':\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\n }\"\n (click)=\"\n selectOrUnselectCheckbox(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].objectKey,\n true\n )\n \"\n >\n check_box_outline_blank\n </span>\n\n <ng-container\n *ngFor=\"\n let action of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n >\n <i\n *ngIf=\"action.showIcon\"\n [class]=\"action.iconClass\"\n [ngClass]=\"{ disabled: action.disabledIcon }\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionTypeContainingTable(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\n [ngbTooltip]=\"tooltipContainingTableTemplate\"\n >\n </i>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'CLICKABLE_DATA'\">\n <a\n *ngFor=\"\n let text of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n [class]=\"text.class\"\n (click)=\"onClickableDataClicked(ROW_DATA, text.id)\"\n >\n {{ text.name }}\n </a>\n <span\n *ngIf=\"\n subline.objectKey == 'displayBookedUnits' &&\n gtGeneralConfig.component == 'RATING'\n \"\n class=\"clickable-data\"\n (click)=\"spotDetailsDownloadClicked('DATAROW', ROW_DATA)\"\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\"\n >{{ ROW_DATA.displayBookedUnits }}\n <span class=\"material-icons spot-details-download-icons\"\n >get_app</span\n >\n <ng-container\n *ngIf=\"\n downloadInProgress &&\n ROW_DATA.inventoryCodeId ==\n selectedInventoryIdForDownload &&\n ROW_DATA.demographic == selectedDemographicForDownload\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"circularProgressBar\"\n ></ng-container>\n </ng-container>\n </span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'STRING___ICON_OR_TEXT_ACTION'\">\n <ng-container\n *ngFor=\"\n let action of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n >\n <span\n [class]=\"action.additionalTextBeforeLinkClass\"\n [innerHtml]=\"action.additionalTextBeforeLink\"\n ngbTooltip=\"{{ action.additionalTextBeforeLink }}\"\n placement=\"bottom\"\n container=\"body\"\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\n [disableTooltip]=\"!action.enableTooltipForAdditionalText\"\n ></span>\n\n <ng-container *ngIf=\"action && action.typeOfData == 'STRING'\">\n {{ action.data }}\n </ng-container>\n\n <a\n [id]=\"action.id\"\n *ngIf=\"action.showLink\"\n (click)=\"\n textActionClicked(\n ROW_DATA,\n action.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n [class]=\"action.linkClass\"\n [ngClass]=\"{ disabled: action.disabledLink }\"\n >{{ action.data }}</a\n >\n <span\n ngbTooltip=\"{{ action.additionalTextAfterLink }}\"\n placement=\"bottom\"\n container=\"body\"\n [class]=\"action.additionalTextAfterLinkClass\"\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\n [disableTooltip]=\"!action.enableTooltipForAdditionalAfterText\"\n >\n {{ action.additionalTextAfterLink }}\n </span>\n\n <ng-container *ngIf=\"action.showTooltip\">\n <ng-container *ngIf=\"action.tooltipData.innerHtml\">\n <i\n *ngIf=\"action.showIcon\"\n [class]=\"action.iconClass\"\n [ngClass]=\"{ disabled: action.disabledIcon }\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionTypeContainingTable(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\n [ngbTooltip]=\"tooltipContainingTableTemplate\"\n >\n </i>\n </ng-container>\n\n <ng-container *ngIf=\"!action.tooltipData.tooltipTableBody\">\n <i\n *ngIf=\"action.showIcon\"\n [class]=\"action.iconClass\"\n [ngClass]=\"{ disabled: action.disabledIcon }\"\n (click)=\"\n iconClickedOnStringIconActionType(\n ROW_DATA,\n action.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionType(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n [placement]=\"\n action.tooltipPlacement\n ? action.tooltipPlacement\n : 'bottom auto'\n \"\n container=\"body\"\n [autoClose]=\"true\"\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{\n action.tooltipClass\n }}\"\n [ngbTooltip]=\"userLoggedInDetails\"\n >\n </i>\n <ng-container *ngIf=\"action['showSvgIcon']\">\n <anna-core-anna-est-icon-template\n class=\"float-right\"\n *ngIf=\"action['svgIconName'] == 'anna-icon'\"\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionType(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex]\n .tooltipKey\n )\n \"\n [placement]=\"\n action.tooltipPlacement\n ? action.tooltipPlacement\n : 'bottom auto'\n \"\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{\n action['tooltipClass']\n }}\"\n [ngbTooltip]=\"userLoggedInDetails\"\n container=\"body\"\n [autoClose]=\"true\"\n >\n </anna-core-anna-est-icon-template>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!action.showTooltip\">\n <i\n *ngIf=\"action.showIcon\"\n [class]=\"action.iconClass\"\n [ngClass]=\"{ disabled: action.disabledIcon }\"\n (click)=\"\n iconClickedOnStringIconActionType(\n ROW_DATA,\n action.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n >\n </i>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'STRING_OR_INPUT'\">\n <ng-container\n *ngIf=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.type ==\n 'STRING';\n else inputBox\n \"\n >\n <span\n [innerHtml]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n ?.value\n \"\n ></span>\n </ng-container>\n <ng-template #inputBox>\n <input\n placeholder=\"{{\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n ?.placeholder\n }}\"\n showEllipsisTextOnHover\n class=\"{{\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .className\n }}\"\n (keydown)=\"\n changesMadeInEditableInputBox(\n $event,\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey],\n false\n )\n \"\n (paste)=\"\n changesMadeInEditableInputBox(\n $event,\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey],\n true\n )\n \"\n (ngModelChange)=\"\n editableInputValueChanged(\n $event,\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].objectKey\n )\n \"\n [ngModel]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].value\n \"\n [disabled]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .disabled\n \"\n [ngClass]=\"{\n 'red-border':\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .hasError\n }\"\n />\n\n <i\n *ngIf=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .showIcon\n \"\n container=\"body\"\n [ngbTooltip]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .iconTooltip\n \"\n tooltipClass=\"gt-total-row-tooltip\"\n placement=\"bottom\"\n class=\"{{\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .iconClass\n }}\"\n >\n </i>\n <ng-container\n *ngIf=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey][\n 'showSvgIcon'\n ]\n \"\n >\n <anna-core-anna-est-icon-template\n class=\"float-right\"\n *ngIf=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey][\n 'svgIconName'\n ] == 'anna-icon'\n \"\n [placement]=\"'bottom auto'\"\n tooltipClass=\"gt-total-row-tooltip\"\n [ngbTooltip]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .iconTooltip\n \"\n container=\"body\"\n >\n </anna-core-anna-est-icon-template>\n </ng-container>\n </ng-template>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'HTML'\">\n <span\n [innerHtml]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n ></span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'SINGLE_RADIO'\">\n <span\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n [ngClass]=\"{\n 'disable-checkbox':\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\n }\"\n class=\"mdi mdi-radiobox-marked\"\n (click)=\"(null)\"\n >\n </span>\n <span\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n class=\"mdi mdi-radiobox-blank\"\n [ngClass]=\"{\n 'disable-checkbox':\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\n }\"\n (click)=\"\n selectOrUnselectCheckbox(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].objectKey,\n true\n )\n \"\n >\n </span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'RADIO'\">\n <mat-radio-group\n *ngIf=\"ROW_DATA['RadioButtonConfig']\"\n [ngModel]=\"ROW_DATA[subline.objectKey]\"\n [disabled]=\"ROW_DATA['RadioButtonConfig'][0].isDisabled\"\n >\n <ng-container\n *ngFor=\"\n let radioButton of ROW_DATA['RadioButtonConfig'];\n let last = last\n \"\n >\n <mat-radio-button\n value=\"{{ radioButton.value }}\"\n class=\"{{ radioButton.class }}\"\n (click)=\"\n radioButtonClicked(\n ROW_DATA,\n radioButton.value,\n ROW_DATA['RadioButtonConfig'][0].isDisabled\n )\n \"\n >{{ radioButton.label }}\n </mat-radio-button>\n <i\n class=\" {{ radioButton.iconClass }}\"\n (click)=\"radioButtonIconClicked(ROW_DATA)\"\n ></i>\n <br *ngIf=\"!last\" />\n </ng-container>\n </mat-radio-group>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'STRING_WITH_TOOLTIP'\">\n <ng-container\n *ngFor=\"\n let action of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n >\n <span> {{ action?.dataToDisplay }}</span>\n <span\n *ngIf=\"action?.showTooltip\"\n [ngbTooltip]=\"textActionTooltipTemplate\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionType(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n [placement]=\"action?.tooltipPosition\"\n container=\"body\"\n [class]=\"action?.tooltipIconClass\"\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\n [disableTooltip]=\"action?.disableTooltip\"\n >\n </span>\n <span> {{ action?.dataToDisplayAfterTooltip }}</span>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"subline.objectKey != 'description'\">\n <span>{{\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n }}</span>\n <i\n *ngIf=\"\n subline.objectKey == 'inventoryCode' &&\n ROW_DATA['isSellerGroup'] &&\n gtGeneralConfig.component == 'RATING'\n \"\n class=\"mi mdi-info-outline seller-tooltip\"\n [ngbTooltip]=\"sellerHierarchyTooltip\"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n triggers=\"manual\"\n (hidden)=\"closeTooltip()\"\n #info=\"ngbTooltip\"\n tooltipClass=\"hierarchy-tooltip remove-on-scroll-class\"\n (mouseenter)=\"\n bindTheValueToSellerGroupTooltip(\n ROW_DATA.sellerGroupHierarchy,\n info\n )\n \"\n >\n </i>\n\n <i\n *ngIf=\"\n subline.objectKey == 'displayBookedAverageRating' &&\n gtGeneralConfig.component == 'RATING' &&\n ROW_DATA['showRatingAverageIcon']\n \"\n class=\"mi mdi-info-outline seller-tooltip\"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n (mouseenter)=\"\n setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\n \"\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\n [ngbTooltip]=\"postedRatingDifference\"\n >\n </i>\n\n <i\n *ngIf=\"\n subline.objectKey == 'displayBookedAverageImpression' &&\n gtGeneralConfig.component == 'RATING' &&\n ROW_DATA['showImpressionAverageIcon']\n \"\n class=\"mi mdi-info-outline seller-tooltip\"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n (mouseenter)=\"\n setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\n \"\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\n [ngbTooltip]=\"postedImpDifference\"\n >\n </i>\n </ng-container>\n <ng-container *ngIf=\"subline.objectKey == 'description'\">\n <p\n *ngIf=\"\n ROW_DATA.descriptionMessage ||\n ROW_DATA.descriptionEmailReferenceNum\n \"\n >\n <ng-container *ngIf=\"ROW_DATA.descriptionMessage\">\n {{ ROW_DATA.descriptionMessage }}\n <br />\n </ng-container>\n <ng-container\n *ngIf=\"\n ROW_DATA.descriptionEmailReferenceNum != '-' &&\n ROW_DATA.descriptionEmailReferenceNum != ''\n \"\n >\n Email Ref: {{ ROW_DATA.descriptionEmailReferenceNum }}\n <br />\n </ng-container>\n </p>\n <a\n href=\"{{ ROW_DATA.descriptionDetailsUrl }}\"\n target=\"_blank\"\n *ngIf=\"\n ROW_DATA.descriptionDetailsUrlType === 'PDF' ||\n ROW_DATA.descriptionDetailsUrlType === 'EXCEL'\n \"\n >\n <button class=\"btn viewDetailsAndEmailBtn\">Download</button>\n </a>\n <ng-container\n *ngIf=\"ROW_DATA.activityname.toLowerCase() == 'order onboarded'\"\n >\n <a\n *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'LINK'\"\n (click)=\"viewDetailsClicked(ROW_DATA)\"\n >\n <button class=\"btn viewDetailsAndEmailBtn order-onboarded\">\n View details\n </button>\n </a>\n </ng-container>\n\n <a\n href=\"{{ ROW_DATA.descriptionEmailUrl }}\"\n target=\"_blank\"\n *ngIf=\"\n ROW_DATA.descriptionEmailUrl != '-' &&\n ROW_DATA.descriptionEmailUrl != ''\n \"\n >\n <button class=\"btn viewDetailsAndEmailBtn\">View email</button>\n </a>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"isNoDataToDisplaySubject$ | async\">\n <div>\n {{ null }}\n </div>\n </ng-container>\n </ng-container>\n </td>\n </ng-container>\n </ng-container>\n </table>\n </div>\n <anna-core-no-data-lib\n [width]=\"noDataWidth\"\n [marginTop]=\"marginTop\"\n *ngIf=\"isNoDataToDisplaySubject$ | async\"\n >\n </anna-core-no-data-lib>\n</div>\n\n<!-- Checkbox template -->\n<ng-template #filterTooltip>\n <anna-core-anna-column-checkbox-filter\n [tableData]=\"tableData\"\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\n [isLurAndCsrComponent]=\"false\"\n [clonedTableData]=\"clonedTableData\"\n [filterTabObjects]=\"filterTabObjects\"\n (filterAppliedToTable)=\"filterApplied($event)\"\n (sortingAppliedToTable)=\"sortingApplied($event)\"\n (closeTooltip)=\"closeTooltip()\"\n >\n </anna-core-anna-column-checkbox-filter>\n</ng-template>\n\n<!-- Slider template -->\n<ng-template #sliderToolTip>\n <anna-core-anna-column-slider-filter\n [tableData]=\"tableData\"\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\n [isLurAndCsrComponent]=\"false\"\n [clonedTableData]=\"clonedTableData\"\n [filterTabObjects]=\"filterTabObjects\"\n (filterAppliedToTable)=\"filterApplied($event)\"\n (sortingAppliedToTable)=\"sortingApplied($event)\"\n (closeTooltip)=\"closeTooltip()\"\n >\n </anna-core-anna-column-slider-filter>\n</ng-template>\n\n<!-- Date Picker Template -->\n<ng-template #datePickerTooltip>\n <anna-core-anna-column-date-range-filter\n [tableData]=\"tableData\"\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\n [isLurAndCsrComponent]=\"false\"\n [clonedTableData]=\"clonedTableData\"\n [filterTabObjects]=\"filterTabObjects\"\n (filterAppliedToTable)=\"filterApplied($event)\"\n (sortingAppliedToTable)=\"sortingApplied($event)\"\n (closeTooltip)=\"closeTooltip()\"\n >\n </anna-core-anna-column-date-range-filter>\n</ng-template>\n\n<!-- Week Picker Template -->\n<ng-template #weekPickerToolTip>\n <!-- <div class=\"weekpicker-container\">\n <anna-core-week-calendar-filter-lib\n [week-calendar-config]=\"gtGeneralConfig.multiWeekPickerConfig\"\n (apply)=\"applyWeekFilter($event)\"\n [from-date]=\"calendarMinEnabledDate\"\n [to-date]=\"calendarMaxEnabledDate\"\n >\n </anna-core-week-calendar-filter-lib>\n </div> -->\n</ng-template>\n\n<!-- Time Filter Template -->\n<ng-template #timeFilterToolTip>\n <anna-core-anna-column-time-filter\n [tableData]=\"tableData\"\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\n [isLurAndCsrComponent]=\"false\"\n [showAllTimeRangeCheckboxes]=\"showCheckboxesForTimeFilter\"\n [clonedTableData]=\"clonedTableData\"\n [filterTabObjects]=\"filterTabObjects\"\n (filterAppliedToTable)=\"filterApplied($event)\"\n (sortingAppliedToTable)=\"sortingApplied($event)\"\n (closeTooltip)=\"closeTooltip()\"\n >\n </anna-core-anna-column-time-filter>\n</ng-template>\n\n<ng-template #columnInfoTooltip>\n <p style=\"color: black; white-space: nowrap\">This preemption is rejected and not marked for credit.</p>\n</ng-template>\n\n<ng-template #ratingInfoTooltip>\n <p class=\"first-row\">Shows 'Booked Rating' for Preemptions & MakeGood Offered spot(s).</p>\n <p class=\"second-row\">Shows 'Projected Rating' for ADU Offered spot(s).</p>\n</ng-template>\n\n<ng-template #impsInfoTooltip>\n <p class=\"first-row\">Shows 'Booked IMPS' for Preemptions & MakeGood Offered spot(s).</p>\n <p class=\"second-row\">Shows 'Projected IMPS' for ADU Offered spot(s).</p>\n</ng-template>\n\n<ng-template #spotsColumnEquivalizationMessageTooltip>\n <p class=\"spot-column-tooltip-message\">\n This consists of equivalized spots and un-equivalized Paid Programs & un-equivalized Non-spots.\n </p>\n</ng-template>\n\n<ng-template #underDeliveryTooltip>\n <p class=\"spot-column-tooltip-message\">\n Indicates the Under-delivery percentage based on booked and posted RTG/IMPS.\n </p>\n</ng-template>\n\n<ng-template #overDeliveryTooltip>\n <p class=\"spot-column-tooltip-message\">\n Indicates the Over-delivery percentage based on booked and posted RTG/IMPS.\n </p>\n</ng-template>\n\n<ng-template #rateInfoTooltip>\n <p class=\"first-row\">Shows 'Booked Rate' for Preemptions & MakeGood Offered spot(s).</p>\n <p class=\"second-row\">Shows 'Projected $ Value' for ADU Offered spot(s).</p>\n</ng-template>\n\n<ng-template #sellerHierarchyTooltip>\n <ng-container *ngIf=\"sellerGroupHierarchy.length > 0\">\n <section class=\"hierarchy-table-container\">\n <table class=\"seller-hierarchy-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>Inventory Codes</th>\n <th>Program/Description</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let data of sellerGroupHierarchy; let tooltipIndex = index\">\n <td>{{ tooltipIndex + 1 }}</td>\n <td>\n <span showEllipsisTextOnHover>{{ data.InventoryCode }}</span>\n </td>\n <td>\n <span showEllipsisTextOnHover>{{ data.Program }}</span>\n </td>\n </tr>\n </tbody>\n </table>\n </section>\n </ng-container>\n <ng-container *ngIf=\"sellerGroupHierarchy.length == 0\">\n <span style=\"color: #000\">Seller group not available for this inventory code</span>\n </ng-container>\n</ng-template>\n\n<ng-template #lurViolationInfoTooltip>\n <p class=\"first-row\">The values are for the entire week.</p>\n</ng-template>\n\n<ng-template #postedRatingDifference>\n <p class=\"difference-text\">\n The difference between posted and booked average rating is\n {{ isDifferenceLessThan25Percent ? \"less\" : \"more\" }} than 25%.\n </p>\n</ng-template>\n\n<ng-template #postedImpDifference>\n <p class=\"difference-text\">\n The difference between posted and booked average impression is\n {{ isDifferenceLessThan25Percent ? \"less\" : \"more\" }} than 25%.\n </p>\n</ng-template>\n\n<ng-template #ongoingRevBookedColumnTooltip>\n <p>The Booked $ value, Spots, GRP, CPP, IMPS, CPM corresponds on the last permanent revision generated</p>\n</ng-template>\n\n<ng-template #completedRevBookedColumnTooltip>\n <p>The Booked $ value corresponds on the last permanent revision generated</p>\n</ng-template>\n\n<ng-template #avgBookedRate>\n <p>This is the booked average Rate</p>\n</ng-template>\n\n<ng-template #avgBookedRtg>\n <p>This is the booked average RTG</p>\n</ng-template>\n\n<ng-template #avgBookedImps>\n <p>This is the booked average IMP(\u2019000)</p>\n</ng-template>\n\n<ng-template #projectedImpsRtg>\n <p>\n All projections are derived from the sum of actual posted information until the last posted date and estimates\n for the remaining selected period.\n </p>\n</ng-template>\n\n<ng-template #automationTooltip>\n <p>\n Please get the order business rules approved to activate the order for automation. Only for the\n automation-activated orders, any approved MGs, ADUs, or credited spots on ANNA will be fed into the traffic\n system i.e. ANNA revisions.\n <!-- removed below line as part of enhancmennt in 14.0 releas -->\n <!-- Additionally, ANNA will only enter buyer revisions into traffic for the selected\n Medialine/WOC orders. -->\n </p>\n</ng-template>\n\n<ng-template #rebateImpact>\n <p>Rebate impact value is for the originally ordered spot length and is not equivalized.</p>\n</ng-template>\n\n<ng-template #lurViolationTotalRowToolTip>\n <ul>\n <li>\n <strong>POLITICAL RATE VIOLATIONS:</strong>\n Violations flagged when non-political spots are booked at a rate lower than the minimum booked rate for\n political candidates for the same week, Inventory Code and Revenue Class.\n </li>\n <li>\n <strong>CANDIDATE TO CANDIDATE VIOLATION:</strong>\n Violations flagged when political spots are booked at different rates to other political spots for the same\n week, Inventory Code and Revenue Class.\n </li>\n </ul>\n</ng-template>\n\n<ng-template #circularProgressBar>\n <circle-progress\n [percent]=\"percentDone\"\n [radius]=\"5\"\n [showTitle]=\"false\"\n [showUnits]=\"false\"\n [showSubtitle]=\"false\"\n [outerStrokeWidth]=\"3\"\n [innerStrokeWidth]=\"3\"\n [space]=\"-3\"\n [outerStrokeColor]=\"'#268bff'\"\n [innerStrokeColor]=\"'#d5d5d5'\"\n [animationDuration]=\"10\"\n ></circle-progress>\n</ng-template>\n\n<ng-template #userLoggedInDetails>\n <div class=\"tooltip-div-container\">\n <ng-container *ngFor=\"let data of textActionTooltip\">\n <span *ngIf=\"data.key != 'read'\">\n {{ data.key }} <b> {{ data.value }}</b>\n </span>\n <span *ngIf=\"data.key == 'read'\">\n {{ data.value }}\n </span>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #markAsReadTip>\n <div class=\"notification-tooltip-div-container\">\n <ng-container *ngFor=\"let data of textActionTooltip\">\n {{ data.value }}\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #textActionTooltipTemplate>\n <ng-container *ngFor=\"let data of textActionTooltip\">\n {{ data.key }} <b> {{ data.value }}</b>\n </ng-container>\n</ng-template>\n\n<ng-template #tooltipContainingTableTemplate>\n <div\n *ngIf=\"tooltipContainingTable\"\n [innerHTML]=\"tooltipContainingTable.innerHtml\"\n class=\"notification-tooltip-div-container\"\n >\n <!-- <ul>\n <li *ngFor=\"let headerMsg of tooltipContainingTable.tableHeaderMsg\">\n <b> {{headerMsg}} </b>\n </li>\n </ul>\n\n <table class=\"tooltip-table\">\n <thead>\n <tr>\n <th *ngFor=\"let header of tooltipContainingTable.tooltipTableHeader\">\n {{ header}}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let rows of tooltipContainingTable.tooltipTableBody\">\n <td *ngFor=\"let data of rows\">\n {{ data }}\n </td>\n </tr>\n </tbody>\n </table>\n\n <ul>\n <li style=\"margin-top:10px; padding:0\" *ngFor=\"let footerMsg of tooltipContainingTable.tableFooterMsg\">\n {{ footerMsg }} \n </li>\n </ul> -->\n </div>\n</ng-template>\n<!-- <ng-template #textActionTooltipTemplate>\n <ng-container *ngFor=\"let data of textActionTooltip\">\n {{ data.key }} <b> {{data.value}}</b>\n </ng-container>\n</ng-template> -->\n", styles: [".sort-btn{background:#fff;border:none;border-right:1px solid #1b88ff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.07;letter-spacing:normal;color:#1b88ff;cursor:pointer;flex:1;text-align:center}.sort-btn:last-of-type{border-right:none}.sort-btn.active{color:#202b47;text-decoration:none}p.sort-container{margin-top:8px;padding-bottom:8px;border-bottom:1px solid #e6e6e6;margin-bottom:0;display:flex}::ng-deep .tooltip-inner{max-height:22rem;background-color:#fff;border:1px solid white;border-radius:5px;box-shadow:0 2px 2px #0000003d,0 0 2px #0000001f;max-width:251px;width:100%;padding:0!important}::ng-deep .tooltip-inner div.radio-container{flex-wrap:wrap}::ng-deep .md-drppicker{box-shadow:unset!important}::ng-deep .available{color:#999}::ng-deep .bs-tooltip-bottom .arrow:before{border-bottom-color:#fff!important}::ng-deep .bs-tooltip-left .arrow:before{border-left-color:#fff!important}::ng-deep .tooltip.show{opacity:1}.input{text-align:left;margin:5px 10px 5px 5px;display:flex;align-items:center;width:230px;white-space:nowrap}.data{color:#000;font-weight:700;margin-left:5px;margin-right:5px}span.data{display:inline-block;text-overflow:ellipsis;white-space:pre;width:100%;overflow:hidden}.check-box{font-size:14px;cursor:pointer;position:relative;top:-1px}span.mdi-filter.active{color:#000;opacity:1!important;pointer-events:all!important}p{margin-bottom:0;line-height:initial}span.mdi-filter{color:#cbcbcb}::ng-deep .ngx-slider-pointer{top:-5px!important;width:12px!important;height:12px!important;background:#bdbdbd!important;border:1px solid #ffffff!important;box-shadow:0 1px 3px #0000004d!important;border-radius:16px!important}input:focus{outline:none}input::placeholder{color:#c8c8c8}.cancel-btn{background:#c7e1ff;color:#268bff}.apply-btn{background:#268bff;color:#fff;margin-left:.3125rem}div.radio-container{display:flex;white-space:nowrap;justify-content:space-between;background-color:#f4f4f4;border-radius:.125rem;margin:.4375rem .4375rem .25rem}div.radio-container div{flex:1;width:50%}div.radio-container div.full-width{width:100%}div.radio-container input{position:relative;top:.125rem;margin-right:.25rem}div.radio-container label{font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:0;color:#4a4a4a;margin:0;padding-left:.125rem}div.radio-container label:first-of-type{margin-right:.188rem}div.radio-container input[type=radio]{appearance:none;display:inline-block;width:.9375rem;height:.9375rem;padding:.125rem;background-clip:content-box;border:.125rem solid #268bff;background-color:transparent;border-radius:50%}div.radio-container input[type=radio]:checked{background-color:#268bff}.checkbox-filter-buttons-container{padding:0 8px!important}.buttons-container{display:flex;margin:0px auto .4375rem;justify-content:center;padding:0 12px}.buttons-container .button{padding:0 10px;width:100%;margin:8px 0 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.buttons-container button:last-of-type{background-color:#268bff;color:#fff;margin-left:.5rem}.buttons-container button.disabled{background:#bdbdbd;opacity:.5;color:#4a4a4a}.button{display:inline-block;margin:8px 4px 0 8px;padding:0 16px;border-radius:4px;text-align:center;outline:none;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;border:none;color:#268bff;background-color:#e5f1ff}.search-box{display:flex;align-items:center;color:#c8c8c8;border:1px solid #e6e6e6;border-radius:.125rem;margin:.25rem .4375rem .188rem;height:1.5rem;padding:.188rem 8px .188rem .5rem}.search-box .search-bar-close{margin-left:auto;float:right}.search-icon{margin:0 4px 0 0;font-size:1.125rem;color:#9b9b9b}.filter-icon{justify-content:right;margin-left:auto;color:#d4d4d4;color:#a1a1a1;font-size:16px;cursor:pointer}.data{margin:0 13px 0 8px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.86;letter-spacing:\"\";color:#4a4a4a}.search-input{margin:1px 0 1px 4px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#c8c8c8;width:calc(100% - 38px)}.check-box{color:#268bff}.tooltip-data-container{overflow-y:scroll;max-height:8rem}.searchbar{width:100%;display:flex;justify-content:flex-end;align-items:flex-end}.clear-button{opacity:.5;font-family:Roboto;font-size:.9375rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;text-decoration:underline;border:none;background-color:#fff;color:#4a4a4a;margin-left:.625rem;padding:0}.clear-button:focus{outline:none;box-shadow:none}.unchecked{color:#268bff}cdk-virtual-scroll-viewport.dropdown-data-container{max-height:12.3rem;width:100%;overflow-y:auto;overflow-x:hidden}cdk-virtual-scroll-viewport.dropdown-data-container p.input{margin-left:0}cdk-virtual-scroll-viewport.dropdown-data-container p.input span.mi{padding-left:.4375rem}cdk-virtual-scroll-viewport.dropdown-data-container p.input:hover{background-color:#ebebeb;cursor:pointer}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar{width:.188rem}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar-thumb{color:#d3d3d3;background:#d3d3d3}section.min-maxContainer{display:flex;justify-content:center;margin-bottom:-.125rem;margin-top:.5rem;width:100%}section.min-maxContainer input{width:30%;height:1.875rem;border:1px solid lightgray;color:gray}section.min-maxContainer span{display:inline-block;padding-left:.5rem;padding-right:.5rem;position:relative;top:.3125rem;color:#666}.time-container{width:100%;display:flex;padding:0 .75rem}.time-container input.form-control:disabled{background-color:#fff;width:2.813rem}.time-container input.numberInput:focus{box-shadow:none;border-color:#c2cfd6}.time-container .dot{color:#cbcbcb;position:relative;left:-7px;font-size:17px}.time-container div.arrow-container{flex-direction:column;display:flex;margin-top:.375rem;width:9px;height:18px;margin-right:1.1875rem}.time-container div.arrow-container i{color:#000;cursor:pointer;max-height:9px;font-size:25px;width:10px}.time-container div.arrow-container i:before{width:0;height:0;pointer-events:none;position:relative;left:-9px;top:-11px}.mdi-filter{cursor:pointer}.time-label-container{display:flex;justify-content:flex-start}.time-label-container label{margin-bottom:0;color:#4a4a4a;margin-top:.125rem;margin-left:.75rem;font-weight:700}.time-heading{color:#000;font-size:.8125rem;text-align:left;padding-left:.625rem;margin-top:.625rem;font-weight:700}.column-clear-all{width:94%;text-align:center;border:none;font-size:14px;background:none;text-decoration:underline;color:#268bff}.checkbox-container{display:flex;padding-inline:.625rem}.checkbox-container .data{text-align:left}.checkbox-container:first-of-type{margin-top:.625rem;font-weight:500}.column-clear-all{width:94%;text-align:center;border:none;background:none;text-decoration:underline;color:#268bff}.column-clear-all:disabled{opacity:.5;color:#4a4a4a;font-weight:400}.column-clear-all.align-center{text-align:center}span.mdi-filter-variant.disabled{pointer-events:none;opacity:.5}.datepicker-container{width:100%}span.mdi-filter-variant{color:#cbcbcb;cursor:pointer;font-size:.875rem}span.mdi-filter-variant.active{color:#000}p.filter-tab{font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:normal;color:#1b88ff;border-radius:5px;background-color:#f4f4f4;padding-inline:8px;cursor:pointer;overflow:hidden;text-align:center;text-overflow:ellipsis}p.filter-tab.active{color:#fff;background-color:#1b88ff}button.filter-text-btn{background:#fff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;border:none;color:#268bff;margin-inline:4px;margin-top:2px}button.filter-text-btn:disabled{color:#b1b1b1;cursor:not-allowed}::ng-deep .non-edit-datepicker-tooltip .tooltip-inner{max-width:310px!important;width:283px!important;overflow-y:initial!important;padding:0!important}input.slider-text::-webkit-outer-spin-button,input.slider-text::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input.slider-text{-moz-appearance:textfield}input.slider-text.red-border{border:1px solid #f44336!important}::ng-deep .checkbox-sort p.sort-container{margin-top:8px!important;padding-bottom:8px!important}i.mdi-close{cursor:pointer}i.mdi-close.disable-close-icon{pointer-events:none;cursor:not-allowed}input.error-border{border:1px solid #f44336!important}::ng-deep .non-edit-checkbox-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-slider-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-time-tooltip .tooltip-inner{width:250px!important;padding:0!important}::ng-deep .non-edit-time-tooltip.bs-tooltip-start{padding:.4rem}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow{right:0;top:5px!important;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow:before{border-left-color:#fff;left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height)}::ng-deep .no-bottom-border p.sort-container{border-bottom:none!important}::ng-deep .ngx-slider-pointer-min:after{display:none}::ng-deep .ngx-slider-pointer-max:after{display:none}::ng-deep .ngx-slider span.ngx-slider-pointer{width:12px;height:12px;top:-5px;background-color:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bar{height:3px;background:#ededed}::ng-deep .ngx-slider span.ngx-slider-selection{background:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bubble{bottom:-22px;font-size:12px;color:#333}::ng-deep .show-min.ngx-slider span.ngx-slider-model-value{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .show-max.ngx-slider span.ngx-slider-model-high{background:#fff;box-shadow:none}::ng-deep .ngx-slider span.ngx-slider-combined{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .ngx-slider{top:10px!important;margin:5px 0 2px!important}::ng-deep .ngx-slider-animate{top:0!important}.sidebar-slider{margin-bottom:35px!important;margin-left:5px;margin-right:5px}.slider-placeholder{height:14px}::ng-deep .filter-calendar select.form-select:focus{border-color:#c2cfd6;box-shadow:none}::ng-deep .filter-calendar select.form-select{background-color:#fff}.no-data-case{padding-left:.4375rem!important;font-size:.875rem!important;margin-top:10px!important;cursor:pointer}.check-mark,.unread-mark{cursor:pointer}.on-hover:hover .unread-mark,.notificationHover .check-mark{opacity:0;cursor:pointer}.on-hover:hover .check-mark{opacity:1;cursor:pointer}:host ::ng-deep .gt{table-layout:fixed;margin-bottom:0;width:100%}:host ::ng-deep .gt th,:host ::ng-deep .gt td{padding:2px 8px;line-height:normal}:host ::ng-deep .gt thead tr th .upper-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#4a4a4a;margin-bottom:0}:host ::ng-deep .gt thead tr th .lower-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#a7a7a7;margin-bottom:0}:host ::ng-deep .gt thead tr th{background-color:#ededed;position:sticky;position:-webkit-sticky;top:0;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .gt thead tr th br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt thead tr th div.row{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;width:max-content}:host ::ng-deep .gt thead tr th div.sort-filter-container{display:flex;flex-wrap:nowrap;align-items:center;margin-left:.25rem;margin-right:auto}:host ::ng-deep .gt thead tr th span.mdi-filter-variant{font-size:13px!important;top:-1px!important;position:relative}:host ::ng-deep .gt thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4}:host ::ng-deep .gt tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td .upper-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#000;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr td .lower-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#a7a7a7;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt tbody tr:nth-of-type(1) td{border-top:none!important}:host ::ng-deep .gt .custom-column-checkbox-checked,:host ::ng-deep .gt .custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}:host ::ng-deep .gt .custom-column-checkbox-checked{color:#268bff}:host ::ng-deep .gt .custom-column-checkbox-unchecked{color:#4a4a4a}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4}.table-container{overflow-x:auto;overflow-y:auto}.rowSelectCheckbox,#selectAllRowsCheckbox{cursor:pointer}.disable-checkbox{color:#dedede!important;pointer-events:none!important}.mdi-warning{color:#f3c639;font-size:16px;line-height:28px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{opacity:1}.redcolor-status{color:#c62a2a}#no-filter-space{width:.875rem}::ng-deep .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:1.875rem!important;width:2.625rem;padding:0 .625rem}input.numberInput{margin-right:-.8125rem;padding:0 0 0 .625rem;height:1.875rem}::ng-deep .mat-button-toggle-checked{background-color:#268bff!important;color:#fff!important}::ng-deep .mat-button-toggle-group-appearance-standard{border-radius:0}.hidden{display:none}.no-data-div{margin-top:2.5px}.no-data-div label{margin:0;width:auto;font-weight:500;background-color:#d3d3d3;padding:.3125rem 1.125rem;border-radius:.25rem}.column-values:nth-of-type(2){color:#a7a7a7!important}.custom-column-checkbox-checked,.custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}.custom-column-checkbox-checked{color:#268bff}.custom-column-checkbox-unchecked{color:#4a4a4a}.time-filter-checkboxes>div>p{color:#151b1e}::ng-deep .margin-bottom-zero .mat-radio-label{margin-bottom:0}:host ::ng-deep mat-radio-group br{margin-top:0!important}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__background{width:var(--mat-radio-size);height:var(--mat-radio-size)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__inner-circle{border-width:calc(var(--mat-radio-size) / 2)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{margin:0 0 0 4px;padding:0;top:-2px;position:relative}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio--disabled+label{color:var(--primary-text-color-dark)!important}:host ::ng-deep mat-radio-group mat-radio-button.mat-mdc-radio-button .mdc-form-field .mdc-radio{padding:0}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{left:-94px;font-size:12px;color:#4a4a4a;position:relative}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:red}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:red}::ng-deep .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:#00000061!important}::ng-deep .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-inner-circle{background-color:#00000061!important}::ng-deep tr.white-background-row{background:#fff}::ng-deep tr.gray-background-row{background:#e9e9e980!important}.remarks-tooltip,.mdi-information,.mdi-information-outline,.seller-tooltip{font-size:.875rem;color:#268bff;position:relative;top:.1875rem;cursor:pointer}.seller-tooltip{top:-1px;float:right}::ng-deep .remarks-info-tooltip .tooltip-inner{max-width:19.25rem!important}.rating-icon,.lur-violation-icon{color:#268bff;cursor:pointer;position:relative;left:-2px}::ng-deep .rating-info-tooltip .tooltip-inner{max-width:800px!important}.spots-info-icon{color:#268bff;cursor:pointer;margin:1px 2px 0 -14px}.spots-info-icon-ol{color:#268bff;cursor:pointer;margin:1px 4px 0 -2px}::ng-deep .spot-info-tooltip .tooltip-inner{position:relative;max-width:220px!important;background:#fff;word-break:break-word;display:flex}::ng-deep .spot-info-tooltip-for-orderlisting-table .tooltip-inner{max-width:220px!important;background:#fff;word-break:break-word;display:flex}p.first-row{padding:.5rem .5rem 0;color:#000;white-space:nowrap;text-align:left}p.second-row{padding:2px .5rem .5rem;color:#000;white-space:nowrap;text-align:left}::ng-deep .gt-total-row-tooltip{opacity:1!important}::ng-deep .gt-total-row-tooltip .tooltip-inner{color:#000;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;background-color:#fff;padding:4px!important;width:100%;border-radius:2px!important}::ng-deep .gt-total-row-tooltip .arrow:before{border-top-color:#fff!important}.info-label{margin-left:4px;color:#268bff;vertical-align:text-top}::ng-deep .hierarchy-tooltip{max-width:-moz-fit-content;max-width:fit-content;width:310px!important}::ng-deep .hierarchy-tooltip .tooltip-inner{padding:4px!important;max-width:22.75rem;max-height:11.25rem}table.seller-hierarchy-table{table-layout:fixed}table.seller-hierarchy-table tr th{font-family:Roboto;font-size:.75rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;color:#5e5e5e;white-space:nowrap;background:#ededed;position:sticky;box-shadow:inset 0 1px #d4d4d4;top:0;z-index:1}table.seller-hierarchy-table tr th:nth-child(1){width:20px}table.seller-hierarchy-table tr th:first-of-type,table.seller-hierarchy-table tr td:first-of-type{width:20px;border-left:1px solid #d4d4d4}table.seller-hierarchy-table tr th:last-of-type,table.seller-hierarchy-table tr td:last-of-type{border-right:1px solid #d4d4d4;width:7.875rem!important}table.seller-hierarchy-table tr th:nth-of-type(2){width:7.75rem!important}table.seller-hierarchy-table tr td{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#4a4a4a;box-shadow:none!important;border-top:1px solid #d4d4d4;border-bottom:1px solid #d4d4d4}table.seller-hierarchy-table tr td:nth-of-type(2),table.seller-hierarchy-table tr td:nth-of-type(3){padding-top:.25rem}table.seller-hierarchy-table tr td span{display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}section.hierarchy-table-container{max-height:8.75rem;overflow:auto}section.hierarchy-table-container::-webkit-scrollbar-track{margin-top:1.5rem}.difference-text{padding:.5rem;color:#000;text-align:left}::ng-deep .posted-avg-tooltip .tooltip-inner{width:13.8125rem!important}::ng-deep .drrBooked-info-tooltip{transform:translate(26px,6px)}::ng-deep .drrBooked-info-tooltip .tooltip-inner{max-width:307px!important;width:242px!important;background:#fff;word-break:break-word;display:flex;padding:4px!important;text-align:left}::ng-deep .drrBooked-info-tooltip .tooltip-inner p{color:#000}::ng-deep .drrBooked-info-tooltip .arrow:before{border-right-color:#fff!important}.clickable-data{cursor:pointer;color:#268bff!important;display:flex!important;align-items:center}.clickable-data .spot-details-download-icons{font-size:12px}.disabled-clickable-data{pointer-events:none;color:#d4d4d4!important}.spot-column-tooltip-message{color:#000;width:max-content;text-align:left}div.spinner-for-button-directive{position:relative;left:-1px}.clickable-row table tr.mat-row td{cursor:pointer!important}.tooltip-div-container{text-align:left!important;padding:12px 4px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.notification-tooltip-div-container{text-align:left!important;padding:6px 8px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.mdi-information,.mdi-information-outline{left:3px;top:1px}.mdi-information-outline{position:static}::ng-deep .team-user-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .team-user-tooltip .tooltip-inner{opacity:1!important;width:-moz-fit-content!important;width:fit-content!important;max-width:520px;border-radius:2px;padding:0 4px!important}::ng-deep .team-user-tooltip .tooltip-inner .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip{opacity:1!important}::ng-deep .gt-icon-column-tooltip .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .gt-icon-column-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip .tooltip-inner{width:100%}::ng-deep .tooltip-containing-table{opacity:1!important}::ng-deep .tooltip-containing-table .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .tooltip-containing-table.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .tooltip-containing-table li{margin:0!important;padding:0!important}::ng-deep .tooltip-containing-table ul{margin:0!important;padding-left:8px!important}::ng-deep .tooltip-containing-table .tooltip-inner{width:100%;max-width:230px}table.tooltip-table{table-layout:fixed;margin:4px 0 0;width:100%}table.tooltip-table th,table.tooltip-table td{padding:2px 8px;line-height:normal}table.tooltip-table thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4!important;border:none}table.tooltip-table thead tr th{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67;background-color:#ededed;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}table.tooltip-table thead tr th div.row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}table.tooltip-table tbody tr td{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67}table.tooltip-table tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}table.tooltip-table tbody tr td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}.bottom-border{border-bottom:1px solid #d4d4d4!important}i.disabled{pointer-events:none!important}\n"] }]
791
+ ], template: "<div\r\n id=\"generic-table-conatiner\"\r\n class=\"table-container {{ gtGeneralConfig?.tableOuterContainerName }} {{ tableBottomBorderClass }}\"\r\n [ngClass]=\"{\r\n 'scroll-left-shadow-effect': isScrolledLeft,\r\n 'scroll-right-shadow-effect': !isScrollEnded,\r\n 'clickable-row': clickableRow,\r\n 'no-data-table': (isNoDataToDisplaySubject$ | async),\r\n 'table-with-show-hide-total-row-toggle': showOrHideToggleForTotalRow\r\n }\"\r\n (scroll)=\"onTableContainerScroll($event)\"\r\n>\r\n <div\r\n [class]=\"gtGeneralConfig.tableContainerName\"\r\n class=\"horizontal-scroll-for-table-container\"\r\n [ngStyle]=\"{\r\n height:\r\n tableData.length < maximumRowsWhichCanBeRenderedWithoutScroll\r\n ? 'calc(' +\r\n (gtDimension.rowHeight * tableData.length +\r\n (!tableData.length || !gtGeneralConfig.totalRow\r\n ? gtDimension.headerHeight\r\n : gtDimension.headerHeight + gtDimension.rowHeight)) +\r\n 'px)'\r\n : gtDimension.tableHeight\r\n }\"\r\n >\r\n <button\r\n *ngIf=\"showOrHideToggleForTotalRow && !showSkeletonLoading && !(isNoDataToDisplaySubject$ | async)\"\r\n [ngClass]=\"{\r\n 'shift-toggle-top-on-total-row-click': !gtGeneralConfig.totalRow\r\n }\"\r\n class=\"show-or-hide-toggle-btn\"\r\n (click)=\"showHideTotalRow()\"\r\n >\r\n <i\r\n class=\"mdi mdi-menu-swap\"\r\n tooltipClass=\"show-or-hide-toggle-tooltip\"\r\n placement=\"auto\"\r\n container=\"body\"\r\n [ngbTooltip]=\"showOrHideToggleForTotalRowTooltip\"\r\n ></i>\r\n </button>\r\n <table\r\n class=\"gt\"\r\n [ngClass]=\"tableClass\"\r\n mat-table\r\n [dataSource]=\"renderedData\"\r\n >\r\n <tr\r\n class=\"header-row\"\r\n mat-header-row\r\n *matHeaderRowDef=\"tableColumns; sticky: true\"\r\n [style.height.px]=\"gtDimension.headerHeight\"\r\n ></tr>\r\n <tr\r\n class=\"total-row\"\r\n mat-header-row\r\n [style.height.px]=\"gtDimension.rowHeight\"\r\n *matHeaderRowDef=\"totalRowColumns; sticky: true\"\r\n [class.hidden]=\"\r\n showSkeletonLoading ||\r\n (!showSkeletonLoading && !tableData.length) ||\r\n (isNoDataToDisplaySubject$ | async) ||\r\n (!showSkeletonLoading && !gtGeneralConfig.totalRow)\r\n \"\r\n ></tr>\r\n <tr\r\n [class]=\"rowData.gtClass\"\r\n [ngClass]=\"{ 'no-border-tr': (isNoDataToDisplaySubject$ | async) }\"\r\n mat-row\r\n *matRowDef=\"let rowData; columns: tableColumns\"\r\n [style.height.px]=\"gtDimension.rowHeight\"\r\n (click)=\"dataRowClicked(rowData)\"\r\n ></tr>\r\n\r\n <!-- TOTAL ROW -->\r\n <ng-container\r\n [matColumnDef]=\"column.colName\"\r\n *ngFor=\"let column of totalRowInfo; trackBy: trackByFn\"\r\n >\r\n <td\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [attr.colspan]=\"column.colspan\"\r\n class=\"{{ column.class }}\"\r\n >\r\n <ng-container *ngIf=\"column['isActionColumn']\">\r\n <a\r\n *ngFor=\"let data of column.actionData\"\r\n [class]=\"data.class\"\r\n (click)=\"onClickableDataClicked({}, data.id)\"\r\n >\r\n {{ data.name }}\r\n </a>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"column['isIconColumn']\">\r\n <i\r\n class=\"{{ column?.iconData?.class }}\"\r\n (click)=\"iconClickedInTotalRow(column?.colName)\"\r\n >\r\n </i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!column['isActionColumn']\">\r\n <strong class=\"upper-label\">{{ column.data }}</strong>\r\n <ng-container *ngIf=\"column.lowerData\">\r\n <br />\r\n <span\r\n *ngIf=\"\r\n column.colName == 'total-potential-booked-unit' &&\r\n gtGeneralConfig.component == 'RATING';\r\n else columnLowerData\r\n \"\r\n class=\"clickable-data\"\r\n (click)=\"spotDetailsDownloadClicked('TOTALROW')\"\r\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\"\r\n >{{ column.lowerData }}\r\n <span class=\"material-icons spot-details-download-icons\">get_app</span>\r\n <ng-container *ngIf=\"downloadInProgress && selectedRowTypeForDownload == 'TOTALROW'\">\r\n <ng-container [ngTemplateOutlet]=\"circularProgressBar\"></ng-container>\r\n </ng-container>\r\n </span>\r\n <ng-template #columnLowerData>\r\n <span class=\"lower-label\">{{ column.lowerData }}</span>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.tooltipMessage && gtGeneralConfig.component != 'LUR_VIOLATIONS'\">\r\n <i\r\n class=\"{{ column.tooltipIconClass }}\"\r\n container=\"body\"\r\n [ngbTooltip]=\"column.tooltipMessage\"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"\r\n ></i>\r\n </ng-container>\r\n <ng-container *ngIf=\"gtGeneralConfig.component == 'LUR_VIOLATIONS' && column.tooltipMessage\">\r\n <i\r\n class=\"mi mdi-info-outline info-label\"\r\n container=\"body\"\r\n [ngbTooltip]=\"lurViolationTotalRowToolTip\"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"\r\n ></i>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- MAIN ROW -->\r\n <ng-container\r\n [matColumnDef]=\"columnDef.headerInfo[0].objectKey\"\r\n *ngFor=\"let columnDef of tableHeaders; trackBy: trackByFn\"\r\n >\r\n <th\r\n #tableHeader\r\n nowrap\r\n mat-header-cell\r\n *matHeaderCellDef\r\n [style.width]=\"columnDef.width\"\r\n >\r\n <div\r\n class=\"row mx-0\"\r\n *ngFor=\"let header of columnDef.headerInfo; let j = index\"\r\n >\r\n <p\r\n *ngIf=\"header.typeOfHeaderData === 'STRING'\"\r\n [ngClass]=\"{ 'upper-label': j === 0, 'lower-label': j === 1 }\"\r\n >\r\n <ngx-skeleton-loader\r\n *ngIf=\"header.name == null\"\r\n count=\"1\"\r\n [theme]=\"{\r\n height: '10px',\r\n display: 'block',\r\n width: columnDef.width,\r\n 'max-width': 'calc(100% - 20px)'\r\n }\"\r\n >\r\n </ngx-skeleton-loader>\r\n <ng-container *ngIf=\"header.name\">\r\n {{ header.name }}\r\n </ng-container>\r\n <ng-container *ngIf=\"header.tooltip && header.tooltip.tooltipMessage\">\r\n <i\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"header.tooltip.tooltipMessage\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </ng-container>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'impsInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"impsInfoTooltip\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"\r\n header.tooltip && header.tooltip.name == 'spotsColumnEquivalizationMessageTooltip'\r\n \"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n container=\"body\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"spotsColumnEquivalizationMessageTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'underDeliveryTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n container=\"body\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"underDeliveryTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'overDeliveryTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n container=\"body\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"overDeliveryTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'ratingInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"ratingInfoTooltip\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'rateInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"rateInfoTooltip\"\r\n container=\"body\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'ongoingRevBookedColumnTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"ongoingRevBookedColumnTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'completedRevBookedColumnTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"completedRevBookedColumnTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRate'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"avgBookedRate\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRtg'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"avgBookedRtg\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedImps'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"avgBookedImps\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'automationTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"automationTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'rebateImpact'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"rebateImpact\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'projectedImpsRtg'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"projectedImpsRtg\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </p>\r\n\r\n <ng-container *ngIf=\"header.typeOfHeaderData === 'CHECKBOX'\">\r\n <span\r\n *ngIf=\"gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectUnselectAllRows()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{ 'disable-checkbox': gtGeneralConfig.disableHeaderCheckbox }\"\r\n (click)=\"selectUnselectAllRows()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n\r\n <div\r\n *ngIf=\"gtGeneralConfig.showAllColumnFilter\"\r\n class=\"sort-filter-container\"\r\n >\r\n <ng-container *ngIf=\"header.showTooltipIcon\">\r\n <!-- Active tooltip Functionality -->\r\n <ng-container *ngIf=\"header.filter === 'CHECKBOX'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"filterTooltip\"\r\n placement=\"{{ filterAlignment }}\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-checkbox-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'SLIDER'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"sliderToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-slider-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t1=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t1, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'DATE'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"datePickerTooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-datepicker-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t2=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t2, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'WEEK'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"weekPickerToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t3=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t3, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'TIME'\">\r\n <span\r\n class=\"mdi mdi-filter-variant\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.isFilterSortActive &&\r\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\r\n disabled: header.disableTooltipIcon || showSkeletonLoading\r\n }\"\r\n [ngbTooltip]=\"timeFilterToolTip\"\r\n placement=\"bottom left-top auto\"\r\n container=\"body\"\r\n tooltipClass=\"non-edit-time-tooltip\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t4=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t4, header)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!header.showTooltipIcon\">\r\n <span id=\"no-filter-space\"></span><br />\r\n </ng-container>\r\n <i\r\n *ngIf=\"header.tooltip && header.tooltip.name == 'lurViolationInfoTooltip'\"\r\n class=\"{{ header['tooltip'].iconClass }}\"\r\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\r\n #t=\"ngbTooltip\"\r\n container=\"body\"\r\n [ngbTooltip]=\"lurViolationInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </div>\r\n </div>\r\n </th>\r\n\r\n <ng-container *matCellDef=\"let ROW_DATA\">\r\n <td\r\n mat-cell\r\n [style.background]=\"ROW_DATA.backgroundColor\"\r\n [style.border]=\"ROW_DATA.border\"\r\n class=\"{{ ROW_DATA.rowClass }}\"\r\n [ngClass]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'TdClass']\"\r\n [attr.rowspan]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'Rowspan']\"\r\n *ngIf=\"\r\n !hideSomeTds ||\r\n (hideSomeTds && !ROW_DATA['hide' + columnDef.headerInfo[0].objectKey + 'Td'])\r\n \"\r\n >\r\n <ngx-skeleton-loader\r\n *ngIf=\"showSkeletonLoading\"\r\n count=\"1\"\r\n [theme]=\"{ height: '10px', display: 'block' }\"\r\n >\r\n </ngx-skeleton-loader>\r\n\r\n <ng-container *ngIf=\"!showSkeletonLoading\">\r\n <ng-container *ngIf=\"tableData.length > 0 && !(isNoDataToDisplaySubject$ | async)\">\r\n <ng-container\r\n *ngFor=\"\r\n let subline of columnDef.headerInfo;\r\n let subLineIndex = index;\r\n trackBy: trackByFn\r\n \"\r\n >\r\n <div showEllipsisTextOnHover>\r\n <ng-container [ngSwitch]=\"columnDef.headerInfo[subLineIndex].typeOfBodyData\">\r\n <ng-container *ngSwitchCase=\"'ICON'\">\r\n <i\r\n *ngIf=\"\r\n !(\r\n starredInProgress &&\r\n ROW_DATA.orderId == selectedStarredOrderId\r\n )\r\n \"\r\n [class]=\"ROW_DATA.iconClass\"\r\n (click)=\"iconClicked(ROW_DATA, ROW_DATA.iconClass)\"\r\n ngbTooltip=\"{{ ROW_DATA.iconTitleText }}\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n ></i>\r\n <ng-container\r\n *ngIf=\"\r\n starredInProgress && ROW_DATA.orderId == selectedStarredOrderId\r\n \"\r\n >\r\n <div class=\"spinner-for-button-directive\"></div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'ICON_CELL'\">\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <ng-container *ngIf=\"action.showObjectKey\">\r\n {{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] }}\r\n </ng-container>\r\n\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"action.showTooltip ? action.tooltipData : null\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [disableTooltip]=\"!action.showTooltip\"\r\n >\r\n </i>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'HTML_STRING'\">\r\n <p\r\n [innerHTML]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n (click)=\"innerHTMLCellClicked($event, ROW_DATA)\"\r\n ></p>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SVG_ICON'\">\r\n <anna-core-anna-icon-column\r\n [componentName]=\"gtGeneralConfig.component\"\r\n [dataObject]=\"ROW_DATA\"\r\n [iconToShow]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n \"\r\n (onColumnIconClicked)=\"svgIconClicked($event)\"\r\n ></anna-core-anna-icon-column>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'TEXT_ACTIONS'\">\r\n <ng-container\r\n *ngFor=\"\r\n let text of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <button\r\n *ngIf=\"text.showTooltip\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n text.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [disabled]=\"text.isDisabled\"\r\n class=\"{{ text.class }}\"\r\n (mouseenter)=\"\r\n mouseEnterOnTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n [ngbTooltip]=\"textActionTooltipTemplate\"\r\n placement=\"auto\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n >\r\n {{ text.name }}\r\n </button>\r\n\r\n <button\r\n *ngIf=\"!text.showTooltip\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n text.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [disabled]=\"text.isDisabled\"\r\n class=\"{{ text.class }}\"\r\n >\r\n {{ text.name }}\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\r\n <span\r\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n false\r\n )\r\n \"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionTypeContainingTable(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\r\n [ngbTooltip]=\"tooltipContainingTableTemplate\"\r\n >\r\n </i>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CLICKABLE_DATA'\">\r\n <a\r\n *ngFor=\"\r\n let text of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n [class]=\"text.class\"\r\n (click)=\"onClickableDataClicked(ROW_DATA, text.id)\"\r\n >\r\n {{ text.name }}\r\n </a>\r\n <span\r\n *ngIf=\"\r\n subline.objectKey == 'displayBookedUnits' &&\r\n gtGeneralConfig.component == 'RATING'\r\n \"\r\n class=\"clickable-data\"\r\n (click)=\"spotDetailsDownloadClicked('DATAROW', ROW_DATA)\"\r\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\"\r\n >{{ ROW_DATA.displayBookedUnits }}\r\n <span class=\"material-icons spot-details-download-icons\"\r\n >get_app</span\r\n >\r\n <ng-container\r\n *ngIf=\"\r\n downloadInProgress &&\r\n ROW_DATA.inventoryCodeId ==\r\n selectedInventoryIdForDownload &&\r\n ROW_DATA.demographic == selectedDemographicForDownload\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"circularProgressBar\"\r\n ></ng-container>\r\n </ng-container>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING___ICON_OR_TEXT_ACTION'\">\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <span\r\n [class]=\"action.additionalTextBeforeLinkClass\"\r\n [innerHtml]=\"action.additionalTextBeforeLink\"\r\n ngbTooltip=\"{{ action.additionalTextBeforeLink }}\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"!action.enableTooltipForAdditionalText\"\r\n ></span>\r\n\r\n <ng-container *ngIf=\"action && action.typeOfData == 'STRING'\">\r\n {{ action.data }}\r\n </ng-container>\r\n\r\n <a\r\n [id]=\"action.id\"\r\n *ngIf=\"action.showLink\"\r\n (click)=\"\r\n textActionClicked(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n [class]=\"action.linkClass\"\r\n [ngClass]=\"{ disabled: action.disabledLink }\"\r\n >{{ action.data }}</a\r\n >\r\n <span\r\n ngbTooltip=\"{{ action.additionalTextAfterLink }}\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n [class]=\"action.additionalTextAfterLinkClass\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"!action.enableTooltipForAdditionalAfterText\"\r\n >\r\n {{ action.additionalTextAfterLink }}\r\n </span>\r\n\r\n <ng-container *ngIf=\"action.showTooltip\">\r\n <ng-container *ngIf=\"action.tooltipData.innerHtml\">\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionTypeContainingTable(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\r\n [ngbTooltip]=\"tooltipContainingTableTemplate\"\r\n >\r\n </i>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!action.tooltipData.tooltipTableBody\">\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (click)=\"\r\n iconClickedOnStringIconActionType(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n [placement]=\"\r\n action.tooltipPlacement\r\n ? action.tooltipPlacement\r\n : 'bottom auto'\r\n \"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{\r\n action.tooltipClass\r\n }}\"\r\n [ngbTooltip]=\"userLoggedInDetails\"\r\n >\r\n </i>\r\n <ng-container *ngIf=\"action['showSvgIcon']\">\r\n <anna-core-anna-est-icon-template\r\n class=\"float-right\"\r\n *ngIf=\"action['svgIconName'] == 'anna-icon'\"\r\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex]\r\n .tooltipKey\r\n )\r\n \"\r\n [placement]=\"\r\n action.tooltipPlacement\r\n ? action.tooltipPlacement\r\n : 'bottom auto'\r\n \"\r\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{\r\n action['tooltipClass']\r\n }}\"\r\n [ngbTooltip]=\"userLoggedInDetails\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n >\r\n </anna-core-anna-est-icon-template>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!action.showTooltip\">\r\n <i\r\n *ngIf=\"action.showIcon\"\r\n [class]=\"action.iconClass\"\r\n [ngClass]=\"{ disabled: action.disabledIcon }\"\r\n (click)=\"\r\n iconClickedOnStringIconActionType(\r\n ROW_DATA,\r\n action.id,\r\n columnDef.headerInfo[subLineIndex]\r\n )\r\n \"\r\n >\r\n </i>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING_OR_INPUT'\">\r\n <ng-container\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.type ==\r\n 'STRING';\r\n else inputBox\r\n \"\r\n >\r\n <span\r\n [innerHtml]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n ?.value\r\n \"\r\n ></span>\r\n </ng-container>\r\n <ng-template #inputBox>\r\n <input\r\n placeholder=\"{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n ?.placeholder\r\n }}\"\r\n showEllipsisTextOnHover\r\n class=\"{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .className\r\n }}\"\r\n (keydown)=\"\r\n changesMadeInEditableInputBox(\r\n $event,\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey],\r\n false\r\n )\r\n \"\r\n (paste)=\"\r\n changesMadeInEditableInputBox(\r\n $event,\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey],\r\n true\r\n )\r\n \"\r\n (ngModelChange)=\"\r\n editableInputValueChanged(\r\n $event,\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey\r\n )\r\n \"\r\n [ngModel]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].value\r\n \"\r\n [disabled]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .disabled\r\n \"\r\n [ngClass]=\"{\r\n 'red-border':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .hasError\r\n }\"\r\n />\r\n\r\n <i\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .showIcon\r\n \"\r\n container=\"body\"\r\n [ngbTooltip]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .iconTooltip\r\n \"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n placement=\"bottom\"\r\n class=\"{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .iconClass\r\n }}\"\r\n >\r\n </i>\r\n <ng-container\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey][\r\n 'showSvgIcon'\r\n ]\r\n \"\r\n >\r\n <anna-core-anna-est-icon-template\r\n class=\"float-right\"\r\n *ngIf=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey][\r\n 'svgIconName'\r\n ] == 'anna-icon'\r\n \"\r\n [placement]=\"'bottom auto'\"\r\n tooltipClass=\"gt-total-row-tooltip\"\r\n [ngbTooltip]=\"\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n .iconTooltip\r\n \"\r\n container=\"body\"\r\n >\r\n </anna-core-anna-est-icon-template>\r\n </ng-container>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'HTML'\">\r\n <span\r\n [innerHtml]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n ></span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SINGLE_RADIO'\">\r\n <span\r\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n class=\"mdi mdi-radiobox-marked\"\r\n (click)=\"(null)\"\r\n >\r\n </span>\r\n <span\r\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"mdi mdi-radiobox-blank\"\r\n [ngClass]=\"{\r\n 'disable-checkbox':\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \"\r\n >\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'RADIO'\">\r\n <mat-radio-group\r\n *ngIf=\"ROW_DATA['RadioButtonConfig']\"\r\n [ngModel]=\"ROW_DATA[subline.objectKey]\"\r\n [disabled]=\"ROW_DATA['RadioButtonConfig'][0].isDisabled\"\r\n >\r\n <ng-container\r\n *ngFor=\"\r\n let radioButton of ROW_DATA['RadioButtonConfig'];\r\n let last = last\r\n \"\r\n >\r\n <mat-radio-button\r\n value=\"{{ radioButton.value }}\"\r\n class=\"{{ radioButton.class }}\"\r\n (click)=\"\r\n radioButtonClicked(\r\n ROW_DATA,\r\n radioButton.value,\r\n ROW_DATA['RadioButtonConfig'][0].isDisabled\r\n )\r\n \"\r\n >{{ radioButton.label }}\r\n </mat-radio-button>\r\n <i\r\n class=\" {{ radioButton.iconClass }}\"\r\n (click)=\"radioButtonIconClicked(ROW_DATA)\"\r\n ></i>\r\n <br *ngIf=\"!last\" />\r\n </ng-container>\r\n </mat-radio-group>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'STRING_WITH_TOOLTIP'\">\r\n <ng-container\r\n *ngFor=\"\r\n let action of ROW_DATA[\r\n columnDef.headerInfo[subLineIndex].actionKey\r\n ]\r\n \"\r\n >\r\n <span> {{ action?.dataToDisplay }}</span>\r\n <span\r\n *ngIf=\"action?.showTooltip\"\r\n [ngbTooltip]=\"textActionTooltipTemplate\"\r\n (mouseenter)=\"\r\n mouseEnterOnStringTextActionType(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].tooltipKey\r\n )\r\n \"\r\n [placement]=\"action?.tooltipPosition\"\r\n container=\"body\"\r\n [class]=\"action?.tooltipIconClass\"\r\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\r\n [disableTooltip]=\"action?.disableTooltip\"\r\n >\r\n </span>\r\n <span> {{ action?.dataToDisplayAfterTooltip }}</span>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n <ng-container *ngIf=\"subline.objectKey != 'description'\">\r\n <span>{{\r\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\r\n }}</span>\r\n <i\r\n *ngIf=\"\r\n subline.objectKey == 'inventoryCode' &&\r\n ROW_DATA['isSellerGroup'] &&\r\n gtGeneralConfig.component == 'RATING'\r\n \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n [ngbTooltip]=\"sellerHierarchyTooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n triggers=\"manual\"\r\n (hidden)=\"closeTooltip()\"\r\n #info=\"ngbTooltip\"\r\n tooltipClass=\"hierarchy-tooltip remove-on-scroll-class\"\r\n (mouseenter)=\"\r\n bindTheValueToSellerGroupTooltip(\r\n ROW_DATA.sellerGroupHierarchy,\r\n info\r\n )\r\n \"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"\r\n subline.objectKey == 'displayBookedAverageRating' &&\r\n gtGeneralConfig.component == 'RATING' &&\r\n ROW_DATA['showRatingAverageIcon']\r\n \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n (mouseenter)=\"\r\n setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\r\n \"\r\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"postedRatingDifference\"\r\n >\r\n </i>\r\n\r\n <i\r\n *ngIf=\"\r\n subline.objectKey == 'displayBookedAverageImpression' &&\r\n gtGeneralConfig.component == 'RATING' &&\r\n ROW_DATA['showImpressionAverageIcon']\r\n \"\r\n class=\"mi mdi-info-outline seller-tooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n (mouseenter)=\"\r\n setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\r\n \"\r\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\r\n [ngbTooltip]=\"postedImpDifference\"\r\n >\r\n </i>\r\n </ng-container>\r\n <ng-container *ngIf=\"subline.objectKey == 'description'\">\r\n <p\r\n *ngIf=\"\r\n ROW_DATA.descriptionMessage ||\r\n ROW_DATA.descriptionEmailReferenceNum\r\n \"\r\n >\r\n <ng-container *ngIf=\"ROW_DATA.descriptionMessage\">\r\n {{ ROW_DATA.descriptionMessage }}\r\n <br />\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"\r\n ROW_DATA.descriptionEmailReferenceNum != '-' &&\r\n ROW_DATA.descriptionEmailReferenceNum != ''\r\n \"\r\n >\r\n Email Ref: {{ ROW_DATA.descriptionEmailReferenceNum }}\r\n <br />\r\n </ng-container>\r\n </p>\r\n <a\r\n href=\"{{ ROW_DATA.descriptionDetailsUrl }}\"\r\n target=\"_blank\"\r\n *ngIf=\"\r\n ROW_DATA.descriptionDetailsUrlType === 'PDF' ||\r\n ROW_DATA.descriptionDetailsUrlType === 'EXCEL'\r\n \"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn\">Download</button>\r\n </a>\r\n <ng-container\r\n *ngIf=\"ROW_DATA.activityname.toLowerCase() == 'order onboarded'\"\r\n >\r\n <a\r\n *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'LINK'\"\r\n (click)=\"viewDetailsClicked(ROW_DATA)\"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn order-onboarded\">\r\n View details\r\n </button>\r\n </a>\r\n </ng-container>\r\n\r\n <a\r\n href=\"{{ ROW_DATA.descriptionEmailUrl }}\"\r\n target=\"_blank\"\r\n *ngIf=\"\r\n ROW_DATA.descriptionEmailUrl != '-' &&\r\n ROW_DATA.descriptionEmailUrl != ''\r\n \"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn\">View email</button>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"isNoDataToDisplaySubject$ | async\">\r\n <div>\r\n {{ null }}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </table>\r\n </div>\r\n <anna-core-no-data-lib\r\n [width]=\"noDataWidth\"\r\n [marginTop]=\"marginTop\"\r\n *ngIf=\"isNoDataToDisplaySubject$ | async\"\r\n >\r\n </anna-core-no-data-lib>\r\n</div>\r\n\r\n<!-- Checkbox template -->\r\n<ng-template #filterTooltip>\r\n <anna-core-anna-column-checkbox-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-checkbox-filter>\r\n</ng-template>\r\n\r\n<!-- Slider template -->\r\n<ng-template #sliderToolTip>\r\n <anna-core-anna-column-slider-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-slider-filter>\r\n</ng-template>\r\n\r\n<!-- Date Picker Template -->\r\n<ng-template #datePickerTooltip>\r\n <anna-core-anna-column-date-range-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-date-range-filter>\r\n</ng-template>\r\n\r\n<!-- Week Picker Template -->\r\n<ng-template #weekPickerToolTip>\r\n <!-- <div class=\"weekpicker-container\">\r\n <anna-core-week-calendar-filter-lib\r\n [week-calendar-config]=\"gtGeneralConfig.multiWeekPickerConfig\"\r\n (apply)=\"applyWeekFilter($event)\"\r\n [from-date]=\"calendarMinEnabledDate\"\r\n [to-date]=\"calendarMaxEnabledDate\"\r\n >\r\n </anna-core-week-calendar-filter-lib>\r\n </div> -->\r\n</ng-template>\r\n\r\n<!-- Time Filter Template -->\r\n<ng-template #timeFilterToolTip>\r\n <anna-core-anna-column-time-filter\r\n [tableData]=\"tableData\"\r\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\r\n [isLurAndCsrComponent]=\"false\"\r\n [showAllTimeRangeCheckboxes]=\"showCheckboxesForTimeFilter\"\r\n [clonedTableData]=\"clonedTableData\"\r\n [filterTabObjects]=\"filterTabObjects\"\r\n (filterAppliedToTable)=\"filterApplied($event)\"\r\n (sortingAppliedToTable)=\"sortingApplied($event)\"\r\n (closeTooltip)=\"closeTooltip()\"\r\n >\r\n </anna-core-anna-column-time-filter>\r\n</ng-template>\r\n\r\n<ng-template #columnInfoTooltip>\r\n <p style=\"color: black; white-space: nowrap\">This preemption is rejected and not marked for credit.</p>\r\n</ng-template>\r\n\r\n<ng-template #ratingInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rating' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected Rating' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #impsInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked IMPS' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected IMPS' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #spotsColumnEquivalizationMessageTooltip>\r\n <p class=\"spot-column-tooltip-message\">\r\n This consists of equivalized spots and un-equivalized Paid Programs & un-equivalized Non-spots.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #underDeliveryTooltip>\r\n <p class=\"spot-column-tooltip-message\">\r\n Indicates the Under-delivery percentage based on booked and posted RTG/IMPS.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #overDeliveryTooltip>\r\n <p class=\"spot-column-tooltip-message\">\r\n Indicates the Over-delivery percentage based on booked and posted RTG/IMPS.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #rateInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rate' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected $ Value' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #sellerHierarchyTooltip>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length > 0\">\r\n <section class=\"hierarchy-table-container\">\r\n <table class=\"seller-hierarchy-table\">\r\n <thead>\r\n <tr>\r\n <th>#</th>\r\n <th>Inventory Codes</th>\r\n <th>Program/Description</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of sellerGroupHierarchy; let tooltipIndex = index\">\r\n <td>{{ tooltipIndex + 1 }}</td>\r\n <td>\r\n <span showEllipsisTextOnHover>{{ data.InventoryCode }}</span>\r\n </td>\r\n <td>\r\n <span showEllipsisTextOnHover>{{ data.Program }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </section>\r\n </ng-container>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length == 0\">\r\n <span style=\"color: #000\">Seller group not available for this inventory code</span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationInfoTooltip>\r\n <p class=\"first-row\">The values are for the entire week.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedRatingDifference>\r\n <p class=\"difference-text\">\r\n The difference between posted and booked average rating is\r\n {{ isDifferenceLessThan25Percent ? \"less\" : \"more\" }} than 25%.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #postedImpDifference>\r\n <p class=\"difference-text\">\r\n The difference between posted and booked average impression is\r\n {{ isDifferenceLessThan25Percent ? \"less\" : \"more\" }} than 25%.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #ongoingRevBookedColumnTooltip>\r\n <p>The Booked $ value, Spots, GRP, CPP, IMPS, CPM corresponds on the last permanent revision generated</p>\r\n</ng-template>\r\n\r\n<ng-template #completedRevBookedColumnTooltip>\r\n <p>The Booked $ value corresponds on the last permanent revision generated</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedRate>\r\n <p>This is the booked average Rate</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedRtg>\r\n <p>This is the booked average RTG</p>\r\n</ng-template>\r\n\r\n<ng-template #avgBookedImps>\r\n <p>This is the booked average IMP(\u2019000)</p>\r\n</ng-template>\r\n\r\n<ng-template #projectedImpsRtg>\r\n <p>\r\n All projections are derived from the sum of actual posted information until the last posted date and estimates\r\n for the remaining selected period.\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #automationTooltip>\r\n <p>\r\n Please get the order business rules approved to activate the order for automation. Only for the\r\n automation-activated orders, any approved MGs, ADUs, or credited spots on ANNA will be fed into the traffic\r\n system i.e. ANNA revisions.\r\n <!-- removed below line as part of enhancmennt in 14.0 releas -->\r\n <!-- Additionally, ANNA will only enter buyer revisions into traffic for the selected\r\n Medialine/WOC orders. -->\r\n </p>\r\n</ng-template>\r\n\r\n<ng-template #rebateImpact>\r\n <p>Rebate impact value is for the originally ordered spot length and is not equivalized.</p>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationTotalRowToolTip>\r\n <ul>\r\n <li>\r\n <strong>POLITICAL RATE VIOLATIONS:</strong>\r\n Violations flagged when non-political spots are booked at a rate lower than the minimum booked rate for\r\n political candidates for the same week, Inventory Code and Revenue Class.\r\n </li>\r\n <li>\r\n <strong>CANDIDATE TO CANDIDATE VIOLATION:</strong>\r\n Violations flagged when political spots are booked at different rates to other political spots for the same\r\n week, Inventory Code and Revenue Class.\r\n </li>\r\n </ul>\r\n</ng-template>\r\n\r\n<ng-template #circularProgressBar>\r\n <circle-progress\r\n [percent]=\"percentDone\"\r\n [radius]=\"5\"\r\n [showTitle]=\"false\"\r\n [showUnits]=\"false\"\r\n [showSubtitle]=\"false\"\r\n [outerStrokeWidth]=\"3\"\r\n [innerStrokeWidth]=\"3\"\r\n [space]=\"-3\"\r\n [outerStrokeColor]=\"'#268bff'\"\r\n [innerStrokeColor]=\"'#d5d5d5'\"\r\n [animationDuration]=\"10\"\r\n ></circle-progress>\r\n</ng-template>\r\n\r\n<ng-template #userLoggedInDetails>\r\n <div class=\"tooltip-div-container\">\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n <span *ngIf=\"data.key != 'read'\">\r\n {{ data.key }} <b> {{ data.value }}</b>\r\n </span>\r\n <span *ngIf=\"data.key == 'read'\">\r\n {{ data.value }}\r\n </span>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #markAsReadTip>\r\n <div class=\"notification-tooltip-div-container\">\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.value }}\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #textActionTooltipTemplate>\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.key }} <b> {{ data.value }}</b>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #showOrHideToggleForTotalRowTooltip>\r\n <div>\r\n {{ showOrHideToggleForTotalRow && !gtGeneralConfig.totalRow ? \"Show Total Row\" : \"Hide Total Row\" }}\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #tooltipContainingTableTemplate>\r\n <div\r\n *ngIf=\"tooltipContainingTable\"\r\n [innerHTML]=\"tooltipContainingTable.innerHtml\"\r\n class=\"notification-tooltip-div-container\"\r\n >\r\n <!-- <ul>\r\n <li *ngFor=\"let headerMsg of tooltipContainingTable.tableHeaderMsg\">\r\n <b> {{headerMsg}} </b>\r\n </li>\r\n </ul>\r\n\r\n <table class=\"tooltip-table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let header of tooltipContainingTable.tooltipTableHeader\">\r\n {{ header}}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let rows of tooltipContainingTable.tooltipTableBody\">\r\n <td *ngFor=\"let data of rows\">\r\n {{ data }}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <ul>\r\n <li style=\"margin-top:10px; padding:0\" *ngFor=\"let footerMsg of tooltipContainingTable.tableFooterMsg\">\r\n {{ footerMsg }} \r\n </li>\r\n </ul> -->\r\n </div>\r\n</ng-template>\r\n<!-- <ng-template #textActionTooltipTemplate>\r\n <ng-container *ngFor=\"let data of textActionTooltip\">\r\n {{ data.key }} <b> {{data.value}}</b>\r\n </ng-container>\r\n</ng-template> -->\r\n", styles: ["::ng-deep .show-or-hide-toggle-tooltip .tooltip-inner{max-width:229px}.show-or-hide-toggle-btn.shift-toggle-top-on-total-row-click{transform:translate(calc(var(--app-left-space-show-hide-total-row-icon) - 12px),48px)}.show-or-hide-toggle-btn{width:16px;height:16px;padding:0;margin:0;border-radius:50%;position:absolute;transform:translate(calc(var(--app-left-space-show-hide-total-row-icon) - 12px),73px);z-index:1000;background-color:#d9d9d9}.show-or-hide-toggle-btn i.mdi.mdi-menu-swap{font-size:16px;display:flex}#generic-table-conatiner.table-with-show-hide-total-row-toggle .total-row td:nth-of-type(2){padding-left:16px!important}.sort-btn{background:#fff;border:none;border-right:1px solid #1b88ff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.07;letter-spacing:normal;color:#1b88ff;cursor:pointer;flex:1;text-align:center}.sort-btn:last-of-type{border-right:none}.sort-btn.active{color:#202b47;text-decoration:none}p.sort-container{margin-top:8px;padding-bottom:8px;border-bottom:1px solid #e6e6e6;margin-bottom:0;display:flex}::ng-deep .tooltip-inner{max-height:22rem;background-color:#fff;border:1px solid white;border-radius:5px;box-shadow:0 2px 2px #0000003d,0 0 2px #0000001f;max-width:251px;width:100%;padding:0!important}::ng-deep .tooltip-inner div.radio-container{flex-wrap:wrap}::ng-deep .md-drppicker{box-shadow:unset!important}::ng-deep .available{color:#999}::ng-deep .bs-tooltip-bottom .arrow:before{border-bottom-color:#fff!important}::ng-deep .bs-tooltip-left .arrow:before{border-left-color:#fff!important}::ng-deep .tooltip.show{opacity:1}.input{text-align:left;margin:5px 10px 5px 5px;display:flex;align-items:center;width:230px;white-space:nowrap}.data{color:#000;font-weight:700;margin-left:5px;margin-right:5px}span.data{display:inline-block;text-overflow:ellipsis;white-space:pre;width:100%;overflow:hidden}.check-box{font-size:14px;cursor:pointer;position:relative;top:-1px}span.mdi-filter.active{color:#000;opacity:1!important;pointer-events:all!important}p{margin-bottom:0;line-height:initial}span.mdi-filter{color:#cbcbcb}::ng-deep .ngx-slider-pointer{top:-5px!important;width:12px!important;height:12px!important;background:#bdbdbd!important;border:1px solid #ffffff!important;box-shadow:0 1px 3px #0000004d!important;border-radius:16px!important}input:focus{outline:none}input::placeholder{color:#c8c8c8}.cancel-btn{background:#c7e1ff;color:#268bff}.apply-btn{background:#268bff;color:#fff;margin-left:.3125rem}div.radio-container{display:flex;white-space:nowrap;justify-content:space-between;background-color:#f4f4f4;border-radius:.125rem;margin:.4375rem .4375rem .25rem}div.radio-container div{flex:1;width:50%}div.radio-container div.full-width{width:100%}div.radio-container input{position:relative;top:.125rem;margin-right:.25rem}div.radio-container label{font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:0;color:#4a4a4a;margin:0;padding-left:.125rem}div.radio-container label:first-of-type{margin-right:.188rem}div.radio-container input[type=radio]{appearance:none;display:inline-block;width:.9375rem;height:.9375rem;padding:.125rem;background-clip:content-box;border:.125rem solid #268bff;background-color:transparent;border-radius:50%}div.radio-container input[type=radio]:checked{background-color:#268bff}.checkbox-filter-buttons-container{padding:0 8px!important}.buttons-container{display:flex;margin:0px auto .4375rem;justify-content:center;padding:0 12px}.buttons-container .button{padding:0 10px;width:100%;margin:8px 0 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.buttons-container button:last-of-type{background-color:#268bff;color:#fff;margin-left:.5rem}.buttons-container button.disabled{background:#bdbdbd;opacity:.5;color:#4a4a4a}.button{display:inline-block;margin:8px 4px 0 8px;padding:0 16px;border-radius:4px;text-align:center;outline:none;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;border:none;color:#268bff;background-color:#e5f1ff}.search-box{display:flex;align-items:center;color:#c8c8c8;border:1px solid #e6e6e6;border-radius:.125rem;margin:.25rem .4375rem .188rem;height:1.5rem;padding:.188rem 8px .188rem .5rem}.search-box .search-bar-close{margin-left:auto;float:right}.search-icon{margin:0 4px 0 0;font-size:1.125rem;color:#9b9b9b}.filter-icon{justify-content:right;margin-left:auto;color:#d4d4d4;color:#a1a1a1;font-size:16px;cursor:pointer}.data{margin:0 13px 0 8px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.86;letter-spacing:\"\";color:#4a4a4a}.search-input{margin:1px 0 1px 4px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#c8c8c8;width:calc(100% - 38px)}.check-box{color:#268bff}.tooltip-data-container{overflow-y:scroll;max-height:8rem}.searchbar{width:100%;display:flex;justify-content:flex-end;align-items:flex-end}.clear-button{opacity:.5;font-family:Roboto;font-size:.9375rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;text-decoration:underline;border:none;background-color:#fff;color:#4a4a4a;margin-left:.625rem;padding:0}.clear-button:focus{outline:none;box-shadow:none}.unchecked{color:#268bff}cdk-virtual-scroll-viewport.dropdown-data-container{max-height:12.3rem;width:100%;overflow-y:auto;overflow-x:hidden}cdk-virtual-scroll-viewport.dropdown-data-container p.input{margin-left:0}cdk-virtual-scroll-viewport.dropdown-data-container p.input span.mi{padding-left:.4375rem}cdk-virtual-scroll-viewport.dropdown-data-container p.input:hover{background-color:#ebebeb;cursor:pointer}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar{width:.188rem}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar-thumb{color:#d3d3d3;background:#d3d3d3}section.min-maxContainer{display:flex;justify-content:center;margin-bottom:-.125rem;margin-top:.5rem;width:100%}section.min-maxContainer input{width:30%;height:1.875rem;border:1px solid lightgray;color:gray}section.min-maxContainer span{display:inline-block;padding-left:.5rem;padding-right:.5rem;position:relative;top:.3125rem;color:#666}.time-container{width:100%;display:flex;padding:0 .75rem}.time-container input.form-control:disabled{background-color:#fff;width:2.813rem}.time-container input.numberInput:focus{box-shadow:none;border-color:#c2cfd6}.time-container .dot{color:#cbcbcb;position:relative;left:-7px;font-size:17px}.time-container div.arrow-container{flex-direction:column;display:flex;margin-top:.375rem;width:9px;height:18px;margin-right:1.1875rem}.time-container div.arrow-container i{color:#000;cursor:pointer;max-height:9px;font-size:25px;width:10px}.time-container div.arrow-container i:before{width:0;height:0;pointer-events:none;position:relative;left:-9px;top:-11px}.mdi-filter{cursor:pointer}.time-label-container{display:flex;justify-content:flex-start}.time-label-container label{margin-bottom:0;color:#4a4a4a;margin-top:.125rem;margin-left:.75rem;font-weight:700}.time-heading{color:#000;font-size:.8125rem;text-align:left;padding-left:.625rem;margin-top:.625rem;font-weight:700}.column-clear-all{width:94%;text-align:center;border:none;font-size:14px;background:none;text-decoration:underline;color:#268bff}.checkbox-container{display:flex;padding-inline:.625rem}.checkbox-container .data{text-align:left}.checkbox-container:first-of-type{margin-top:.625rem;font-weight:500}.column-clear-all{width:94%;text-align:center;border:none;background:none;text-decoration:underline;color:#268bff}.column-clear-all:disabled{opacity:.5;color:#4a4a4a;font-weight:400}.column-clear-all.align-center{text-align:center}span.mdi-filter-variant.disabled{pointer-events:none;opacity:.5}.datepicker-container{width:100%}span.mdi-filter-variant{color:#cbcbcb;cursor:pointer;font-size:.875rem}span.mdi-filter-variant.active{color:#000}p.filter-tab{font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:normal;color:#1b88ff;border-radius:5px;background-color:#f4f4f4;padding-inline:8px;cursor:pointer;overflow:hidden;text-align:center;text-overflow:ellipsis}p.filter-tab.active{color:#fff;background-color:#1b88ff}button.filter-text-btn{background:#fff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;border:none;color:#268bff;margin-inline:4px;margin-top:2px}button.filter-text-btn:disabled{color:#b1b1b1;cursor:not-allowed}::ng-deep .non-edit-datepicker-tooltip .tooltip-inner{max-width:310px!important;width:283px!important;overflow-y:initial!important;padding:0!important}input.slider-text::-webkit-outer-spin-button,input.slider-text::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input.slider-text{-moz-appearance:textfield}input.slider-text.red-border{border:1px solid #f44336!important}::ng-deep .checkbox-sort p.sort-container{margin-top:8px!important;padding-bottom:8px!important}i.mdi-close{cursor:pointer}i.mdi-close.disable-close-icon{pointer-events:none;cursor:not-allowed}input.error-border{border:1px solid #f44336!important}::ng-deep .non-edit-checkbox-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-slider-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-time-tooltip .tooltip-inner{width:250px!important;padding:0!important}::ng-deep .non-edit-time-tooltip.bs-tooltip-start{padding:.4rem}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow{right:0;top:5px!important;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow:before{border-left-color:#fff;left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height)}::ng-deep .no-bottom-border p.sort-container{border-bottom:none!important}::ng-deep .ngx-slider-pointer-min:after{display:none}::ng-deep .ngx-slider-pointer-max:after{display:none}::ng-deep .ngx-slider span.ngx-slider-pointer{width:12px;height:12px;top:-5px;background-color:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bar{height:3px;background:#ededed}::ng-deep .ngx-slider span.ngx-slider-selection{background:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bubble{bottom:-22px;font-size:12px;color:#333}::ng-deep .show-min.ngx-slider span.ngx-slider-model-value{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .show-max.ngx-slider span.ngx-slider-model-high{background:#fff;box-shadow:none}::ng-deep .ngx-slider span.ngx-slider-combined{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .ngx-slider{top:10px!important;margin:5px 0 2px!important}::ng-deep .ngx-slider-animate{top:0!important}.sidebar-slider{margin-bottom:35px!important;margin-left:5px;margin-right:5px}.slider-placeholder{height:14px}::ng-deep .filter-calendar select.form-select:focus{border-color:#c2cfd6;box-shadow:none}::ng-deep .filter-calendar select.form-select{background-color:#fff}.no-data-case{padding-left:.4375rem!important;font-size:.875rem!important;margin-top:10px!important;cursor:pointer}.check-mark,.unread-mark{cursor:pointer}.on-hover:hover .unread-mark,.notificationHover .check-mark{opacity:0;cursor:pointer}.on-hover:hover .check-mark{opacity:1;cursor:pointer}:host ::ng-deep .gt{table-layout:fixed;margin-bottom:0;width:100%}:host ::ng-deep .gt th,:host ::ng-deep .gt td{padding:2px 8px;line-height:normal}:host ::ng-deep .gt thead tr th .upper-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#4a4a4a;margin-bottom:0}:host ::ng-deep .gt thead tr th .lower-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#a7a7a7;margin-bottom:0}:host ::ng-deep .gt thead tr th{background-color:#ededed;position:sticky;position:-webkit-sticky;top:0;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .gt thead tr th br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt thead tr th div.row{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;width:max-content}:host ::ng-deep .gt thead tr th div.sort-filter-container{display:flex;flex-wrap:nowrap;align-items:center;margin-left:.25rem;margin-right:auto}:host ::ng-deep .gt thead tr th span.mdi-filter-variant{font-size:13px!important;top:-1px!important;position:relative}:host ::ng-deep .gt thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4}:host ::ng-deep .gt tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td .upper-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#000;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr td .lower-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#a7a7a7;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt tbody tr:nth-of-type(1) td{border-top:none!important}:host ::ng-deep .gt .custom-column-checkbox-checked,:host ::ng-deep .gt .custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}:host ::ng-deep .gt .custom-column-checkbox-checked{color:#268bff}:host ::ng-deep .gt .custom-column-checkbox-unchecked{color:#4a4a4a}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4}.table-container{overflow-x:auto;overflow-y:auto}.rowSelectCheckbox,#selectAllRowsCheckbox{cursor:pointer}.disable-checkbox{color:#dedede!important;pointer-events:none!important}.mdi-warning{color:#f3c639;font-size:16px;line-height:28px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{opacity:1}.redcolor-status{color:#c62a2a}#no-filter-space{width:.875rem}::ng-deep .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:1.875rem!important;width:2.625rem;padding:0 .625rem}input.numberInput{margin-right:-.8125rem;padding:0 0 0 .625rem;height:1.875rem}::ng-deep .mat-button-toggle-checked{background-color:#268bff!important;color:#fff!important}::ng-deep .mat-button-toggle-group-appearance-standard{border-radius:0}.hidden{display:none}.no-data-div{margin-top:2.5px}.no-data-div label{margin:0;width:auto;font-weight:500;background-color:#d3d3d3;padding:.3125rem 1.125rem;border-radius:.25rem}.column-values:nth-of-type(2){color:#a7a7a7!important}.custom-column-checkbox-checked,.custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}.custom-column-checkbox-checked{color:#268bff}.custom-column-checkbox-unchecked{color:#4a4a4a}.time-filter-checkboxes>div>p{color:#151b1e}::ng-deep .margin-bottom-zero .mat-radio-label{margin-bottom:0}:host ::ng-deep mat-radio-group br{margin-top:0!important}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__background{width:var(--mat-radio-size);height:var(--mat-radio-size)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__inner-circle{border-width:calc(var(--mat-radio-size) / 2)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{margin:0 0 0 4px;padding:0;top:-2px;position:relative}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio--disabled+label{color:var(--primary-text-color-dark)!important}:host ::ng-deep mat-radio-group mat-radio-button.mat-mdc-radio-button .mdc-form-field .mdc-radio{padding:0}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{left:-94px;font-size:12px;color:#4a4a4a;position:relative}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:red}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:red}::ng-deep .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:#00000061!important}::ng-deep .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-inner-circle{background-color:#00000061!important}::ng-deep tr.white-background-row{background:#fff}::ng-deep tr.gray-background-row{background:#e9e9e980!important}.remarks-tooltip,.mdi-information,.mdi-information-outline,.seller-tooltip{font-size:.875rem;color:#268bff;position:relative;top:.1875rem;cursor:pointer}.seller-tooltip{top:-1px;float:right}::ng-deep .remarks-info-tooltip .tooltip-inner{max-width:19.25rem!important}.rating-icon,.lur-violation-icon{color:#268bff;cursor:pointer;position:relative;left:-2px}::ng-deep .rating-info-tooltip .tooltip-inner{max-width:800px!important}.spots-info-icon{color:#268bff;cursor:pointer;margin:1px 2px 0 -14px}.spots-info-icon-ol{color:#268bff;cursor:pointer;margin:1px 4px 0 -2px}::ng-deep .spot-info-tooltip .tooltip-inner{position:relative;max-width:220px!important;background:#fff;word-break:break-word;display:flex}::ng-deep .spot-info-tooltip-for-orderlisting-table .tooltip-inner{max-width:220px!important;background:#fff;word-break:break-word;display:flex}p.first-row{padding:.5rem .5rem 0;color:#000;white-space:nowrap;text-align:left}p.second-row{padding:2px .5rem .5rem;color:#000;white-space:nowrap;text-align:left}::ng-deep .gt-total-row-tooltip{opacity:1!important}::ng-deep .gt-total-row-tooltip .tooltip-inner{color:#000;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;background-color:#fff;padding:4px!important;width:100%;border-radius:2px!important}::ng-deep .gt-total-row-tooltip .arrow:before{border-top-color:#fff!important}.info-label{margin-left:4px;color:#268bff;vertical-align:text-top}::ng-deep .hierarchy-tooltip{max-width:-moz-fit-content;max-width:fit-content;width:310px!important}::ng-deep .hierarchy-tooltip .tooltip-inner{padding:4px!important;max-width:22.75rem;max-height:11.25rem}table.seller-hierarchy-table{table-layout:fixed}table.seller-hierarchy-table tr th{font-family:Roboto;font-size:.75rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;color:#5e5e5e;white-space:nowrap;background:#ededed;position:sticky;box-shadow:inset 0 1px #d4d4d4;top:0;z-index:1}table.seller-hierarchy-table tr th:nth-child(1){width:20px}table.seller-hierarchy-table tr th:first-of-type,table.seller-hierarchy-table tr td:first-of-type{width:20px;border-left:1px solid #d4d4d4}table.seller-hierarchy-table tr th:last-of-type,table.seller-hierarchy-table tr td:last-of-type{border-right:1px solid #d4d4d4;width:7.875rem!important}table.seller-hierarchy-table tr th:nth-of-type(2){width:7.75rem!important}table.seller-hierarchy-table tr td{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#4a4a4a;box-shadow:none!important;border-top:1px solid #d4d4d4;border-bottom:1px solid #d4d4d4}table.seller-hierarchy-table tr td:nth-of-type(2),table.seller-hierarchy-table tr td:nth-of-type(3){padding-top:.25rem}table.seller-hierarchy-table tr td span{display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}section.hierarchy-table-container{max-height:8.75rem;overflow:auto}section.hierarchy-table-container::-webkit-scrollbar-track{margin-top:1.5rem}.difference-text{padding:.5rem;color:#000;text-align:left}::ng-deep .posted-avg-tooltip .tooltip-inner{width:13.8125rem!important}::ng-deep .drrBooked-info-tooltip{transform:translate(26px,6px)}::ng-deep .drrBooked-info-tooltip .tooltip-inner{max-width:307px!important;width:242px!important;background:#fff;word-break:break-word;display:flex;padding:4px!important;text-align:left}::ng-deep .drrBooked-info-tooltip .tooltip-inner p{color:#000}::ng-deep .drrBooked-info-tooltip .arrow:before{border-right-color:#fff!important}.clickable-data{cursor:pointer;color:#268bff!important;display:flex!important;align-items:center}.clickable-data .spot-details-download-icons{font-size:12px}.disabled-clickable-data{pointer-events:none;color:#d4d4d4!important}.spot-column-tooltip-message{color:#000;width:max-content;text-align:left}div.spinner-for-button-directive{position:relative;left:-1px}.clickable-row table tr.mat-row td{cursor:pointer!important}.tooltip-div-container{text-align:left!important;padding:12px 4px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.notification-tooltip-div-container{text-align:left!important;padding:6px 8px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.mdi-information,.mdi-information-outline{left:3px;top:1px}.mdi-information-outline{position:static}::ng-deep .team-user-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .team-user-tooltip .tooltip-inner{opacity:1!important;width:-moz-fit-content!important;width:fit-content!important;max-width:520px;border-radius:2px;padding:0 4px!important}::ng-deep .team-user-tooltip .tooltip-inner .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip{opacity:1!important}::ng-deep .gt-icon-column-tooltip .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .gt-icon-column-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip .tooltip-inner{width:100%}::ng-deep .tooltip-containing-table{opacity:1!important}::ng-deep .tooltip-containing-table .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .tooltip-containing-table.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .tooltip-containing-table li{margin:0!important;padding:0!important}::ng-deep .tooltip-containing-table ul{margin:0!important;padding-left:8px!important}::ng-deep .tooltip-containing-table .tooltip-inner{width:100%;max-width:230px}table.tooltip-table{table-layout:fixed;margin:4px 0 0;width:100%}table.tooltip-table th,table.tooltip-table td{padding:2px 8px;line-height:normal}table.tooltip-table thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4!important;border:none}table.tooltip-table thead tr th{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67;background-color:#ededed;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}table.tooltip-table thead tr th div.row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}table.tooltip-table tbody tr td{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67}table.tooltip-table tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}table.tooltip-table tbody tr td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}.bottom-border{border-bottom:1px solid #d4d4d4!important}i.disabled{pointer-events:none!important}\n"] }]
781
792
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.AnnaSortService }, { type: i2.AnnaDateTimeFormatService }, { type: i3.AnnaFilterService }]; }, propDecorators: { showSkeletonLoading: [{
782
793
  type: Input
783
794
  }], tableHeaders: [{
@@ -820,6 +831,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
820
831
  type: Input
821
832
  }], multipleTablesPresent: [{
822
833
  type: Input
834
+ }], showOrHideToggleForTotalRow: [{
835
+ type: Input
823
836
  }], toggleCheckbox: [{
824
837
  type: Output
825
838
  }], toggleRowCheckbox: [{
@@ -868,4 +881,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
868
881
  type: ViewChildren,
869
882
  args: ["tableHeader"]
870
883
  }] } });
871
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWdlbmVyaWMtdGFibGUtbGliL2NvbXBvbmVudHMvYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS9hbm5hLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtZ2VuZXJpYy10YWJsZS1saWIvY29tcG9uZW50cy9hbm5hLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlL2FubmEtbm9uLWVkaXRhYmxlLWdlbmVyaWMtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLE9BQU8sRUFDSCxTQUFTLEVBRVQsS0FBSyxFQUNMLFlBQVksRUFDWixTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksRUFHWixpQkFBaUIsRUFHakIsdUJBQXVCLEdBQzFCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLGdDQUFnQztBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFTckQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFNakgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDM0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JB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Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csMEJBQTBCO3NCQUFuQyxNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyw2QkFBNkI7c0JBQXRDLE1BQU07Z0JBbUNzQixxQkFBcUI7c0JBQWpELFlBQVk7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXIgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIE9uSW5pdCxcclxuICAgIElucHV0LFxyXG4gICAgVmlld0NoaWxkcmVuLFxyXG4gICAgUXVlcnlMaXN0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEFmdGVyVmlld0NoZWNrZWQsXHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gVGhpcmQgcGFydHkgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc0VxdWFsLCB1bmlxIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xyXG5cclxuLy9zdWItZW50cmllcyBvZiBhbm5hIGxpYiBpbXBvcnQgc3RhdGVtZW50XHJcbmltcG9ydCB7XHJcbiAgICBJR3RHZW5lcmFsQ29uZmlnLFxyXG4gICAgSUd0VGFibGVIZWFkZXIsXHJcbiAgICBJSGVhZGVySW5mbyxcclxuICAgIElUb3RhbFJvd0luZm8sXHJcbn0gZnJvbSBcIi4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLW5vbi1lZGl0YWJsZS1ndC1tb2RlbHNcIjtcclxuaW1wb3J0IHsgQW5uYURhdGVUaW1lRm9ybWF0U2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9zZXJ2aWNlcy9hbm5hLWRhdGUtdGltZS1mb3JtYXQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBJV2Vla0NhbGVuZGFyIH0gZnJvbSBcIi4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLWdsb2JhbC1kcm9wZG93bi1jb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICAgIEd0Q29sdW1uSWNvbkVtaXR0ZWREYXRhLFxyXG4gICAgUmF0aW5nU2VsbGVyR3JvdXBIaWVyYXJjaHksXHJcbn0gZnJvbSBcIi4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLWdlbmVyaWMtZGF0YS10eXBlLm1vZGVsXCI7XHJcbmltcG9ydCB7IHJhZGlvQnV0dG9uTW9kZWwgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvbW9kZWxzL2FubmEtdG9vbHRpcC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBBbm5hU29ydFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1zb3J0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQW5uYUZpbHRlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1maWx0ZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBOZ0NpcmNsZVByb2dyZXNzTW9kdWxlIH0gZnJvbSBcIm5nLWNpcmNsZS1wcm9ncmVzc1wiO1xyXG5pbXBvcnQgeyBBbm5hQ29sdW1uVGltZUZpbHRlckNvbXBvbmVudCB9IGZyb20gXCIuLi9hbm5hLWNvbHVtbi1maWx0ZXJzL2FubmEtY29sdW1uLXRpbWUtZmlsdGVyL2FubmEtY29sdW1uLXRpbWUtZmlsdGVyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBbm5hQ29sdW1uRGF0ZVJhbmdlRmlsdGVyQ29tcG9uZW50IH0gZnJvbSBcIi4uL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tZGF0ZS1yYW5nZS1maWx0ZXIvYW5uYS1jb2x1bW4tZGF0ZS1yYW5nZS1maWx0ZXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEFubmFDb2x1bW5TbGlkZXJGaWx0ZXJDb21wb25lbnQgfSBmcm9tIFwiLi4vYW5uYS1jb2x1bW4tZmlsdGVycy9hbm5hLWNvbHVtbi1zbGlkZXItZmlsdGVyL2FubmEtY29sdW1uLXNsaWRlci1maWx0ZXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEFubmFDb2x1bW5DaGVja2JveEZpbHRlckNvbXBvbmVudCB9IGZyb20gXCIuLi9hbm5hLWNvbHVtbi1maWx0ZXJzL2FubmEtY29sdW1uLWNoZWNrYm94LWZpbHRlci9hbm5hLWNvbHVtbi1jaGVja2JveC1maWx0ZXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEFubmFOb0RhdGFDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvY29tcG9uZW50cy9hbm5hLW5vLWRhdGEvYW5uYS1uby1kYXRhLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBNYXRSYWRpb01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9yYWRpb1wiO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBBbm5hSWNvbkNvbHVtbkNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9jb21wb25lbnRzL2FubmEtaWNvbi1jb2x1bW4vYW5uYS1pY29uLWNvbHVtbi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgc2hvd0VsbGlwc2lzVGV4dE9uSG92ZXJEaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvZGlyZWN0aXZlcy9zaG93LWVsbGlwc2lzLXRleHQvc2hvdy1lbGxpcHNpcy10ZXh0LmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBOZ3hTa2VsZXRvbkxvYWRlck1vZHVsZSB9IGZyb20gXCJuZ3gtc2tlbGV0b24tbG9hZGVyXCI7XHJcbmltcG9ydCB7IE5nYlRvb2x0aXAgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgTWF0VGFibGVNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGVcIjtcclxuaW1wb3J0IHtcclxuICAgIE5nQ2xhc3MsXHJcbiAgICBOZ1N0eWxlLFxyXG4gICAgTmdGb3IsXHJcbiAgICBOZ0lmLFxyXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcclxuICAgIE5nU3dpdGNoLFxyXG4gICAgTmdTd2l0Y2hDYXNlLFxyXG4gICAgTmdTd2l0Y2hEZWZhdWx0LFxyXG4gICAgQXN5bmNQaXBlLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuXHJcbmludGVyZmFjZSBrZXlWYWx1ZVRvb2x0aXBUeXBlIHtcclxuICAgIGtleTogc3RyaW5nO1xyXG4gICAgdmFsdWU6IHN0cmluZztcclxufVxyXG5pbnRlcmZhY2UgdGFibGVUb29sdGlwVHlwZSB7XHJcbiAgICB0b29sdGlwVGFibGVIZWFkZXI6IHN0cmluZ1tdO1xyXG4gICAgdG9vbHRpcFRhYmxlQm9keTogc3RyaW5nW11bXTtcclxuICAgIHRhYmxlSGVhZGVyTXNnOiBzdHJpbmdbXTtcclxuICAgIHRhYmxlRm9vdGVyTXNnOiBzdHJpbmdbXTtcclxuICAgIGlubmVySHRtbDogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImFubmEtY29yZS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS1saWJcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcIi4vYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgc3R5bGVVcmxzOiBbXCIuL2FubmEtbm9uLWVkaXRhYmxlLWdlbmVyaWMtdGFibGUuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgTmdDbGFzcyxcclxuICAgICAgICBOZ1N0eWxlLFxyXG4gICAgICAgIE1hdFRhYmxlTW9kdWxlLFxyXG4gICAgICAgIE5nRm9yLFxyXG4gICAgICAgIE5nSWYsXHJcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcclxuICAgICAgICBOZ2JUb29sdGlwLFxyXG4gICAgICAgIE5neFNrZWxldG9uTG9hZGVyTW9kdWxlLFxyXG4gICAgICAgIHNob3dFbGxpcHNpc1RleHRPbkhvdmVyRGlyZWN0aXZlLFxyXG4gICAgICAgIE5nU3dpdGNoLFxyXG4gICAgICAgIE5nU3dpdGNoQ2FzZSxcclxuICAgICAgICBBbm5hSWNvbkNvbHVtbkNvbXBvbmVudCxcclxuICAgICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgICBNYXRSYWRpb01vZHVsZSxcclxuICAgICAgICBOZ1N3aXRjaERlZmF1bHQsXHJcbiAgICAgICAgQW5uYU5vRGF0YUNvbXBvbmVudCxcclxuICAgICAgICBBbm5hQ29sdW1uQ2hlY2tib3hGaWx0ZXJDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYUNvbHVtblNsaWRlckZpbHRlckNvbXBvbmVudCxcclxuICAgICAgICBBbm5hQ29sdW1uRGF0ZVJhbmdlRmlsdGVyQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFDb2x1bW5UaW1lRmlsdGVyQ29tcG9uZW50LFxyXG4gICAgICAgIE5nQ2lyY2xlUHJvZ3Jlc3NNb2R1bGUsXHJcbiAgICAgICAgQXN5bmNQaXBlLFxyXG4gICAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFubmFOb25FZGl0YWJsZUdlbmVyaWNUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdDaGVja2VkIHtcclxuICAgIEBJbnB1dCgpIHNob3dTa2VsZXRvbkxvYWRpbmc6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSB0YWJsZUhlYWRlcnM6IElHdFRhYmxlSGVhZGVyW107XHJcbiAgICBASW5wdXQoKSB0YWJsZURhdGE6IGFueVtdO1xyXG4gICAgQElucHV0KCkgY2xvbmVkVGFibGVEYXRhOiBhbnlbXTtcclxuICAgIEBJbnB1dCgpIGd0R2VuZXJhbENvbmZpZzogSUd0R2VuZXJhbENvbmZpZztcclxuICAgIEBJbnB1dCgpIHRvdGFsUm93SW5mbz86IElUb3RhbFJvd0luZm9bXTtcclxuICAgIEBJbnB1dCgpIGd0RGltZW5zaW9uOiB7XHJcbiAgICAgICAgcm93SGVpZ2h0OiBudW1iZXI7XHJcbiAgICAgICAgaGVhZGVySGVpZ2h0OiBudW1iZXI7XHJcbiAgICAgICAgZGF0YU9uVG9wSGVpZ2h0OiBudW1iZXI7XHJcbiAgICAgICAgbWFyZ2luRnJvbUJvdHRvbTogbnVtYmVyO1xyXG4gICAgICAgIHRhYmxlSGVpZ2h0Pzogc3RyaW5nO1xyXG4gICAgfTtcclxuICAgIEBJbnB1dCgpIHRhYmxlQ2xhc3M6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIG1heGltdW1Sb3dzV2hpY2hDYW5CZVJlbmRlcmVkV2l0aG91dFNjcm9sbDogbnVtYmVyID0gNTtcclxuICAgIEBJbnB1dCgpIGZpeE51bWJlck9mUm93c0ZvclBvcHVwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBsaW1pdDogbnVtYmVyID0gMzA7XHJcbiAgICBASW5wdXQoKSBpbmNsdWRlQm9yZGVySW5UYWJsZUhlaWdodDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBkb3dubG9hZEluUHJvZ3Jlc3M6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBwZXJjZW50RG9uZTogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgc3RhcnJlZEluUHJvZ3Jlc3M6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBjbGlja2FibGVSb3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHNldFRhYmxlSGVpZ2h0V2hlblJvd1NpemVJc0ZpeGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIHRhYmxlQm9yZGVyQm90dG9tQ2xhc3NSZXF1aXJlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBoaWRlU29tZVRkczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgdGRzSGF2ZVJvd1NwYW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIG11bHRpcGxlVGFibGVzUHJlc2VudDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIEBPdXRwdXQoKSB0b2dnbGVDaGVja2JveCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSB0b2dnbGVSb3dDaGVja2JveCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSB0b2dnbGVIZWFkZXJDaGVja2JveCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSB1bmRvSWNvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgZmlsdGVyQXBwbGllZFRvVGFibGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgc29ydGluZ0FwcGxpZWRUb1RhYmxlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIHJvd0NsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgcmFkaW9CdXR0b25TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBjb2x1bW5GaWx0ZXJPcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgY29sdW1uRmlsdGVyQ2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIGd0SWNvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgZ3RTVkdJY29uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBndFRleHRBY3Rpb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIGd0Vmlld0RldGFpbENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgZ3RJbm5lckhUTUxDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIGRvd25sb2FkU3BvdERldGFpbHMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgY2xpY2thYmxlRGF0YUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgdG90YWxSb3dJY29uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBub3RpZmljYXRpb25JY29uSG92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgbm90aWZpY2F0aW9uSWNvbkhvdmVyTGVhdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgZWRpdGFibGVJbnB1dEVkaXRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSByYWRpb0J1dHRvbk1lc3NhZ2VJY29uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgICBudW1iZXJPZlNrZWxldG9uUm93czogbnVtYmVyW11bXSA9IEFycmF5KDIwKS5maWxsKDApO1xyXG4gICAgdGFibGVEYXRhV3JhcHBlcjogYW55W107XHJcbiAgICByb3dDaGVja2VkOiBib29sZWFuO1xyXG4gICAgaXNBbGxSb3dzQ2hlY2tlZDogYm9vbGVhbjtcclxuICAgIG5vRGF0YVdpZHRoOiBzdHJpbmcgPSBcIjUwJVwiO1xyXG4gICAgbWFya2VkRm9yQ3JlZGl0U3RhdHVzOiBzdHJpbmc7XHJcbiAgICBtYXJrZWRGb3JNR1N0YXR1czogc3RyaW5nO1xyXG4gICAgZmlsdGVyQWxpZ25tZW50OiBzdHJpbmcgPSBcImJvdHRvbSBhdXRvXCI7XHJcblxyXG4gICAgLy9Tb3J0IGFuZCBGaWx0ZXJcclxuICAgIHRvb2x0aXBSYWRpb1RleHRNYXA6IE1hcDxhbnksIGFueT47XHJcbiAgICBmaWx0ZXJUYWJPYmplY3RzOiBhbnlbXTtcclxuICAgIHRvb2x0aXA6IGFueTtcclxuICAgIGRpc2FibGVDb2x1bW5DbGVhckFsbEJ0bjogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBtYXJnaW4gPSA1O1xyXG5cclxuICAgIC8vV2VlayBGaWx0ZXJcclxuICAgIG11bHRpV2Vla1BpY2tlckNvbmZpZzogSVdlZWtDYWxlbmRhcjtcclxuXHJcbiAgICB0YWJsZUNvbHVtbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICB0b3RhbFJvd0NvbHVtbnM6IHN0cmluZ1tdID0gbnVsbDtcclxuICAgIGJpbmRWYWx1ZUZ1bmNDYWxsZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgaGllcmFyY2h5VG9vbHRpcDogeyBvcGVuOiAoKSA9PiB2b2lkOyBjbG9zZTogKCkgPT4gdm9pZCB9O1xyXG4gICAgc2VsbGVyR3JvdXBIaWVyYXJjaHk6IFJhdGluZ1NlbGxlckdyb3VwSGllcmFyY2h5W107XHJcbiAgICBzaG93RmlsdGVyVG9vbHRpcFRhYnM6IGJvb2xlYW47IC8vQ2hhbmdlIHRoZSBOYW1lXHJcblxyXG4gICAgaXNTY3JvbGxlZExlZnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHJvd0JvcmRlcldpZHRoOiBudW1iZXIgPSAyO1xyXG5cclxuICAgIHNhbWVUb29sdGlwQ2xpY2tlZDogYm9vbGVhbjtcclxuICAgIGlzU2Nyb2xsRW5kZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgbWFyZ2luVG9wOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgQFZpZXdDaGlsZHJlbihcInRhYmxlSGVhZGVyXCIpIHZpZXdDaGlsZFRhYmxlSGVhZGVyczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xyXG5cclxuICAgIGlzRGlmZmVyZW5jZUxlc3NUaGFuMjVQZXJjZW50OiBib29sZWFuO1xyXG4gICAgc3RhcnQ6IG51bWJlciA9IDA7XHJcbiAgICBlbmQ6IG51bWJlciA9IHRoaXMubGltaXQgKyB0aGlzLnN0YXJ0O1xyXG4gICAgcmVuZGVyZWREYXRhOiBhbnlbXTtcclxuICAgIHNlbGVjdGVkSW52ZW50b3J5SWRGb3JEb3dubG9hZDogbnVtYmVyO1xyXG4gICAgc2VsZWN0ZWREZW1vZ3JhcGhpY0ZvckRvd25sb2FkOiBhbnk7XHJcbiAgICBzZWxlY3RlZFJvd1R5cGVGb3JEb3dubG9hZDogc3RyaW5nO1xyXG4gICAgaGVpZ2h0T2ZDaGVja2JveFRvb2x0aXBGaWx0ZXI6IG51bWJlcjtcclxuICAgIGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHNlbGVjdGVkU3RhcnJlZE9yZGVySWQ6IHN0cmluZztcclxuXHJcbiAgICB0ZXh0QWN0aW9uVG9vbHRpcDoga2V5VmFsdWVUb29sdGlwVHlwZVtdID0gW107XHJcbiAgICB0b29sdGlwQ29udGFpbmluZ1RhYmxlOiB0YWJsZVRvb2x0aXBUeXBlID0gbnVsbDtcclxuICAgIHRhYmxlQm90dG9tQm9yZGVyQ2xhc3M6IHN0cmluZyA9IG51bGw7XHJcbiAgICBzaG93Q2hlY2tib3hlc0ZvclRpbWVGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIGFubmFTb3J0U2VydmljZTogQW5uYVNvcnRTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBhbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlOiBBbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBhbm5hRmlsdGVyU2VydmljZTogQW5uYUZpbHRlclNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnNldFRvb2x0aXBSYWRpb05hbWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0TWFyZ2luTGVmdEZvckZpbHRlckljb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnNldEZpbHRlckFsaWdubWVudEJhc2VkT25TY3JlZW5SZXNvbHV0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGV0ZWN0Q2hhbmdlcygpIHtcclxuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBjaGFuZ2VzICYmXHJcbiAgICAgICAgICAgIGNoYW5nZXNbXCJndERpbWVuc2lvblwiXSAmJlxyXG4gICAgICAgICAgICBjaGFuZ2VzW1wiZ3REaW1lbnNpb25cIl0uY3VycmVudFZhbHVlICYmXHJcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVIZWlnaHRXaGVuUm93U2l6ZUlzRml4ZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRUYWJsZUhlaWdodCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlQm90dG9tQm9yZGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNob3dTa2VsZXRvbkxvYWRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy50YWJsZURhdGEgPSB0aGlzLm51bWJlck9mU2tlbGV0b25Sb3dzO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVkRGF0YSA9IHRoaXMubnVtYmVyT2ZTa2VsZXRvblJvd3M7XHJcbiAgICAgICAgICAgIHRoaXMuaXNOb0RhdGFUb0Rpc3BsYXlTdWJqZWN0JC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRUYWJsZUJvdHRvbUJvcmRlcigpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIGNoYW5nZXNbXCJwZXJjZW50RG9uZVwiXSB8fFxyXG4gICAgICAgICAgICBjaGFuZ2VzW1wiZG93bmxvYWRJblByb2dyZXNzXCJdIHx8XHJcbiAgICAgICAgICAgIChjaGFuZ2VzW1wic3RhcnJlZEluUHJvZ3Jlc3NcIl0gJiYgY2hhbmdlc1tcInN0YXJyZWRJblByb2dyZXNzXCJdLmN1cnJlbnRWYWx1ZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vbm8gdGFzayB3aWxsIGJlIHBlcmZvcm1lZFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbFJvd3NGb3JUYWJsZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVFbmFibGVFYWNoQ29sdW1uVG9vbHRpcEljb24oKTtcclxuICAgICAgICAgICAgdGhpcy50YWJsZUNvbHVtbnMgPSB0aGlzLnRhYmxlSGVhZGVycy5maWx0ZXIoKHgpID0+IHgudmlzaWJsZSkubWFwKCh4KSA9PiB4LmhlYWRlckluZm9bMF0ub2JqZWN0S2V5KTtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgKHRoaXMudGFibGVEYXRhICYmIHRoaXMudGFibGVEYXRhLmxlbmd0aCA9PSAwKSB8fFxyXG4gICAgICAgICAgICAgICAgKHRoaXMudGFibGVEYXRhLmxlbmd0aCA9PSAyICYmIHRoaXMuY2hlY2tJZkFsbFRoZUVsZW1lbnRzQXJlWmVybygpKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gQXJyYXkoMikuZmlsbCgwKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZWREYXRhID0gY2xvbmVEZWVwKHRoaXMudGFibGVEYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWFyZ2luVG9wID0gLXRoaXMuZ3REaW1lbnNpb24ucm93SGVpZ2h0IC0gdGhpcy5ndERpbWVuc2lvbi5yb3dIZWlnaHQgLyAyICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc05vRGF0YVRvRGlzcGxheVN1YmplY3QkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1NrZWxldG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlQm90dG9tQm9yZGVyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL3NldHRpbmcgdGFibGUgY29sdW1uIGhlcmUgYXMgd2VsbCBiZWNhdXNlIHdoaWxlIHNob3dpbmcgc2tlbGV0b24gbG9hZGVyLCB3ZSBzaG91bGQgc2hvdyB0YWJsZSBoZWFkZXJzLlxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgY2hhbmdlc1tcInRhYmxlSGVhZGVyc1wiXSAmJlxyXG4gICAgICAgICAgICAhaXNFcXVhbChjaGFuZ2VzW1widGFibGVIZWFkZXJzXCJdLmN1cnJlbnRWYWx1ZSwgY2hhbmdlc1tcInRhYmxlSGVhZGVyc1wiXS5wcmV2aW91c1ZhbHVlKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLnRhYmxlQ29sdW1ucyA9IHRoaXMudGFibGVIZWFkZXJzLmZpbHRlcigoeCkgPT4geC52aXNpYmxlKS5tYXAoKHgpID0+IHguaGVhZGVySW5mb1swXS5vYmplY3RLZXkpO1xyXG4gICAgICAgICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgICAgICAgICAvLyB0aGlzLnNldENvbHVtblNvcnRTdGF0ZU1hcCgpO1xyXG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVN0YXRlT2JqZWN0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2hhbmdlc1tcInRvdGFsUm93SW5mb1wiXSAmJiBjaGFuZ2VzW1widG90YWxSb3dJbmZvXCJdLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvdGFsUm93Q29sdW1ucyA9IHRoaXMudG90YWxSb3dJbmZvLm1hcCgoeCkgPT4geC5jb2xOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RmlsdGVyQWxpZ25tZW50QmFzZWRPblNjcmVlblJlc29sdXRpb24oKSB7XHJcbiAgICAgICAgbGV0IHZpZXdwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xyXG4gICAgICAgIGlmICh2aWV3cG9ydEhlaWdodCA8IDc0MCkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckFsaWdubWVudCA9IFwibGVmdCByaWdodFwiO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyQWxpZ25tZW50ID0gXCJib3R0b20gbGVmdCByaWdodFwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRUYWJsZUJvdHRvbUJvcmRlcigpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMudGFibGVCb3JkZXJCb3R0b21DbGFzc1JlcXVpcmVkICYmXHJcbiAgICAgICAgICAgIHRoaXMudGFibGVEYXRhICYmXHJcbiAgICAgICAgICAgIHRoaXMudGFibGVEYXRhLmxlbmd0aCAmJlxyXG4gICAgICAgICAgICB0aGlzLm1heGltdW1Sb3dzV2hpY2hDYW5CZVJlbmRlcmVkV2l0aG91dFNjcm9sbCA8IHRoaXMudGFibGVEYXRhLmxlbmd0aFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLnRhYmxlQm90dG9tQm9yZGVyQ2xhc3MgPSBcImJvdHRvbS1ib3JkZXJcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRhYmxlQm90dG9tQm9yZGVyQ2xhc3MgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjaGVja0lmQWxsVGhlRWxlbWVudHNBcmVaZXJvKCkge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy50YWJsZURhdGEuc29tZSgoaXRlbSkgPT4gaXRlbSAhPSAwKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUYWJsZUhlaWdodCgpIHtcclxuICAgICAgICBsZXQgdmlld3BvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcbiAgICAgICAgbGV0IHJvd0hlaWdodCA9IHRoaXMuZ3REaW1lbnNpb24ucm93SGVpZ2h0O1xyXG4gICAgICAgIGxldCBoZWFkZXJIZWlnaHQgPSB0aGlzLmd0RGltZW5zaW9uLmhlYWRlckhlaWdodDtcclxuICAgICAgICBsZXQgZGF0YU9uVG9wSGVpZ2h0ID0gdGhpcy5ndERpbWVuc2lvbi5kYXRhT25Ub3BIZWlnaHQ7XHJcbiAgICAgICAgbGV0IG1hcmdpbkZyb21Cb3R0b20gPSB0aGlzLmd0RGltZW5zaW9uLm1hcmdpbkZyb21Cb3R0b207XHJcbiAgICAgICAgbGV0IGFjdHVhbFRhYmxlSGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5maXhOdW1iZXJPZlJvd3NGb3JQb3B1cCkge1xyXG4gICAgICAgICAgICBsZXQgbWF4Tm9PZlJvd3NUb0Rpc3BsYXkgPSB2aWV3cG9ydEhlaWdodCA8IDc0MCA/IDUgOiAxMDtcclxuICAgICAgICAgICAgdGhpcy5tYXhpbXVtUm93c1doaWNoQ2FuQmVSZW5kZXJlZFdpdGhvdXRTY3JvbGwgPSBtYXhOb09mUm93c1RvRGlzcGxheTtcclxuICAgICAgICAgICAgYWN0dWFsVGFibGVIZWlnaHQgPSB0aGlzLm1heGltdW1Sb3dzV2hpY2hDYW5CZVJlbmRlcmVkV2l0aG91dFNjcm9sbCAqIHJvd0hlaWdodCArIGhlYWRlckhlaWdodDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgbWluSGVpZ2h0Rm9yVGFibGUgPSBoZWFkZXJIZWlnaHQgKyAzICogcm93SGVpZ2h0O1xyXG4gICAgICAgICAgICB2aWV3cG9ydEhlaWdodCA9IHZpZXdwb3J0SGVpZ2h0IDw9IGRhdGFPblRvcEhlaWdodCA/IGRhdGFPblRvcEhlaWdodCArIG1pbkhlaWdodEZvclRhYmxlIDogdmlld3BvcnRIZWlnaHQ7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHRMZWZ0Rm9yVGFibGUgPSB2aWV3cG9ydEhlaWdodCAtIGRhdGFPblRvcEhlaWdodCAtIG1hcmdpbkZyb21Cb3R0b207XHJcbiAgICAgICAgICAgIHRoaXMubWF4aW11bVJvd3NXaGljaENhbkJlUmVuZGVyZWRXaXRob3V0U2Nyb2xsID1cclxuICAgICAgICAgICAgICAgIE1hdGguY2VpbCgoaGVpZ2h0TGVmdEZvclRhYmxlIC0gaGVhZGVySGVpZ2h0IC0gcm93SGVpZ2h0KSAvIHJvd0hlaWdodCkgKyAxO1xyXG4gICAgICAgICAgICBhY3R1YWxUYWJsZUhlaWdodCA9IHZpZXdwb3J0SGVpZ2h0IC0gZGF0YU9uVG9wSGVpZ2h0IC0gbWFyZ2luRnJvbUJvdHRvbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGxldCBhY3R1YWxUYWJsZUhlaWdodCA9IGhlaWdodExlZnRGb3JUYWJsZSAtICgoaGVpZ2h0TGVmdEZvclRhYmxlIC0gaGVhZGVySGVpZ2h0IC0gcm93SGVpZ2h0KSAlIHJvd0hlaWdodCk7XHJcblxyXG4gICAgICAgIHRoaXMuZ3REaW1lbnNpb24udGFibGVIZWlnaHQgPSBgJHthY3R1YWxUYWJsZUhlaWdodH1weGA7XHJcblxyXG4gICAgICAgIHRoaXMubnVtYmVyT2ZTa2VsZXRvblJvd3MgPSB0aGlzLm1heGltdW1Sb3dzV2hpY2hDYW5CZVJlbmRlcmVkV2l0aG91dFNjcm9sbFxyXG4gICAgICAgICAgICA/IEFycmF5KHRoaXMubWF4aW11bVJvd3NXaGljaENhbkJlUmVuZGVyZWRXaXRob3V0U2Nyb2xsKS5maWxsKDApXHJcbiAgICAgICAgICAgIDogQXJyYXkoNSkuZmlsbCgwKTtcclxuICAgIH1cclxuXHJcbiAgICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiBpbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUb29sdGlwUmFkaW9OYW1lcygpIHtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlN0YXJ0VGltZUZvckZpbHRlclwiLCBcIlN0YXJ0IFRpbWVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkVuZFRpbWVGb3JGaWx0ZXJcIiwgXCJFbmQgVGltZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwic3RhcnRUaW1lRm9yRmlsdGVyXCIsIFwiU3RhcnQgVGltZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZW5kVGltZUZvckZpbHRlclwiLCBcIkVuZCBUaW1lXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzdGFydF90aW1lX2Zvcl9maWx0ZXJcIiwgXCJTdGFydCBUaW1lXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJlbmRfdGltZV9mb3JfZmlsdGVyXCIsIFwiRW5kIFRpbWVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInByaW1hcnlBRU5hbWVcIiwgXCJQcmltYXJ5IEFFXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyZWdpb25cIiwgXCJSZWdpb25cIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImFnZW5jeU5hbWVcIiwgXCJBZ2VuY3lcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImxvY2F0aW9uXCIsIFwiTG9jYXRpb25cIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImFkdmVydGlzZXJOYW1lXCIsIFwiQWR2ZXJ0aXNlclwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicHJvZHVjdENvZGVcIiwgXCJQcm9kdWN0IENvZGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImZsaWdodFN0YXJ0RGF0ZVwiLCBcIlN0YXJ0IERhdGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImZsaWdodEVuZERhdGVcIiwgXCJFbmQgRGF0ZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib3JkZXJJZEFuZFJldk51bWJlclwiLCBcIlNUTiBPcmRlciMtUmV2I1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwic3RhdGlvbk9yZGVyTnVtYmVyXCIsIFwiU1ROIE9yZGVyI1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYWx0ZXJuYXRlT3JkZXJJZFwiLCBcIkFsdC9SZXAgT3JkZXIgI1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZ3JwXCIsIFwiR1JQXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJjcHBcIiwgXCJDUFBcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImltcHNcIiwgXCJJTVBTXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJjcG1cIiwgXCJDUE1cIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9mZmVyZWRNR3NcIiwgXCJPZmZlcmVkIE1HXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvdXRzdGFuZGluZ1BFXCIsIFwiTy9TIFBFXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvZmZlcmVkQURVc1wiLCBcIk9mZmVyZWQgQURVc1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwidWREZWZpY2l0VmFsdWVcIiwgXCJPL1MgQXVkIERlbHRhXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzdGFydEVuZFRpbWVNdWx0aVwiLCBcIlRpbWVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZFZhbHVlXCIsIFwiQm9va2VkXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRTcG90c1wiLCBcIlNwb3RzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJVc2VyQ3JlZGl0ZWRWYWx1ZVwiLCBcIlVzZXIgQ3JlZGl0ZWRcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlVzZXJVbnJlc29sdmVkVmFsdWVcIiwgXCJVc2VyIFVucmVzb2x2ZWRcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJ1eWVyQWRkZWRWYWx1ZVwiLCBcIkJ1eWVyIEFkZGVkXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCdXllckRlbGV0ZWRWYWx1ZVwiLCBcIkJ1eWVyIERlbGV0ZWRcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInVzZXJDaGFuZ2VzXCIsIFwiVXNlciBDaGFuZ2VzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJidXllckNoYW5nZXNcIiwgXCJCdXllciBDaGFuZ2VzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ1c2VyTUdcIiwgXCJVc2VyIE1HXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ1c2VyQURVc1wiLCBcIlVzZXIgQURVc1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiaW52ZW50b3J5Q29kZVwiLCBcIkludmVudG9yeSBDb2RlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcm9ncmFtXCIsIFwiUHJvZ3JhbVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYWdlbmN5XCIsIFwiQWdlbmN5XCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhZHZlcnRpc2VyXCIsIFwiQWR2ZXJ0aXNlclwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwic3RhcnREYXRlXCIsIFwiU3RhcnQgRGF0ZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZW5kRGF0ZVwiLCBcIkVuZCBEYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJkYXRlXCIsIFwiRGF0ZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicmN2UHJlZW1wdFwiLCBcIiQgTWFkZWdvb2QgUEVzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvc1ByZWVtcHRcIiwgXCIkIE8vUyBQRXNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJjdlVuZGVyRGx5XCIsIFwiUmVjb3ZlcmVkIFVEXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvc1VuZGVyRGx5XCIsIFwiTy9zIFVuZGVyIERseVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicHJpbWFyeUFlXCIsIFwiUHJpbWFyeSBBRVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicmVnaW9uXCIsIFwiUmVnaW9uXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyZXZDb2RlMVwiLCBcIlJldiBjb2RlIDFcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9yZGVyTm9SZXZOb1wiLCBcIlNUTiBPcmRlciMtUmV2I1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicmV2Q29kZTJcIiwgXCJSZXYgY29kZSAyXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyZXZDb2RlM1wiLCBcIlJldiBjb2RlIDNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZFwiLCBcIiQgQm9va2VkXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzcG90c1wiLCBcIlNwb3RzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3N0ZWRBdWRQZXJjZW50XCIsIFwiUG9zdGVkICVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJldmlzaW9uXCIsIFwiUmV2aXNpb25cIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJ1eWVyT3JkZXJJZFwiLCBcIkFMVC9SRVAgT3JkZXIjXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJkZW1vXCIsIFwiRGVtb1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImF2ZXJhZ2VSYXRlVGhpc1llYXJcIiwgXCJBdmcuIFJhdGUgKFRZKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXZlcmFnZVJhdGVMYXN0WWVhclwiLCBcIkF2Zy4gUmF0IChMWSlcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImF2ZXJhZ2VDUFBcIiwgXCJBdmcuIENQUFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXZlcmFnZUNQTVwiLCBcIkF2Zy4gQ1BNXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJJTVBTRGlmZlwiLCBcIklNUFMgKCcwMDApIERpZmYuXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJSVEdEaWZmXCIsIFwiUlRHIERpZmYuXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicG9zdGVkQWR1XCIsIFwiJCBQb3N0ZWQgQURVc1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwic2NoZWR1bGVkQWR1XCIsIFwiJCBTY2hlZHVsZWQgQURVc1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXVkaWVuY2VEZWZpY2l0XCIsIFwiJCBPL1MgQXVkaWVuY2VcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInBvc3RlZEF1ZFBlcmNlbnRcIiwgXCJQb3N0ZWQgQXVkaWVuY2UgJVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicG90ZW50aWFsVW5pdHNWYWx1ZVwiLCBcIlBPVCBVbml0c1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkVW5pdHNWYWx1ZVwiLCBcIkJvb2tlZCBFcSBVbml0c1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkQW1vdW50V2l0aFplcm9SYXRpbmdWYWx1ZVwiLCBcIlRvdGFsICQgQm9va2VkXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRBbW91bnRQZXJjZW50YWdlV2l0aFplcm9SYXRpbmdWYWx1ZVwiLCBcIiUgQWdhaW5zdCBBbGwgRGVtb3NcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEFtb3VudFdpdGhvdXRaZXJvUmF0aW5nVmFsdWVcIiwgXCIkQm9va2VkIFdpdGggSW1wcyjigJkwMDApXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRBbW91bnRQZXJjZW50YWdlV2l0aG91dFplcm9SYXRpbmdWYWx1ZVwiLCBcIiUgQWdhaW5zdCBBbGwgRGVtb3NcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ0b3RhbEJvb2tlZEFtb3VudFZhbHVlXCIsIFwiVG90YWwgJEJvb2tlZFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXZlcmFnZVVuaXRSYXRlVmFsdWVcIiwgXCIgQVVSXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ0b3RhbEJvb2tlZEFtb3VudFdpdGhSYXRpbmdWYWx1ZVwiLCBcIiRCb29rZWQgV2l0aCBSYXRpbmdcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImF2ZXJhZ2VVbml0UmF0ZVdpdGhSYXRpbmdWYWx1ZVwiLCBcIkFVUiBXaXRoIFJhdGluZ1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInRvdGFsQm9va2VkQW1vdW50V2l0aEltcHJlc3Npb25WYWx1ZVwiLCBcIiRCb29rZWQgV2l0aCBJTVBTXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhdmVyYWdlVW5pdFJhdGVXaXRoSW1wcmVzc2lvblZhbHVlXCIsIFwiQVVSIFdpdGggSU1QU1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZFVuaXRzV2l0aFJhdGluZ1ZhbHVlXCIsIFwiQm9va2VkIFVuaXRzIFdpdGggUmF0aW5nXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3N0ZWRVbml0c1dpdGhSYXRpbmdWYWx1ZVwiLCBcIlBvc3RlZCBVbml0cyBXaXRoIFJhdGluZ1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZFVuaXRzV2l0aEltcHJlc3Npb25WYWx1ZVwiLCBcIkJvb2tlZCBVbml0cyBXaXRoIElNUFNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInBvc3RlZFVuaXRzV2l0aEltcHJlc3Npb25WYWx1ZVwiLCBcIlBvc3RlZCBVbml0cyBXaXRoIElNUFNcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRSYXRpbmdzXCIsIFwiQm9va2VkIFJhdGluZ1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicG9zdGVkUmF0aW5nc1wiLCBcIlBPU1RFRCBSYXRpbmdcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlBvc3RlZFJhdGluZ1wiLCBcIlBvc3RlZCBSVEdcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRJbXByZXNzaW9uc1wiLCBcIkJvb2tlZCBJTVAoJzAwMClcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInBvc3RlZEltcHJlc3Npb25zXCIsIFwiUG9zdGVkIElNUCgnMDAwKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiUG9zdGVkSW1wcmVzc2lvbnNcIiwgXCJQb3N0ZWQgSU1QKCcwMDApXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkQXZlcmFnZVJhdGluZ1wiLCBcIkJvb2tlZCBBVSBSYXRpbmdcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInBvc3RlZEF2ZXJhZ2VSYXRpbmdcIiwgXCJQb3N0ZWQgQVUgUmF0aW5nXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkQXZlcmFnZUltcHJlc3Npb25cIiwgXCJCb29rZWQgQVUgSU1QU1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicG9zdGVkQXZlcmFnZUltcHJlc3Npb25cIiwgXCJQb3N0ZWQgQVUgSU1QU1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZENwcFZhbHVlXCIsIFwiQm9va2VkIENQUFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkRWZmZWN0aXZlQ3BwVmFsdWVcIiwgXCJFZmZlY3RpdmUgQ1BQXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkQ3BtVmFsdWVcIiwgXCJCb29rZWQgQ1BNXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRFZmZlY3RpdmVDcG1WYWx1ZVwiLCBcIkVmZmVjdGl2ZSBDUE1cIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvcmRlclNvdXJjZVwiLCBcIk9yZGVyIFJvdXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvcmRlckNhdGVnb3J5XCIsIFwiUmV2IENhdGVnb3J5XCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJjYXNoT3JUcmFkZVwiLCBcIkMvVFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicmV2aXNpb25TdGFydERhdGVcIiwgXCJSZXZpc2lvbiBTdGFydCBEYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJuYW1lXCIsIFwibmFtZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicm9sZVwiLCBcInJvbGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInN0YXRpb25Db3VudFwiLCBcInN0YXRpb25Db3VudFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwic3RhdGlvbkxpc3RcIiwgXCJzdGF0aW9uTGlzdFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXBwcm92ZWRPblwiLCBcIkFwcHJvdmVkIE9uXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhcHByb3ZlZEJ5XCIsIFwiQXBwcm92ZWQgQnlcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk9ESW1wc1wiLCBcIlByb2ouIE9EIElNUFNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlVESW1wc1wiLCBcIlByb2ouIFVEIElNUFNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk9ER3JwXCIsIFwiUHJvai4gT0QgR1JQXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJVREdycFwiLCBcIlByb2ouIFVEIEdSUFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwidWRJbXBzUGVyY2VudFwiLCBcIlByb2ouIFVEICVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInVkR3JwUGVyY2VudFwiLCBcIlByb2ouIFVEIEdSUCAlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvZEltcHNQZXJjZW50XCIsIFwiUHJvai4gT0QgJVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib2RHcnBQZXJjZW50XCIsIFwiUHJvai4gT0QgR1JQICVcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJSZXZpc2lvbk51bWJlclwiLCBcIlJldmlzaW9uICNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlJldmlzaW9uVHlwZVwiLCBcIlJldmlzaW9uIFR5cGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkdlbmVyYXRlZE9uXCIsIFwiR2VuZXJhdGVkIE9uXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRWYWx1ZUZvckRpc3BsYXlcIiwgXCIkIEJPT0tFRFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQm9va2VkVmFsdWVcIiwgXCIkIEJvb2tlZFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQm9va2VkU3BvdHNcIiwgXCJTcG90c1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQm9va2VkR1JQXCIsIFwiR1JQXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRJTVBTUmV2VGFiXCIsIFwiSU1QUycoMDAwKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQm9va2VkQ1BQXCIsIFwiQ1BQXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRDUE1cIiwgXCJDUE1cIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk1Hc1ZhbHVlRm9yRGlzcGxheVwiLCBcIiQgTUdTXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJNR3NWYWx1ZVwiLCBcIiQgTUdTXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJBRFVzVmFsdWVGb3JEaXNwbGF5XCIsIFwiJCBBRFVTXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJBRFVzVmFsdWVcIiwgXCIkIEFEVVNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJ1eWVyQ2hhbmdlc1ZhbHVlRm9yRGlzcGxheVwiLCBcIiQgQnV5ZXIgQ2hhbmdlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCdXllckNoYW5nZXNWYWx1ZVwiLCBcIiQgQnV5ZXIgQ2hhbmdlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJVc2VyQ2hhbmdlc1ZhbHVlRm9yRGlzcGxheVwiLCBcIiQgU2VsbGVyIFVzZXIgQ2hhbmdlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJVc2VyQ2hhbmdlc1ZhbHVlXCIsIFwiJCBTZWxsZXIgVXNlciBDaGFuZ2VcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlNlbGxlckxpbmVcIiwgXCJTZWxsZXIgTGluZSAjXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCdXllckxpbmVcIiwgXCJCdXkgTGluZSAjXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJTcG90U3RhdHVzXCIsIFwiU3BvdCBTdGF0dXNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkludmVudG9yeUNvZGVcIiwgXCJJbnZlbnRvcnkgQ29kZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQnV5ZXJQcm9ncmFtTmFtZVwiLCBcIkJ1eWVyIFByb2dyYW0gTmFtZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiUmV2ZW51ZUNsYXNzXCIsIFwiUmV2ZW51ZSBDbGFzc1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiV2Vla2x5QVVSXCIsIFwiQm9va2VkIEF2Zy4gUmF0ZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQm9va2VkUmF0ZVwiLCBcIkJvb2tlZCBSYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhdmVyYWdlUmF0ZVwiLCBcIkF2ZXJhZ2UgUmF0ZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkQXZlcmFnZVJhdGVcIiwgXCJCb29rZWQgQVZHLiBSYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJkb2xsYXJJTVBTSW1wYWN0XCIsIFwiJCBJTVBTIEltcGFjdFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZG9sbGFyUlRHSW1wYWN0XCIsIFwiJCBSVEcgSU1QQUNUXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJJTVBTSW1wYWN0XCIsIFwiSU1QUyAoJzAwMCkgSU1QQUNUXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJSVEdJbXBhY3RcIiwgXCJSVEcgSW1wYWN0XCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiaW52ZW50b3J5RmlsbFBlcmNlbnRhZ2VTYW1lV2Vla1wiLCBcIkludiBGaWxsIFNhbWUgV2VlayAoTFkpXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJpbnZlbnRvcnlGaWxsUGVyY2VudGFnZUZpbmFsXCIsIFwiSW52IEZpbGwgRmluYWwgKExZKVwiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInByb2plY3RlZFJUR1wiLCBcIlByb2plY3RlZCBSVEdcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInByb2plY3RlZElNUFNcIiwgXCJQcm9qZWN0ZWQgSU1QUygnMDAwKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZGVzaXJlZENQTVwiLCBcIkRlc2lyZWQgQ1BNXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJkZXNpcmVkQ1BQXCIsIFwiRGVzaXJlZCBDUFBcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9yaWdpblwiLCBcIk9yaWdpblwiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJvb2tlZFJUR1wiLCBcIkJvb2tlZCBSVEdcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJvb2tlZElNUFNcIiwgXCJCb29rZWQgSU1QUygnMDAwKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiSU1QU1wiLCBcIklNUCgnMDAwKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQVVSVEdcIiwgXCJBdmcgUlRHXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJBVUlNUFNcIiwgXCJBdmcgSU1QKCcwMDApXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJQb3N0ZWRSYXRpbmdzT3JJbXByZXNzaW9uc1wiLCBcIlBvc3RlZCBSVEdcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlNjaGVkdWxlRmxpZ2h0V2Vla1wiLCBcIlNjaGVkdWxlIFdlZWtcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlNjaGVkdWxlZERheVwiLCBcIlNjaGVkdWxlZCBEYXlcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkFpclN0YXR1c1wiLCBcIkFpciBTdGF0dXNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkFpckRhdGVBbmRUaW1lXCIsIFwiQWlyIERhdGUgJiBUaW1lXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJBaXJEYXRlXCIsIFwiQWlyIERhdGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk5vcm1hbGl6ZWRPcmRlcmVkUmF0aW5nXCIsIFwiTm9ybWFsaXplZCBCb29rZWQgUlRHXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJOb3JtYWxpemVkT3JkZXJlZEltcHJlc3Npb25zXCIsIFwiTm9ybWFsaXplZCBCb29rZWQgSU1QKCcwMDApXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJOb3JtYWxpemVkUG9zdGVkUmF0aW5nXCIsIFwiTm9ybWFsaXplZCBQb3N0ZWQgUlRHXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJOb3JtYWxpemVkUG9zdGVkSW1wcmVzc2lvbnNcIiwgXCJOb3JtYWxpemVkIFBvc3RlZCBJTVAoJzAwMClcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkFkSWRcIiwgXCJBZC1JZFwiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImRpc3BsYXlpbXBzXCIsIFwiSU1QU1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZGlzcGxheUdycFwiLCBcIkdSUFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkU3BvdHNGb3JEaXNwbGF5XCIsIFwiU3BvdHNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImRpc3BsYXlTcG90c1wiLCBcIlNwb3RzXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZXN0aW1hdGVOb1wiLCBcIkVzdGltYXRlI1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicHJpbWFyeUJ1eWVyXCIsIFwiUHJpbWFyeSBCdXllclwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicHJpbWFyeUJ1eWVyTmFtZVwiLCBcIlByaW1hcnkgQnV5ZXJcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInNlY29uZGFyeUJ1eWVyTmFtZVwiLCBcIlNlY29uZGFyeSBCdXllclwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwic2Vjb25kYXJ5QnV5ZXJcIiwgXCJTZWNvbmRhcnkgQnV5ZXJcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInRpbWVvdXREYXRlXCIsIFwiVGltZW91dCBEYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJEaXNwbGF5dFNwb3RTdGF0dXNCSVwiLCBcIlNwb3QgU3RhdHVzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJMaW5lU3BvdFwiLCBcIkxpbmUuU3BvdFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiTHVyV2luZG93TmFtZVwiLCBcIlBvbGl0aWNhbCBXaW5kb3dcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJsZW5ndGhcIiwgXCJMZW5ndGhcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJldkNsYXNzXCIsIFwiUmV2IENsYXNzXCIpO1xyXG5cclxuICAgICAgICAvLyB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwidWRWYWx1ZVwiLCBcIiQgVURcIik7XHJcbiAgICAgICAgLy8gdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9kVmFsdWVcIiwgXCIkIE9EXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ1ZFZhbHVlXCIsIFwiUHJvai4gJCBVRFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib2RWYWx1ZVwiLCBcIlByb2ouICQgT0RcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVJbnZlbnRvcnlDb2RlXCIsIFwiSW52ZW50b3J5IENvZGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk90aGVyQXZhaWxhYmxlU3BvdHNUYWJsZUJ1eWVyUHJvZ3JhbU5hbWVcIiwgXCJCdXllciBQcm9ncmFtIE5hbWVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk90aGVyQXZhaWxhYmxlU3BvdHNUYWJsZVN0YXJ0VGltZVwiLCBcIlN0YXJ0IFRpbWVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk90aGVyQXZhaWxhYmxlU3BvdHNUYWJsZUVuZFRpbWVcIiwgXCJFbmQgVGltZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlV2Vla2x5QVVSXCIsIFwiQm9va2VkIEF2Zy4gUmF0ZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlRGlzcGxheVJldmVudWVDbGFzc1wiLCBcIlJldiBDbGFzc1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlQWN0dWFsV2Vla1N0YXJ0RGF0ZVwiLCBcIldlZWtcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk90aGVyQXZhaWxhYmxlU3BvdHNUYWJsZVdlZWtEYXlcIiwgXCJEYXlcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk90aGVyQXZhaWxhYmxlU3BvdHNUYWJsZURpc3BsYXlMZW5ndGhcIiwgXCJMZW5ndGhcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJQcm9qZWN0ZWRJbXByZXNzaW9uc1wiLCBcIlByb2plY3RlZCBJTVAoJzAwMClcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlByb2plY3RlZFJ0Z1wiLCBcIlByb2plY3RlZCBSVEdcIik7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0T3JVbnNlbGVjdENoZWNrYm94KHJvd0RhdGE6IGFueSwgY29sdW1uS2V5czogYW55LCBpc0NoZWNrYm94U2VsZWN0ZWQ6IGFueSkge1xyXG4gICAgICAgIHJvd0RhdGFbY29sdW1uS2V5c10gPSAhcm93RGF0YVtjb2x1bW5LZXlzXTtcclxuICAgICAgICB0aGlzLnRvZ2dsZUNoZWNrYm94LmVtaXQoeyByb3dEYXRhLCBjb2x1bW5LZXlzLCBpc0NoZWNrYm94U2VsZWN0ZWQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0T3JVbnNlbGVjdFJhZGlvYm94KHJvd0RhdGE6IGFueSwgY29sdW1uS2V5czogYW55LCBpc0NoZWNrYm94U2VsZWN0ZWQ6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAocm93RGF0YVtjb2x1bW5LZXlzXSA9PSBpc0NoZWNrYm94U2VsZWN0ZWQpIHJldHVybjtcclxuICAgICAgICByb3dEYXRhW2NvbHVtbktleXNdID0gaXNDaGVja2JveFNlbGVjdGVkO1xyXG4gICAgICAgIHRoaXMudG9nZ2xlQ2hlY2tib3guZW1pdCh7IHJvd0RhdGEsIGNvbHVtbktleXMsIGlzQ2hlY2tib3hTZWxlY3RlZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RVbnNlbGVjdEFsbFJvd3MoKSB7XHJcbiAgICAgICAgdGhpcy50b2dnbGVIZWFkZXJDaGVja2JveC5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0VW5zZWxlY3RSb3cocm93RGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy50b2dnbGVSb3dDaGVja2JveC5lbWl0KHJvd0RhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHVuZG9DcmVkaXRlZFNwb3QoZGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy51bmRvSWNvbkNsaWNrZWQuZW1pdCh7IGRhdGEsIG1nT3JDcmVkaXQ6IFwiQ3JlZGl0XCIgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdW5kb01nU3BvdChkYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnVuZG9JY29uQ2xpY2tlZC5lbWl0KHsgZGF0YSwgbWdPckNyZWRpdDogXCJNYWtlR29vZFwiIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vU29ydCBhbmQgRmlsdGVyIExvZ2ljIGJlZ2lucyFcclxuICAgIGNsb3NlVG9vbHRpcCgpIHtcclxuICAgICAgICBpZiAodGhpcy50b29sdGlwICYmIHRoaXMudG9vbHRpcC5pc09wZW4oKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvb2x0aXAuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50b29sdGlwID0gbnVsbDtcclxuICAgICAgICBpZiAoIXRoaXMuYmluZFZhbHVlRnVuY0NhbGxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbkZpbHRlckNsb3NlZC5lbWl0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlzVG9vbHRpcEFjdGl2ZShoZWFkZXI6IGFueVtdKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaXNUb29sdGlwQWN0aXZlKGhlYWRlciwgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBiaW5kVGhlVmFsdWVUb1Rvb2xUaXAodG9vbHRpcDogYW55LCBoZWFkZXI6IElIZWFkZXJJbmZvKSB7XHJcbiAgICAgICAgdGhpcy5iaW5kVmFsdWVGdW5jQ2FsbGVkID0gdHJ1ZTtcclxuICAgICAgICAvLyBpZiBzYW1lIHRvb2x0aXAgb3BlbmVkIGNsb3NlIGl0XHJcbiAgICAgICAgaWYgKHRvb2x0aXAgPT0gdGhpcy50b29sdGlwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmluZFZhbHVlRnVuY0NhbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlVG9vbHRpcCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBlbmFibGVkSGVhZGVyczogYW55W10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja0lmVW5pcXVlVmFsdWVQcmVzZW50Rm9yVGhlSGVhZGVyKGhlYWRlciwgZW5hYmxlZEhlYWRlcnMpO1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5Ub29sdGlwKHRvb2x0aXAsIGVuYWJsZWRIZWFkZXJzLCBoZWFkZXIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgd2luZG93LmlubmVyV2lkdGggPCAxNTAwICYmXHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuaW5uZXJIZWlnaHQgPCA3NjggJiZcclxuICAgICAgICAgICAgICAgICF0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNsaWRlclNldC5oYXMoaGVhZGVyLmZpbHRlclNvcnRPYmplY3RLZXlzWzBdKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRmlsdGVyT3BlbmVkLmVtaXQoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zaG93Q2hlY2tib3hlc0ZvclRpbWVGaWx0ZXIgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09IFwiU1BPVERFVEFJTFNcIiB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09IFwiRVhDTFVERUlOVkVOVE9SWVBPUFVQXCIgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PSBcIlJBVElOR1wiO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dGaWx0ZXJUb29sdGlwVGFicyA9IGhlYWRlci5maWx0ZXJTb3J0T2JqZWN0S2V5cy5sZW5ndGggPiAxO1xyXG4gICAgICAgICAgICB0aGlzLmJpbmRWYWx1ZUZ1bmNDYWxsZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tJZlVuaXF1ZVZhbHVlUHJlc2VudEZvclRoZUhlYWRlcihoZWFkZXI6IElIZWFkZXJJbmZvLCBlbmFibGVkSGVhZGVyczogYW55W10pIHtcclxuICAgICAgICBoZWFkZXIuZmlsdGVyU29ydE9iamVjdEtleXMuZm9yRWFjaCgoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBkYXRhVG9DaGVjayA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZ2V0RmlsdGVyT3B0aW9uc0RhdGEodGhpcy50YWJsZURhdGEsIHRoaXMuY2xvbmVkVGFibGVEYXRhLCBpdGVtKTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gPT0gXCJwZXJpb2RcIikge1xyXG4gICAgICAgICAgICAgICAgbGV0IHVuaXFTdGFydERhdGUgPSB1bmlxKGRhdGFUb0NoZWNrLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55IH0pID0+IHVbXCJzdGFydERhdGVcIl0pKTtcclxuICAgICAgICAgICAgICAgIGxldCB1bmlxRW5kRGF0ZSA9IHVuaXEoZGF0YVRvQ2hlY2subWFwKCh1OiB7IFt4OiBzdHJpbmddOiBhbnkgfSkgPT4gdVtcImVuZERhdGVcIl0pKTtcclxuICAgICAgICAgICAgICAgIGlmICh1bmlxU3RhcnREYXRlLmxlbmd0aCA+IDEgfHwgdW5pcUVuZERhdGUubGVuZ3RoID4gMSB8fCB0aGlzLmlzVG9vbHRpcEFjdGl2ZShbaXRlbV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZEhlYWRlcnMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZXMgPSBkYXRhVG9DaGVjay5tYXAoKHU6IHsgW3g6IHN0cmluZ106IGFueSB9KSA9PiB1W2l0ZW1dKTtcclxuICAgICAgICAgICAgICAgIC8vIGlmIGxhc3QgYXBwbGllZCBmaWx0ZXIgaXMgdGhpcyBoZWFkZXIsIHB1c2ggaXQgYWxvcyBhcyBlbmFibGVkSGVhZGVyXHJcbiAgICAgICAgICAgICAgICBsZXQgYWN0aXZlQW5kTGFzdGx5QXBwbGllZEhlYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuYXBwbGllZEZpbHRlcnNBcnJheS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5hcHBsaWVkRmlsdGVyc0FycmF5W3RoaXMuYW5uYUZpbHRlclNlcnZpY2UuYXBwbGllZEZpbHRlcnNBcnJheS5sZW5ndGggLSAxXSA9PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBhY3RpdmVBbmRMYXN0bHlBcHBsaWVkSGVhZGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXIuZmlsdGVyID09IFwiQ0hFQ0tCT1hcIiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICh1bmlxKHZhbHVlcykuZmlsdGVyKChuKSA9PiBuICE9IG51bGwpLmxlbmd0aCA+IDEgfHwgYWN0aXZlQW5kTGFzdGx5QXBwbGllZEhlYWRlcilcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRIZWFkZXJzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlci5maWx0ZXIgIT0gXCJDSEVDS0JPWFwiICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKHVuaXEodmFsdWVzKS5maWx0ZXIoKG4pID0+IG4gIT0gbnVsbCAmJiBuICE9IFwiLVwiKS5sZW5ndGggPiAxIHx8IGFjdGl2ZUFuZExhc3RseUFwcGxpZWRIZWFkZXIpXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkSGVhZGVycy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlblRvb2x0aXAodG9vbHRpcDogYW55LCBoZWFkZXI6IGFueSwgY29sdW1uSGVhZGVyOiBJSGVhZGVySW5mbykge1xyXG4gICAgICAgIHRoaXMuY2xvc2VUb29sdGlwKCk7XHJcbiAgICAgICAgdGhpcy50b29sdGlwID0gdG9vbHRpcDtcclxuICAgICAgICB0aGlzLnRvb2x0aXAub3BlbigpO1xyXG4gICAgICAgIC8vY29udmVydCBrZXkgaW50byB0aGUgaGVhZGVyXHJcbiAgICAgICAgdGhpcy5maWx0ZXJUYWJPYmplY3RzID0gaGVhZGVyLm1hcCgoa2V5OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLmhhcyhrZXkpID8gdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLmdldChrZXkpIDoga2V5OyAvL2NoYW5nZSB0byBkaXNwbGF5IG5hbWVcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyByYWRpb0J1dHRvbk1vZGVsKFxyXG4gICAgICAgICAgICAgICAga2V5LFxyXG4gICAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgICAgICBjb2x1bW5IZWFkZXIuaXNTb3J0UmVxdWlyZWRbaW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgY29sdW1uSGVhZGVyLmlzRmlsdGVyUmVxdWlyZWRbaW5kZXhdLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVFbmFibGVFYWNoQ29sdW1uVG9vbHRpcEljb24oKSB7XHJcbiAgICAgICAgdGhpcy50YWJsZUhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyKSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlci5oZWFkZXJJbmZvLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLnNob3dUb29sdGlwSWNvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLmRpc2FibGVUb29sdGlwSWNvbiA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZmlsdGVyU29ydE9iamVjdEtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsYXRlc3RGaWx0ZXJzID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5hcHBsaWVkRmlsdGVyc0FycmF5O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0ZXN0RmlsdGVycy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRpc2FibGVUb29sdGlwSWNvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0ZXN0RmlsdGVyc1tsYXRlc3RGaWx0ZXJzLmxlbmd0aCAtIDFdID09IGtleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZVRvb2x0aXBJY29uID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmRpc2FibGVUb29sdGlwSWNvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PSBcInBlcmlvZFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVuaXFTdGFydERhdGUgPSB1bmlxKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRGF0YS5tYXAoKHU6IHsgW3g6IHN0cmluZ106IGFueSB9KSA9PiB1W1wic3RhcnREYXRlXCJdKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1bmlxRW5kRGF0ZSA9IHVuaXEodGhpcy50YWJsZURhdGEubWFwKCh1OiB7IFt4OiBzdHJpbmddOiBhbnkgfSkgPT4gdVtcImVuZERhdGVcIl0pKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kaXNhYmxlVG9vbHRpcEljb24gPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxU3RhcnREYXRlLmxlbmd0aCA+IDEgfHwgdW5pcUVuZERhdGUubGVuZ3RoID4gMSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gdGhpcy50YWJsZURhdGEubWFwKCh1OiB7IFt4OiBzdHJpbmddOiBhbnkgfSkgPT4gdVtrZXldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtLmZpbHRlciA9PSBcIkNIRUNLQk9YXCIgJiYgdW5pcSh2YWx1ZXMpLmZpbHRlcigobikgPT4gbiAhPSBudWxsKS5sZW5ndGggPiAxKSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbS5maWx0ZXIgIT0gXCJDSEVDS0JPWFwiICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxKHZhbHVlcykuZmlsdGVyKChuKSA9PiBuICE9IG51bGwgJiYgbiAhPSBcIi1cIikubGVuZ3RoID4gMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kaXNhYmxlVG9vbHRpcEljb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TWFyZ2luTGVmdEZvckZpbHRlckljb24oKSB7XHJcbiAgICAgICAgbGV0IGVsZW1lbnRBcnIgPSB0aGlzLnZpZXdDaGlsZFRhYmxlSGVhZGVycy50b0FycmF5KCk7XHJcbiAgICAgICAgZWxlbWVudEFyci5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBjaGlsZERpdkVsZW1lbnRzID0gaXRlbS5uYXRpdmVFbGVtZW50LmNoaWxkcmVuO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNoaWxkRGl2RWxlbWVudHMubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBmaXJzdFBhcmFncmFwaE9mZnNldFdpZHRoOiBudW1iZXIgPSBjaGlsZERpdkVsZW1lbnRzWzBdPy5jaGlsZHJlblswXT8ub2Zmc2V0V2lkdGhcclxuICAgICAgICAgICAgICAgICAgICA/IGNoaWxkRGl2RWxlbWVudHNbMF0/LmNoaWxkcmVuWzBdPy5vZmZzZXRXaWR0aFxyXG4gICAgICAgICAgICAgICAgICAgIDogMDtcclxuICAgICAgICAgICAgICAgIGxldCBzZWNvbmRQYXJhZ3JhcGhPZmZzZXRXaWR0aDogbnVtYmVyID0gY2hpbGREaXZFbGVtZW50c1sxXS5jaGlsZHJlblswXT8ub2Zmc2V0V2lkdGhcclxuICAgICAgICAgICAgICAgICAgICA/IGNoaWxkRGl2RWxlbWVudHNbMV0uY2hpbGRyZW5bMF0/Lm9mZnNldFdpZHRoXHJcbiAgICAgICAgICAgICAgICAgICAgOiAwO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChmaXJzdFBhcmFncmFwaE9mZnNldFdpZHRoID4gc2Vjb25kUGFyYWdyYXBoT2Zmc2V0V2lkdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGlmZiA9IGZpcnN0UGFyYWdyYXBoT2Zmc2V0V2lkdGggLSBzZWNvbmRQYXJhZ3JhcGhPZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGREaXZFbGVtZW50c1swXS5jaGlsZHJlbi5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZERpdkVsZW1lbnRzWzBdLmNoaWxkcmVuWzFdLnN0eWxlLm1hcmdpbkxlZnQgPSA0ICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkRGl2RWxlbWVudHNbMV0uY2hpbGRyZW4ubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGREaXZFbGVtZW50c1sxXS5jaGlsZHJlblsxXS5zdHlsZS5tYXJnaW5MZWZ0ID0gZGlmZiArIDQgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGlmZiA9IHNlY29uZFBhcmFncmFwaE9mZnNldFdpZHRoIC0gZmlyc3RQYXJhZ3JhcGhPZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGREaXZFbGVtZW50c1swXS5jaGlsZHJlbi5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZERpdkVsZW1lbnRzWzBdLmNoaWxkcmVuWzFdLnN0eWxlLm1hcmdpbkxlZnQgPSBkaWZmICsgNCArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRGl2RWxlbWVudHNbMV0uY2hpbGRyZW5bMV0uc3R5bGUubWFyZ2luTGVmdCA9IDQgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGF0YVJvd0NsaWNrZWQocm93RGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5yb3dDbGlja2VkLmVtaXQocm93RGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmFkaW9CdXR0b25DbGlja2VkKGRhdGE6IGFueSwgYWN0aW9uOiBzdHJpbmcsIGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAoIWlzRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5yYWRpb0J1dHRvblNlbGVjdGVkLmVtaXQoeyBkYXRhLCBhY3Rpb24gfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGJpbmRUaGVWYWx1ZVRvU2VsbGVyR3JvdXBUb29sdGlwKHNlbGxlckdyb3VwSGllcmFyY2h5OiBSYXRpbmdTZWxsZXJHcm91cEhpZXJhcmNoeVtdLCB0b29sdGlwOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5oaWVyYXJjaHlUb29sdGlwICYmIHRoaXMuaGllcmFyY2h5VG9vbHRpcC5vcGVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGllcmFyY2h5VG9vbHRpcC5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGxlckdyb3VwSGllcmFyY2h5ID0gc2VsbGVyR3JvdXBIaWVyYXJjaHk7XHJcbiAgICAgICAgdGhpcy5oaWVyYXJjaHlUb29sdGlwID0gdG9vbHRpcDtcclxuICAgICAgICB0aGlzLmhpZXJhcmNoeVRvb2x0aXAub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGljb25DbGlja2VkKHJvd0RhdGE6IGFueSwgaWNvbkNsYXNzOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoXCJvcmRlcklkXCIgaW4gcm93RGF0YSAmJiBpY29uQ2xhc3MuaW5jbHVkZXMoXCJtZGktc3RhclwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RhcnJlZE9yZGVySWQgPSByb3dEYXRhLm9yZGVySWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmd0SWNvbkNsaWNrZWQuZW1pdCh7IGRhdGE6IHJvd0RhdGEsIGljb25DbGFzczogaWNvbkNsYXNzIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN2Z0ljb25DbGlja2VkKGRhdGE6IEd0Q29sdW1uSWNvbkVtaXR0ZWREYXRhKSB7XHJcbiAgICAgICAgdGhpcy5ndFNWR0ljb25DbGlja2VkLmVtaXQoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGV4dEFjdGlvbkNsaWNrZWQocm93RGF0YTogYW55LCBpZDogYW55LCBjb2x1bW5IZWFkZXI6IElIZWFkZXJJbmZvKSB7XHJcbiAgICAgICAgdGhpcy5ndFRleHRBY3Rpb25DbGlja2VkLmVtaXQoeyBkYXRhOiByb3dEYXRhLCBpZDogaWQsIGNvbHVtbkhlYWRlcjogY29sdW1uSGVhZGVyLCBpc0ljb25DbGlja2VkOiBmYWxzZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpY29uQ2xpY2tlZE9uU3RyaW5nSWNvbkFjdGlvblR5cGUocm93RGF0YTogYW55LCBpZDogYW55LCBjb2x1bW5IZWFkZXI6IElIZWFkZXJJbmZvKSB7XHJcbiAgICAgICAgdGhpcy5ndFRleHRBY3Rpb25DbGlja2VkLmVtaXQoeyBkYXRhOiByb3dEYXRhLCBpZDogaWQsIGNvbHVtbkhlYWRlcjogY29sdW1uSGVhZGVyLCBpc0ljb25DbGlja2VkOiB0cnVlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlubmVySFRNTENlbGxDbGlja2VkKGV2ZW50OiBhbnksIHJvd0RhdGE6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZ3RJbm5lckhUTUxDbGlja2VkLmVtaXQoeyBldmVudCwgcm93RGF0YSB9KTtcclxuICAgIH1cclxuXHJcbiAgICB2aWV3RGV0YWlsc0NsaWNrZWQocm93RGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5ndFZpZXdEZXRhaWxDbGlja2VkLmVtaXQoeyBkYXRhOiByb3dEYXRhIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEFjdGl2ZVN0YXRlT2JqZWN0KCkge1xyXG4gICAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlID1cclxuICAgICAgICAgICAgIXRoaXMuYW5uYUZpbHRlclNlcnZpY2UucmVzZXRGaWx0ZXJTb3J0QWN0aXZlU3RhdHVzIHx8IHRoaXMubXVsdGlwbGVUYWJsZXNQcmVzZW50XHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlXHJcbiAgICAgICAgICAgICAgICA6IHt9O1xyXG4gICAgICAgIHRoaXMudGFibGVIZWFkZXJzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgaXRlbS5oZWFkZXJJbmZvLmZvckVhY2goKGhlYWRlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhlYWRlci5zaG93VG9vbHRpcEljb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0gaGVhZGVyLmZpbHRlclNvcnRPYmplY3RLZXlzLmpvaW4oXCIsXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlci5qb2luZWRGaWx0ZXJTb3J0T2JqZWN0S2V5cyA9IGtleTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBBTk5BLTQxMTMgZml4XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYW5uYUZpbHRlclNlcnZpY2UucmVzZXRGaWx0ZXJTb3J0QWN0aXZlU3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlW2tleV0gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UucmVzZXRGaWx0ZXJTb3J0QWN0aXZlU3RhdHVzID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJc0RpZmZlcmVuY2UodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmlzRGlmZmVyZW5jZUxlc3NUaGFuMjVQZXJjZW50ID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRJbmRleCgpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0ID0gMDtcclxuICAgICAgICB0aGlzLmVuZCA9IHRoaXMubGltaXQgKyB0aGlzLnN0YXJ0O1xyXG4gICAgfVxyXG5cclxuICAgIG9uVGFibGVDb250YWluZXJTY3JvbGwoZTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgdGFibGVWaWV3SGVpZ2h0ID0gZS50YXJnZXQub2Zmc2V0SGVpZ2h0OyAvLyB2aWV3cG9ydFxyXG4gICAgICAgIGNvbnN0IHRhYmxlU2Nyb2xsSGVpZ2h0ID0gZS50YXJnZXQuc2Nyb2xsSGVpZ2h0OyAvLyBsZW5ndGggb2YgYWxsIHRhYmxlXHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsTG9jYXRpb24gPSBlLnRhcmdldC5zY3JvbGxUb3A7IC8vIGhvdyBmYXIgdXNlciBzY3JvbGxlZFxyXG5cclxuICAgICAgICB0aGlzLnJlbW92ZVRvb2x0aXBPblNjcm9sbCgpO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGUgdXNlciBoYXMgc2Nyb2xsZWQgd2l0aGluIDE1MHB4IG9mIHRoZSBib3R0b20sIGFkZCBtb3JlIGRhdGFcclxuICAgICAgICBjb25zdCBidWZmZXIgPSAxNTA7XHJcbiAgICAgICAgY29uc3QgbGltaXQgPSB0YWJsZVNjcm9sbEhlaWdodCAtIHRhYmxlVmlld0hlaWdodCAtIGJ1ZmZlcjtcclxuICAgICAgICBpZiAoc2Nyb2xsTG9jYXRpb24gPiBsaW1pdCkge1xyXG4gICAgICAgICAgICBsZXQgZGF0YSA9IHRoaXMuZ2V0VGFibGVEYXRhKHRoaXMuc3RhcnQsIHRoaXMuZW5kKTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlZERhdGEgPSB0aGlzLnJlbmRlcmVkRGF0YS5jb25jYXQoZGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSW5kZXgoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50YWJsZUNvbnRhaW5lclNjcm9sbGVkKGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRhYmxlRGF0YShzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlRGF0YT8uZmlsdGVyKCh2YWx1ZSwgaW5kZXgpID0+IGluZGV4ID49IHN0YXJ0ICYmIGluZGV4IDwgZW5kKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVJbmRleCgpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0ID0gdGhpcy5lbmQ7XHJcbiAgICAgICAgdGhpcy5lbmQgPSB0aGlzLmxpbWl0ICsgdGhpcy5zdGFydDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsUm93c0ZvclRhYmxlKCkge1xyXG4gICAgICAgIHRoaXMucmVzZXRJbmRleCgpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZWREYXRhID0gdGhpcy5nZXRUYWJsZURhdGEodGhpcy5zdGFydCwgdGhpcy5lbmQpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlSW5kZXgoKTtcclxuICAgIH1cclxuXHJcbiAgICBzcG90RGV0YWlsc0Rvd25sb2FkQ2xpY2tlZChwYXJlbnRDaGlsZE9yVG90YWxSb3c6IFwiREFUQVJPV1wiIHwgXCJUT1RBTFJPV1wiLCByb3dkYXRhPzogYW55KSB7XHJcbiAgICAgICAgaWYgKHJvd2RhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEludmVudG9yeUlkRm9yRG93bmxvYWQgPSByb3dkYXRhLmludmVudG9yeUNvZGVJZDtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERlbW9ncmFwaGljRm9yRG93bmxvYWQgPSByb3dkYXRhLmRlbW9ncmFwaGljO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbnZlbnRvcnlJZEZvckRvd25sb2FkID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERlbW9ncmFwaGljRm9yRG93bmxvYWQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93VHlwZUZvckRvd25sb2FkID0gcGFyZW50Q2hpbGRPclRvdGFsUm93O1xyXG4gICAgICAgIHRoaXMuZG93bmxvYWRTcG90RGV0YWlscy5lbWl0KHtcclxuICAgICAgICAgICAgcGFyZW50Q2hpbGRPclRvdGFsUm93OiBwYXJlbnRDaGlsZE9yVG90YWxSb3csXHJcbiAgICAgICAgICAgIGludmVudG9yeUNvZGVJZDogdGhpcy5zZWxlY3RlZEludmVudG9yeUlkRm9yRG93bmxvYWQsXHJcbiAgICAgICAgICAgIGRlbW9ncmFwaGljOiB0aGlzLnNlbGVjdGVkRGVtb2dyYXBoaWNGb3JEb3dubG9hZCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0YWJsZUNvbnRhaW5lclNjcm9sbGVkKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICB0aGlzLmlzU2Nyb2xsZWRMZWZ0ID0gZXZlbnQudGFyZ2V0LnNjcm9sbExlZnQgPiAwO1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGxFbmRlZCA9IE1hdGgucm91bmQoZXZlbnQudGFyZ2V0LnNjcm9sbExlZnQpID09IGV2ZW50LnRhcmdldC5zY3JvbGxXaWR0aCAtIGV2ZW50LnRhcmdldC5jbGllbnRXaWR0aDtcclxuICAgICAgICB0aGlzLnJlbW92ZVRvb2x0aXBPblNjcm9sbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlRW50ZXJPblN0cmluZ1RleHRBY3Rpb25UeXBlKHJvd0RhdGE6IGFueSwgdG9vbHRpcEtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy50ZXh0QWN0aW9uVG9vbHRpcCA9IHJvd0RhdGFbdG9vbHRpcEtleV07XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25JY29uSG92ZXIuZW1pdCh7IHJvd0RhdGE6IHJvd0RhdGEsIHR5cGU6IFwib24tZW50ZXJcIiB9KTtcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZUVudGVyT25TdHJpbmdUZXh0QWN0aW9uVHlwZUNvbnRhaW5pbmdUYWJsZShyb3dEYXRhOiBhbnksIHRvb2x0aXBLZXk6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMudG9vbHRpcENvbnRhaW5pbmdUYWJsZSA9IHJvd0RhdGFbdG9vbHRpcEtleV07XHJcbiAgICB9XHJcblxyXG4gICAgbW91c2VMZWF2ZVRleHRBY3Rpb25UeXBlKHJvd0RhdGE6IGFueSkge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uSWNvbkhvdmVyTGVhdmUuZW1pdCh7IHJvd0RhdGE6IHJvd0RhdGEsIHR5cGU6IFwib24tbGVhdmVcIiB9KTtcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZUVudGVyT25UZXh0QWN0aW9uVHlwZShyb3dEYXRhOiBhbnksIHRvb2x0aXBLZXk6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMudGV4dEFjdGlvblRvb2x0aXAgPSByb3dEYXRhW3Rvb2x0aXBLZXldO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2thYmxlRGF0YUNsaWNrZWQoUm93ZGF0YTogYW55LCBpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5jbGlja2FibGVEYXRhQ2xpY2tlZC5lbWl0KHsgZGF0YTogUm93ZGF0YSwgaWQ6IGlkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZVRvb2x0aXBPblNjcm9sbCgpIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJyZW1hcmtzLWluZm8tdG9vbHRpcFwiKTtcclxuICAgICAgICAvLyBjb25zdCB0b29sdGlwRWxlbWVudHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwidG9vbHRpcFwiKTtcclxuICAgICAgICBjb25zdCBndFRvb2x0aXAgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwicmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiKTtcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLnRvb2x0aXA6bm90KC5rZWVwLW9uLXNjcm9sbC10b29sdGlwKVwiKS5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgIGUucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHdoaWxlIChlbGVtZW50cyAmJiBlbGVtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnRzWzBdLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aGlsZSAoZ3RUb29sdGlwICYmIGd0VG9vbHRpcC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGd0VG9vbHRpcFswXS5yZW1vdmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbkNsaWNrZWRJblRvdGFsUm93KGNvbE5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMudG90YWxSb3dJY29uQ2xpY2tlZC5lbWl0KGNvbE5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZXNNYWRlSW5FZGl0YWJsZUlucHV0Qm94KGV2ZW50OiBhbnksIGVkaXRlZE9iamVjdDogYW55LCBwYXN0ZUV2ZW50OiBib29sZWFuKSB7XHJcbiAgICAgICAgbGV0IGVudGVyZWRWYWx1ZSA9IHBhc3RlRXZlbnQgPyBldmVudC5jbGlwYm9hcmREYXRhLmdldERhdGEoXCJ0ZXh0XCIpIDogZXZlbnQua2V5O1xyXG4gICAgICAgIGxldCBkb3RJbmRleCA9IGVkaXRlZE9iamVjdC52YWx1ZS5pbmRleE9mKFwiLlwiKTtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBldmVudC5rZXlDb2RlICE9IDggJiZcclxuICAgICAgICAgICAgZXZlbnQua2V5Q29kZSAhPSA0NiAmJlxyXG4gICAgICAgICAgICAhKGV2ZW50LmtleUNvZGUgPj0gMzcgJiYgZXZlbnQua2V5Q29kZSA8PSA0MCkgJiZcclxuICAgICAgICAgICAgKCghZWRpdGVkT2JqZWN0Py5hbGxvd1NwZWNpYWxDaGFyYWN0ZXJzICYmICEvW2AwLTkuXS8udGVzdChlbnRlcmVkVmFsdWUpKSB8fFxyXG4gICAgICAgICAgICAgICAgKGVkaXRlZE9iamVjdD8uY2hhcmFjdGVyc1RvUmVzdHJpY3QgJiYgZWRpdGVkT2JqZWN0Py5jaGFyYWN0ZXJzVG9SZXN0cmljdC5pbmNsdWRlcyhlbnRlcmVkVmFsdWUpKSB8fFxyXG4gICAgICAgICAgICAgICAgKGVkaXRlZE9iamVjdC5pc0RlY2ltYWxQb2ludENoZWNrUmVxdWlyZWQgJiZcclxuICAgICAgICAgICAgICAgICAgICBkb3RJbmRleCA+PSAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ/LnRhcmdldD8uc2VsZWN0aW9uU3RhcnQgPiBkb3RJbmRleCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGVkaXRlZE9iamVjdC52YWx1ZS5sZW5ndGggLSAoZG90SW5kZXggKyAxKSA+PSBlZGl0ZWRPYmplY3QubWF4RGVjaW1hbFBvaW50c0FsbG93ZWQpKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlZGl0YWJsZUlucHV0VmFsdWVDaGFuZ2VkKHZhbHVlOiBhbnksIHJvdzogYW55LCBrZXlFZGl0ZWQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuZWRpdGFibGVJbnB1dEVkaXRlZC5lbWl0KHsgcm93OiByb3csIHZhbHVlOiB2YWx1ZSwga2V5RWRpdGVkOiBrZXlFZGl0ZWQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmFkaW9CdXR0b25JY29uQ2xpY2tlZChkYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnJhZGlvQnV0dG9uTWVzc2FnZUljb25DbGlja2VkLmVtaXQoZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyQXBwbGllZCh0YWJsZURhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgdGhpcy50YWJsZURhdGEgPSB0YWJsZURhdGE7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsUm93c0ZvclRhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlRW5hYmxlRWFjaENvbHVtblRvb2x0aXBJY29uKCk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJBcHBsaWVkVG9UYWJsZS5lbWl0KHRhYmxlRGF0YSk7XHJcbiAgICAgICAgdGhpcy5jbG9zZVRvb2x0aXAoKTtcclxuICAgIH1cclxuXHJcbiAgICBzb3J0aW5nQXBwbGllZCh0YWJsZURhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgdGhpcy50YWJsZURhdGEgPSB0YWJsZURhdGE7XHJcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsUm93c0ZvclRhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlRW5hYmxlRWFjaENvbHVtblRvb2x0aXBJY29uKCk7XHJcbiAgICAgICAgdGhpcy5zb3J0aW5nQXBwbGllZFRvVGFibGUuZW1pdCh0YWJsZURhdGEpO1xyXG4gICAgICAgIHRoaXMuY2xvc2VUb29sdGlwKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiPGRpdlxuICAgIGlkPVwiZ2VuZXJpYy10YWJsZS1jb25hdGluZXJcIlxuICAgIGNsYXNzPVwidGFibGUtY29udGFpbmVyIHt7IGd0R2VuZXJhbENvbmZpZz8udGFibGVPdXRlckNvbnRhaW5lck5hbWUgfX0ge3sgdGFibGVCb3R0b21Cb3JkZXJDbGFzcyB9fVwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnc2Nyb2xsLWxlZnQtc2hhZG93LWVmZmVjdCc6IGlzU2Nyb2xsZWRMZWZ0LFxuICAgICAgICAnc2Nyb2xsLXJpZ2h0LXNoYWRvdy1lZmZlY3QnOiAhaXNTY3JvbGxFbmRlZCxcbiAgICAgICAgJ2NsaWNrYWJsZS1yb3cnOiBjbGlja2FibGVSb3csXG4gICAgICAgICduby1kYXRhLXRhYmxlJzogKGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgfCBhc3luYylcbiAgICB9XCJcbiAgICAoc2Nyb2xsKT1cIm9uVGFibGVDb250YWluZXJTY3JvbGwoJGV2ZW50KVwiXG4+XG4gICAgPGRpdlxuICAgICAgICBbY2xhc3NdPVwiZ3RHZW5lcmFsQ29uZmlnLnRhYmxlQ29udGFpbmVyTmFtZVwiXG4gICAgICAgIGNsYXNzPVwiaG9yaXpvbnRhbC1zY3JvbGwtZm9yLXRhYmxlLWNvbnRhaW5lclwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgIGhlaWdodDpcbiAgICAgICAgICAgICAgICB0YWJsZURhdGEubGVuZ3RoIDwgbWF4aW11bVJvd3NXaGljaENhbkJlUmVuZGVyZWRXaXRob3V0U2Nyb2xsXG4gICAgICAgICAgICAgICAgICAgID8gJ2NhbGMoJyArXG4gICAgICAgICAgICAgICAgICAgICAgKGd0RGltZW5zaW9uLnJvd0hlaWdodCAqIHRhYmxlRGF0YS5sZW5ndGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAoIXRhYmxlRGF0YS5sZW5ndGggfHwgIWd0R2VuZXJhbENvbmZpZy50b3RhbFJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBndERpbWVuc2lvbi5oZWFkZXJIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ3REaW1lbnNpb24uaGVhZGVySGVpZ2h0ICsgZ3REaW1lbnNpb24ucm93SGVpZ2h0KSkgK1xuICAgICAgICAgICAgICAgICAgICAgICdweCknXG4gICAgICAgICAgICAgICAgICAgIDogZ3REaW1lbnNpb24udGFibGVIZWlnaHRcbiAgICAgICAgfVwiXG4gICAgPlxuICAgICAgICA8dGFibGVcbiAgICAgICAgICAgIGNsYXNzPVwiZ3RcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwidGFibGVDbGFzc1wiXG4gICAgICAgICAgICBtYXQtdGFibGVcbiAgICAgICAgICAgIFtkYXRhU291cmNlXT1cInJlbmRlcmVkRGF0YVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLXJvd1wiXG4gICAgICAgICAgICAgICAgbWF0LWhlYWRlci1yb3dcbiAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPVwidGFibGVDb2x1bW5zOyBzdGlja3k6IHRydWVcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZ3REaW1lbnNpb24uaGVhZGVySGVpZ2h0XCJcbiAgICAgICAgICAgID48L3RyPlxuICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0b3RhbC1yb3dcIlxuICAgICAgICAgICAgICAgIG1hdC1oZWFkZXItcm93XG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJndERpbWVuc2lvbi5yb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgICptYXRIZWFkZXJSb3dEZWY9XCJ0b3RhbFJvd0NvbHVtbnM7IHN0aWNreTogdHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmhpZGRlbl09XCJcbiAgICAgICAgICAgICAgICAgICAgc2hvd1NrZWxldG9uTG9hZGluZyB8fFxuICAgICAgICAgICAgICAgICAgICAoIXNob3dTa2VsZXRvbkxvYWRpbmcgJiYgIXRhYmxlRGF0YS5sZW5ndGgpIHx8XG4gICAgICAgICAgICAgICAgICAgIChpc05vRGF0YVRvRGlzcGxheVN1YmplY3QkIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgICAgICAgICghc2hvd1NrZWxldG9uTG9hZGluZyAmJiAhZ3RHZW5lcmFsQ29uZmlnLnRvdGFsUm93KVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC90cj5cbiAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dEYXRhLmd0Q2xhc3NcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ25vLWJvcmRlci10cic6IChpc05vRGF0YVRvRGlzcGxheVN1YmplY3QkIHwgYXN5bmMpIH1cIlxuICAgICAgICAgICAgICAgIG1hdC1yb3dcbiAgICAgICAgICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvd0RhdGE7IGNvbHVtbnM6IHRhYmxlQ29sdW1uc1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJndERpbWVuc2lvbi5yb3dIZWlnaHRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJkYXRhUm93Q2xpY2tlZChyb3dEYXRhKVwiXG4gICAgICAgICAgICA+PC90cj5cblxuICAgICAgICAgICAgPCEtLSBUT1RBTCBST1cgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgW21hdENvbHVtbkRlZl09XCJjb2x1bW4uY29sTmFtZVwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB0b3RhbFJvd0luZm87IHRyYWNrQnk6IHRyYWNrQnlGblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbi5jb2xzcGFuXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBjb2x1bW4uY2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblsnaXNBY3Rpb25Db2x1bW4nXVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBjb2x1bW4uYWN0aW9uRGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImRhdGEuY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrYWJsZURhdGFDbGlja2VkKHt9LCBkYXRhLmlkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGF0YS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5bJ2lzSWNvbkNvbHVtbiddXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgY29sdW1uPy5pY29uRGF0YT8uY2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpY29uQ2xpY2tlZEluVG90YWxSb3coY29sdW1uPy5jb2xOYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uWydpc0FjdGlvbkNvbHVtbiddXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nIGNsYXNzPVwidXBwZXItbGFiZWxcIj57eyBjb2x1bW4uZGF0YSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5sb3dlckRhdGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmNvbE5hbWUgPT0gJ3RvdGFsLXBvdGVudGlhbC1ib29rZWQtdW5pdCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09ICdSQVRJTkcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBjb2x1bW5Mb3dlckRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjbGlja2FibGUtZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzcG90RGV0YWlsc0Rvd25sb2FkQ2xpY2tlZCgnVE9UQUxST1cnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Rpc2FibGVkLWNsaWNrYWJsZS1kYXRhJzogZG93bmxvYWRJblByb2dyZXNzIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgY29sdW1uLmxvd2VyRGF0YSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIHNwb3QtZGV0YWlscy1kb3dubG9hZC1pY29uc1wiPmdldF9hcHA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkb3dubG9hZEluUHJvZ3Jlc3MgJiYgc2VsZWN0ZWRSb3dUeXBlRm9yRG93bmxvYWQgPT0gJ1RPVEFMUk9XJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjaXJjdWxhclByb2dyZXNzQmFyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NvbHVtbkxvd2VyRGF0YT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb3dlci1sYWJlbFwiPnt7IGNvbHVtbi5sb3dlckRhdGEgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi50b29sdGlwTWVzc2FnZSAmJiBndEdlbmVyYWxDb25maWcuY29tcG9uZW50ICE9ICdMVVJfVklPTEFUSU9OUydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGNvbHVtbi50b29sdGlwSWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImNvbHVtbi50b29sdGlwTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImd0LXRvdGFsLXJvdy10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PSAnTFVSX1ZJT0xBVElPTlMnICYmIGNvbHVtbi50b29sdGlwTWVzc2FnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWkgbWRpLWluZm8tb3V0bGluZSBpbmZvLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImx1clZpb2xhdGlvblRvdGFsUm93VG9vbFRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImd0LXRvdGFsLXJvdy10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSBNQUlOIFJPVyAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbkRlZi5oZWFkZXJJbmZvWzBdLm9iamVjdEtleVwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbkRlZiBvZiB0YWJsZUhlYWRlcnM7IHRyYWNrQnk6IHRyYWNrQnlGblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICAgICN0YWJsZUhlYWRlclxuICAgICAgICAgICAgICAgICAgICBub3dyYXBcbiAgICAgICAgICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICAgICAgICAgICAgICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2x1bW5EZWYud2lkdGhcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3cgbXgtMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIGNvbHVtbkRlZi5oZWFkZXJJbmZvOyBsZXQgaiA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50eXBlT2ZIZWFkZXJEYXRhID09PSAnU1RSSU5HJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAndXBwZXItbGFiZWwnOiBqID09PSAwLCAnbG93ZXItbGFiZWwnOiBqID09PSAxIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLm5hbWUgPT0gbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50PVwiMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogY29sdW1uRGVmLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21heC13aWR0aCc6ICdjYWxjKDEwMCUgLSAyMHB4KSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaGVhZGVyLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAudG9vbHRpcE1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImhlYWRlci50b29sdGlwLnRvb2x0aXBNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnaW1wc0luZm9Ub29sdGlwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiaW1wc0luZm9Ub29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnc3BvdHNDb2x1bW5FcXVpdmFsaXphdGlvbk1lc3NhZ2VUb29sdGlwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLmljb25DbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJzcG90c0NvbHVtbkVxdWl2YWxpemF0aW9uTWVzc2FnZVRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICd1bmRlckRlbGl2ZXJ5VG9vbHRpcCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLmljb25DbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ1bmRlckRlbGl2ZXJ5VG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ292ZXJEZWxpdmVyeVRvb2x0aXAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwib3ZlckRlbGl2ZXJ5VG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ3JhdGluZ0luZm9Ub29sdGlwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwicmF0aW5nSW5mb1Rvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAncmF0ZUluZm9Ub29sdGlwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwicmF0ZUluZm9Ub29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ29uZ29pbmdSZXZCb29rZWRDb2x1bW5Ub29sdGlwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwib25nb2luZ1JldkJvb2tlZENvbHVtblRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdjb21wbGV0ZWRSZXZCb29rZWRDb2x1bW5Ub29sdGlwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiY29tcGxldGVkUmV2Qm9va2VkQ29sdW1uVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ2F2Z0Jvb2tlZFJhdGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJhdmdCb29rZWRSYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnYXZnQm9va2VkUnRnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiYXZnQm9va2VkUnRnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnYXZnQm9va2VkSW1wcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLmljb25DbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImF2Z0Jvb2tlZEltcHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ2F1dG9tYXRpb25Ub29sdGlwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiYXV0b21hdGlvblRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ3JlYmF0ZUltcGFjdCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLmljb25DbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInJlYmF0ZUltcGFjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAncHJvamVjdGVkSW1wc1J0ZydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLmljb25DbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInByb2plY3RlZEltcHNSdGdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIudHlwZU9mSGVhZGVyRGF0YSA9PT0gJ0NIRUNLQk9YJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3RHZW5lcmFsQ29uZmlnLmlzSGVhZGVyQ2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC1jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFVuc2VsZWN0QWxsUm93cygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFndEdlbmVyYWxDb25maWcuaXNIZWFkZXJDaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBjdXN0b20tY29sdW1uLWNoZWNrYm94LXVuY2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Rpc2FibGUtY2hlY2tib3gnOiBndEdlbmVyYWxDb25maWcuZGlzYWJsZUhlYWRlckNoZWNrYm94IH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0VW5zZWxlY3RBbGxSb3dzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfYm94X291dGxpbmVfYmxhbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3RHZW5lcmFsQ29uZmlnLnNob3dBbGxDb2x1bW5GaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic29ydC1maWx0ZXItY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLnNob3dUb29sdGlwSWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFjdGl2ZSB0b29sdGlwIEZ1bmN0aW9uYWxpdHkgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIuZmlsdGVyID09PSAnQ0hFQ0tCT1gnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1maWx0ZXItdmFyaWFudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZVtoZWFkZXIuam9pbmVkRmlsdGVyU29ydE9iamVjdEtleXNdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaGVhZGVyLmRpc2FibGVUb29sdGlwSWNvbiB8fCBzaG93U2tlbGV0b25Mb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiZmlsdGVyVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgZmlsdGVyQWxpZ25tZW50IH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJub24tZWRpdC1jaGVja2JveC10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImJpbmRUaGVWYWx1ZVRvVG9vbFRpcCh0LCBoZWFkZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlkZGVuKT1cImNsb3NlVG9vbHRpcCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxiciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci5maWx0ZXIgPT09ICdTTElERVInXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1maWx0ZXItdmFyaWFudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZVtoZWFkZXIuam9pbmVkRmlsdGVyU29ydE9iamVjdEtleXNdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaGVhZGVyLmRpc2FibGVUb29sdGlwSWNvbiB8fCBzaG93U2tlbGV0b25Mb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwic2xpZGVyVG9vbFRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIGxlZnQtdG9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJub24tZWRpdC1zbGlkZXItdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwibWFudWFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdDE9XCJuZ2JUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYmluZFRoZVZhbHVlVG9Ub29sVGlwKHQxLCBoZWFkZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlkZGVuKT1cImNsb3NlVG9vbHRpcCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxiciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci5maWx0ZXIgPT09ICdEQVRFJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZmlsdGVyLXZhcmlhbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmVbaGVhZGVyLmpvaW5lZEZpbHRlclNvcnRPYmplY3RLZXlzXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGhlYWRlci5kaXNhYmxlVG9vbHRpcEljb24gfHwgc2hvd1NrZWxldG9uTG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImRhdGVQaWNrZXJUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwibm9uLWVkaXQtZGF0ZXBpY2tlci10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0Mj1cIm5nYlRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJiaW5kVGhlVmFsdWVUb1Rvb2xUaXAodDIsIGhlYWRlcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaWRkZW4pPVwiY2xvc2VUb29sdGlwKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PGJyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmZpbHRlciA9PT0gJ1dFRUsnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1maWx0ZXItdmFyaWFudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZVtoZWFkZXIuam9pbmVkRmlsdGVyU29ydE9iamVjdEtleXNdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaGVhZGVyLmRpc2FibGVUb29sdGlwSWNvbiB8fCBzaG93U2tlbGV0b25Mb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwid2Vla1BpY2tlclRvb2xUaXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBsZWZ0LXRvcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwibWFudWFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdDM9XCJuZ2JUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYmluZFRoZVZhbHVlVG9Ub29sVGlwKHQzLCBoZWFkZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlkZGVuKT1cImNsb3NlVG9vbHRpcCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxiciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci5maWx0ZXIgPT09ICdUSU1FJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZmlsdGVyLXZhcmlhbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmVbaGVhZGVyLmpvaW5lZEZpbHRlclNvcnRPYmplY3RLZXlzXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGhlYWRlci5kaXNhYmxlVG9vbHRpcEljb24gfHwgc2hvd1NrZWxldG9uTG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInRpbWVGaWx0ZXJUb29sVGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gbGVmdC10b3AgYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwibm9uLWVkaXQtdGltZS10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ND1cIm5nYlRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJiaW5kVGhlVmFsdWVUb1Rvb2xUaXAodDQsIGhlYWRlcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaWRkZW4pPVwiY2xvc2VUb29sdGlwKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PGJyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGVhZGVyLnNob3dUb29sdGlwSWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD1cIm5vLWZpbHRlci1zcGFjZVwiPjwvc3Bhbj48YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ2x1clZpb2xhdGlvbkluZm9Ub29sdGlwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwibHVyVmlvbGF0aW9uSW5mb1Rvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC90aD5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdENlbGxEZWY9XCJsZXQgUk9XX0RBVEFcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQtY2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiUk9XX0RBVEEuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5ib3JkZXJdPVwiUk9XX0RBVEEuYm9yZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgUk9XX0RBVEEucm93Q2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bMF0ub2JqZWN0S2V5ICsgJ1RkQ2xhc3MnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5yb3dzcGFuXT1cIlJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvWzBdLm9iamVjdEtleSArICdSb3dzcGFuJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaGlkZVNvbWVUZHMgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlkZVNvbWVUZHMgJiYgIVJPV19EQVRBWydoaWRlJyArIGNvbHVtbkRlZi5oZWFkZXJJbmZvWzBdLm9iamVjdEtleSArICdUZCddKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1za2VsZXRvbi1sb2FkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dTa2VsZXRvbkxvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50PVwiMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoZW1lXT1cInsgaGVpZ2h0OiAnMTBweCcsIGRpc3BsYXk6ICdibG9jaycgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25neC1za2VsZXRvbi1sb2FkZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2hvd1NrZWxldG9uTG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJsZURhdGEubGVuZ3RoID4gMCAmJiAhKGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgfCBhc3luYylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN1YmxpbmUgb2YgY29sdW1uRGVmLmhlYWRlckluZm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN1YkxpbmVJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzaG93RWxsaXBzaXNUZXh0T25Ib3Zlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLnR5cGVPZkJvZHlEYXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidJQ09OJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnJlZEluUHJvZ3Jlc3MgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLm9yZGVySWQgPT0gc2VsZWN0ZWRTdGFycmVkT3JkZXJJZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiUk9XX0RBVEEuaWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaWNvbkNsaWNrZWQoUk9XX0RBVEEsIFJPV19EQVRBLmljb25DbGFzcylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJ7eyBST1dfREFUQS5pY29uVGl0bGVUZXh0IH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImd0LWljb24tY29sdW1uLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJyZWRJblByb2dyZXNzICYmIFJPV19EQVRBLm9yZGVySWQgPT0gc2VsZWN0ZWRTdGFycmVkT3JkZXJJZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItZm9yLWJ1dHRvbi1kaXJlY3RpdmVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInSUNPTl9DRUxMJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWN0aW9uIG9mIFJPV19EQVRBW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5hY3Rpb25LZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGlvbi5zaG93T2JqZWN0S2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uc2hvd0ljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uLmljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VFbnRlck9uU3RyaW5nVGV4dEFjdGlvblR5cGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS50b29sdGlwS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInRlYW0tdXNlci10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJhY3Rpb24uc2hvd1Rvb2x0aXAgPyBhY3Rpb24udG9vbHRpcERhdGEgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFjdGlvbkNsaWNrZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVUb29sdGlwXT1cIiFhY3Rpb24uc2hvd1Rvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0hUTUxfU1RSSU5HJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImlubmVySFRNTENlbGxDbGlja2VkKCRldmVudCwgUk9XX0RBVEEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTVkdfSUNPTidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbm5hLWNvcmUtYW5uYS1pY29uLWNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnROYW1lXT1cImd0R2VuZXJhbENvbmZpZy5jb21wb25lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhT2JqZWN0XT1cIlJPV19EQVRBXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvblRvU2hvd109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25Db2x1bW5JY29uQ2xpY2tlZCk9XCJzdmdJY29uQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2FubmEtY29yZS1hbm5hLWljb24tY29sdW1uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInVEVYVF9BQ1RJT05TJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dCBvZiBST1dfREFUQVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uYWN0aW9uS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0ZXh0LnNob3dUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFjdGlvbkNsaWNrZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0ZXh0LmlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IHRleHQuY2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlRW50ZXJPblRleHRBY3Rpb25UeXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0udG9vbHRpcEtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ0ZXh0QWN0aW9uVG9vbHRpcFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC1pY29uLWNvbHVtbi10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGV4dC5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXRleHQuc2hvd1Rvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWN0aW9uQ2xpY2tlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRleHQuaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgdGV4dC5jbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZXh0Lm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInQ0hFQ0tCT1gnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXNhYmxlLWNoZWNrYm94JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uaXNEaXNhYmxlZEtleV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGN1c3RvbS1jb2x1bW4tY2hlY2tib3gtY2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RPclVuc2VsZWN0Q2hlY2tib3goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIVJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBjdXN0b20tY29sdW1uLWNoZWNrYm94LXVuY2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzYWJsZS1jaGVja2JveCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmlzRGlzYWJsZWRLZXldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RPclVuc2VsZWN0Q2hlY2tib3goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ib3hfb3V0bGluZV9ibGFua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhY3Rpb24gb2YgUk9XX0RBVEFbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmFjdGlvbktleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbi5zaG93SWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogYWN0aW9uLmRpc2FibGVkSWNvbiB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUVudGVyT25TdHJpbmdUZXh0QWN0aW9uVHlwZUNvbnRhaW5pbmdUYWJsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLnRvb2x0aXBLZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIGF1dG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwidG9vbHRpcC1jb250YWluaW5nLXRhYmxlIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ0b29sdGlwQ29udGFpbmluZ1RhYmxlVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0NMSUNLQUJMRV9EQVRBJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRleHQgb2YgUk9XX0RBVEFbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmFjdGlvbktleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwidGV4dC5jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2thYmxlRGF0YUNsaWNrZWQoUk9XX0RBVEEsIHRleHQuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZXh0Lm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibGluZS5vYmplY3RLZXkgPT0gJ2Rpc3BsYXlCb29rZWRVbml0cycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PSAnUkFUSU5HJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjbGlja2FibGUtZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNwb3REZXRhaWxzRG93bmxvYWRDbGlja2VkKCdEQVRBUk9XJywgUk9XX0RBVEEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdkaXNhYmxlZC1jbGlja2FibGUtZGF0YSc6IGRvd25sb2FkSW5Qcm9ncmVzcyB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgUk9XX0RBVEEuZGlzcGxheUJvb2tlZFVuaXRzIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBzcG90LWRldGFpbHMtZG93bmxvYWQtaWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+Z2V0X2FwcDwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZEluUHJvZ3Jlc3MgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLmludmVudG9yeUNvZGVJZCA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSW52ZW50b3J5SWRGb3JEb3dubG9hZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGVtb2dyYXBoaWMgPT0gc2VsZWN0ZWREZW1vZ3JhcGhpY0ZvckRvd25sb2FkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjaXJjdWxhclByb2dyZXNzQmFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU1RSSU5HX19fSUNPTl9PUl9URVhUX0FDVElPTidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFjdGlvbiBvZiBST1dfREFUQVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uYWN0aW9uS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJhY3Rpb24uYWRkaXRpb25hbFRleHRCZWZvcmVMaW5rQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIdG1sXT1cImFjdGlvbi5hZGRpdGlvbmFsVGV4dEJlZm9yZUxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwie3sgYWN0aW9uLmFkZGl0aW9uYWxUZXh0QmVmb3JlTGluayB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC1pY29uLWNvbHVtbi10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVRvb2x0aXBdPVwiIWFjdGlvbi5lbmFibGVUb29sdGlwRm9yQWRkaXRpb25hbFRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aW9uICYmIGFjdGlvbi50eXBlT2ZEYXRhID09ICdTVFJJTkcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGlvbi5kYXRhIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYWN0aW9uLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uc2hvd0xpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWN0aW9uQ2xpY2tlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uLmxpbmtDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IGFjdGlvbi5kaXNhYmxlZExpbmsgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBhY3Rpb24uZGF0YSB9fTwvYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwie3sgYWN0aW9uLmFkZGl0aW9uYWxUZXh0QWZ0ZXJMaW5rIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJhY3Rpb24uYWRkaXRpb25hbFRleHRBZnRlckxpbmtDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImd0LWljb24tY29sdW1uLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlVG9vbHRpcF09XCIhYWN0aW9uLmVuYWJsZVRvb2x0aXBGb3JBZGRpdGlvbmFsQWZ0ZXJUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGlvbi5hZGRpdGlvbmFsVGV4dEFmdGVyTGluayB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3Rpb24uc2hvd1Rvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGlvbi50b29sdGlwRGF0YS5pbm5lckh0bWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uc2hvd0ljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBhY3Rpb24uZGlzYWJsZWRJY29uIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUVudGVyT25TdHJpbmdUZXh0QWN0aW9uVHlwZUNvbnRhaW5pbmdUYWJsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS50b29sdGlwS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInRvb2x0aXAtY29udGFpbmluZy10YWJsZSByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ0b29sdGlwQ29udGFpbmluZ1RhYmxlVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWFjdGlvbi50b29sdGlwRGF0YS50b29sdGlwVGFibGVCb2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uLnNob3dJY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uLmljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogYWN0aW9uLmRpc2FibGVkSWNvbiB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25DbGlja2VkT25TdHJpbmdJY29uQWN0aW9uVHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJtb3VzZUxlYXZlVGV4dEFjdGlvblR5cGUoUk9XX0RBVEEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VFbnRlck9uU3RyaW5nVGV4dEFjdGlvblR5cGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0udG9vbHRpcEtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2VtZW50XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24udG9vbHRpcFBsYWNlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhY3Rpb24udG9vbHRpcFBsYWNlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnYm90dG9tIGF1dG8nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInRlYW0tdXNlci10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3Mge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnRvb2x0aXBDbGFzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ1c2VyTG9nZ2VkSW5EZXRhaWxzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3Rpb25bJ3Nob3dTdmdJY29uJ11cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YW5uYS1jb3JlLWFubmEtZXN0LWljb24tdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbG9hdC1yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uWydzdmdJY29uTmFtZSddID09ICdhbm5hLWljb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwibW91c2VMZWF2ZVRleHRBY3Rpb25UeXBlKFJPV19EQVRBKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VFbnRlck9uU3RyaW5nVGV4dEFjdGlvblR5cGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudG9vbHRpcEtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2VtZW50XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnRvb2x0aXBQbGFjZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFjdGlvbi50b29sdGlwUGxhY2VtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnYm90dG9tIGF1dG8nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInRlYW0tdXNlci10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3Mge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvblsndG9vbHRpcENsYXNzJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ1c2VyTG9nZ2VkSW5EZXRhaWxzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYW5uYS1jb3JlLWFubmEtZXN0LWljb24tdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWFjdGlvbi5zaG93VG9vbHRpcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uc2hvd0ljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFjdGlvbi5pY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogYWN0aW9uLmRpc2FibGVkSWNvbiB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uQ2xpY2tlZE9uU3RyaW5nSWNvbkFjdGlvblR5cGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU1RSSU5HX09SX0lOUFVUJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XT8udHlwZSA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NUUklORyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaW5wdXRCb3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckh0bWxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpbnB1dEJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dFbGxpcHNpc1RleHRPbkhvdmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jbGFzc05hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXNNYWRlSW5FZGl0YWJsZUlucHV0Qm94KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhc3RlKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlc01hZGVJbkVkaXRhYmxlSW5wdXRCb3goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGVJbnB1dFZhbHVlQ2hhbmdlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV0udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWQtYm9yZGVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmhhc0Vycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNob3dJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pY29uVG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC10b3RhbC1yb3ctdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pY29uQ2xhc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaG93U3ZnSWNvbidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbm5hLWNvcmUtYW5uYS1lc3QtaWNvbi10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbG9hdC1yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2Z0ljb25OYW1lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPT0gJ2FubmEtaWNvbidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2VtZW50XT1cIidib3R0b20gYXV0bydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiZ3QtdG90YWwtcm93LXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pY29uVG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYW5uYS1jb3JlLWFubmEtZXN0LWljb24tdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInSFRNTCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySHRtbF09XCJST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1NJTkdMRV9SQURJTydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGUtY2hlY2tib3gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5pc0Rpc2FibGVkS2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1yYWRpb2JveC1tYXJrZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIobnVsbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1yYWRpb2JveC1ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzYWJsZS1jaGVja2JveCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmlzRGlzYWJsZWRLZXldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RPclVuc2VsZWN0Q2hlY2tib3goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1JBRElPJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiUk9XX0RBVEFbJ1JhZGlvQnV0dG9uQ29uZmlnJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIlJPV19EQVRBW3N1YmxpbmUub2JqZWN0S2V5XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlJPV19EQVRBWydSYWRpb0J1dHRvbkNvbmZpZyddWzBdLmlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmFkaW9CdXR0b24gb2YgUk9XX0RBVEFbJ1JhZGlvQnV0dG9uQ29uZmlnJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdCA9IGxhc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInt7IHJhZGlvQnV0dG9uLnZhbHVlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgcmFkaW9CdXR0b24uY2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvQnV0dG9uQ2xpY2tlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvQnV0dG9uLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVsnUmFkaW9CdXR0b25Db25maWcnXVswXS5pc0Rpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyByYWRpb0J1dHRvbi5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiB7eyByYWRpb0J1dHRvbi5pY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJhZGlvQnV0dG9uSWNvbkNsaWNrZWQoUk9XX0RBVEEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyICpuZ0lmPVwiIWxhc3RcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTVFJJTkdfV0lUSF9UT09MVElQJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWN0aW9uIG9mIFJPV19EQVRBW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5hY3Rpb25LZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7IGFjdGlvbj8uZGF0YVRvRGlzcGxheSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbj8uc2hvd1Rvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ0ZXh0QWN0aW9uVG9vbHRpcFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUVudGVyT25TdHJpbmdUZXh0QWN0aW9uVHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLnRvb2x0aXBLZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlbWVudF09XCJhY3Rpb24/LnRvb2x0aXBQb3NpdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uPy50b29sdGlwSWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiZ3QtaWNvbi1jb2x1bW4tdG9vbHRpcCByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVUb29sdGlwXT1cImFjdGlvbj8uZGlzYWJsZVRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7IGFjdGlvbj8uZGF0YVRvRGlzcGxheUFmdGVyVG9vbHRpcCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3VibGluZS5vYmplY3RLZXkgIT0gJ2Rlc2NyaXB0aW9uJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJsaW5lLm9iamVjdEtleSA9PSAnaW52ZW50b3J5Q29kZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBWydpc1NlbGxlckdyb3VwJ10gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ1JBVElORydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtaSBtZGktaW5mby1vdXRsaW5lIHNlbGxlci10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwic2VsbGVySGllcmFyY2h5VG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwibWFudWFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhpZGRlbik9XCJjbG9zZVRvb2x0aXAoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNpbmZvPVwibmdiVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImhpZXJhcmNoeS10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRUaGVWYWx1ZVRvU2VsbGVyR3JvdXBUb29sdGlwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLnNlbGxlckdyb3VwSGllcmFyY2h5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmxpbmUub2JqZWN0S2V5ID09ICdkaXNwbGF5Qm9va2VkQXZlcmFnZVJhdGluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ1JBVElORycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBWydzaG93UmF0aW5nQXZlcmFnZUljb24nXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1pIG1kaS1pbmZvLW91dGxpbmUgc2VsbGVyLXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzRGlmZmVyZW5jZShST1dfREFUQS5pc0RpZmZlcmVuY2VMZXNzVGhhbjI1UGVyY2VudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwicG9zdGVkLWF2Zy10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJwb3N0ZWRSYXRpbmdEaWZmZXJlbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmxpbmUub2JqZWN0S2V5ID09ICdkaXNwbGF5Qm9va2VkQXZlcmFnZUltcHJlc3Npb24nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09ICdSQVRJTkcnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVsnc2hvd0ltcHJlc3Npb25BdmVyYWdlSWNvbiddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWkgbWRpLWluZm8tb3V0bGluZSBzZWxsZXItdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNEaWZmZXJlbmNlKFJPV19EQVRBLmlzRGlmZmVyZW5jZUxlc3NUaGFuMjVQZXJjZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJwb3N0ZWQtYXZnLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInBvc3RlZEltcERpZmZlcmVuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdWJsaW5lLm9iamVjdEtleSA9PSAnZGVzY3JpcHRpb24nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLmRlc2NyaXB0aW9uTWVzc2FnZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFJlZmVyZW5jZU51bVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlJPV19EQVRBLmRlc2NyaXB0aW9uTWVzc2FnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgUk9XX0RBVEEuZGVzY3JpcHRpb25NZXNzYWdlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFJlZmVyZW5jZU51bSAhPSAnLScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQS5kZXNjcmlwdGlvbkVtYWlsUmVmZXJlbmNlTnVtICE9ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbWFpbCBSZWY6IHt7IFJPV19EQVRBLmRlc2NyaXB0aW9uRW1haWxSZWZlcmVuY2VOdW0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cInt7IFJPV19EQVRBLmRlc2NyaXB0aW9uRGV0YWlsc1VybCB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQS5kZXNjcmlwdGlvbkRldGFpbHNVcmxUeXBlID09PSAnUERGJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGVzY3JpcHRpb25EZXRhaWxzVXJsVHlwZSA9PT0gJ0VYQ0VMJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biB2aWV3RGV0YWlsc0FuZEVtYWlsQnRuXCI+RG93bmxvYWQ8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlJPV19EQVRBLmFjdGl2aXR5bmFtZS50b0xvd2VyQ2FzZSgpID09ICdvcmRlciBvbmJvYXJkZWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlJPV19EQVRBLmRlc2NyaXB0aW9uRGV0YWlsc1VybFR5cGUgPT09ICdMSU5LJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmlld0RldGFpbHNDbGlja2VkKFJPV19EQVRBKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gdmlld0RldGFpbHNBbmRFbWFpbEJ0biBvcmRlci1vbmJvYXJkZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IGRldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwie3sgUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFVybCB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQS5kZXNjcmlwdGlvbkVtYWlsVXJsICE9ICctJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFVybCAhPSAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biB2aWV3RGV0YWlsc0FuZEVtYWlsQnRuXCI+VmlldyBlbWFpbDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNOb0RhdGFUb0Rpc3BsYXlTdWJqZWN0JCB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBudWxsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgICA8YW5uYS1jb3JlLW5vLWRhdGEtbGliXG4gICAgICAgIFt3aWR0aF09XCJub0RhdGFXaWR0aFwiXG4gICAgICAgIFttYXJnaW5Ub3BdPVwibWFyZ2luVG9wXCJcbiAgICAgICAgKm5nSWY9XCJpc05vRGF0YVRvRGlzcGxheVN1YmplY3QkIHwgYXN5bmNcIlxuICAgID5cbiAgICA8L2FubmEtY29yZS1uby1kYXRhLWxpYj5cbjwvZGl2PlxuXG48IS0tIENoZWNrYm94IHRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNmaWx0ZXJUb29sdGlwPlxuICAgIDxhbm5hLWNvcmUtYW5uYS1jb2x1bW4tY2hlY2tib3gtZmlsdGVyXG4gICAgICAgIFt0YWJsZURhdGFdPVwidGFibGVEYXRhXCJcbiAgICAgICAgW3Nob3dGaWx0ZXJIZWFkZXJUYWJzXT1cInNob3dGaWx0ZXJUb29sdGlwVGFic1wiXG4gICAgICAgIFtpc0x1ckFuZENzckNvbXBvbmVudF09XCJmYWxzZVwiXG4gICAgICAgIFtjbG9uZWRUYWJsZURhdGFdPVwiY2xvbmVkVGFibGVEYXRhXCJcbiAgICAgICAgW2ZpbHRlclRhYk9iamVjdHNdPVwiZmlsdGVyVGFiT2JqZWN0c1wiXG4gICAgICAgIChmaWx0ZXJBcHBsaWVkVG9UYWJsZSk9XCJmaWx0ZXJBcHBsaWVkKCRldmVudClcIlxuICAgICAgICAoc29ydGluZ0FwcGxpZWRUb1RhYmxlKT1cInNvcnRpbmdBcHBsaWVkKCRldmVudClcIlxuICAgICAgICAoY2xvc2VUb29sdGlwKT1cImNsb3NlVG9vbHRpcCgpXCJcbiAgICA+XG4gICAgPC9hbm5hLWNvcmUtYW5uYS1jb2x1bW4tY2hlY2tib3gtZmlsdGVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBTbGlkZXIgdGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI3NsaWRlclRvb2xUaXA+XG4gICAgPGFubmEtY29yZS1hbm5hLWNvbHVtbi1zbGlkZXItZmlsdGVyXG4gICAgICAgIFt0YWJsZURhdGFdPVwidGFibGVEYXRhXCJcbiAgICAgICAgW3Nob3dGaWx0ZXJIZWFkZXJUYWJzXT1cInNob3dGaWx0ZXJUb29sdGlwVGFic1wiXG4gICAgICAgIFtpc0x1ckFuZENzckNvbXBvbmVudF09XCJmYWxzZVwiXG4gICAgICAgIFtjbG9uZWRUYWJsZURhdGFdPVwiY2xvbmVkVGFibGVEYXRhXCJcbiAgICAgICAgW2ZpbHRlclRhYk9iamVjdHNdPVwiZmlsdGVyVGFiT2JqZWN0c1wiXG4gICAgICAgIChmaWx0ZXJBcHBsaWVkVG9UYWJsZSk9XCJmaWx0ZXJBcHBsaWVkKCRldmVudClcIlxuICAgICAgICAoc29ydGluZ0FwcGxpZWRUb1RhYmxlKT1cInNvcnRpbmdBcHBsaWVkKCRldmVudClcIlxuICAgICAgICAoY2xvc2VUb29sdGlwKT1cImNsb3NlVG9vbHRpcCgpXCJcbiAgICA+XG4gICAgPC9hbm5hLWNvcmUtYW5uYS1jb2x1bW4tc2xpZGVyLWZpbHRlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRGF0ZSBQaWNrZXIgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI2RhdGVQaWNrZXJUb29sdGlwPlxuICAgIDxhbm5hLWNvcmUtYW5uYS1jb2x1bW4tZGF0ZS1yYW5nZS1maWx0ZXJcbiAgICAgICAgW3RhYmxlRGF0YV09XCJ0YWJsZURhdGFcIlxuICAgICAgICBbc2hvd0ZpbHRlckhlYWRlclRhYnNdPVwic2hvd0ZpbHRlclRvb2x0aXBUYWJzXCJcbiAgICAgICAgW2lzTHVyQW5kQ3NyQ29tcG9uZW50XT1cImZhbHNlXCJcbiAgICAgICAgW2Nsb25lZFRhYmxlRGF0YV09XCJjbG9uZWRUYWJsZURhdGFcIlxuICAgICAgICBbZmlsdGVyVGFiT2JqZWN0c109XCJmaWx0ZXJUYWJPYmplY3RzXCJcbiAgICAgICAgKGZpbHRlckFwcGxpZWRUb1RhYmxlKT1cImZpbHRlckFwcGxpZWQoJGV2ZW50KVwiXG4gICAgICAgIChzb3J0aW5nQXBwbGllZFRvVGFibGUpPVwic29ydGluZ0FwcGxpZWQoJGV2ZW50KVwiXG4gICAgICAgIChjbG9zZVRvb2x0aXApPVwiY2xvc2VUb29sdGlwKClcIlxuICAgID5cbiAgICA8L2FubmEtY29yZS1hbm5hLWNvbHVtbi1kYXRlLXJhbmdlLWZpbHRlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gV2VlayBQaWNrZXIgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI3dlZWtQaWNrZXJUb29sVGlwPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cIndlZWtwaWNrZXItY29udGFpbmVyXCI+XG4gICAgICAgIDxhbm5hLWNvcmUtd2Vlay1jYWxlbmRhci1maWx0ZXItbGliXG4gICAgICAgICAgICBbd2Vlay1jYWxlbmRhci1jb25maWddPVwiZ3RHZW5lcmFsQ29uZmlnLm11bHRpV2Vla1BpY2tlckNvbmZpZ1wiXG4gICAgICAgICAgICAoYXBwbHkpPVwiYXBwbHlXZWVrRmlsdGVyKCRldmVudClcIlxuICAgICAgICAgICAgW2Zyb20tZGF0ZV09XCJjYWxlbmRhck1pbkVuYWJsZWREYXRlXCJcbiAgICAgICAgICAgIFt0by1kYXRlXT1cImNhbGVuZGFyTWF4RW5hYmxlZERhdGVcIlxuICAgICAgICA+XG4gICAgICAgIDwvYW5uYS1jb3JlLXdlZWstY2FsZW5kYXItZmlsdGVyLWxpYj5cbiAgICA8L2Rpdj4gLS0+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFRpbWUgRmlsdGVyIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICN0aW1lRmlsdGVyVG9vbFRpcD5cbiAgICA8YW5uYS1jb3JlLWFubmEtY29sdW1uLXRpbWUtZmlsdGVyXG4gICAgICAgIFt0YWJsZURhdGFdPVwidGFibGVEYXRhXCJcbiAgICAgICAgW3Nob3dGaWx0ZXJIZWFkZXJUYWJzXT1cInNob3dGaWx0ZXJUb29sdGlwVGFic1wiXG4gICAgICAgIFtpc0x1ckFuZENzckNvbXBvbmVudF09XCJmYWxzZVwiXG4gICAgICAgIFtzaG93QWxsVGltZVJhbmdlQ2hlY2tib3hlc109XCJzaG93Q2hlY2tib3hlc0ZvclRpbWVGaWx0ZXJcIlxuICAgICAgICBbY2xvbmVkVGFibGVEYXRhXT1cImNsb25lZFRhYmxlRGF0YVwiXG4gICAgICAgIFtmaWx0ZXJUYWJPYmplY3RzXT1cImZpbHRlclRhYk9iamVjdHNcIlxuICAgICAgICAoZmlsdGVyQXBwbGllZFRvVGFibGUpPVwiZmlsdGVyQXBwbGllZCgkZXZlbnQpXCJcbiAgICAgICAgKHNvcnRpbmdBcHBsaWVkVG9UYWJsZSk9XCJzb3J0aW5nQXBwbGllZCgkZXZlbnQpXCJcbiAgICAgICAgKGNsb3NlVG9vbHRpcCk9XCJjbG9zZVRvb2x0aXAoKVwiXG4gICAgPlxuICAgIDwvYW5uYS1jb3JlLWFubmEtY29sdW1uLXRpbWUtZmlsdGVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb2x1bW5JbmZvVG9vbHRpcD5cbiAgICA8cCBzdHlsZT1cImNvbG9yOiBibGFjazsgd2hpdGUtc3BhY2U6IG5vd3JhcFwiPlRoaXMgcHJlZW1wdGlvbiBpcyByZWplY3RlZCBhbmQgbm90IG1hcmtlZCBmb3IgY3JlZGl0LjwvcD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcmF0aW5nSW5mb1Rvb2x0aXA+XG4gICAgPHAgY2xhc3M9XCJmaXJzdC1yb3dcIj5TaG93cyAnQm9va2VkIFJhdGluZycgZm9yIFByZWVtcHRpb25zICYgTWFrZUdvb2QgT2ZmZXJlZCBzcG90KHMpLjwvcD5cbiAgICA8cCBjbGFzcz1cInNlY29uZC1yb3dcIj5TaG93cyAnUHJvamVjdGVkIFJhdGluZycgZm9yIEFEVSBPZmZlcmVkIHNwb3QocykuPC9wPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbXBzSW5mb1Rvb2x0aXA+XG4gICAgPHAgY2xhc3M9XCJmaXJzdC1yb3dcIj5TaG93cyAnQm9va2VkIElNUFMnIGZvciBQcmVlbXB0aW9ucyAmIE1ha2VHb29kIE9mZmVyZWQgc3BvdChzKS48L3A+XG4gICAgPHAgY2xhc3M9XCJzZWNvbmQtcm93XCI+U2hvd3MgJ1Byb2plY3RlZCBJTVBTJyBmb3IgQURVIE9mZmVyZWQgc3BvdChzKS48L3A+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Nwb3RzQ29sdW1uRXF1aXZhbGl6YXRpb25NZXNzYWdlVG9vbHRpcD5cbiAgICA8cCBjbGFzcz1cInNwb3QtY29sdW1uLXRvb2x0aXAtbWVzc2FnZVwiPlxuICAgICAgICBUaGlzIGNvbnNpc3RzIG9mIGVxdWl2YWxpemVkIHNwb3RzIGFuZCB1bi1lcXVpdmFsaXplZCBQYWlkIFByb2dyYW1zICYgdW4tZXF1aXZhbGl6ZWQgTm9uLXNwb3RzLlxuICAgIDwvcD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdW5kZXJEZWxpdmVyeVRvb2x0aXA+XG4gICAgPHAgY2xhc3M9XCJzcG90LWNvbHVtbi10b29sdGlwLW1lc3NhZ2VcIj5cbiAgICAgICAgSW5kaWNhdGVzIHRoZSBVbmRlci1kZWxpdmVyeSBwZXJjZW50YWdlIGJhc2VkIG9uIGJvb2tlZCBhbmQgcG9zdGVkIFJURy9JTVBTLlxuICAgIDwvcD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjb3ZlckRlbGl2ZXJ5VG9vbHRpcD5cbiAgICA8cCBjbGFzcz1cInNwb3QtY29sdW1uLXRvb2x0aXAtbWVzc2FnZVwiPlxuICAgICAgICBJbmRpY2F0ZXMgdGhlIE92ZXItZGVsaXZlcnkgcGVyY2VudGFnZSBiYXNlZCBvbiBib29rZWQgYW5kIHBvc3RlZCBSVEcvSU1QUy5cbiAgICA8L3A+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3JhdGVJbmZvVG9vbHRpcD5cbiAgICA8cCBjbGFzcz1cImZpcnN0LXJvd1wiPlNob3dzICdCb29rZWQgUmF0ZScgZm9yIFByZWVtcHRpb25zICYgTWFrZUdvb2QgT2ZmZXJlZCBzcG90KHMpLjwvcD5cbiAgICA8cCBjbGFzcz1cInNlY29uZC1yb3dcIj5TaG93cyAnUHJvamVjdGVkICQgVmFsdWUnIGZvciBBRFUgT2ZmZXJlZCBzcG90KHMpLjwvcD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2VsbGVySGllcmFyY2h5VG9vbHRpcD5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsbGVyR3JvdXBIaWVyYXJjaHkubGVuZ3RoID4gMFwiPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImhpZXJhcmNoeS10YWJsZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInNlbGxlci1oaWVyYXJjaHktdGFibGVcIj5cbiAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4jPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5JbnZlbnRvcnkgQ29kZXM8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlByb2dyYW0vRGVzY3JpcHRpb248L3RoPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGRhdGEgb2Ygc2VsbGVyR3JvdXBIaWVyYXJjaHk7IGxldCB0b29sdGlwSW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IHRvb2x0aXBJbmRleCArIDEgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHNob3dFbGxpcHNpc1RleHRPbkhvdmVyPnt7IGRhdGEuSW52ZW50b3J5Q29kZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc2hvd0VsbGlwc2lzVGV4dE9uSG92ZXI+e3sgZGF0YS5Qcm9ncmFtIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxsZXJHcm91cEhpZXJhcmNoeS5sZW5ndGggPT0gMFwiPlxuICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiAjMDAwXCI+U2VsbGVyIGdyb3VwIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgaW52ZW50b3J5IGNvZGU8L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2x1clZpb2xhdGlvbkluZm9Ub29sdGlwPlxuICAgIDxwIGNsYXNzPVwiZmlyc3Qtcm93XCI+VGhlIHZhbHVlcyBhcmUgZm9yIHRoZSBlbnRpcmUgd2Vlay48L3A+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Bvc3RlZFJhdGluZ0RpZmZlcmVuY2U+XG4gICAgPHAgY2xhc3M9XCJkaWZmZXJlbmNlLXRleHRcIj5cbiAgICAgICAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBwb3N0ZWQgYW5kIGJvb2tlZCBhdmVyYWdlIHJhdGluZyBpc1xuICAgICAgICB7eyBpc0RpZmZlcmVuY2VMZXNzVGhhbjI1UGVyY2VudCA/IFwibGVzc1wiIDogXCJtb3JlXCIgfX0gdGhhbiAyNSUuXG4gICAgPC9wPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNwb3N0ZWRJbXBEaWZmZXJlbmNlPlxuICAgIDxwIGNsYXNzPVwiZGlmZmVyZW5jZS10ZXh0XCI+XG4gICAgICAgIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gcG9zdGVkIGFuZCBib29rZWQgYXZlcmFnZSBpbXByZXNzaW9uIGlzXG4gICAgICAgIHt7IGlzRGlmZmVyZW5jZUxlc3NUaGFuMjVQZXJjZW50ID8gXCJsZXNzXCIgOiBcIm1vcmVcIiB9fSB0aGFuIDI1JS5cbiAgICA8L3A+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI29uZ29pbmdSZXZCb29rZWRDb2x1bW5Ub29sdGlwPlxuICAgIDxwPlRoZSBCb29rZWQgJCB2YWx1ZSwgU3BvdHMsIEdSUCwgQ1BQLCBJTVBTLCBDUE0gY29ycmVzcG9uZHMgb24gdGhlIGxhc3QgcGVybWFuZW50IHJldmlzaW9uIGdlbmVyYXRlZDwvcD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29tcGxldGVkUmV2Qm9va2VkQ29sdW1uVG9vbHRpcD5cbiAgICA8cD5UaGUgQm9va2VkICQgdmFsdWUgY29ycmVzcG9uZHMgb24gdGhlIGxhc3QgcGVybWFuZW50IHJldmlzaW9uIGdlbmVyYXRlZDwvcD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYXZnQm9va2VkUmF0ZT5cbiAgICA8cD5UaGlzIGlzIHRoZSBib29rZWQgYXZlcmFnZSBSYXRlPC9wPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhdmdCb29rZWRSdGc+XG4gICAgPHA+VGhpcyBpcyB0aGUgYm9va2VkIGF2ZXJhZ2UgUlRHPC9wPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhdmdCb29rZWRJbXBzPlxuICAgIDxwPlRoaXMgaXMgdGhlIGJvb2tlZCBhdmVyYWdlIElNUCjigJkwMDApPC9wPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNwcm9qZWN0ZWRJbXBzUnRnPlxuICAgIDxwPlxuICAgICAgICBBbGwgcHJvamVjdGlvbnMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgc3VtIG9mIGFjdHVhbCBwb3N0ZWQgaW5mb3JtYXRpb24gdW50aWwgdGhlIGxhc3QgcG9zdGVkIGRhdGUgYW5kIGVzdGltYXRlc1xuICAgICAgICBmb3IgdGhlIHJlbWFpbmluZyBzZWxlY3RlZCBwZXJpb2QuXG4gICAgPC9wPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhdXRvbWF0aW9uVG9vbHRpcD5cbiAgICA8cD5cbiAgICAgICAgUGxlYXNlIGdldCB0aGUgb3JkZXIgYnVzaW5lc3MgcnVsZXMgYXBwcm92ZWQgdG8gYWN0aXZhdGUgdGhlIG9yZGVyIGZvciBhdXRvbWF0aW9uLiBPbmx5IGZvciB0aGVcbiAgICAgICAgYXV0b21hdGlvbi1hY3RpdmF0ZWQgb3JkZXJzLCBhbnkgYXBwcm92ZWQgTUdzLCBBRFVzLCBvciBjcmVkaXRlZCBzcG90cyBvbiBBTk5BIHdpbGwgYmUgZmVkIGludG8gdGhlIHRyYWZmaWNcbiAgICAgICAgc3lzdGVtIGkuZS4gQU5OQSByZXZpc2lvbnMuXG4gICAgICAgIDwhLS0gcmVtb3ZlZCBiZWxvdyBsaW5lIGFzIHBhcnQgb2YgZW5oYW5jbWVubnQgaW4gMTQuMCByZWxlYXMgLS0+XG4gICAgICAgIDwhLS0gQWRkaXRpb25hbGx5LCBBTk5BIHdpbGwgb25seSBlbnRlciBidXllciByZXZpc2lvbnMgaW50byB0cmFmZmljIGZvciB0aGUgc2VsZWN0ZWRcbiAgICAgICAgTWVkaWFsaW5lL1dPQyBvcmRlcnMuIC0tPlxuICAgIDwvcD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcmViYXRlSW1wYWN0PlxuICAgIDxwPlJlYmF0ZSBpbXBhY3QgdmFsdWUgaXMgZm9yIHRoZSBvcmlnaW5hbGx5IG9yZGVyZWQgc3BvdCBsZW5ndGggYW5kIGlzIG5vdCBlcXVpdmFsaXplZC48L3A+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2x1clZpb2xhdGlvblRvdGFsUm93VG9vbFRpcD5cbiAgICA8dWw+XG4gICAgICAgIDxsaT5cbiAgICAgICAgICAgIDxzdHJvbmc+UE9MSVRJQ0FMIFJBVEUgVklPTEFUSU9OUzo8L3N0cm9uZz5cbiAgICAgICAgICAgIFZpb2xhdGlvbnMgZmxhZ2dlZCB3aGVuIG5vbi1wb2xpdGljYWwgc3BvdHMgYXJlIGJvb2tlZCBhdCBhIHJhdGUgbG93ZXIgdGhhbiB0aGUgbWluaW11bSBib29rZWQgcmF0ZSBmb3JcbiAgICAgICAgICAgIHBvbGl0aWNhbCBjYW5kaWRhdGVzIGZvciB0aGUgc2FtZSB3ZWVrLCBJbnZlbnRvcnkgQ29kZSBhbmQgUmV2ZW51ZSBDbGFzcy5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPlxuICAgICAgICAgICAgPHN0cm9uZz5DQU5ESURBVEUgVE8gQ0FORElEQVRFIFZJT0xBVElPTjo8L3N0cm9uZz5cbiAgICAgICAgICAgIFZpb2xhdGlvbnMgZmxhZ2dlZCB3aGVuIHBvbGl0aWNhbCBzcG90cyBhcmUgYm9va2VkIGF0IGRpZmZlcmVudCByYXRlcyB0byBvdGhlciBwb2xpdGljYWwgc3BvdHMgZm9yIHRoZSBzYW1lXG4gICAgICAgICAgICB3ZWVrLCBJbnZlbnRvcnkgQ29kZSBhbmQgUmV2ZW51ZSBDbGFzcy5cbiAgICAgICAgPC9saT5cbiAgICA8L3VsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjaXJjdWxhclByb2dyZXNzQmFyPlxuICAgIDxjaXJjbGUtcHJvZ3Jlc3NcbiAgICAgICAgW3BlcmNlbnRdPVwicGVyY2VudERvbmVcIlxuICAgICAgICBbcmFkaXVzXT1cIjVcIlxuICAgICAgICBbc2hvd1RpdGxlXT1cImZhbHNlXCJcbiAgICAgICAgW3Nob3dVbml0c109XCJmYWxzZVwiXG4gICAgICAgIFtzaG93U3VidGl0bGVdPVwiZmFsc2VcIlxuICAgICAgICBbb3V0ZXJTdHJva2VXaWR0aF09XCIzXCJcbiAgICAgICAgW2lubmVyU3Ryb2tlV2lkdGhdPVwiM1wiXG4gICAgICAgIFtzcGFjZV09XCItM1wiXG4gICAgICAgIFtvdXRlclN0cm9rZUNvbG9yXT1cIicjMjY4YmZmJ1wiXG4gICAgICAgIFtpbm5lclN0cm9rZUNvbG9yXT1cIicjZDVkNWQ1J1wiXG4gICAgICAgIFthbmltYXRpb25EdXJhdGlvbl09XCIxMFwiXG4gICAgPjwvY2lyY2xlLXByb2dyZXNzPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN1c2VyTG9nZ2VkSW5EZXRhaWxzPlxuICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwLWRpdi1jb250YWluZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF0YSBvZiB0ZXh0QWN0aW9uVG9vbHRpcFwiPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXRhLmtleSAhPSAncmVhZCdcIj5cbiAgICAgICAgICAgICAgICB7eyBkYXRhLmtleSB9fSA8Yj4ge3sgZGF0YS52YWx1ZSB9fTwvYj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF0YS5rZXkgPT0gJ3JlYWQnXCI+XG4gICAgICAgICAgICAgICAge3sgZGF0YS52YWx1ZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWFya0FzUmVhZFRpcD5cbiAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uLXRvb2x0aXAtZGl2LWNvbnRhaW5lclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRleHRBY3Rpb25Ub29sdGlwXCI+XG4gICAgICAgICAgICB7eyBkYXRhLnZhbHVlIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0ZXh0QWN0aW9uVG9vbHRpcFRlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGV4dEFjdGlvblRvb2x0aXBcIj5cbiAgICAgICAge3sgZGF0YS5rZXkgfX0gPGI+IHt7IGRhdGEudmFsdWUgfX08L2I+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Rvb2x0aXBDb250YWluaW5nVGFibGVUZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwidG9vbHRpcENvbnRhaW5pbmdUYWJsZVwiXG4gICAgICAgIFtpbm5lckhUTUxdPVwidG9vbHRpcENvbnRhaW5pbmdUYWJsZS5pbm5lckh0bWxcIlxuICAgICAgICBjbGFzcz1cIm5vdGlmaWNhdGlvbi10b29sdGlwLWRpdi1jb250YWluZXJcIlxuICAgID5cbiAgICAgICAgPCEtLSA8dWw+XG4gICAgICA8bGkgKm5nRm9yPVwibGV0IGhlYWRlck1zZyBvZiB0b29sdGlwQ29udGFpbmluZ1RhYmxlLnRhYmxlSGVhZGVyTXNnXCI+XG4gICAgICAgIDxiPiB7e2hlYWRlck1zZ319ICA8L2I+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG5cbiAgICA8dGFibGUgY2xhc3M9XCJ0b29sdGlwLXRhYmxlXCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGhlYWRlciBvZiB0b29sdGlwQ29udGFpbmluZ1RhYmxlLnRvb2x0aXBUYWJsZUhlYWRlclwiPlxuICAgICAgICAgICAge3sgaGVhZGVyfX1cbiAgICAgICAgICA8L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3dzIG9mIHRvb2x0aXBDb250YWluaW5nVGFibGUudG9vbHRpcFRhYmxlQm9keVwiPlxuICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgZGF0YSBvZiByb3dzXCI+XG4gICAgICAgICAgICB7eyBkYXRhIH19XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cblxuICAgIDx1bD5cbiAgICAgIDxsaSBzdHlsZT1cIm1hcmdpbi10b3A6MTBweDsgcGFkZGluZzowXCIgKm5nRm9yPVwibGV0IGZvb3Rlck1zZyBvZiB0b29sdGlwQ29udGFpbmluZ1RhYmxlLnRhYmxlRm9vdGVyTXNnXCI+XG4gICAgICAgIHt7IGZvb3Rlck1zZyB9fSBcbiAgICAgIDwvbGk+XG4gICAgPC91bD4gLS0+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPCEtLSA8bmctdGVtcGxhdGUgI3RleHRBY3Rpb25Ub29sdGlwVGVtcGxhdGU+XG4gICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRleHRBY3Rpb25Ub29sdGlwXCI+XG4gICAgICB7eyBkYXRhLmtleSB9fSA8Yj4ge3tkYXRhLnZhbHVlfX08L2I+XG4gICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+IC0tPlxuIl19
884
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWdlbmVyaWMtdGFibGUtbGliL2NvbXBvbmVudHMvYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS9hbm5hLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtZ2VuZXJpYy10YWJsZS1saWIvY29tcG9uZW50cy9hbm5hLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlL2FubmEtbm9uLWVkaXRhYmxlLWdlbmVyaWMtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLE9BQU8sRUFDSCxTQUFTLEVBRVQsS0FBSyxFQUNMLFlBQVksRUFDWixTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksRUFHWixpQkFBaUIsRUFHakIsdUJBQXVCLEdBQzFCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLGdDQUFnQztBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFTckQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFNakgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDM0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JB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O3NCQUF0QyxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUVJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csMEJBQTBCO3NCQUFuQyxNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyw2QkFBNkI7c0JBQXRDLE1BQU07Z0JBbUNzQixxQkFBcUI7c0JBQWpELFlBQVk7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXIgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIE9uSW5pdCxcclxuICAgIElucHV0LFxyXG4gICAgVmlld0NoaWxkcmVuLFxyXG4gICAgUXVlcnlMaXN0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEFmdGVyVmlld0NoZWNrZWQsXHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLy8gVGhpcmQgcGFydHkgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc0VxdWFsLCB1bmlxIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xyXG5cclxuLy9zdWItZW50cmllcyBvZiBhbm5hIGxpYiBpbXBvcnQgc3RhdGVtZW50XHJcbmltcG9ydCB7XHJcbiAgICBJR3RHZW5lcmFsQ29uZmlnLFxyXG4gICAgSUd0VGFibGVIZWFkZXIsXHJcbiAgICBJSGVhZGVySW5mbyxcclxuICAgIElUb3RhbFJvd0luZm8sXHJcbn0gZnJvbSBcIi4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLW5vbi1lZGl0YWJsZS1ndC1tb2RlbHNcIjtcclxuaW1wb3J0IHsgQW5uYURhdGVUaW1lRm9ybWF0U2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9zZXJ2aWNlcy9hbm5hLWRhdGUtdGltZS1mb3JtYXQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBJV2Vla0NhbGVuZGFyIH0gZnJvbSBcIi4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLWdsb2JhbC1kcm9wZG93bi1jb25maWcubW9kZWxcIjtcclxuaW1wb3J0IHtcclxuICAgIEd0Q29sdW1uSWNvbkVtaXR0ZWREYXRhLFxyXG4gICAgUmF0aW5nU2VsbGVyR3JvdXBIaWVyYXJjaHksXHJcbn0gZnJvbSBcIi4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLWdlbmVyaWMtZGF0YS10eXBlLm1vZGVsXCI7XHJcbmltcG9ydCB7IHJhZGlvQnV0dG9uTW9kZWwgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvbW9kZWxzL2FubmEtdG9vbHRpcC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBBbm5hU29ydFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1zb3J0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQW5uYUZpbHRlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1maWx0ZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBOZ0NpcmNsZVByb2dyZXNzTW9kdWxlIH0gZnJvbSBcIm5nLWNpcmNsZS1wcm9ncmVzc1wiO1xyXG5pbXBvcnQgeyBBbm5hQ29sdW1uVGltZUZpbHRlckNvbXBvbmVudCB9IGZyb20gXCIuLi9hbm5hLWNvbHVtbi1maWx0ZXJzL2FubmEtY29sdW1uLXRpbWUtZmlsdGVyL2FubmEtY29sdW1uLXRpbWUtZmlsdGVyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBBbm5hQ29sdW1uRGF0ZVJhbmdlRmlsdGVyQ29tcG9uZW50IH0gZnJvbSBcIi4uL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tZGF0ZS1yYW5nZS1maWx0ZXIvYW5uYS1jb2x1bW4tZGF0ZS1yYW5nZS1maWx0ZXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEFubmFDb2x1bW5TbGlkZXJGaWx0ZXJDb21wb25lbnQgfSBmcm9tIFwiLi4vYW5uYS1jb2x1bW4tZmlsdGVycy9hbm5hLWNvbHVtbi1zbGlkZXItZmlsdGVyL2FubmEtY29sdW1uLXNsaWRlci1maWx0ZXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEFubmFDb2x1bW5DaGVja2JveEZpbHRlckNvbXBvbmVudCB9IGZyb20gXCIuLi9hbm5hLWNvbHVtbi1maWx0ZXJzL2FubmEtY29sdW1uLWNoZWNrYm94LWZpbHRlci9hbm5hLWNvbHVtbi1jaGVja2JveC1maWx0ZXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEFubmFOb0RhdGFDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvY29tcG9uZW50cy9hbm5hLW5vLWRhdGEvYW5uYS1uby1kYXRhLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBNYXRSYWRpb01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9yYWRpb1wiO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBBbm5hSWNvbkNvbHVtbkNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9jb21wb25lbnRzL2FubmEtaWNvbi1jb2x1bW4vYW5uYS1pY29uLWNvbHVtbi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgc2hvd0VsbGlwc2lzVGV4dE9uSG92ZXJEaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvZGlyZWN0aXZlcy9zaG93LWVsbGlwc2lzLXRleHQvc2hvdy1lbGxpcHNpcy10ZXh0LmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBOZ3hTa2VsZXRvbkxvYWRlck1vZHVsZSB9IGZyb20gXCJuZ3gtc2tlbGV0b24tbG9hZGVyXCI7XHJcbmltcG9ydCB7IE5nYlRvb2x0aXAgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgTWF0VGFibGVNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGVcIjtcclxuaW1wb3J0IHtcclxuICAgIE5nQ2xhc3MsXHJcbiAgICBOZ1N0eWxlLFxyXG4gICAgTmdGb3IsXHJcbiAgICBOZ0lmLFxyXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcclxuICAgIE5nU3dpdGNoLFxyXG4gICAgTmdTd2l0Y2hDYXNlLFxyXG4gICAgTmdTd2l0Y2hEZWZhdWx0LFxyXG4gICAgQXN5bmNQaXBlLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuXHJcbmludGVyZmFjZSBrZXlWYWx1ZVRvb2x0aXBUeXBlIHtcclxuICAgIGtleTogc3RyaW5nO1xyXG4gICAgdmFsdWU6IHN0cmluZztcclxufVxyXG5pbnRlcmZhY2UgdGFibGVUb29sdGlwVHlwZSB7XHJcbiAgICB0b29sdGlwVGFibGVIZWFkZXI6IHN0cmluZ1tdO1xyXG4gICAgdG9vbHRpcFRhYmxlQm9keTogc3RyaW5nW11bXTtcclxuICAgIHRhYmxlSGVhZGVyTXNnOiBzdHJpbmdbXTtcclxuICAgIHRhYmxlRm9vdGVyTXNnOiBzdHJpbmdbXTtcclxuICAgIGlubmVySHRtbDogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImFubmEtY29yZS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS1saWJcIixcclxuICAgIHRlbXBsYXRlVXJsOiBcIi4vYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gICAgc3R5bGVVcmxzOiBbXCIuL2FubmEtbm9uLWVkaXRhYmxlLWdlbmVyaWMtdGFibGUuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgTmdDbGFzcyxcclxuICAgICAgICBOZ1N0eWxlLFxyXG4gICAgICAgIE1hdFRhYmxlTW9kdWxlLFxyXG4gICAgICAgIE5nRm9yLFxyXG4gICAgICAgIE5nSWYsXHJcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcclxuICAgICAgICBOZ2JUb29sdGlwLFxyXG4gICAgICAgIE5neFNrZWxldG9uTG9hZGVyTW9kdWxlLFxyXG4gICAgICAgIHNob3dFbGxpcHNpc1RleHRPbkhvdmVyRGlyZWN0aXZlLFxyXG4gICAgICAgIE5nU3dpdGNoLFxyXG4gICAgICAgIE5nU3dpdGNoQ2FzZSxcclxuICAgICAgICBBbm5hSWNvbkNvbHVtbkNvbXBvbmVudCxcclxuICAgICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgICBNYXRSYWRpb01vZHVsZSxcclxuICAgICAgICBOZ1N3aXRjaERlZmF1bHQsXHJcbiAgICAgICAgQW5uYU5vRGF0YUNvbXBvbmVudCxcclxuICAgICAgICBBbm5hQ29sdW1uQ2hlY2tib3hGaWx0ZXJDb21wb25lbnQsXHJcbiAgICAgICAgQW5uYUNvbHVtblNsaWRlckZpbHRlckNvbXBvbmVudCxcclxuICAgICAgICBBbm5hQ29sdW1uRGF0ZVJhbmdlRmlsdGVyQ29tcG9uZW50LFxyXG4gICAgICAgIEFubmFDb2x1bW5UaW1lRmlsdGVyQ29tcG9uZW50LFxyXG4gICAgICAgIE5nQ2lyY2xlUHJvZ3Jlc3NNb2R1bGUsXHJcbiAgICAgICAgQXN5bmNQaXBlLFxyXG4gICAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFubmFOb25FZGl0YWJsZUdlbmVyaWNUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdDaGVja2VkIHtcclxuICAgIEBJbnB1dCgpIHNob3dTa2VsZXRvbkxvYWRpbmc6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSB0YWJsZUhlYWRlcnM6IElHdFRhYmxlSGVhZGVyW107XHJcbiAgICBASW5wdXQoKSB0YWJsZURhdGE6IGFueVtdO1xyXG4gICAgQElucHV0KCkgY2xvbmVkVGFibGVEYXRhOiBhbnlbXTtcclxuICAgIEBJbnB1dCgpIGd0R2VuZXJhbENvbmZpZzogSUd0R2VuZXJhbENvbmZpZztcclxuICAgIEBJbnB1dCgpIHRvdGFsUm93SW5mbz86IElUb3RhbFJvd0luZm9bXTtcclxuICAgIEBJbnB1dCgpIGd0RGltZW5zaW9uOiB7XHJcbiAgICAgICAgcm93SGVpZ2h0OiBudW1iZXI7XHJcbiAgICAgICAgaGVhZGVySGVpZ2h0OiBudW1iZXI7XHJcbiAgICAgICAgZGF0YU9uVG9wSGVpZ2h0OiBudW1iZXI7XHJcbiAgICAgICAgbWFyZ2luRnJvbUJvdHRvbTogbnVtYmVyO1xyXG4gICAgICAgIHRhYmxlSGVpZ2h0Pzogc3RyaW5nO1xyXG4gICAgfTtcclxuICAgIEBJbnB1dCgpIHRhYmxlQ2xhc3M6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIG1heGltdW1Sb3dzV2hpY2hDYW5CZVJlbmRlcmVkV2l0aG91dFNjcm9sbDogbnVtYmVyID0gNTtcclxuICAgIEBJbnB1dCgpIGZpeE51bWJlck9mUm93c0ZvclBvcHVwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBsaW1pdDogbnVtYmVyID0gMzA7XHJcbiAgICBASW5wdXQoKSBpbmNsdWRlQm9yZGVySW5UYWJsZUhlaWdodDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBkb3dubG9hZEluUHJvZ3Jlc3M6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBwZXJjZW50RG9uZTogbnVtYmVyO1xyXG4gICAgQElucHV0KCkgc3RhcnJlZEluUHJvZ3Jlc3M6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBjbGlja2FibGVSb3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHNldFRhYmxlSGVpZ2h0V2hlblJvd1NpemVJc0ZpeGVkOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIHRhYmxlQm9yZGVyQm90dG9tQ2xhc3NSZXF1aXJlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBoaWRlU29tZVRkczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgdGRzSGF2ZVJvd1NwYW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIG11bHRpcGxlVGFibGVzUHJlc2VudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgc2hvd09ySGlkZVRvZ2dsZUZvclRvdGFsUm93OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgQE91dHB1dCgpIHRvZ2dsZUNoZWNrYm94ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIHRvZ2dsZVJvd0NoZWNrYm94ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIHRvZ2dsZUhlYWRlckNoZWNrYm94ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIHVuZG9JY29uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBmaWx0ZXJBcHBsaWVkVG9UYWJsZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBzb3J0aW5nQXBwbGllZFRvVGFibGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgcm93Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSByYWRpb0J1dHRvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIGNvbHVtbkZpbHRlck9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBjb2x1bW5GaWx0ZXJDbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgZ3RJY29uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBndFNWR0ljb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIGd0VGV4dEFjdGlvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgZ3RWaWV3RGV0YWlsQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBndElubmVySFRNTENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgZG93bmxvYWRTcG90RGV0YWlscyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBjbGlja2FibGVEYXRhQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSB0b3RhbFJvd0ljb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIG5vdGlmaWNhdGlvbkljb25Ib3ZlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBub3RpZmljYXRpb25JY29uSG92ZXJMZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBlZGl0YWJsZUlucHV0RWRpdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIHJhZGlvQnV0dG9uTWVzc2FnZUljb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIG51bWJlck9mU2tlbGV0b25Sb3dzOiBudW1iZXJbXVtdID0gQXJyYXkoMjApLmZpbGwoMCk7XHJcbiAgICB0YWJsZURhdGFXcmFwcGVyOiBhbnlbXTtcclxuICAgIHJvd0NoZWNrZWQ6IGJvb2xlYW47XHJcbiAgICBpc0FsbFJvd3NDaGVja2VkOiBib29sZWFuO1xyXG4gICAgbm9EYXRhV2lkdGg6IHN0cmluZyA9IFwiNTAlXCI7XHJcbiAgICBtYXJrZWRGb3JDcmVkaXRTdGF0dXM6IHN0cmluZztcclxuICAgIG1hcmtlZEZvck1HU3RhdHVzOiBzdHJpbmc7XHJcbiAgICBmaWx0ZXJBbGlnbm1lbnQ6IHN0cmluZyA9IFwiYm90dG9tIGF1dG9cIjtcclxuXHJcbiAgICAvL1NvcnQgYW5kIEZpbHRlclxyXG4gICAgdG9vbHRpcFJhZGlvVGV4dE1hcDogTWFwPGFueSwgYW55PjtcclxuICAgIGZpbHRlclRhYk9iamVjdHM6IGFueVtdO1xyXG4gICAgdG9vbHRpcDogYW55O1xyXG4gICAgZGlzYWJsZUNvbHVtbkNsZWFyQWxsQnRuOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIG1hcmdpbiA9IDU7XHJcblxyXG4gICAgLy9XZWVrIEZpbHRlclxyXG4gICAgbXVsdGlXZWVrUGlja2VyQ29uZmlnOiBJV2Vla0NhbGVuZGFyO1xyXG5cclxuICAgIHRhYmxlQ29sdW1uczogc3RyaW5nW10gPSBbXTtcclxuICAgIHRvdGFsUm93Q29sdW1uczogc3RyaW5nW10gPSBudWxsO1xyXG4gICAgYmluZFZhbHVlRnVuY0NhbGxlZDogYm9vbGVhbjtcclxuXHJcbiAgICBoaWVyYXJjaHlUb29sdGlwOiB7IG9wZW46ICgpID0+IHZvaWQ7IGNsb3NlOiAoKSA9PiB2b2lkIH07XHJcbiAgICBzZWxsZXJHcm91cEhpZXJhcmNoeTogUmF0aW5nU2VsbGVyR3JvdXBIaWVyYXJjaHlbXTtcclxuICAgIHNob3dGaWx0ZXJUb29sdGlwVGFiczogYm9vbGVhbjsgLy9DaGFuZ2UgdGhlIE5hbWVcclxuXHJcbiAgICBpc1Njcm9sbGVkTGVmdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcm93Qm9yZGVyV2lkdGg6IG51bWJlciA9IDI7XHJcblxyXG4gICAgc2FtZVRvb2x0aXBDbGlja2VkOiBib29sZWFuO1xyXG4gICAgaXNTY3JvbGxFbmRlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBtYXJnaW5Ub3A6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBAVmlld0NoaWxkcmVuKFwidGFibGVIZWFkZXJcIikgdmlld0NoaWxkVGFibGVIZWFkZXJzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcblxyXG4gICAgaXNEaWZmZXJlbmNlTGVzc1RoYW4yNVBlcmNlbnQ6IGJvb2xlYW47XHJcbiAgICBzdGFydDogbnVtYmVyID0gMDtcclxuICAgIGVuZDogbnVtYmVyID0gdGhpcy5saW1pdCArIHRoaXMuc3RhcnQ7XHJcbiAgICByZW5kZXJlZERhdGE6IGFueVtdO1xyXG4gICAgc2VsZWN0ZWRJbnZlbnRvcnlJZEZvckRvd25sb2FkOiBudW1iZXI7XHJcbiAgICBzZWxlY3RlZERlbW9ncmFwaGljRm9yRG93bmxvYWQ6IGFueTtcclxuICAgIHNlbGVjdGVkUm93VHlwZUZvckRvd25sb2FkOiBzdHJpbmc7XHJcbiAgICBoZWlnaHRPZkNoZWNrYm94VG9vbHRpcEZpbHRlcjogbnVtYmVyO1xyXG4gICAgaXNOb0RhdGFUb0Rpc3BsYXlTdWJqZWN0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgc2VsZWN0ZWRTdGFycmVkT3JkZXJJZDogc3RyaW5nO1xyXG5cclxuICAgIHRleHRBY3Rpb25Ub29sdGlwOiBrZXlWYWx1ZVRvb2x0aXBUeXBlW10gPSBbXTtcclxuICAgIHRvb2x0aXBDb250YWluaW5nVGFibGU6IHRhYmxlVG9vbHRpcFR5cGUgPSBudWxsO1xyXG4gICAgdGFibGVCb3R0b21Cb3JkZXJDbGFzczogc3RyaW5nID0gbnVsbDtcclxuICAgIHNob3dDaGVja2JveGVzRm9yVGltZUZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByaXZhdGUgYW5uYVNvcnRTZXJ2aWNlOiBBbm5hU29ydFNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2U6IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGFubmFGaWx0ZXJTZXJ2aWNlOiBBbm5hRmlsdGVyU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuc2V0VG9vbHRpcFJhZGlvTmFtZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXRNYXJnaW5MZWZ0Rm9yRmlsdGVySWNvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShgLS1oaWRlLXRvdGFsLXJvdy1zY3JvbGxiYXItb2Zmc2V0YCwgJzBweCcpO1xyXG4gICAgICAgIHRoaXMuc2V0RmlsdGVyQWxpZ25tZW50QmFzZWRPblNjcmVlblJlc29sdXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBkZXRlY3RDaGFuZ2VzKCkge1xyXG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGNoYW5nZXMgJiZcclxuICAgICAgICAgICAgY2hhbmdlc1tcImd0RGltZW5zaW9uXCJdICYmXHJcbiAgICAgICAgICAgIGNoYW5nZXNbXCJndERpbWVuc2lvblwiXS5jdXJyZW50VmFsdWUgJiZcclxuICAgICAgICAgICAgdGhpcy5zZXRUYWJsZUhlaWdodFdoZW5Sb3dTaXplSXNGaXhlZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlSGVpZ2h0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVCb3R0b21Cb3JkZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd1NrZWxldG9uTG9hZGluZykge1xyXG4gICAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMubnVtYmVyT2ZTa2VsZXRvblJvd3M7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZWREYXRhID0gdGhpcy5udW1iZXJPZlNrZWxldG9uUm93cztcclxuICAgICAgICAgICAgdGhpcy5pc05vRGF0YVRvRGlzcGxheVN1YmplY3QkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlQm90dG9tQm9yZGVyKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgY2hhbmdlc1tcInBlcmNlbnREb25lXCJdIHx8XHJcbiAgICAgICAgICAgIGNoYW5nZXNbXCJkb3dubG9hZEluUHJvZ3Jlc3NcIl0gfHxcclxuICAgICAgICAgICAgKGNoYW5nZXNbXCJzdGFycmVkSW5Qcm9ncmVzc1wiXSAmJiBjaGFuZ2VzW1wic3RhcnJlZEluUHJvZ3Jlc3NcIl0uY3VycmVudFZhbHVlICE9IHVuZGVmaW5lZClcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgLy9ubyB0YXNrIHdpbGwgYmUgcGVyZm9ybWVkXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFsUm93c0ZvclRhYmxlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZUVuYWJsZUVhY2hDb2x1bW5Ub29sdGlwSWNvbigpO1xyXG4gICAgICAgICAgICB0aGlzLnRhYmxlQ29sdW1ucyA9IHRoaXMudGFibGVIZWFkZXJzLmZpbHRlcigoeCkgPT4geC52aXNpYmxlKS5tYXAoKHgpID0+IHguaGVhZGVySW5mb1swXS5vYmplY3RLZXkpO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAodGhpcy50YWJsZURhdGEgJiYgdGhpcy50YWJsZURhdGEubGVuZ3RoID09IDApIHx8XHJcbiAgICAgICAgICAgICAgICAodGhpcy50YWJsZURhdGEubGVuZ3RoID09IDIgJiYgdGhpcy5jaGVja0lmQWxsVGhlRWxlbWVudHNBcmVaZXJvKCkpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZURhdGEgPSBBcnJheSgyKS5maWxsKDApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlZERhdGEgPSBjbG9uZURlZXAodGhpcy50YWJsZURhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXJnaW5Ub3AgPSAtdGhpcy5ndERpbWVuc2lvbi5yb3dIZWlnaHQgLSB0aGlzLmd0RGltZW5zaW9uLnJvd0hlaWdodCAvIDIgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNOb0RhdGFUb0Rpc3BsYXlTdWJqZWN0JC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zaG93U2tlbGV0b25Mb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVCb3R0b21Cb3JkZXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vc2V0dGluZyB0YWJsZSBjb2x1bW4gaGVyZSBhcyB3ZWxsIGJlY2F1c2Ugd2hpbGUgc2hvd2luZyBza2VsZXRvbiBsb2FkZXIsIHdlIHNob3VsZCBzaG93IHRhYmxlIGhlYWRlcnMuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBjaGFuZ2VzW1widGFibGVIZWFkZXJzXCJdICYmXHJcbiAgICAgICAgICAgICFpc0VxdWFsKGNoYW5nZXNbXCJ0YWJsZUhlYWRlcnNcIl0uY3VycmVudFZhbHVlLCBjaGFuZ2VzW1widGFibGVIZWFkZXJzXCJdLnByZXZpb3VzVmFsdWUpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVDb2x1bW5zID0gdGhpcy50YWJsZUhlYWRlcnMuZmlsdGVyKCh4KSA9PiB4LnZpc2libGUpLm1hcCgoeCkgPT4geC5oZWFkZXJJbmZvWzBdLm9iamVjdEtleSk7XHJcbiAgICAgICAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZSA9IG5ldyBNYXAoKTtcclxuICAgICAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbml0aWFsVmFsdWVNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuc2V0Q29sdW1uU29ydFN0YXRlTWFwKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlU3RhdGVPYmplY3QoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjaGFuZ2VzW1widG90YWxSb3dJbmZvXCJdICYmIGNoYW5nZXNbXCJ0b3RhbFJvd0luZm9cIl0uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG90YWxSb3dDb2x1bW5zID0gdGhpcy50b3RhbFJvd0luZm8ubWFwKCh4KSA9PiB4LmNvbE5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRGaWx0ZXJBbGlnbm1lbnRCYXNlZE9uU2NyZWVuUmVzb2x1dGlvbigpIHtcclxuICAgICAgICBsZXQgdmlld3BvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XHJcbiAgICAgICAgaWYgKHZpZXdwb3J0SGVpZ2h0IDwgNzQwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyQWxpZ25tZW50ID0gXCJsZWZ0IHJpZ2h0XCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJBbGlnbm1lbnQgPSBcImJvdHRvbSBsZWZ0IHJpZ2h0XCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldFRhYmxlQm90dG9tQm9yZGVyKCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy50YWJsZUJvcmRlckJvdHRvbUNsYXNzUmVxdWlyZWQgJiZcclxuICAgICAgICAgICAgdGhpcy50YWJsZURhdGEgJiZcclxuICAgICAgICAgICAgdGhpcy50YWJsZURhdGEubGVuZ3RoICYmXHJcbiAgICAgICAgICAgIHRoaXMubWF4aW11bVJvd3NXaGljaENhbkJlUmVuZGVyZWRXaXRob3V0U2Nyb2xsIDwgdGhpcy50YWJsZURhdGEubGVuZ3RoXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVCb3R0b21Cb3JkZXJDbGFzcyA9IFwiYm90dG9tLWJvcmRlclwiO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVCb3R0b21Cb3JkZXJDbGFzcyA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrSWZBbGxUaGVFbGVtZW50c0FyZVplcm8oKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLnRhYmxlRGF0YS5zb21lKChpdGVtKSA9PiBpdGVtICE9IDApO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dIaWRlVG90YWxSb3coKSB7XHJcbiAgICAgICAgdGhpcy5ndEdlbmVyYWxDb25maWcudG90YWxSb3cgPSAhdGhpcy5ndEdlbmVyYWxDb25maWcudG90YWxSb3c7XHJcbiAgICAgICAgaWYgKCF0aGlzLmd0R2VuZXJhbENvbmZpZy50b3RhbFJvdykge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoYC0taGlkZS10b3RhbC1yb3ctc2Nyb2xsYmFyLW9mZnNldGAsICc1MHB4Jyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KGAtLWhpZGUtdG90YWwtcm93LXNjcm9sbGJhci1vZmZzZXRgLCAnMHB4Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldFRhYmxlSGVpZ2h0KCkge1xyXG4gICAgICAgIGxldCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcclxuICAgICAgICBsZXQgcm93SGVpZ2h0ID0gdGhpcy5ndERpbWVuc2lvbi5yb3dIZWlnaHQ7XHJcbiAgICAgICAgbGV0IGhlYWRlckhlaWdodCA9IHRoaXMuZ3REaW1lbnNpb24uaGVhZGVySGVpZ2h0O1xyXG4gICAgICAgIGxldCBkYXRhT25Ub3BIZWlnaHQgPSB0aGlzLmd0RGltZW5zaW9uLmRhdGFPblRvcEhlaWdodDtcclxuICAgICAgICBsZXQgbWFyZ2luRnJvbUJvdHRvbSA9IHRoaXMuZ3REaW1lbnNpb24ubWFyZ2luRnJvbUJvdHRvbTtcclxuICAgICAgICBsZXQgYWN0dWFsVGFibGVIZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmZpeE51bWJlck9mUm93c0ZvclBvcHVwKSB7XHJcbiAgICAgICAgICAgIGxldCBtYXhOb09mUm93c1RvRGlzcGxheSA9IHZpZXdwb3J0SGVpZ2h0IDwgNzQwID8gNSA6IDEwO1xyXG4gICAgICAgICAgICB0aGlzLm1heGltdW1Sb3dzV2hpY2hDYW5CZVJlbmRlcmVkV2l0aG91dFNjcm9sbCA9IG1heE5vT2ZSb3dzVG9EaXNwbGF5O1xyXG4gICAgICAgICAgICBhY3R1YWxUYWJsZUhlaWdodCA9IHRoaXMubWF4aW11bVJvd3NXaGljaENhbkJlUmVuZGVyZWRXaXRob3V0U2Nyb2xsICogcm93SGVpZ2h0ICsgaGVhZGVySGVpZ2h0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBtaW5IZWlnaHRGb3JUYWJsZSA9IGhlYWRlckhlaWdodCArIDMgKiByb3dIZWlnaHQ7XHJcbiAgICAgICAgICAgIHZpZXdwb3J0SGVpZ2h0ID0gdmlld3BvcnRIZWlnaHQgPD0gZGF0YU9uVG9wSGVpZ2h0ID8gZGF0YU9uVG9wSGVpZ2h0ICsgbWluSGVpZ2h0Rm9yVGFibGUgOiB2aWV3cG9ydEhlaWdodDtcclxuICAgICAgICAgICAgbGV0IGhlaWdodExlZnRGb3JUYWJsZSA9IHZpZXdwb3J0SGVpZ2h0IC0gZGF0YU9uVG9wSGVpZ2h0IC0gbWFyZ2luRnJvbUJvdHRvbTtcclxuICAgICAgICAgICAgdGhpcy5tYXhpbXVtUm93c1doaWNoQ2FuQmVSZW5kZXJlZFdpdGhvdXRTY3JvbGwgPVxyXG4gICAgICAgICAgICAgICAgTWF0aC5jZWlsKChoZWlnaHRMZWZ0Rm9yVGFibGUgLSBoZWFkZXJIZWlnaHQgLSByb3dIZWlnaHQpIC8gcm93SGVpZ2h0KSArIDE7XHJcbiAgICAgICAgICAgIGFjdHVhbFRhYmxlSGVpZ2h0ID0gdmlld3BvcnRIZWlnaHQgLSBkYXRhT25Ub3BIZWlnaHQgLSBtYXJnaW5Gcm9tQm90dG9tO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbGV0IGFjdHVhbFRhYmxlSGVpZ2h0ID0gaGVpZ2h0TGVmdEZvclRhYmxlIC0gKChoZWlnaHRMZWZ0Rm9yVGFibGUgLSBoZWFkZXJIZWlnaHQgLSByb3dIZWlnaHQpICUgcm93SGVpZ2h0KTtcclxuXHJcbiAgICAgICAgdGhpcy5ndERpbWVuc2lvbi50YWJsZUhlaWdodCA9IGAke2FjdHVhbFRhYmxlSGVpZ2h0fXB4YDtcclxuXHJcbiAgICAgICAgdGhpcy5udW1iZXJPZlNrZWxldG9uUm93cyA9IHRoaXMubWF4aW11bVJvd3NXaGljaENhbkJlUmVuZGVyZWRXaXRob3V0U2Nyb2xsXHJcbiAgICAgICAgICAgID8gQXJyYXkodGhpcy5tYXhpbXVtUm93c1doaWNoQ2FuQmVSZW5kZXJlZFdpdGhvdXRTY3JvbGwpLmZpbGwoMClcclxuICAgICAgICAgICAgOiBBcnJheSg1KS5maWxsKDApO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrQnlGbihpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4O1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRvb2x0aXBSYWRpb05hbWVzKCkge1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcCA9IG5ldyBNYXAoKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiU3RhcnRUaW1lRm9yRmlsdGVyXCIsIFwiU3RhcnQgVGltZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiRW5kVGltZUZvckZpbHRlclwiLCBcIkVuZCBUaW1lXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzdGFydFRpbWVGb3JGaWx0ZXJcIiwgXCJTdGFydCBUaW1lXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJlbmRUaW1lRm9yRmlsdGVyXCIsIFwiRW5kIFRpbWVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInN0YXJ0X3RpbWVfZm9yX2ZpbHRlclwiLCBcIlN0YXJ0IFRpbWVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImVuZF90aW1lX2Zvcl9maWx0ZXJcIiwgXCJFbmQgVGltZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicHJpbWFyeUFFTmFtZVwiLCBcIlByaW1hcnkgQUVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJlZ2lvblwiLCBcIlJlZ2lvblwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYWdlbmN5TmFtZVwiLCBcIkFnZW5jeVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwibG9jYXRpb25cIiwgXCJMb2NhdGlvblwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYWR2ZXJ0aXNlck5hbWVcIiwgXCJBZHZlcnRpc2VyXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcm9kdWN0Q29kZVwiLCBcIlByb2R1Y3QgQ29kZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZmxpZ2h0U3RhcnREYXRlXCIsIFwiU3RhcnQgRGF0ZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZmxpZ2h0RW5kRGF0ZVwiLCBcIkVuZCBEYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvcmRlcklkQW5kUmV2TnVtYmVyXCIsIFwiU1ROIE9yZGVyIy1SZXYjXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzdGF0aW9uT3JkZXJOdW1iZXJcIiwgXCJTVE4gT3JkZXIjXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhbHRlcm5hdGVPcmRlcklkXCIsIFwiQWx0L1JlcCBPcmRlciAjXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJncnBcIiwgXCJHUlBcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImNwcFwiLCBcIkNQUFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiaW1wc1wiLCBcIklNUFNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImNwbVwiLCBcIkNQTVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib2ZmZXJlZE1Hc1wiLCBcIk9mZmVyZWQgTUdcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm91dHN0YW5kaW5nUEVcIiwgXCJPL1MgUEVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9mZmVyZWRBRFVzXCIsIFwiT2ZmZXJlZCBBRFVzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ1ZERlZmljaXRWYWx1ZVwiLCBcIk8vUyBBdWQgRGVsdGFcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInN0YXJ0RW5kVGltZU11bHRpXCIsIFwiVGltZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkVmFsdWVcIiwgXCJCb29rZWRcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZFNwb3RzXCIsIFwiU3BvdHNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlVzZXJDcmVkaXRlZFZhbHVlXCIsIFwiVXNlciBDcmVkaXRlZFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiVXNlclVucmVzb2x2ZWRWYWx1ZVwiLCBcIlVzZXIgVW5yZXNvbHZlZFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQnV5ZXJBZGRlZFZhbHVlXCIsIFwiQnV5ZXIgQWRkZWRcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJ1eWVyRGVsZXRlZFZhbHVlXCIsIFwiQnV5ZXIgRGVsZXRlZFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwidXNlckNoYW5nZXNcIiwgXCJVc2VyIENoYW5nZXNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJ1eWVyQ2hhbmdlc1wiLCBcIkJ1eWVyIENoYW5nZXNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInVzZXJNR1wiLCBcIlVzZXIgTUdcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInVzZXJBRFVzXCIsIFwiVXNlciBBRFVzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJpbnZlbnRvcnlDb2RlXCIsIFwiSW52ZW50b3J5IENvZGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInByb2dyYW1cIiwgXCJQcm9ncmFtXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhZ2VuY3lcIiwgXCJBZ2VuY3lcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImFkdmVydGlzZXJcIiwgXCJBZHZlcnRpc2VyXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzdGFydERhdGVcIiwgXCJTdGFydCBEYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJlbmREYXRlXCIsIFwiRW5kIERhdGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImRhdGVcIiwgXCJEYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyY3ZQcmVlbXB0XCIsIFwiJCBNYWRlZ29vZCBQRXNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9zUHJlZW1wdFwiLCBcIiQgTy9TIFBFc1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicmN2VW5kZXJEbHlcIiwgXCJSZWNvdmVyZWQgVURcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9zVW5kZXJEbHlcIiwgXCJPL3MgVW5kZXIgRGx5XCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcmltYXJ5QWVcIiwgXCJQcmltYXJ5IEFFXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyZWdpb25cIiwgXCJSZWdpb25cIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJldkNvZGUxXCIsIFwiUmV2IGNvZGUgMVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib3JkZXJOb1Jldk5vXCIsIFwiU1ROIE9yZGVyIy1SZXYjXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyZXZDb2RlMlwiLCBcIlJldiBjb2RlIDJcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJldkNvZGUzXCIsIFwiUmV2IGNvZGUgM1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkXCIsIFwiJCBCb29rZWRcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInNwb3RzXCIsIFwiU3BvdHNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInBvc3RlZEF1ZFBlcmNlbnRcIiwgXCJQb3N0ZWQgJVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicmV2aXNpb25cIiwgXCJSZXZpc2lvblwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYnV5ZXJPcmRlcklkXCIsIFwiQUxUL1JFUCBPcmRlciNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImRlbW9cIiwgXCJEZW1vXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXZlcmFnZVJhdGVUaGlzWWVhclwiLCBcIkF2Zy4gUmF0ZSAoVFkpXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhdmVyYWdlUmF0ZUxhc3RZZWFyXCIsIFwiQXZnLiBSYXQgKExZKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXZlcmFnZUNQUFwiLCBcIkF2Zy4gQ1BQXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhdmVyYWdlQ1BNXCIsIFwiQXZnLiBDUE1cIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIklNUFNEaWZmXCIsIFwiSU1QUyAoJzAwMCkgRGlmZi5cIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlJUR0RpZmZcIiwgXCJSVEcgRGlmZi5cIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3N0ZWRBZHVcIiwgXCIkIFBvc3RlZCBBRFVzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzY2hlZHVsZWRBZHVcIiwgXCIkIFNjaGVkdWxlZCBBRFVzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhdWRpZW5jZURlZmljaXRcIiwgXCIkIE8vUyBBdWRpZW5jZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicG9zdGVkQXVkUGVyY2VudFwiLCBcIlBvc3RlZCBBdWRpZW5jZSAlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3RlbnRpYWxVbml0c1ZhbHVlXCIsIFwiUE9UIFVuaXRzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRVbml0c1ZhbHVlXCIsIFwiQm9va2VkIEVxIFVuaXRzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRBbW91bnRXaXRoWmVyb1JhdGluZ1ZhbHVlXCIsIFwiVG90YWwgJCBCb29rZWRcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEFtb3VudFBlcmNlbnRhZ2VXaXRoWmVyb1JhdGluZ1ZhbHVlXCIsIFwiJSBBZ2FpbnN0IEFsbCBEZW1vc1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkQW1vdW50V2l0aG91dFplcm9SYXRpbmdWYWx1ZVwiLCBcIiRCb29rZWQgV2l0aCBJbXBzKOKAmTAwMClcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEFtb3VudFBlcmNlbnRhZ2VXaXRob3V0WmVyb1JhdGluZ1ZhbHVlXCIsIFwiJSBBZ2FpbnN0IEFsbCBEZW1vc1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInRvdGFsQm9va2VkQW1vdW50VmFsdWVcIiwgXCJUb3RhbCAkQm9va2VkXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhdmVyYWdlVW5pdFJhdGVWYWx1ZVwiLCBcIiBBVVJcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInRvdGFsQm9va2VkQW1vdW50V2l0aFJhdGluZ1ZhbHVlXCIsIFwiJEJvb2tlZCBXaXRoIFJhdGluZ1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYXZlcmFnZVVuaXRSYXRlV2l0aFJhdGluZ1ZhbHVlXCIsIFwiQVVSIFdpdGggUmF0aW5nXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwidG90YWxCb29rZWRBbW91bnRXaXRoSW1wcmVzc2lvblZhbHVlXCIsIFwiJEJvb2tlZCBXaXRoIElNUFNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImF2ZXJhZ2VVbml0UmF0ZVdpdGhJbXByZXNzaW9uVmFsdWVcIiwgXCJBVVIgV2l0aCBJTVBTXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkVW5pdHNXaXRoUmF0aW5nVmFsdWVcIiwgXCJCb29rZWQgVW5pdHMgV2l0aCBSYXRpbmdcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInBvc3RlZFVuaXRzV2l0aFJhdGluZ1ZhbHVlXCIsIFwiUG9zdGVkIFVuaXRzIFdpdGggUmF0aW5nXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkVW5pdHNXaXRoSW1wcmVzc2lvblZhbHVlXCIsIFwiQm9va2VkIFVuaXRzIFdpdGggSU1QU1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicG9zdGVkVW5pdHNXaXRoSW1wcmVzc2lvblZhbHVlXCIsIFwiUG9zdGVkIFVuaXRzIFdpdGggSU1QU1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZFJhdGluZ3NcIiwgXCJCb29rZWQgUmF0aW5nXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3N0ZWRSYXRpbmdzXCIsIFwiUE9TVEVEIFJhdGluZ1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiUG9zdGVkUmF0aW5nXCIsIFwiUG9zdGVkIFJUR1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEltcHJlc3Npb25zXCIsIFwiQm9va2VkIElNUCgnMDAwKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicG9zdGVkSW1wcmVzc2lvbnNcIiwgXCJQb3N0ZWQgSU1QKCcwMDApXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJQb3N0ZWRJbXByZXNzaW9uc1wiLCBcIlBvc3RlZCBJTVAoJzAwMClcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRBdmVyYWdlUmF0aW5nXCIsIFwiQm9va2VkIEFVIFJhdGluZ1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicG9zdGVkQXZlcmFnZVJhdGluZ1wiLCBcIlBvc3RlZCBBVSBSYXRpbmdcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRBdmVyYWdlSW1wcmVzc2lvblwiLCBcIkJvb2tlZCBBVSBJTVBTXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwb3N0ZWRBdmVyYWdlSW1wcmVzc2lvblwiLCBcIlBvc3RlZCBBVSBJTVBTXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkQ3BwVmFsdWVcIiwgXCJCb29rZWQgQ1BQXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRFZmZlY3RpdmVDcHBWYWx1ZVwiLCBcIkVmZmVjdGl2ZSBDUFBcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRDcG1WYWx1ZVwiLCBcIkJvb2tlZCBDUE1cIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZEVmZmVjdGl2ZUNwbVZhbHVlXCIsIFwiRWZmZWN0aXZlIENQTVwiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9yZGVyU291cmNlXCIsIFwiT3JkZXIgUm91dGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9yZGVyQ2F0ZWdvcnlcIiwgXCJSZXYgQ2F0ZWdvcnlcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImNhc2hPclRyYWRlXCIsIFwiQy9UXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyZXZpc2lvblN0YXJ0RGF0ZVwiLCBcIlJldmlzaW9uIFN0YXJ0IERhdGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm5hbWVcIiwgXCJuYW1lXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyb2xlXCIsIFwicm9sZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwic3RhdGlvbkNvdW50XCIsIFwic3RhdGlvbkNvdW50XCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzdGF0aW9uTGlzdFwiLCBcInN0YXRpb25MaXN0XCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhcHByb3ZlZE9uXCIsIFwiQXBwcm92ZWQgT25cIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImFwcHJvdmVkQnlcIiwgXCJBcHByb3ZlZCBCeVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT0RJbXBzXCIsIFwiUHJvai4gT0QgSU1QU1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiVURJbXBzXCIsIFwiUHJvai4gVUQgSU1QU1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT0RHcnBcIiwgXCJQcm9qLiBPRCBHUlBcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlVER3JwXCIsIFwiUHJvai4gVUQgR1JQXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ1ZEltcHNQZXJjZW50XCIsIFwiUHJvai4gVUQgJVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwidWRHcnBQZXJjZW50XCIsIFwiUHJvai4gVUQgR1JQICVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9kSW1wc1BlcmNlbnRcIiwgXCJQcm9qLiBPRCAlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvZEdycFBlcmNlbnRcIiwgXCJQcm9qLiBPRCBHUlAgJVwiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlJldmlzaW9uTnVtYmVyXCIsIFwiUmV2aXNpb24gI1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiUmV2aXNpb25UeXBlXCIsIFwiUmV2aXNpb24gVHlwZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiR2VuZXJhdGVkT25cIiwgXCJHZW5lcmF0ZWQgT25cIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJvb2tlZFZhbHVlRm9yRGlzcGxheVwiLCBcIiQgQk9PS0VEXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRWYWx1ZVwiLCBcIiQgQm9va2VkXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRTcG90c1wiLCBcIlNwb3RzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRHUlBcIiwgXCJHUlBcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJvb2tlZElNUFNSZXZUYWJcIiwgXCJJTVBTJygwMDApXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRDUFBcIiwgXCJDUFBcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJvb2tlZENQTVwiLCBcIkNQTVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiTUdzVmFsdWVGb3JEaXNwbGF5XCIsIFwiJCBNR1NcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk1Hc1ZhbHVlXCIsIFwiJCBNR1NcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkFEVXNWYWx1ZUZvckRpc3BsYXlcIiwgXCIkIEFEVVNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkFEVXNWYWx1ZVwiLCBcIiQgQURVU1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQnV5ZXJDaGFuZ2VzVmFsdWVGb3JEaXNwbGF5XCIsIFwiJCBCdXllciBDaGFuZ2VcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJ1eWVyQ2hhbmdlc1ZhbHVlXCIsIFwiJCBCdXllciBDaGFuZ2VcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlVzZXJDaGFuZ2VzVmFsdWVGb3JEaXNwbGF5XCIsIFwiJCBTZWxsZXIgVXNlciBDaGFuZ2VcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlVzZXJDaGFuZ2VzVmFsdWVcIiwgXCIkIFNlbGxlciBVc2VyIENoYW5nZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiU2VsbGVyTGluZVwiLCBcIlNlbGxlciBMaW5lICNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkJ1eWVyTGluZVwiLCBcIkJ1eSBMaW5lICNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlNwb3RTdGF0dXNcIiwgXCJTcG90IFN0YXR1c1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiSW52ZW50b3J5Q29kZVwiLCBcIkludmVudG9yeSBDb2RlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCdXllclByb2dyYW1OYW1lXCIsIFwiQnV5ZXIgUHJvZ3JhbSBOYW1lXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJSZXZlbnVlQ2xhc3NcIiwgXCJSZXZlbnVlIENsYXNzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJXZWVrbHlBVVJcIiwgXCJCb29rZWQgQXZnLiBSYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJCb29rZWRSYXRlXCIsIFwiQm9va2VkIFJhdGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImF2ZXJhZ2VSYXRlXCIsIFwiQXZlcmFnZSBSYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRBdmVyYWdlUmF0ZVwiLCBcIkJvb2tlZCBBVkcuIFJhdGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImRvbGxhcklNUFNJbXBhY3RcIiwgXCIkIElNUFMgSW1wYWN0XCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJkb2xsYXJSVEdJbXBhY3RcIiwgXCIkIFJURyBJTVBBQ1RcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIklNUFNJbXBhY3RcIiwgXCJJTVBTICgnMDAwKSBJTVBBQ1RcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlJUR0ltcGFjdFwiLCBcIlJURyBJbXBhY3RcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJpbnZlbnRvcnlGaWxsUGVyY2VudGFnZVNhbWVXZWVrXCIsIFwiSW52IEZpbGwgU2FtZSBXZWVrIChMWSlcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImludmVudG9yeUZpbGxQZXJjZW50YWdlRmluYWxcIiwgXCJJbnYgRmlsbCBGaW5hbCAoTFkpXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicHJvamVjdGVkUlRHXCIsIFwiUHJvamVjdGVkIFJUR1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicHJvamVjdGVkSU1QU1wiLCBcIlByb2plY3RlZCBJTVBTKCcwMDApXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJkZXNpcmVkQ1BNXCIsIFwiRGVzaXJlZCBDUE1cIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImRlc2lyZWRDUFBcIiwgXCJEZXNpcmVkIENQUFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib3JpZ2luXCIsIFwiT3JpZ2luXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQm9va2VkUlRHXCIsIFwiQm9va2VkIFJUR1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQm9va2VkSU1QU1wiLCBcIkJvb2tlZCBJTVBTKCcwMDApXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJJTVBTXCIsIFwiSU1QKCcwMDApXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJBVVJUR1wiLCBcIkF2ZyBSVEdcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkFVSU1QU1wiLCBcIkF2ZyBJTVAoJzAwMClcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlBvc3RlZFJhdGluZ3NPckltcHJlc3Npb25zXCIsIFwiUG9zdGVkIFJUR1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiU2NoZWR1bGVGbGlnaHRXZWVrXCIsIFwiU2NoZWR1bGUgV2Vla1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiU2NoZWR1bGVkRGF5XCIsIFwiU2NoZWR1bGVkIERheVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQWlyU3RhdHVzXCIsIFwiQWlyIFN0YXR1c1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQWlyRGF0ZUFuZFRpbWVcIiwgXCJBaXIgRGF0ZSAmIFRpbWVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkFpckRhdGVcIiwgXCJBaXIgRGF0ZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiTm9ybWFsaXplZE9yZGVyZWRSYXRpbmdcIiwgXCJOb3JtYWxpemVkIEJvb2tlZCBSVEdcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk5vcm1hbGl6ZWRPcmRlcmVkSW1wcmVzc2lvbnNcIiwgXCJOb3JtYWxpemVkIEJvb2tlZCBJTVAoJzAwMClcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk5vcm1hbGl6ZWRQb3N0ZWRSYXRpbmdcIiwgXCJOb3JtYWxpemVkIFBvc3RlZCBSVEdcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk5vcm1hbGl6ZWRQb3N0ZWRJbXByZXNzaW9uc1wiLCBcIk5vcm1hbGl6ZWQgUG9zdGVkIElNUCgnMDAwKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiQWRJZFwiLCBcIkFkLUlkXCIpO1xyXG5cclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZGlzcGxheWltcHNcIiwgXCJJTVBTXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJkaXNwbGF5R3JwXCIsIFwiR1JQXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJib29rZWRTcG90c0ZvckRpc3BsYXlcIiwgXCJTcG90c1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZGlzcGxheVNwb3RzXCIsIFwiU3BvdHNcIik7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJlc3RpbWF0ZU5vXCIsIFwiRXN0aW1hdGUjXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcmltYXJ5QnV5ZXJcIiwgXCJQcmltYXJ5IEJ1eWVyXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcmltYXJ5QnV5ZXJOYW1lXCIsIFwiUHJpbWFyeSBCdXllclwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwic2Vjb25kYXJ5QnV5ZXJOYW1lXCIsIFwiU2Vjb25kYXJ5IEJ1eWVyXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzZWNvbmRhcnlCdXllclwiLCBcIlNlY29uZGFyeSBCdXllclwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwidGltZW91dERhdGVcIiwgXCJUaW1lb3V0IERhdGVcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkRpc3BsYXl0U3BvdFN0YXR1c0JJXCIsIFwiU3BvdCBTdGF0dXNcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkxpbmVTcG90XCIsIFwiTGluZS5TcG90XCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJMdXJXaW5kb3dOYW1lXCIsIFwiUG9saXRpY2FsIFdpbmRvd1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImxlbmd0aFwiLCBcIkxlbmd0aFwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicmV2Q2xhc3NcIiwgXCJSZXYgQ2xhc3NcIik7XHJcblxyXG4gICAgICAgIC8vIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ1ZFZhbHVlXCIsIFwiJCBVRFwiKTtcclxuICAgICAgICAvLyB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib2RWYWx1ZVwiLCBcIiQgT0RcIik7XHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInVkVmFsdWVcIiwgXCJQcm9qLiAkIFVEXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvZFZhbHVlXCIsIFwiUHJvai4gJCBPRFwiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIk90aGVyQXZhaWxhYmxlU3BvdHNUYWJsZUludmVudG9yeUNvZGVcIiwgXCJJbnZlbnRvcnkgQ29kZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlQnV5ZXJQcm9ncmFtTmFtZVwiLCBcIkJ1eWVyIFByb2dyYW0gTmFtZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlU3RhcnRUaW1lXCIsIFwiU3RhcnQgVGltZVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlRW5kVGltZVwiLCBcIkVuZCBUaW1lXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVXZWVrbHlBVVJcIiwgXCJCb29rZWQgQXZnLiBSYXRlXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVEaXNwbGF5UmV2ZW51ZUNsYXNzXCIsIFwiUmV2IENsYXNzXCIpO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVBY3R1YWxXZWVrU3RhcnREYXRlXCIsIFwiV2Vla1wiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlV2Vla0RheVwiLCBcIkRheVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlRGlzcGxheUxlbmd0aFwiLCBcIkxlbmd0aFwiKTtcclxuXHJcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIlByb2plY3RlZEltcHJlc3Npb25zXCIsIFwiUHJvamVjdGVkIElNUCgnMDAwKVwiKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiUHJvamVjdGVkUnRnXCIsIFwiUHJvamVjdGVkIFJUR1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RPclVuc2VsZWN0Q2hlY2tib3gocm93RGF0YTogYW55LCBjb2x1bW5LZXlzOiBhbnksIGlzQ2hlY2tib3hTZWxlY3RlZDogYW55KSB7XHJcbiAgICAgICAgcm93RGF0YVtjb2x1bW5LZXlzXSA9ICFyb3dEYXRhW2NvbHVtbktleXNdO1xyXG4gICAgICAgIHRoaXMudG9nZ2xlQ2hlY2tib3guZW1pdCh7IHJvd0RhdGEsIGNvbHVtbktleXMsIGlzQ2hlY2tib3hTZWxlY3RlZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RPclVuc2VsZWN0UmFkaW9ib3gocm93RGF0YTogYW55LCBjb2x1bW5LZXlzOiBhbnksIGlzQ2hlY2tib3hTZWxlY3RlZDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmIChyb3dEYXRhW2NvbHVtbktleXNdID09IGlzQ2hlY2tib3hTZWxlY3RlZCkgcmV0dXJuO1xyXG4gICAgICAgIHJvd0RhdGFbY29sdW1uS2V5c10gPSBpc0NoZWNrYm94U2VsZWN0ZWQ7XHJcbiAgICAgICAgdGhpcy50b2dnbGVDaGVja2JveC5lbWl0KHsgcm93RGF0YSwgY29sdW1uS2V5cywgaXNDaGVja2JveFNlbGVjdGVkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdFVuc2VsZWN0QWxsUm93cygpIHtcclxuICAgICAgICB0aGlzLnRvZ2dsZUhlYWRlckNoZWNrYm94LmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RVbnNlbGVjdFJvdyhyb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnRvZ2dsZVJvd0NoZWNrYm94LmVtaXQocm93RGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgdW5kb0NyZWRpdGVkU3BvdChkYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnVuZG9JY29uQ2xpY2tlZC5lbWl0KHsgZGF0YSwgbWdPckNyZWRpdDogXCJDcmVkaXRcIiB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1bmRvTWdTcG90KGRhdGE6IGFueSkge1xyXG4gICAgICAgIHRoaXMudW5kb0ljb25DbGlja2VkLmVtaXQoeyBkYXRhLCBtZ09yQ3JlZGl0OiBcIk1ha2VHb29kXCIgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9Tb3J0IGFuZCBGaWx0ZXIgTG9naWMgYmVnaW5zIVxyXG4gICAgY2xvc2VUb29sdGlwKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnRvb2x0aXAgJiYgdGhpcy50b29sdGlwLmlzT3BlbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcC5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xyXG4gICAgICAgIGlmICghdGhpcy5iaW5kVmFsdWVGdW5jQ2FsbGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1uRmlsdGVyQ2xvc2VkLmVtaXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaXNUb29sdGlwQWN0aXZlKGhlYWRlcjogYW55W10pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pc1Rvb2x0aXBBY3RpdmUoaGVhZGVyLCB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGJpbmRUaGVWYWx1ZVRvVG9vbFRpcCh0b29sdGlwOiBhbnksIGhlYWRlcjogSUhlYWRlckluZm8pIHtcclxuICAgICAgICB0aGlzLmJpbmRWYWx1ZUZ1bmNDYWxsZWQgPSB0cnVlO1xyXG4gICAgICAgIC8vIGlmIHNhbWUgdG9vbHRpcCBvcGVuZWQgY2xvc2UgaXRcclxuICAgICAgICBpZiAodG9vbHRpcCA9PSB0aGlzLnRvb2x0aXApIHtcclxuICAgICAgICAgICAgdGhpcy5iaW5kVmFsdWVGdW5jQ2FsbGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VUb29sdGlwKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGVuYWJsZWRIZWFkZXJzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrSWZVbmlxdWVWYWx1ZVByZXNlbnRGb3JUaGVIZWFkZXIoaGVhZGVyLCBlbmFibGVkSGVhZGVycyk7XHJcbiAgICAgICAgICAgIHRoaXMub3BlblRvb2x0aXAodG9vbHRpcCwgZW5hYmxlZEhlYWRlcnMsIGhlYWRlcik7XHJcblxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuaW5uZXJXaWR0aCA8IDE1MDAgJiZcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5pbm5lckhlaWdodCA8IDc2OCAmJlxyXG4gICAgICAgICAgICAgICAgIXRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2xpZGVyU2V0LmhhcyhoZWFkZXIuZmlsdGVyU29ydE9iamVjdEtleXNbMF0pXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5GaWx0ZXJPcGVuZWQuZW1pdCgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNob3dDaGVja2JveGVzRm9yVGltZUZpbHRlciA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gXCJTUE9UREVUQUlMU1wiIHx8XHJcbiAgICAgICAgICAgICAgICB0aGlzLmd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gXCJFWENMVURFSU5WRU5UT1JZUE9QVVBcIiB8fFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09IFwiUkFUSU5HXCI7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0ZpbHRlclRvb2x0aXBUYWJzID0gaGVhZGVyLmZpbHRlclNvcnRPYmplY3RLZXlzLmxlbmd0aCA+IDE7XHJcbiAgICAgICAgICAgIHRoaXMuYmluZFZhbHVlRnVuY0NhbGxlZCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjaGVja0lmVW5pcXVlVmFsdWVQcmVzZW50Rm9yVGhlSGVhZGVyKGhlYWRlcjogSUhlYWRlckluZm8sIGVuYWJsZWRIZWFkZXJzOiBhbnlbXSkge1xyXG4gICAgICAgIGhlYWRlci5maWx0ZXJTb3J0T2JqZWN0S2V5cy5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgbGV0IGRhdGFUb0NoZWNrID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRGaWx0ZXJPcHRpb25zRGF0YSh0aGlzLnRhYmxlRGF0YSwgdGhpcy5jbG9uZWRUYWJsZURhdGEsIGl0ZW0pO1xyXG4gICAgICAgICAgICBpZiAoaXRlbSA9PSBcInBlcmlvZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdW5pcVN0YXJ0RGF0ZSA9IHVuaXEoZGF0YVRvQ2hlY2subWFwKCh1OiB7IFt4OiBzdHJpbmddOiBhbnkgfSkgPT4gdVtcInN0YXJ0RGF0ZVwiXSkpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHVuaXFFbmREYXRlID0gdW5pcShkYXRhVG9DaGVjay5tYXAoKHU6IHsgW3g6IHN0cmluZ106IGFueSB9KSA9PiB1W1wiZW5kRGF0ZVwiXSkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuaXFTdGFydERhdGUubGVuZ3RoID4gMSB8fCB1bmlxRW5kRGF0ZS5sZW5ndGggPiAxIHx8IHRoaXMuaXNUb29sdGlwQWN0aXZlKFtpdGVtXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVkSGVhZGVycy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlcyA9IGRhdGFUb0NoZWNrLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55IH0pID0+IHVbaXRlbV0pO1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgbGFzdCBhcHBsaWVkIGZpbHRlciBpcyB0aGlzIGhlYWRlciwgcHVzaCBpdCBhbG9zIGFzIGVuYWJsZWRIZWFkZXJcclxuICAgICAgICAgICAgICAgIGxldCBhY3RpdmVBbmRMYXN0bHlBcHBsaWVkSGVhZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5hcHBsaWVkRmlsdGVyc0FycmF5Lmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmFwcGxpZWRGaWx0ZXJzQXJyYXlbdGhpcy5hbm5hRmlsdGVyU2VydmljZS5hcHBsaWVkRmlsdGVyc0FycmF5Lmxlbmd0aCAtIDFdID09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1cclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUFuZExhc3RseUFwcGxpZWRIZWFkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlci5maWx0ZXIgPT0gXCJDSEVDS0JPWFwiICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKHVuaXEodmFsdWVzKS5maWx0ZXIoKG4pID0+IG4gIT0gbnVsbCkubGVuZ3RoID4gMSB8fCBhY3RpdmVBbmRMYXN0bHlBcHBsaWVkSGVhZGVyKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZEhlYWRlcnMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmZpbHRlciAhPSBcIkNIRUNLQk9YXCIgJiZcclxuICAgICAgICAgICAgICAgICAgICAodW5pcSh2YWx1ZXMpLmZpbHRlcigobikgPT4gbiAhPSBudWxsICYmIG4gIT0gXCItXCIpLmxlbmd0aCA+IDEgfHwgYWN0aXZlQW5kTGFzdGx5QXBwbGllZEhlYWRlcilcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRIZWFkZXJzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuVG9vbHRpcCh0b29sdGlwOiBhbnksIGhlYWRlcjogYW55LCBjb2x1bW5IZWFkZXI6IElIZWFkZXJJbmZvKSB7XHJcbiAgICAgICAgdGhpcy5jbG9zZVRvb2x0aXAoKTtcclxuICAgICAgICB0aGlzLnRvb2x0aXAgPSB0b29sdGlwO1xyXG4gICAgICAgIHRoaXMudG9vbHRpcC5vcGVuKCk7XHJcbiAgICAgICAgLy9jb252ZXJ0IGtleSBpbnRvIHRoZSBoZWFkZXJcclxuICAgICAgICB0aGlzLmZpbHRlclRhYk9iamVjdHMgPSBoZWFkZXIubWFwKChrZXk6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuaGFzKGtleSkgPyB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuZ2V0KGtleSkgOiBrZXk7IC8vY2hhbmdlIHRvIGRpc3BsYXkgbmFtZVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IHJhZGlvQnV0dG9uTW9kZWwoXHJcbiAgICAgICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgICAgICB2YWx1ZSxcclxuICAgICAgICAgICAgICAgIGNvbHVtbkhlYWRlci5pc1NvcnRSZXF1aXJlZFtpbmRleF0sXHJcbiAgICAgICAgICAgICAgICBjb2x1bW5IZWFkZXIuaXNGaWx0ZXJSZXF1aXJlZFtpbmRleF0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZUVuYWJsZUVhY2hDb2x1bW5Ub29sdGlwSWNvbigpIHtcclxuICAgICAgICB0aGlzLnRhYmxlSGVhZGVycy5mb3JFYWNoKChoZWFkZXIpID0+IHtcclxuICAgICAgICAgICAgaGVhZGVyLmhlYWRlckluZm8uZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uc2hvd1Rvb2x0aXBJY29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZVRvb2x0aXBJY29uID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5maWx0ZXJTb3J0T2JqZWN0S2V5cy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxhdGVzdEZpbHRlcnMgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmFwcGxpZWRGaWx0ZXJzQXJyYXk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXRlc3RGaWx0ZXJzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZVRvb2x0aXBJY29uICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXRlc3RGaWx0ZXJzW2xhdGVzdEZpbHRlcnMubGVuZ3RoIC0gMV0gPT0ga2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kaXNhYmxlVG9vbHRpcEljb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uZGlzYWJsZVRvb2x0aXBJY29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09IFwicGVyaW9kXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdW5pcVN0YXJ0RGF0ZSA9IHVuaXEoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVEYXRhLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55IH0pID0+IHVbXCJzdGFydERhdGVcIl0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVuaXFFbmREYXRlID0gdW5pcSh0aGlzLnRhYmxlRGF0YS5tYXAoKHU6IHsgW3g6IHN0cmluZ106IGFueSB9KSA9PiB1W1wiZW5kRGF0ZVwiXSkpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRpc2FibGVUb29sdGlwSWNvbiA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXFTdGFydERhdGUubGVuZ3RoID4gMSB8fCB1bmlxRW5kRGF0ZS5sZW5ndGggPiAxID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSB0aGlzLnRhYmxlRGF0YS5tYXAoKHU6IHsgW3g6IHN0cmluZ106IGFueSB9KSA9PiB1W2tleV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW0uZmlsdGVyID09IFwiQ0hFQ0tCT1hcIiAmJiB1bmlxKHZhbHVlcykuZmlsdGVyKChuKSA9PiBuICE9IG51bGwpLmxlbmd0aCA+IDEpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtLmZpbHRlciAhPSBcIkNIRUNLQk9YXCIgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXEodmFsdWVzKS5maWx0ZXIoKG4pID0+IG4gIT0gbnVsbCAmJiBuICE9IFwiLVwiKS5sZW5ndGggPiAxKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRpc2FibGVUb29sdGlwSWNvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRNYXJnaW5MZWZ0Rm9yRmlsdGVySWNvbigpIHtcclxuICAgICAgICBsZXQgZWxlbWVudEFyciA9IHRoaXMudmlld0NoaWxkVGFibGVIZWFkZXJzLnRvQXJyYXkoKTtcclxuICAgICAgICBlbGVtZW50QXJyLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgbGV0IGNoaWxkRGl2RWxlbWVudHMgPSBpdGVtLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW47XHJcblxyXG4gICAgICAgICAgICBpZiAoY2hpbGREaXZFbGVtZW50cy5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpcnN0UGFyYWdyYXBoT2Zmc2V0V2lkdGg6IG51bWJlciA9IGNoaWxkRGl2RWxlbWVudHNbMF0/LmNoaWxkcmVuWzBdPy5vZmZzZXRXaWR0aFxyXG4gICAgICAgICAgICAgICAgICAgID8gY2hpbGREaXZFbGVtZW50c1swXT8uY2hpbGRyZW5bMF0/Lm9mZnNldFdpZHRoXHJcbiAgICAgICAgICAgICAgICAgICAgOiAwO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNlY29uZFBhcmFncmFwaE9mZnNldFdpZHRoOiBudW1iZXIgPSBjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuWzBdPy5vZmZzZXRXaWR0aFxyXG4gICAgICAgICAgICAgICAgICAgID8gY2hpbGREaXZFbGVtZW50c1sxXS5jaGlsZHJlblswXT8ub2Zmc2V0V2lkdGhcclxuICAgICAgICAgICAgICAgICAgICA6IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0UGFyYWdyYXBoT2Zmc2V0V2lkdGggPiBzZWNvbmRQYXJhZ3JhcGhPZmZzZXRXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkaWZmID0gZmlyc3RQYXJhZ3JhcGhPZmZzZXRXaWR0aCAtIHNlY29uZFBhcmFncmFwaE9mZnNldFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZERpdkVsZW1lbnRzWzBdLmNoaWxkcmVuLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRGl2RWxlbWVudHNbMF0uY2hpbGRyZW5bMV0uc3R5bGUubWFyZ2luTGVmdCA9IDQgKyBcInB4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGREaXZFbGVtZW50c1sxXS5jaGlsZHJlbi5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuWzFdLnN0eWxlLm1hcmdpbkxlZnQgPSBkaWZmICsgNCArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkaWZmID0gc2Vjb25kUGFyYWdyYXBoT2Zmc2V0V2lkdGggLSBmaXJzdFBhcmFncmFwaE9mZnNldFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZERpdkVsZW1lbnRzWzBdLmNoaWxkcmVuLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRGl2RWxlbWVudHNbMF0uY2hpbGRyZW5bMV0uc3R5bGUubWFyZ2luTGVmdCA9IGRpZmYgKyA0ICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkRGl2RWxlbWVudHNbMV0uY2hpbGRyZW4ubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGREaXZFbGVtZW50c1sxXS5jaGlsZHJlblsxXS5zdHlsZS5tYXJnaW5MZWZ0ID0gNCArIFwicHhcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkYXRhUm93Q2xpY2tlZChyb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnJvd0NsaWNrZWQuZW1pdChyb3dEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICByYWRpb0J1dHRvbkNsaWNrZWQoZGF0YTogYW55LCBhY3Rpb246IHN0cmluZywgaXNEaXNhYmxlZDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICghaXNEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnJhZGlvQnV0dG9uU2VsZWN0ZWQuZW1pdCh7IGRhdGEsIGFjdGlvbiB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYmluZFRoZVZhbHVlVG9TZWxsZXJHcm91cFRvb2x0aXAoc2VsbGVyR3JvdXBIaWVyYXJjaHk6IFJhdGluZ1NlbGxlckdyb3VwSGllcmFyY2h5W10sIHRvb2x0aXA6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmhpZXJhcmNoeVRvb2x0aXAgJiYgdGhpcy5oaWVyYXJjaHlUb29sdGlwLm9wZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5oaWVyYXJjaHlUb29sdGlwLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsbGVyR3JvdXBIaWVyYXJjaHkgPSBzZWxsZXJHcm91cEhpZXJhcmNoeTtcclxuICAgICAgICB0aGlzLmhpZXJhcmNoeVRvb2x0aXAgPSB0b29sdGlwO1xyXG4gICAgICAgIHRoaXMuaGllcmFyY2h5VG9vbHRpcC5vcGVuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWNvbkNsaWNrZWQocm93RGF0YTogYW55LCBpY29uQ2xhc3M6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChcIm9yZGVySWRcIiBpbiByb3dEYXRhICYmIGljb25DbGFzcy5pbmNsdWRlcyhcIm1kaS1zdGFyXCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdGFycmVkT3JkZXJJZCA9IHJvd0RhdGEub3JkZXJJZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZ3RJY29uQ2xpY2tlZC5lbWl0KHsgZGF0YTogcm93RGF0YSwgaWNvbkNsYXNzOiBpY29uQ2xhc3MgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3ZnSWNvbkNsaWNrZWQoZGF0YTogR3RDb2x1bW5JY29uRW1pdHRlZERhdGEpIHtcclxuICAgICAgICB0aGlzLmd0U1ZHSWNvbkNsaWNrZWQuZW1pdChkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICB0ZXh0QWN0aW9uQ2xpY2tlZChyb3dEYXRhOiBhbnksIGlkOiBhbnksIGNvbHVtbkhlYWRlcjogSUhlYWRlckluZm8pIHtcclxuICAgICAgICB0aGlzLmd0VGV4dEFjdGlvbkNsaWNrZWQuZW1pdCh7IGRhdGE6IHJvd0RhdGEsIGlkOiBpZCwgY29sdW1uSGVhZGVyOiBjb2x1bW5IZWFkZXIsIGlzSWNvbkNsaWNrZWQ6IGZhbHNlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGljb25DbGlja2VkT25TdHJpbmdJY29uQWN0aW9uVHlwZShyb3dEYXRhOiBhbnksIGlkOiBhbnksIGNvbHVtbkhlYWRlcjogSUhlYWRlckluZm8pIHtcclxuICAgICAgICB0aGlzLmd0VGV4dEFjdGlvbkNsaWNrZWQuZW1pdCh7IGRhdGE6IHJvd0RhdGEsIGlkOiBpZCwgY29sdW1uSGVhZGVyOiBjb2x1bW5IZWFkZXIsIGlzSWNvbkNsaWNrZWQ6IHRydWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5uZXJIVE1MQ2VsbENsaWNrZWQoZXZlbnQ6IGFueSwgcm93RGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5ndElubmVySFRNTENsaWNrZWQuZW1pdCh7IGV2ZW50LCByb3dEYXRhIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZpZXdEZXRhaWxzQ2xpY2tlZChyb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmd0Vmlld0RldGFpbENsaWNrZWQuZW1pdCh7IGRhdGE6IHJvd0RhdGEgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QWN0aXZlU3RhdGVPYmplY3QoKSB7XHJcbiAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmUgPVxyXG4gICAgICAgICAgICAhdGhpcy5hbm5hRmlsdGVyU2VydmljZS5yZXNldEZpbHRlclNvcnRBY3RpdmVTdGF0dXMgfHwgdGhpcy5tdWx0aXBsZVRhYmxlc1ByZXNlbnRcclxuICAgICAgICAgICAgICAgID8gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmVcclxuICAgICAgICAgICAgICAgIDoge307XHJcbiAgICAgICAgdGhpcy50YWJsZUhlYWRlcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBpdGVtLmhlYWRlckluZm8uZm9yRWFjaCgoaGVhZGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGVhZGVyLnNob3dUb29sdGlwSWNvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBoZWFkZXIuZmlsdGVyU29ydE9iamVjdEtleXMuam9pbihcIixcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmpvaW5lZEZpbHRlclNvcnRPYmplY3RLZXlzID0ga2V5O1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEFOTkEtNDExMyBmaXhcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hbm5hRmlsdGVyU2VydmljZS5yZXNldEZpbHRlclNvcnRBY3RpdmVTdGF0dXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmVba2V5XSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5yZXNldEZpbHRlclNvcnRBY3RpdmVTdGF0dXMgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldElzRGlmZmVyZW5jZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuaXNEaWZmZXJlbmNlTGVzc1RoYW4yNVBlcmNlbnQgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXNldEluZGV4KCkge1xyXG4gICAgICAgIHRoaXMuc3RhcnQgPSAwO1xyXG4gICAgICAgIHRoaXMuZW5kID0gdGhpcy5saW1pdCArIHRoaXMuc3RhcnQ7XHJcbiAgICB9XHJcblxyXG4gICAgb25UYWJsZUNvbnRhaW5lclNjcm9sbChlOiBhbnkpIHtcclxuICAgICAgICBjb25zdCB0YWJsZVZpZXdIZWlnaHQgPSBlLnRhcmdldC5vZmZzZXRIZWlnaHQ7IC8vIHZpZXdwb3J0XHJcbiAgICAgICAgY29uc3QgdGFibGVTY3JvbGxIZWlnaHQgPSBlLnRhcmdldC5zY3JvbGxIZWlnaHQ7IC8vIGxlbmd0aCBvZiBhbGwgdGFibGVcclxuICAgICAgICBjb25zdCBzY3JvbGxMb2NhdGlvbiA9IGUudGFyZ2V0LnNjcm9sbFRvcDsgLy8gaG93IGZhciB1c2VyIHNjcm9sbGVkXHJcblxyXG4gICAgICAgIHRoaXMucmVtb3ZlVG9vbHRpcE9uU2Nyb2xsKCk7XHJcblxyXG4gICAgICAgIC8vIElmIHRoZSB1c2VyIGhhcyBzY3JvbGxlZCB3aXRoaW4gMTUwcHggb2YgdGhlIGJvdHRvbSwgYWRkIG1vcmUgZGF0YVxyXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IDE1MDtcclxuICAgICAgICBjb25zdCBsaW1pdCA9IHRhYmxlU2Nyb2xsSGVpZ2h0IC0gdGFibGVWaWV3SGVpZ2h0IC0gYnVmZmVyO1xyXG4gICAgICAgIGlmIChzY3JvbGxMb2NhdGlvbiA+IGxpbWl0KSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5nZXRUYWJsZURhdGEodGhpcy5zdGFydCwgdGhpcy5lbmQpO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVkRGF0YSA9IHRoaXMucmVuZGVyZWREYXRhLmNvbmNhdChkYXRhKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVJbmRleCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRhYmxlQ29udGFpbmVyU2Nyb2xsZWQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGFibGVEYXRhKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVEYXRhPy5maWx0ZXIoKHZhbHVlLCBpbmRleCkgPT4gaW5kZXggPj0gc3RhcnQgJiYgaW5kZXggPCBlbmQpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUluZGV4KCkge1xyXG4gICAgICAgIHRoaXMuc3RhcnQgPSB0aGlzLmVuZDtcclxuICAgICAgICB0aGlzLmVuZCA9IHRoaXMubGltaXQgKyB0aGlzLnN0YXJ0O1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxSb3dzRm9yVGFibGUoKSB7XHJcbiAgICAgICAgdGhpcy5yZXNldEluZGV4KCk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlZERhdGEgPSB0aGlzLmdldFRhYmxlRGF0YSh0aGlzLnN0YXJ0LCB0aGlzLmVuZCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVJbmRleCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNwb3REZXRhaWxzRG93bmxvYWRDbGlja2VkKHBhcmVudENoaWxkT3JUb3RhbFJvdzogXCJEQVRBUk9XXCIgfCBcIlRPVEFMUk9XXCIsIHJvd2RhdGE/OiBhbnkpIHtcclxuICAgICAgICBpZiAocm93ZGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW52ZW50b3J5SWRGb3JEb3dubG9hZCA9IHJvd2RhdGEuaW52ZW50b3J5Q29kZUlkO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGVtb2dyYXBoaWNGb3JEb3dubG9hZCA9IHJvd2RhdGEuZGVtb2dyYXBoaWM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEludmVudG9yeUlkRm9yRG93bmxvYWQgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGVtb2dyYXBoaWNGb3JEb3dubG9hZCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dUeXBlRm9yRG93bmxvYWQgPSBwYXJlbnRDaGlsZE9yVG90YWxSb3c7XHJcbiAgICAgICAgdGhpcy5kb3dubG9hZFNwb3REZXRhaWxzLmVtaXQoe1xyXG4gICAgICAgICAgICBwYXJlbnRDaGlsZE9yVG90YWxSb3c6IHBhcmVudENoaWxkT3JUb3RhbFJvdyxcclxuICAgICAgICAgICAgaW52ZW50b3J5Q29kZUlkOiB0aGlzLnNlbGVjdGVkSW52ZW50b3J5SWRGb3JEb3dubG9hZCxcclxuICAgICAgICAgICAgZGVtb2dyYXBoaWM6IHRoaXMuc2VsZWN0ZWREZW1vZ3JhcGhpY0ZvckRvd25sb2FkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRhYmxlQ29udGFpbmVyU2Nyb2xsZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuaXNTY3JvbGxlZExlZnQgPSBldmVudC50YXJnZXQuc2Nyb2xsTGVmdCA+IDA7XHJcbiAgICAgICAgdGhpcy5pc1Njcm9sbEVuZGVkID0gTWF0aC5yb3VuZChldmVudC50YXJnZXQuc2Nyb2xsTGVmdCkgPT0gZXZlbnQudGFyZ2V0LnNjcm9sbFdpZHRoIC0gZXZlbnQudGFyZ2V0LmNsaWVudFdpZHRoO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlVG9vbHRpcE9uU2Nyb2xsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbW91c2VFbnRlck9uU3RyaW5nVGV4dEFjdGlvblR5cGUocm93RGF0YTogYW55LCB0b29sdGlwS2V5OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnRleHRBY3Rpb25Ub29sdGlwID0gcm93RGF0YVt0b29sdGlwS2V5XTtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkljb25Ib3Zlci5lbWl0KHsgcm93RGF0YTogcm93RGF0YSwgdHlwZTogXCJvbi1lbnRlclwiIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlRW50ZXJPblN0cmluZ1RleHRBY3Rpb25UeXBlQ29udGFpbmluZ1RhYmxlKHJvd0RhdGE6IGFueSwgdG9vbHRpcEtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy50b29sdGlwQ29udGFpbmluZ1RhYmxlID0gcm93RGF0YVt0b29sdGlwS2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZUxlYXZlVGV4dEFjdGlvblR5cGUocm93RGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25JY29uSG92ZXJMZWF2ZS5lbWl0KHsgcm93RGF0YTogcm93RGF0YSwgdHlwZTogXCJvbi1sZWF2ZVwiIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG1vdXNlRW50ZXJPblRleHRBY3Rpb25UeXBlKHJvd0RhdGE6IGFueSwgdG9vbHRpcEtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy50ZXh0QWN0aW9uVG9vbHRpcCA9IHJvd0RhdGFbdG9vbHRpcEtleV07XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGlja2FibGVEYXRhQ2xpY2tlZChSb3dkYXRhOiBhbnksIGlkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmNsaWNrYWJsZURhdGFDbGlja2VkLmVtaXQoeyBkYXRhOiBSb3dkYXRhLCBpZDogaWQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlVG9vbHRpcE9uU2Nyb2xsKCkge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInJlbWFya3MtaW5mby10b29sdGlwXCIpO1xyXG4gICAgICAgIC8vIGNvbnN0IHRvb2x0aXBFbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJ0b29sdGlwXCIpO1xyXG4gICAgICAgIGNvbnN0IGd0VG9vbHRpcCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJyZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCIpO1xyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIudG9vbHRpcDpub3QoLmtlZXAtb24tc2Nyb2xsLXRvb2x0aXApXCIpLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgICAgZS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgdGhpcy50b29sdGlwID0gbnVsbDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgd2hpbGUgKGVsZW1lbnRzICYmIGVsZW1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZWxlbWVudHNbMF0ucmVtb3ZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdoaWxlIChndFRvb2x0aXAgJiYgZ3RUb29sdGlwLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZ3RUb29sdGlwWzBdLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpY29uQ2xpY2tlZEluVG90YWxSb3coY29sTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy50b3RhbFJvd0ljb25DbGlja2VkLmVtaXQoY29sTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlc01hZGVJbkVkaXRhYmxlSW5wdXRCb3goZXZlbnQ6IGFueSwgZWRpdGVkT2JqZWN0OiBhbnksIHBhc3RlRXZlbnQ6IGJvb2xlYW4pIHtcclxuICAgICAgICBsZXQgZW50ZXJlZFZhbHVlID0gcGFzdGVFdmVudCA/IGV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YShcInRleHRcIikgOiBldmVudC5rZXk7XHJcbiAgICAgICAgbGV0IGRvdEluZGV4ID0gZWRpdGVkT2JqZWN0LnZhbHVlLmluZGV4T2YoXCIuXCIpO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGV2ZW50LmtleUNvZGUgIT0gOCAmJlxyXG4gICAgICAgICAgICBldmVudC5rZXlDb2RlICE9IDQ2ICYmXHJcbiAgICAgICAgICAgICEoZXZlbnQua2V5Q29kZSA+PSAzNyAmJiBldmVudC5rZXlDb2RlIDw9IDQwKSAmJlxyXG4gICAgICAgICAgICAoKCFlZGl0ZWRPYmplY3Q/LmFsbG93U3BlY2lhbENoYXJhY3RlcnMgJiYgIS9bYDAtOS5dLy50ZXN0KGVudGVyZWRWYWx1ZSkpIHx8XHJcbiAgICAgICAgICAgICAgICAoZWRpdGVkT2JqZWN0Py5jaGFyYWN0ZXJzVG9SZXN0cmljdCAmJiBlZGl0ZWRPYmplY3Q/LmNoYXJhY3RlcnNUb1Jlc3RyaWN0LmluY2x1ZGVzKGVudGVyZWRWYWx1ZSkpIHx8XHJcbiAgICAgICAgICAgICAgICAoZWRpdGVkT2JqZWN0LmlzRGVjaW1hbFBvaW50Q2hlY2tSZXF1aXJlZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGRvdEluZGV4ID49IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICBldmVudD8udGFyZ2V0Py5zZWxlY3Rpb25TdGFydCA+IGRvdEluZGV4ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZWRpdGVkT2JqZWN0LnZhbHVlLmxlbmd0aCAtIChkb3RJbmRleCArIDEpID49IGVkaXRlZE9iamVjdC5tYXhEZWNpbWFsUG9pbnRzQWxsb3dlZCkpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGVkaXRhYmxlSW5wdXRWYWx1ZUNoYW5nZWQodmFsdWU6IGFueSwgcm93OiBhbnksIGtleUVkaXRlZDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0YWJsZUlucHV0RWRpdGVkLmVtaXQoeyByb3c6IHJvdywgdmFsdWU6IHZhbHVlLCBrZXlFZGl0ZWQ6IGtleUVkaXRlZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICByYWRpb0J1dHRvbkljb25DbGlja2VkKGRhdGE6IGFueSkge1xyXG4gICAgICAgIHRoaXMucmFkaW9CdXR0b25NZXNzYWdlSWNvbkNsaWNrZWQuZW1pdChkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJBcHBsaWVkKHRhYmxlRGF0YTogYW55W10pIHtcclxuICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHRhYmxlRGF0YTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxSb3dzRm9yVGFibGUoKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVFbmFibGVFYWNoQ29sdW1uVG9vbHRpcEljb24oKTtcclxuICAgICAgICB0aGlzLmZpbHRlckFwcGxpZWRUb1RhYmxlLmVtaXQodGFibGVEYXRhKTtcclxuICAgICAgICB0aGlzLmNsb3NlVG9vbHRpcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNvcnRpbmdBcHBsaWVkKHRhYmxlRGF0YTogYW55W10pIHtcclxuICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHRhYmxlRGF0YTtcclxuICAgICAgICB0aGlzLnNldEluaXRpYWxSb3dzRm9yVGFibGUoKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVFbmFibGVFYWNoQ29sdW1uVG9vbHRpcEljb24oKTtcclxuICAgICAgICB0aGlzLnNvcnRpbmdBcHBsaWVkVG9UYWJsZS5lbWl0KHRhYmxlRGF0YSk7XHJcbiAgICAgICAgdGhpcy5jbG9zZVRvb2x0aXAoKTtcclxuICAgIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgICBpZD1cImdlbmVyaWMtdGFibGUtY29uYXRpbmVyXCJcclxuICAgIGNsYXNzPVwidGFibGUtY29udGFpbmVyIHt7IGd0R2VuZXJhbENvbmZpZz8udGFibGVPdXRlckNvbnRhaW5lck5hbWUgfX0ge3sgdGFibGVCb3R0b21Cb3JkZXJDbGFzcyB9fVwiXHJcbiAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgJ3Njcm9sbC1sZWZ0LXNoYWRvdy1lZmZlY3QnOiBpc1Njcm9sbGVkTGVmdCxcclxuICAgICAgICAnc2Nyb2xsLXJpZ2h0LXNoYWRvdy1lZmZlY3QnOiAhaXNTY3JvbGxFbmRlZCxcclxuICAgICAgICAnY2xpY2thYmxlLXJvdyc6IGNsaWNrYWJsZVJvdyxcclxuICAgICAgICAnbm8tZGF0YS10YWJsZSc6IChpc05vRGF0YVRvRGlzcGxheVN1YmplY3QkIHwgYXN5bmMpLFxyXG4gICAgICAgICd0YWJsZS13aXRoLXNob3ctaGlkZS10b3RhbC1yb3ctdG9nZ2xlJzogc2hvd09ySGlkZVRvZ2dsZUZvclRvdGFsUm93XHJcbiAgICB9XCJcclxuICAgIChzY3JvbGwpPVwib25UYWJsZUNvbnRhaW5lclNjcm9sbCgkZXZlbnQpXCJcclxuPlxyXG4gICAgPGRpdlxyXG4gICAgICAgIFtjbGFzc109XCJndEdlbmVyYWxDb25maWcudGFibGVDb250YWluZXJOYW1lXCJcclxuICAgICAgICBjbGFzcz1cImhvcml6b250YWwtc2Nyb2xsLWZvci10YWJsZS1jb250YWluZXJcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgaGVpZ2h0OlxyXG4gICAgICAgICAgICAgICAgdGFibGVEYXRhLmxlbmd0aCA8IG1heGltdW1Sb3dzV2hpY2hDYW5CZVJlbmRlcmVkV2l0aG91dFNjcm9sbFxyXG4gICAgICAgICAgICAgICAgICAgID8gJ2NhbGMoJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAoZ3REaW1lbnNpb24ucm93SGVpZ2h0ICogdGFibGVEYXRhLmxlbmd0aCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCF0YWJsZURhdGEubGVuZ3RoIHx8ICFndEdlbmVyYWxDb25maWcudG90YWxSb3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBndERpbWVuc2lvbi5oZWFkZXJIZWlnaHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBndERpbWVuc2lvbi5oZWFkZXJIZWlnaHQgKyBndERpbWVuc2lvbi5yb3dIZWlnaHQpKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAncHgpJ1xyXG4gICAgICAgICAgICAgICAgICAgIDogZ3REaW1lbnNpb24udGFibGVIZWlnaHRcclxuICAgICAgICB9XCJcclxuICAgID5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd09ySGlkZVRvZ2dsZUZvclRvdGFsUm93ICYmICFzaG93U2tlbGV0b25Mb2FkaW5nICYmICEoaXNOb0RhdGFUb0Rpc3BsYXlTdWJqZWN0JCB8IGFzeW5jKVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICdzaGlmdC10b2dnbGUtdG9wLW9uLXRvdGFsLXJvdy1jbGljayc6ICFndEdlbmVyYWxDb25maWcudG90YWxSb3dcclxuICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2hvdy1vci1oaWRlLXRvZ2dsZS1idG5cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2hvd0hpZGVUb3RhbFJvdygpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktbWVudS1zd2FwXCJcclxuICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInNob3ctb3ItaGlkZS10b2dnbGUtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJhdXRvXCJcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwic2hvd09ySGlkZVRvZ2dsZUZvclRvdGFsUm93VG9vbHRpcFwiXHJcbiAgICAgICAgICAgID48L2k+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPHRhYmxlXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZ3RcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ0YWJsZUNsYXNzXCJcclxuICAgICAgICAgICAgbWF0LXRhYmxlXHJcbiAgICAgICAgICAgIFtkYXRhU291cmNlXT1cInJlbmRlcmVkRGF0YVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICA8dHJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyLXJvd1wiXHJcbiAgICAgICAgICAgICAgICBtYXQtaGVhZGVyLXJvd1xyXG4gICAgICAgICAgICAgICAgKm1hdEhlYWRlclJvd0RlZj1cInRhYmxlQ29sdW1uczsgc3RpY2t5OiB0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZ3REaW1lbnNpb24uaGVhZGVySGVpZ2h0XCJcclxuICAgICAgICAgICAgPjwvdHI+XHJcbiAgICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0b3RhbC1yb3dcIlxyXG4gICAgICAgICAgICAgICAgbWF0LWhlYWRlci1yb3dcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiZ3REaW1lbnNpb24ucm93SGVpZ2h0XCJcclxuICAgICAgICAgICAgICAgICptYXRIZWFkZXJSb3dEZWY9XCJ0b3RhbFJvd0NvbHVtbnM7IHN0aWNreTogdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dTa2VsZXRvbkxvYWRpbmcgfHxcclxuICAgICAgICAgICAgICAgICAgICAoIXNob3dTa2VsZXRvbkxvYWRpbmcgJiYgIXRhYmxlRGF0YS5sZW5ndGgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgfCBhc3luYykgfHxcclxuICAgICAgICAgICAgICAgICAgICAoIXNob3dTa2VsZXRvbkxvYWRpbmcgJiYgIWd0R2VuZXJhbENvbmZpZy50b3RhbFJvdylcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID48L3RyPlxyXG4gICAgICAgICAgICA8dHJcclxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dEYXRhLmd0Q2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnbm8tYm9yZGVyLXRyJzogKGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgfCBhc3luYykgfVwiXHJcbiAgICAgICAgICAgICAgICBtYXQtcm93XHJcbiAgICAgICAgICAgICAgICAqbWF0Um93RGVmPVwibGV0IHJvd0RhdGE7IGNvbHVtbnM6IHRhYmxlQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImd0RGltZW5zaW9uLnJvd0hlaWdodFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGF0YVJvd0NsaWNrZWQocm93RGF0YSlcIlxyXG4gICAgICAgICAgICA+PC90cj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gVE9UQUwgUk9XIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5jb2xOYW1lXCJcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdG90YWxSb3dJbmZvOyB0cmFja0J5OiB0cmFja0J5Rm5cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcclxuICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZlxyXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY29sdW1uLmNvbHNwYW5cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgY29sdW1uLmNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uWydpc0FjdGlvbkNvbHVtbiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBjb2x1bW4uYWN0aW9uRGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZGF0YS5jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja2FibGVEYXRhQ2xpY2tlZCh7fSwgZGF0YS5pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uWydpc0ljb25Db2x1bW4nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBjb2x1bW4/Lmljb25EYXRhPy5jbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaWNvbkNsaWNrZWRJblRvdGFsUm93KGNvbHVtbj8uY29sTmFtZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW5bJ2lzQWN0aW9uQ29sdW1uJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZyBjbGFzcz1cInVwcGVyLWxhYmVsXCI+e3sgY29sdW1uLmRhdGEgfX08L3N0cm9uZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5sb3dlckRhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uY29sTmFtZSA9PSAndG90YWwtcG90ZW50aWFsLWJvb2tlZC11bml0JyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PSAnUkFUSU5HJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBjb2x1bW5Mb3dlckRhdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2xpY2thYmxlLWRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzcG90RGV0YWlsc0Rvd25sb2FkQ2xpY2tlZCgnVE9UQUxST1cnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZGlzYWJsZWQtY2xpY2thYmxlLWRhdGEnOiBkb3dubG9hZEluUHJvZ3Jlc3MgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGNvbHVtbi5sb3dlckRhdGEgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIHNwb3QtZGV0YWlscy1kb3dubG9hZC1pY29uc1wiPmdldF9hcHA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvd25sb2FkSW5Qcm9ncmVzcyAmJiBzZWxlY3RlZFJvd1R5cGVGb3JEb3dubG9hZCA9PSAnVE9UQUxST1cnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2lyY3VsYXJQcm9ncmVzc0JhclwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjb2x1bW5Mb3dlckRhdGE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb3dlci1sYWJlbFwiPnt7IGNvbHVtbi5sb3dlckRhdGEgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi50b29sdGlwTWVzc2FnZSAmJiBndEdlbmVyYWxDb25maWcuY29tcG9uZW50ICE9ICdMVVJfVklPTEFUSU9OUydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBjb2x1bW4udG9vbHRpcEljb25DbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiY29sdW1uLnRvb2x0aXBNZXNzYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC10b3RhbC1yb3ctdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PSAnTFVSX1ZJT0xBVElPTlMnICYmIGNvbHVtbi50b29sdGlwTWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1pIG1kaS1pbmZvLW91dGxpbmUgaW5mby1sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwibHVyVmlvbGF0aW9uVG90YWxSb3dUb29sVGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC10b3RhbC1yb3ctdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIE1BSU4gUk9XIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbkRlZi5oZWFkZXJJbmZvWzBdLm9iamVjdEtleVwiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uRGVmIG9mIHRhYmxlSGVhZGVyczsgdHJhY2tCeTogdHJhY2tCeUZuXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHRoXHJcbiAgICAgICAgICAgICAgICAgICAgI3RhYmxlSGVhZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgbm93cmFwXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsXHJcbiAgICAgICAgICAgICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sdW1uRGVmLndpZHRoXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93IG14LTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaGVhZGVyIG9mIGNvbHVtbkRlZi5oZWFkZXJJbmZvOyBsZXQgaiA9IGluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50eXBlT2ZIZWFkZXJEYXRhID09PSAnU1RSSU5HJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICd1cHBlci1sYWJlbCc6IGogPT09IDAsICdsb3dlci1sYWJlbCc6IGogPT09IDEgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIubmFtZSA9PSBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogY29sdW1uRGVmLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWF4LXdpZHRoJzogJ2NhbGMoMTAwJSAtIDIwcHgpJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaGVhZGVyLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLnRvb2x0aXBNZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJoZWFkZXIudG9vbHRpcC50b29sdGlwTWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdpbXBzSW5mb1Rvb2x0aXAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLmljb25DbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiaW1wc0luZm9Ub29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ3Nwb3RzQ29sdW1uRXF1aXZhbGl6YXRpb25NZXNzYWdlVG9vbHRpcCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJzcG90c0NvbHVtbkVxdWl2YWxpemF0aW9uTWVzc2FnZVRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICd1bmRlckRlbGl2ZXJ5VG9vbHRpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ1bmRlckRlbGl2ZXJ5VG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ292ZXJEZWxpdmVyeVRvb2x0aXAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLmljb25DbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwib3ZlckRlbGl2ZXJ5VG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ3JhdGluZ0luZm9Ub29sdGlwJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInJhdGluZ0luZm9Ub29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAncmF0ZUluZm9Ub29sdGlwJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInJhdGVJbmZvVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ29uZ29pbmdSZXZCb29rZWRDb2x1bW5Ub29sdGlwJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cIm9uZ29pbmdSZXZCb29rZWRDb2x1bW5Ub29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnY29tcGxldGVkUmV2Qm9va2VkQ29sdW1uVG9vbHRpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJjb21wbGV0ZWRSZXZCb29rZWRDb2x1bW5Ub29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnYXZnQm9va2VkUmF0ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJhdmdCb29rZWRSYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnYXZnQm9va2VkUnRnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImF2Z0Jvb2tlZFJ0Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ2F2Z0Jvb2tlZEltcHMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLmljb25DbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiYXZnQm9va2VkSW1wc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdhdXRvbWF0aW9uVG9vbHRpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJhdXRvbWF0aW9uVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdyZWJhdGVJbXBhY3QnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLmljb25DbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwicmViYXRlSW1wYWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ3Byb2plY3RlZEltcHNSdGcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLmljb25DbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwicHJvamVjdGVkSW1wc1J0Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLnR5cGVPZkhlYWRlckRhdGEgPT09ICdDSEVDS0JPWCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJndEdlbmVyYWxDb25maWcuaXNIZWFkZXJDaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGN1c3RvbS1jb2x1bW4tY2hlY2tib3gtY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFVuc2VsZWN0QWxsUm93cygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZ3RHZW5lcmFsQ29uZmlnLmlzSGVhZGVyQ2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBjdXN0b20tY29sdW1uLWNoZWNrYm94LXVuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZGlzYWJsZS1jaGVja2JveCc6IGd0R2VuZXJhbENvbmZpZy5kaXNhYmxlSGVhZGVyQ2hlY2tib3ggfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFVuc2VsZWN0QWxsUm93cygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ib3hfb3V0bGluZV9ibGFua1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3RHZW5lcmFsQ29uZmlnLnNob3dBbGxDb2x1bW5GaWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzb3J0LWZpbHRlci1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLnNob3dUb29sdGlwSWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aXZlIHRvb2x0aXAgRnVuY3Rpb25hbGl0eSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmZpbHRlciA9PT0gJ0NIRUNLQk9YJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZpbHRlci12YXJpYW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmVbaGVhZGVyLmpvaW5lZEZpbHRlclNvcnRPYmplY3RLZXlzXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaGVhZGVyLmRpc2FibGVUb29sdGlwSWNvbiB8fCBzaG93U2tlbGV0b25Mb2FkaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImZpbHRlclRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgZmlsdGVyQWxpZ25tZW50IH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwibm9uLWVkaXQtY2hlY2tib3gtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cIm1hbnVhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImJpbmRUaGVWYWx1ZVRvVG9vbFRpcCh0LCBoZWFkZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaWRkZW4pPVwiY2xvc2VUb29sdGlwKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci5maWx0ZXIgPT09ICdTTElERVInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZmlsdGVyLXZhcmlhbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZVtoZWFkZXIuam9pbmVkRmlsdGVyU29ydE9iamVjdEtleXNdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBoZWFkZXIuZGlzYWJsZVRvb2x0aXBJY29uIHx8IHNob3dTa2VsZXRvbkxvYWRpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwic2xpZGVyVG9vbFRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gbGVmdC10b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJub24tZWRpdC1zbGlkZXItdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cIm1hbnVhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdDE9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJiaW5kVGhlVmFsdWVUb1Rvb2xUaXAodDEsIGhlYWRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhpZGRlbik9XCJjbG9zZVRvb2x0aXAoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmZpbHRlciA9PT0gJ0RBVEUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZmlsdGVyLXZhcmlhbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZVtoZWFkZXIuam9pbmVkRmlsdGVyU29ydE9iamVjdEtleXNdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBoZWFkZXIuZGlzYWJsZVRvb2x0aXBJY29uIHx8IHNob3dTa2VsZXRvbkxvYWRpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiZGF0ZVBpY2tlclRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIGF1dG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJub24tZWRpdC1kYXRlcGlja2VyLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3QyPVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYmluZFRoZVZhbHVlVG9Ub29sVGlwKHQyLCBoZWFkZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaWRkZW4pPVwiY2xvc2VUb29sdGlwKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci5maWx0ZXIgPT09ICdXRUVLJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZpbHRlci12YXJpYW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmVbaGVhZGVyLmpvaW5lZEZpbHRlclNvcnRPYmplY3RLZXlzXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaGVhZGVyLmRpc2FibGVUb29sdGlwSWNvbiB8fCBzaG93U2tlbGV0b25Mb2FkaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cIndlZWtQaWNrZXJUb29sVGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBsZWZ0LXRvcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwibWFudWFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0Mz1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImJpbmRUaGVWYWx1ZVRvVG9vbFRpcCh0MywgaGVhZGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlkZGVuKT1cImNsb3NlVG9vbHRpcCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIuZmlsdGVyID09PSAnVElNRSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1maWx0ZXItdmFyaWFudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmUgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlW2hlYWRlci5qb2luZWRGaWx0ZXJTb3J0T2JqZWN0S2V5c10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGhlYWRlci5kaXNhYmxlVG9vbHRpcEljb24gfHwgc2hvd1NrZWxldG9uTG9hZGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ0aW1lRmlsdGVyVG9vbFRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gbGVmdC10b3AgYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cIm5vbi1lZGl0LXRpbWUtdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cIm1hbnVhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdDQ9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJiaW5kVGhlVmFsdWVUb1Rvb2xUaXAodDQsIGhlYWRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhpZGRlbik9XCJjbG9zZVRvb2x0aXAoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFoZWFkZXIuc2hvd1Rvb2x0aXBJY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJuby1maWx0ZXItc3BhY2VcIj48L3NwYW4+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdsdXJWaW9sYXRpb25JbmZvVG9vbHRpcCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJsdXJWaW9sYXRpb25JbmZvVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCBST1dfREFUQVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJST1dfREFUQS5iYWNrZ3JvdW5kQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYm9yZGVyXT1cIlJPV19EQVRBLmJvcmRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgUk9XX0RBVEEucm93Q2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1swXS5vYmplY3RLZXkgKyAnVGRDbGFzcyddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIucm93c3Bhbl09XCJST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1swXS5vYmplY3RLZXkgKyAnUm93c3BhbiddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFoaWRlU29tZVRkcyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhpZGVTb21lVGRzICYmICFST1dfREFUQVsnaGlkZScgKyBjb2x1bW5EZWYuaGVhZGVySW5mb1swXS5vYmplY3RLZXkgKyAnVGQnXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dTa2VsZXRvbkxvYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJ7IGhlaWdodDogJzEwcHgnLCBkaXNwbGF5OiAnYmxvY2snIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNrZWxldG9uLWxvYWRlcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2hvd1NrZWxldG9uTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlRGF0YS5sZW5ndGggPiAwICYmICEoaXNOb0RhdGFUb0Rpc3BsYXlTdWJqZWN0JCB8IGFzeW5jKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3VibGluZSBvZiBjb2x1bW5EZWYuaGVhZGVySW5mbztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdWJMaW5lSW5kZXggPSBpbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlGblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzaG93RWxsaXBzaXNUZXh0T25Ib3Zlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0udHlwZU9mQm9keURhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInSUNPTidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnJlZEluUHJvZ3Jlc3MgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEub3JkZXJJZCA9PSBzZWxlY3RlZFN0YXJyZWRPcmRlcklkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJST1dfREFUQS5pY29uQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImljb25DbGlja2VkKFJPV19EQVRBLCBST1dfREFUQS5pY29uQ2xhc3MpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCJ7eyBST1dfREFUQS5pY29uVGl0bGVUZXh0IH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImd0LWljb24tY29sdW1uLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnJlZEluUHJvZ3Jlc3MgJiYgUk9XX0RBVEEub3JkZXJJZCA9PSBzZWxlY3RlZFN0YXJyZWRPcmRlcklkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1mb3ItYnV0dG9uLWRpcmVjdGl2ZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0lDT05fQ0VMTCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFjdGlvbiBvZiBST1dfREFUQVtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5hY3Rpb25LZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aW9uLnNob3dPYmplY3RLZXlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV0gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uc2hvd0ljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VFbnRlck9uU3RyaW5nVGV4dEFjdGlvblR5cGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0udG9vbHRpcEtleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ0ZWFtLXVzZXItdG9vbHRpcCByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJhY3Rpb24uc2hvd1Rvb2x0aXAgPyBhY3Rpb24udG9vbHRpcERhdGEgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBY3Rpb25DbGlja2VkKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlVG9vbHRpcF09XCIhYWN0aW9uLnNob3dUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidIVE1MX1NUUklORydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpbm5lckhUTUxDZWxsQ2xpY2tlZCgkZXZlbnQsIFJPV19EQVRBKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTVkdfSUNPTidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFubmEtY29yZS1hbm5hLWljb24tY29sdW1uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50TmFtZV09XCJndEdlbmVyYWxDb25maWcuY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhT2JqZWN0XT1cIlJPV19EQVRBXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uVG9TaG93XT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNvbHVtbkljb25DbGlja2VkKT1cInN2Z0ljb25DbGlja2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9hbm5hLWNvcmUtYW5uYS1pY29uLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1RFWFRfQUNUSU9OUydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRleHQgb2YgUk9XX0RBVEFbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uYWN0aW9uS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGV4dC5zaG93VG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWN0aW9uQ2xpY2tlZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRleHQuaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyB0ZXh0LmNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VFbnRlck9uVGV4dEFjdGlvblR5cGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0udG9vbHRpcEtleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ0ZXh0QWN0aW9uVG9vbHRpcFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJhdXRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC1pY29uLWNvbHVtbi10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRleHQubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXRleHQuc2hvd1Rvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFjdGlvbkNsaWNrZWQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0ZXh0LmlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgdGV4dC5jbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGV4dC5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidDSEVDS0JPWCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzYWJsZS1jaGVja2JveCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uaXNEaXNhYmxlZEtleV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBjdXN0b20tY29sdW1uLWNoZWNrYm94LWNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdE9yVW5zZWxlY3RDaGVja2JveChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2JveFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBjdXN0b20tY29sdW1uLWNoZWNrYm94LXVuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGUtY2hlY2tib3gnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmlzRGlzYWJsZWRLZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RPclVuc2VsZWN0Q2hlY2tib3goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2JveF9vdXRsaW5lX2JsYW5rXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhY3Rpb24gb2YgUk9XX0RBVEFbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uYWN0aW9uS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbi5zaG93SWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFjdGlvbi5pY29uQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IGFjdGlvbi5kaXNhYmxlZEljb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlRW50ZXJPblN0cmluZ1RleHRBY3Rpb25UeXBlQ29udGFpbmluZ1RhYmxlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLnRvb2x0aXBLZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIGF1dG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwidG9vbHRpcC1jb250YWluaW5nLXRhYmxlIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInRvb2x0aXBDb250YWluaW5nVGFibGVUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInQ0xJQ0tBQkxFX0RBVEEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dCBvZiBST1dfREFUQVtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5hY3Rpb25LZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInRleHQuY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2thYmxlRGF0YUNsaWNrZWQoUk9XX0RBVEEsIHRleHQuaWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGV4dC5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibGluZS5vYmplY3RLZXkgPT0gJ2Rpc3BsYXlCb29rZWRVbml0cycgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09ICdSQVRJTkcnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjbGlja2FibGUtZGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3BvdERldGFpbHNEb3dubG9hZENsaWNrZWQoJ0RBVEFST1cnLCBST1dfREFUQSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZGlzYWJsZWQtY2xpY2thYmxlLWRhdGEnOiBkb3dubG9hZEluUHJvZ3Jlc3MgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgUk9XX0RBVEEuZGlzcGxheUJvb2tlZFVuaXRzIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIHNwb3QtZGV0YWlscy1kb3dubG9hZC1pY29uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPmdldF9hcHA8L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZEluUHJvZ3Jlc3MgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuaW52ZW50b3J5Q29kZUlkID09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEludmVudG9yeUlkRm9yRG93bmxvYWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGVtb2dyYXBoaWMgPT0gc2VsZWN0ZWREZW1vZ3JhcGhpY0ZvckRvd25sb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNpcmN1bGFyUHJvZ3Jlc3NCYXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTVFJJTkdfX19JQ09OX09SX1RFWFRfQUNUSU9OJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWN0aW9uIG9mIFJPV19EQVRBW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmFjdGlvbktleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFjdGlvbi5hZGRpdGlvbmFsVGV4dEJlZm9yZUxpbmtDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySHRtbF09XCJhY3Rpb24uYWRkaXRpb25hbFRleHRCZWZvcmVMaW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwie3sgYWN0aW9uLmFkZGl0aW9uYWxUZXh0QmVmb3JlTGluayB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC1pY29uLWNvbHVtbi10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlVG9vbHRpcF09XCIhYWN0aW9uLmVuYWJsZVRvb2x0aXBGb3JBZGRpdGlvbmFsVGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3Rpb24gJiYgYWN0aW9uLnR5cGVPZkRhdGEgPT0gJ1NUUklORydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhY3Rpb24uZGF0YSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYWN0aW9uLmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbi5zaG93TGlua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWN0aW9uQ2xpY2tlZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uLmxpbmtDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogYWN0aW9uLmRpc2FibGVkTGluayB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgYWN0aW9uLmRhdGEgfX08L2FcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cInt7IGFjdGlvbi5hZGRpdGlvbmFsVGV4dEFmdGVyTGluayB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uLmFkZGl0aW9uYWxUZXh0QWZ0ZXJMaW5rQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImd0LWljb24tY29sdW1uLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVUb29sdGlwXT1cIiFhY3Rpb24uZW5hYmxlVG9vbHRpcEZvckFkZGl0aW9uYWxBZnRlclRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGlvbi5hZGRpdGlvbmFsVGV4dEFmdGVyTGluayB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3Rpb24uc2hvd1Rvb2x0aXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aW9uLnRvb2x0aXBEYXRhLmlubmVySHRtbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uc2hvd0ljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFjdGlvbi5pY29uQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogYWN0aW9uLmRpc2FibGVkSWNvbiB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlRW50ZXJPblN0cmluZ1RleHRBY3Rpb25UeXBlQ29udGFpbmluZ1RhYmxlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS50b29sdGlwS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInRvb2x0aXAtY29udGFpbmluZy10YWJsZSByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInRvb2x0aXBDb250YWluaW5nVGFibGVUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWFjdGlvbi50b29sdGlwRGF0YS50b29sdGlwVGFibGVCb2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbi5zaG93SWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uLmljb25DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBhY3Rpb24uZGlzYWJsZWRJY29uIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25DbGlja2VkT25TdHJpbmdJY29uQWN0aW9uVHlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbi5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJtb3VzZUxlYXZlVGV4dEFjdGlvblR5cGUoUk9XX0RBVEEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlRW50ZXJPblN0cmluZ1RleHRBY3Rpb25UeXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS50b29sdGlwS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZW1lbnRdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnRvb2x0aXBQbGFjZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhY3Rpb24udG9vbHRpcFBsYWNlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdib3R0b20gYXV0bydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ0ZWFtLXVzZXItdG9vbHRpcCByZW1vdmUtb24tc2Nyb2xsLWNsYXNzIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnRvb2x0aXBDbGFzc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwidXNlckxvZ2dlZEluRGV0YWlsc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aW9uWydzaG93U3ZnSWNvbiddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YW5uYS1jb3JlLWFubmEtZXN0LWljb24tdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsb2F0LXJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvblsnc3ZnSWNvbk5hbWUnXSA9PSAnYW5uYS1pY29uJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwibW91c2VMZWF2ZVRleHRBY3Rpb25UeXBlKFJPV19EQVRBKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlRW50ZXJPblN0cmluZ1RleHRBY3Rpb25UeXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvb2x0aXBLZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlbWVudF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnRvb2x0aXBQbGFjZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYWN0aW9uLnRvb2x0aXBQbGFjZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2JvdHRvbSBhdXRvJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwidGVhbS11c2VyLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzcyB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25bJ3Rvb2x0aXBDbGFzcyddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInVzZXJMb2dnZWRJbkRldGFpbHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FubmEtY29yZS1hbm5hLWVzdC1pY29uLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYWN0aW9uLnNob3dUb29sdGlwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uc2hvd0ljb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uLmljb25DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IGFjdGlvbi5kaXNhYmxlZEljb24gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25DbGlja2VkT25TdHJpbmdJY29uQWN0aW9uVHlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTVFJJTkdfT1JfSU5QVVQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldPy50eXBlID09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTVFJJTkcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaW5wdXRCb3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySHRtbF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lucHV0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ucGxhY2Vob2xkZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0VsbGlwc2lzVGV4dE9uSG92ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNsYXNzTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlc01hZGVJbkVkaXRhYmxlSW5wdXRCb3goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFzdGUpPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXNNYWRlSW5FZGl0YWJsZUlucHV0Qm94KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGVJbnB1dFZhbHVlQ2hhbmdlZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kaXNhYmxlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVkLWJvcmRlcic6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaGFzRXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zaG93SWNvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmljb25Ub29sdGlwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC10b3RhbC1yb3ctdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmljb25DbGFzc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1bXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hvd1N2Z0ljb24nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbm5hLWNvcmUtYW5uYS1lc3QtaWNvbi10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsb2F0LXJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3ZnSWNvbk5hbWUnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdID09ICdhbm5hLWljb24nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZW1lbnRdPVwiJ2JvdHRvbSBhdXRvJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImd0LXRvdGFsLXJvdy10b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaWNvblRvb2x0aXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYW5uYS1jb3JlLWFubmEtZXN0LWljb24tdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0hUTUwnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIdG1sXT1cIlJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTSU5HTEVfUkFESU8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGUtY2hlY2tib3gnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmlzRGlzYWJsZWRLZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1yYWRpb2JveC1tYXJrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIihudWxsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1yYWRpb2JveC1ibGFua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGUtY2hlY2tib3gnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmlzRGlzYWJsZWRLZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RPclVuc2VsZWN0Q2hlY2tib3goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInUkFESU8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiUk9XX0RBVEFbJ1JhZGlvQnV0dG9uQ29uZmlnJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiUk9XX0RBVEFbc3VibGluZS5vYmplY3RLZXldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJST1dfREFUQVsnUmFkaW9CdXR0b25Db25maWcnXVswXS5pc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmFkaW9CdXR0b24gb2YgUk9XX0RBVEFbJ1JhZGlvQnV0dG9uQ29uZmlnJ107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsYXN0ID0gbGFzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7eyByYWRpb0J1dHRvbi52YWx1ZSB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgcmFkaW9CdXR0b24uY2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpb0J1dHRvbkNsaWNrZWQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaW9CdXR0b24udmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbJ1JhZGlvQnV0dG9uQ29uZmlnJ11bMF0uaXNEaXNhYmxlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgcmFkaW9CdXR0b24ubGFiZWwgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIge3sgcmFkaW9CdXR0b24uaWNvbkNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJhZGlvQnV0dG9uSWNvbkNsaWNrZWQoUk9XX0RBVEEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAqbmdJZj1cIiFsYXN0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1NUUklOR19XSVRIX1RPT0xUSVAnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhY3Rpb24gb2YgUk9XX0RBVEFbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uYWN0aW9uS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7IGFjdGlvbj8uZGF0YVRvRGlzcGxheSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24/LnNob3dUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ0ZXh0QWN0aW9uVG9vbHRpcFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VFbnRlck9uU3RyaW5nVGV4dEFjdGlvblR5cGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0udG9vbHRpcEtleVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2VtZW50XT1cImFjdGlvbj8udG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uPy50b29sdGlwSWNvbkNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC1pY29uLWNvbHVtbi10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlVG9vbHRpcF09XCJhY3Rpb24/LmRpc2FibGVUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiB7eyBhY3Rpb24/LmRhdGFUb0Rpc3BsYXlBZnRlclRvb2x0aXAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdWJsaW5lLm9iamVjdEtleSAhPSAnZGVzY3JpcHRpb24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmxpbmUub2JqZWN0S2V5ID09ICdpbnZlbnRvcnlDb2RlJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVsnaXNTZWxsZXJHcm91cCddICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ1JBVElORydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWkgbWRpLWluZm8tb3V0bGluZSBzZWxsZXItdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwic2VsbGVySGllcmFyY2h5VG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIGF1dG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaWRkZW4pPVwiY2xvc2VUb29sdGlwKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNpbmZvPVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiaGllcmFyY2h5LXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRUaGVWYWx1ZVRvU2VsbGVyR3JvdXBUb29sdGlwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuc2VsbGVyR3JvdXBIaWVyYXJjaHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibGluZS5vYmplY3RLZXkgPT0gJ2Rpc3BsYXlCb29rZWRBdmVyYWdlUmF0aW5nJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09ICdSQVRJTkcnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBWydzaG93UmF0aW5nQXZlcmFnZUljb24nXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtaSBtZGktaW5mby1vdXRsaW5lIHNlbGxlci10b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNEaWZmZXJlbmNlKFJPV19EQVRBLmlzRGlmZmVyZW5jZUxlc3NUaGFuMjVQZXJjZW50KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwicG9zdGVkLWF2Zy10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInBvc3RlZFJhdGluZ0RpZmZlcmVuY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibGluZS5vYmplY3RLZXkgPT0gJ2Rpc3BsYXlCb29rZWRBdmVyYWdlSW1wcmVzc2lvbicgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PSAnUkFUSU5HJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVsnc2hvd0ltcHJlc3Npb25BdmVyYWdlSWNvbiddXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1pIG1kaS1pbmZvLW91dGxpbmUgc2VsbGVyLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc0RpZmZlcmVuY2UoUk9XX0RBVEEuaXNEaWZmZXJlbmNlTGVzc1RoYW4yNVBlcmNlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJwb3N0ZWQtYXZnLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwicG9zdGVkSW1wRGlmZmVyZW5jZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3VibGluZS5vYmplY3RLZXkgPT0gJ2Rlc2NyaXB0aW9uJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQS5kZXNjcmlwdGlvbk1lc3NhZ2UgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFJlZmVyZW5jZU51bVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlJPV19EQVRBLmRlc2NyaXB0aW9uTWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBST1dfREFUQS5kZXNjcmlwdGlvbk1lc3NhZ2UgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFJlZmVyZW5jZU51bSAhPSAnLScgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLmRlc2NyaXB0aW9uRW1haWxSZWZlcmVuY2VOdW0gIT0gJydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVtYWlsIFJlZjoge3sgUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFJlZmVyZW5jZU51bSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cInt7IFJPV19EQVRBLmRlc2NyaXB0aW9uRGV0YWlsc1VybCB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQS5kZXNjcmlwdGlvbkRldGFpbHNVcmxUeXBlID09PSAnUERGJyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQS5kZXNjcmlwdGlvbkRldGFpbHNVcmxUeXBlID09PSAnRVhDRUwnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIHZpZXdEZXRhaWxzQW5kRW1haWxCdG5cIj5Eb3dubG9hZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiUk9XX0RBVEEuYWN0aXZpdHluYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ29yZGVyIG9uYm9hcmRlZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiUk9XX0RBVEEuZGVzY3JpcHRpb25EZXRhaWxzVXJsVHlwZSA9PT0gJ0xJTksnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInZpZXdEZXRhaWxzQ2xpY2tlZChST1dfREFUQSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biB2aWV3RGV0YWlsc0FuZEVtYWlsQnRuIG9yZGVyLW9uYm9hcmRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBkZXRhaWxzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cInt7IFJPV19EQVRBLmRlc2NyaXB0aW9uRW1haWxVcmwgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFVybCAhPSAnLScgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFVybCAhPSAnJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biB2aWV3RGV0YWlsc0FuZEVtYWlsQnRuXCI+VmlldyBlbWFpbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgfCBhc3luY1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG51bGwgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxhbm5hLWNvcmUtbm8tZGF0YS1saWJcclxuICAgICAgICBbd2lkdGhdPVwibm9EYXRhV2lkdGhcIlxyXG4gICAgICAgIFttYXJnaW5Ub3BdPVwibWFyZ2luVG9wXCJcclxuICAgICAgICAqbmdJZj1cImlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgfCBhc3luY1wiXHJcbiAgICA+XHJcbiAgICA8L2FubmEtY29yZS1uby1kYXRhLWxpYj5cclxuPC9kaXY+XHJcblxyXG48IS0tIENoZWNrYm94IHRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgI2ZpbHRlclRvb2x0aXA+XHJcbiAgICA8YW5uYS1jb3JlLWFubmEtY29sdW1uLWNoZWNrYm94LWZpbHRlclxyXG4gICAgICAgIFt0YWJsZURhdGFdPVwidGFibGVEYXRhXCJcclxuICAgICAgICBbc2hvd0ZpbHRlckhlYWRlclRhYnNdPVwic2hvd0ZpbHRlclRvb2x0aXBUYWJzXCJcclxuICAgICAgICBbaXNMdXJBbmRDc3JDb21wb25lbnRdPVwiZmFsc2VcIlxyXG4gICAgICAgIFtjbG9uZWRUYWJsZURhdGFdPVwiY2xvbmVkVGFibGVEYXRhXCJcclxuICAgICAgICBbZmlsdGVyVGFiT2JqZWN0c109XCJmaWx0ZXJUYWJPYmplY3RzXCJcclxuICAgICAgICAoZmlsdGVyQXBwbGllZFRvVGFibGUpPVwiZmlsdGVyQXBwbGllZCgkZXZlbnQpXCJcclxuICAgICAgICAoc29ydGluZ0FwcGxpZWRUb1RhYmxlKT1cInNvcnRpbmdBcHBsaWVkKCRldmVudClcIlxyXG4gICAgICAgIChjbG9zZVRvb2x0aXApPVwiY2xvc2VUb29sdGlwKClcIlxyXG4gICAgPlxyXG4gICAgPC9hbm5hLWNvcmUtYW5uYS1jb2x1bW4tY2hlY2tib3gtZmlsdGVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBTbGlkZXIgdGVtcGxhdGUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjc2xpZGVyVG9vbFRpcD5cclxuICAgIDxhbm5hLWNvcmUtYW5uYS1jb2x1bW4tc2xpZGVyLWZpbHRlclxyXG4gICAgICAgIFt0YWJsZURhdGFdPVwidGFibGVEYXRhXCJcclxuICAgICAgICBbc2hvd0ZpbHRlckhlYWRlclRhYnNdPVwic2hvd0ZpbHRlclRvb2x0aXBUYWJzXCJcclxuICAgICAgICBbaXNMdXJBbmRDc3JDb21wb25lbnRdPVwiZmFsc2VcIlxyXG4gICAgICAgIFtjbG9uZWRUYWJsZURhdGFdPVwiY2xvbmVkVGFibGVEYXRhXCJcclxuICAgICAgICBbZmlsdGVyVGFiT2JqZWN0c109XCJmaWx0ZXJUYWJPYmplY3RzXCJcclxuICAgICAgICAoZmlsdGVyQXBwbGllZFRvVGFibGUpPVwiZmlsdGVyQXBwbGllZCgkZXZlbnQpXCJcclxuICAgICAgICAoc29ydGluZ0FwcGxpZWRUb1RhYmxlKT1cInNvcnRpbmdBcHBsaWVkKCRldmVudClcIlxyXG4gICAgICAgIChjbG9zZVRvb2x0aXApPVwiY2xvc2VUb29sdGlwKClcIlxyXG4gICAgPlxyXG4gICAgPC9hbm5hLWNvcmUtYW5uYS1jb2x1bW4tc2xpZGVyLWZpbHRlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gRGF0ZSBQaWNrZXIgVGVtcGxhdGUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGF0ZVBpY2tlclRvb2x0aXA+XHJcbiAgICA8YW5uYS1jb3JlLWFubmEtY29sdW1uLWRhdGUtcmFuZ2UtZmlsdGVyXHJcbiAgICAgICAgW3RhYmxlRGF0YV09XCJ0YWJsZURhdGFcIlxyXG4gICAgICAgIFtzaG93RmlsdGVySGVhZGVyVGFic109XCJzaG93RmlsdGVyVG9vbHRpcFRhYnNcIlxyXG4gICAgICAgIFtpc0x1ckFuZENzckNvbXBvbmVudF09XCJmYWxzZVwiXHJcbiAgICAgICAgW2Nsb25lZFRhYmxlRGF0YV09XCJjbG9uZWRUYWJsZURhdGFcIlxyXG4gICAgICAgIFtmaWx0ZXJUYWJPYmplY3RzXT1cImZpbHRlclRhYk9iamVjdHNcIlxyXG4gICAgICAgIChmaWx0ZXJBcHBsaWVkVG9UYWJsZSk9XCJmaWx0ZXJBcHBsaWVkKCRldmVudClcIlxyXG4gICAgICAgIChzb3J0aW5nQXBwbGllZFRvVGFibGUpPVwic29ydGluZ0FwcGxpZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGNsb3NlVG9vbHRpcCk9XCJjbG9zZVRvb2x0aXAoKVwiXHJcbiAgICA+XHJcbiAgICA8L2FubmEtY29yZS1hbm5hLWNvbHVtbi1kYXRlLXJhbmdlLWZpbHRlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gV2VlayBQaWNrZXIgVGVtcGxhdGUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjd2Vla1BpY2tlclRvb2xUaXA+XHJcbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJ3ZWVrcGlja2VyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxhbm5hLWNvcmUtd2Vlay1jYWxlbmRhci1maWx0ZXItbGliXHJcbiAgICAgICAgICAgIFt3ZWVrLWNhbGVuZGFyLWNvbmZpZ109XCJndEdlbmVyYWxDb25maWcubXVsdGlXZWVrUGlja2VyQ29uZmlnXCJcclxuICAgICAgICAgICAgKGFwcGx5KT1cImFwcGx5V2Vla0ZpbHRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgW2Zyb20tZGF0ZV09XCJjYWxlbmRhck1pbkVuYWJsZWREYXRlXCJcclxuICAgICAgICAgICAgW3RvLWRhdGVdPVwiY2FsZW5kYXJNYXhFbmFibGVkRGF0ZVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvYW5uYS1jb3JlLXdlZWstY2FsZW5kYXItZmlsdGVyLWxpYj5cclxuICAgIDwvZGl2PiAtLT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVGltZSBGaWx0ZXIgVGVtcGxhdGUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjdGltZUZpbHRlclRvb2xUaXA+XHJcbiAgICA8YW5uYS1jb3JlLWFubmEtY29sdW1uLXRpbWUtZmlsdGVyXHJcbiAgICAgICAgW3RhYmxlRGF0YV09XCJ0YWJsZURhdGFcIlxyXG4gICAgICAgIFtzaG93RmlsdGVySGVhZGVyVGFic109XCJzaG93RmlsdGVyVG9vbHRpcFRhYnNcIlxyXG4gICAgICAgIFtpc0x1ckFuZENzckNvbXBvbmVudF09XCJmYWxzZVwiXHJcbiAgICAgICAgW3Nob3dBbGxUaW1lUmFuZ2VDaGVja2JveGVzXT1cInNob3dDaGVja2JveGVzRm9yVGltZUZpbHRlclwiXHJcbiAgICAgICAgW2Nsb25lZFRhYmxlRGF0YV09XCJjbG9uZWRUYWJsZURhdGFcIlxyXG4gICAgICAgIFtmaWx0ZXJUYWJPYmplY3RzXT1cImZpbHRlclRhYk9iamVjdHNcIlxyXG4gICAgICAgIChmaWx0ZXJBcHBsaWVkVG9UYWJsZSk9XCJmaWx0ZXJBcHBsaWVkKCRldmVudClcIlxyXG4gICAgICAgIChzb3J0aW5nQXBwbGllZFRvVGFibGUpPVwic29ydGluZ0FwcGxpZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGNsb3NlVG9vbHRpcCk9XCJjbG9zZVRvb2x0aXAoKVwiXHJcbiAgICA+XHJcbiAgICA8L2FubmEtY29yZS1hbm5hLWNvbHVtbi10aW1lLWZpbHRlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY29sdW1uSW5mb1Rvb2x0aXA+XHJcbiAgICA8cCBzdHlsZT1cImNvbG9yOiBibGFjazsgd2hpdGUtc3BhY2U6IG5vd3JhcFwiPlRoaXMgcHJlZW1wdGlvbiBpcyByZWplY3RlZCBhbmQgbm90IG1hcmtlZCBmb3IgY3JlZGl0LjwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjcmF0aW5nSW5mb1Rvb2x0aXA+XHJcbiAgICA8cCBjbGFzcz1cImZpcnN0LXJvd1wiPlNob3dzICdCb29rZWQgUmF0aW5nJyBmb3IgUHJlZW1wdGlvbnMgJiBNYWtlR29vZCBPZmZlcmVkIHNwb3QocykuPC9wPlxyXG4gICAgPHAgY2xhc3M9XCJzZWNvbmQtcm93XCI+U2hvd3MgJ1Byb2plY3RlZCBSYXRpbmcnIGZvciBBRFUgT2ZmZXJlZCBzcG90KHMpLjwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjaW1wc0luZm9Ub29sdGlwPlxyXG4gICAgPHAgY2xhc3M9XCJmaXJzdC1yb3dcIj5TaG93cyAnQm9va2VkIElNUFMnIGZvciBQcmVlbXB0aW9ucyAmIE1ha2VHb29kIE9mZmVyZWQgc3BvdChzKS48L3A+XHJcbiAgICA8cCBjbGFzcz1cInNlY29uZC1yb3dcIj5TaG93cyAnUHJvamVjdGVkIElNUFMnIGZvciBBRFUgT2ZmZXJlZCBzcG90KHMpLjwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc3BvdHNDb2x1bW5FcXVpdmFsaXphdGlvbk1lc3NhZ2VUb29sdGlwPlxyXG4gICAgPHAgY2xhc3M9XCJzcG90LWNvbHVtbi10b29sdGlwLW1lc3NhZ2VcIj5cclxuICAgICAgICBUaGlzIGNvbnNpc3RzIG9mIGVxdWl2YWxpemVkIHNwb3RzIGFuZCB1bi1lcXVpdmFsaXplZCBQYWlkIFByb2dyYW1zICYgdW4tZXF1aXZhbGl6ZWQgTm9uLXNwb3RzLlxyXG4gICAgPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN1bmRlckRlbGl2ZXJ5VG9vbHRpcD5cclxuICAgIDxwIGNsYXNzPVwic3BvdC1jb2x1bW4tdG9vbHRpcC1tZXNzYWdlXCI+XHJcbiAgICAgICAgSW5kaWNhdGVzIHRoZSBVbmRlci1kZWxpdmVyeSBwZXJjZW50YWdlIGJhc2VkIG9uIGJvb2tlZCBhbmQgcG9zdGVkIFJURy9JTVBTLlxyXG4gICAgPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNvdmVyRGVsaXZlcnlUb29sdGlwPlxyXG4gICAgPHAgY2xhc3M9XCJzcG90LWNvbHVtbi10b29sdGlwLW1lc3NhZ2VcIj5cclxuICAgICAgICBJbmRpY2F0ZXMgdGhlIE92ZXItZGVsaXZlcnkgcGVyY2VudGFnZSBiYXNlZCBvbiBib29rZWQgYW5kIHBvc3RlZCBSVEcvSU1QUy5cclxuICAgIDwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjcmF0ZUluZm9Ub29sdGlwPlxyXG4gICAgPHAgY2xhc3M9XCJmaXJzdC1yb3dcIj5TaG93cyAnQm9va2VkIFJhdGUnIGZvciBQcmVlbXB0aW9ucyAmIE1ha2VHb29kIE9mZmVyZWQgc3BvdChzKS48L3A+XHJcbiAgICA8cCBjbGFzcz1cInNlY29uZC1yb3dcIj5TaG93cyAnUHJvamVjdGVkICQgVmFsdWUnIGZvciBBRFUgT2ZmZXJlZCBzcG90KHMpLjwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc2VsbGVySGllcmFyY2h5VG9vbHRpcD5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxsZXJHcm91cEhpZXJhcmNoeS5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJoaWVyYXJjaHktdGFibGUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInNlbGxlci1oaWVyYXJjaHktdGFibGVcIj5cclxuICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4jPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkludmVudG9yeSBDb2RlczwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5Qcm9ncmFtL0Rlc2NyaXB0aW9uPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGRhdGEgb2Ygc2VsbGVyR3JvdXBIaWVyYXJjaHk7IGxldCB0b29sdGlwSW5kZXggPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgdG9vbHRpcEluZGV4ICsgMSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHNob3dFbGxpcHNpc1RleHRPbkhvdmVyPnt7IGRhdGEuSW52ZW50b3J5Q29kZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc2hvd0VsbGlwc2lzVGV4dE9uSG92ZXI+e3sgZGF0YS5Qcm9ncmFtIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgIDwvc2VjdGlvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGxlckdyb3VwSGllcmFyY2h5Lmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJjb2xvcjogIzAwMFwiPlNlbGxlciBncm91cCBub3QgYXZhaWxhYmxlIGZvciB0aGlzIGludmVudG9yeSBjb2RlPC9zcGFuPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2x1clZpb2xhdGlvbkluZm9Ub29sdGlwPlxyXG4gICAgPHAgY2xhc3M9XCJmaXJzdC1yb3dcIj5UaGUgdmFsdWVzIGFyZSBmb3IgdGhlIGVudGlyZSB3ZWVrLjwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjcG9zdGVkUmF0aW5nRGlmZmVyZW5jZT5cclxuICAgIDxwIGNsYXNzPVwiZGlmZmVyZW5jZS10ZXh0XCI+XHJcbiAgICAgICAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBwb3N0ZWQgYW5kIGJvb2tlZCBhdmVyYWdlIHJhdGluZyBpc1xyXG4gICAgICAgIHt7IGlzRGlmZmVyZW5jZUxlc3NUaGFuMjVQZXJjZW50ID8gXCJsZXNzXCIgOiBcIm1vcmVcIiB9fSB0aGFuIDI1JS5cclxuICAgIDwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjcG9zdGVkSW1wRGlmZmVyZW5jZT5cclxuICAgIDxwIGNsYXNzPVwiZGlmZmVyZW5jZS10ZXh0XCI+XHJcbiAgICAgICAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBwb3N0ZWQgYW5kIGJvb2tlZCBhdmVyYWdlIGltcHJlc3Npb24gaXNcclxuICAgICAgICB7eyBpc0RpZmZlcmVuY2VMZXNzVGhhbjI1UGVyY2VudCA/IFwibGVzc1wiIDogXCJtb3JlXCIgfX0gdGhhbiAyNSUuXHJcbiAgICA8L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI29uZ29pbmdSZXZCb29rZWRDb2x1bW5Ub29sdGlwPlxyXG4gICAgPHA+VGhlIEJvb2tlZCAkIHZhbHVlLCBTcG90cywgR1JQLCBDUFAsIElNUFMsIENQTSBjb3JyZXNwb25kcyBvbiB0aGUgbGFzdCBwZXJtYW5lbnQgcmV2aXNpb24gZ2VuZXJhdGVkPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb21wbGV0ZWRSZXZCb29rZWRDb2x1bW5Ub29sdGlwPlxyXG4gICAgPHA+VGhlIEJvb2tlZCAkIHZhbHVlIGNvcnJlc3BvbmRzIG9uIHRoZSBsYXN0IHBlcm1hbmVudCByZXZpc2lvbiBnZW5lcmF0ZWQ8L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2F2Z0Jvb2tlZFJhdGU+XHJcbiAgICA8cD5UaGlzIGlzIHRoZSBib29rZWQgYXZlcmFnZSBSYXRlPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNhdmdCb29rZWRSdGc+XHJcbiAgICA8cD5UaGlzIGlzIHRoZSBib29rZWQgYXZlcmFnZSBSVEc8L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2F2Z0Jvb2tlZEltcHM+XHJcbiAgICA8cD5UaGlzIGlzIHRoZSBib29rZWQgYXZlcmFnZSBJTVAo4oCZMDAwKTwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjcHJvamVjdGVkSW1wc1J0Zz5cclxuICAgIDxwPlxyXG4gICAgICAgIEFsbCBwcm9qZWN0aW9ucyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBzdW0gb2YgYWN0dWFsIHBvc3RlZCBpbmZvcm1hdGlvbiB1bnRpbCB0aGUgbGFzdCBwb3N0ZWQgZGF0ZSBhbmQgZXN0aW1hdGVzXHJcbiAgICAgICAgZm9yIHRoZSByZW1haW5pbmcgc2VsZWN0ZWQgcGVyaW9kLlxyXG4gICAgPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNhdXRvbWF0aW9uVG9vbHRpcD5cclxuICAgIDxwPlxyXG4gICAgICAgIFBsZWFzZSBnZXQgdGhlIG9yZGVyIGJ1c2luZXNzIHJ1bGVzIGFwcHJvdmVkIHRvIGFjdGl2YXRlIHRoZSBvcmRlciBmb3IgYXV0b21hdGlvbi4gT25seSBmb3IgdGhlXHJcbiAgICAgICAgYXV0b21hdGlvbi1hY3RpdmF0ZWQgb3JkZXJzLCBhbnkgYXBwcm92ZWQgTUdzLCBBRFVzLCBvciBjcmVkaXRlZCBzcG90cyBvbiBBTk5BIHdpbGwgYmUgZmVkIGludG8gdGhlIHRyYWZmaWNcclxuICAgICAgICBzeXN0ZW0gaS5lLiBBTk5BIHJldmlzaW9ucy5cclxuICAgICAgICA8IS0tIHJlbW92ZWQgYmVsb3cgbGluZSBhcyBwYXJ0IG9mIGVuaGFuY21lbm50IGluIDE0LjAgcmVsZWFzIC0tPlxyXG4gICAgICAgIDwhLS0gQWRkaXRpb25hbGx5LCBBTk5BIHdpbGwgb25seSBlbnRlciBidXllciByZXZpc2lvbnMgaW50byB0cmFmZmljIGZvciB0aGUgc2VsZWN0ZWRcclxuICAgICAgICBNZWRpYWxpbmUvV09DIG9yZGVycy4gLS0+XHJcbiAgICA8L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3JlYmF0ZUltcGFjdD5cclxuICAgIDxwPlJlYmF0ZSBpbXBhY3QgdmFsdWUgaXMgZm9yIHRoZSBvcmlnaW5hbGx5IG9yZGVyZWQgc3BvdCBsZW5ndGggYW5kIGlzIG5vdCBlcXVpdmFsaXplZC48L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2x1clZpb2xhdGlvblRvdGFsUm93VG9vbFRpcD5cclxuICAgIDx1bD5cclxuICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgIDxzdHJvbmc+UE9MSVRJQ0FMIFJBVEUgVklPTEFUSU9OUzo8L3N0cm9uZz5cclxuICAgICAgICAgICAgVmlvbGF0aW9ucyBmbGFnZ2VkIHdoZW4gbm9uLXBvbGl0aWNhbCBzcG90cyBhcmUgYm9va2VkIGF0IGEgcmF0ZSBsb3dlciB0aGFuIHRoZSBtaW5pbXVtIGJvb2tlZCByYXRlIGZvclxyXG4gICAgICAgICAgICBwb2xpdGljYWwgY2FuZGlkYXRlcyBmb3IgdGhlIHNhbWUgd2VlaywgSW52ZW50b3J5IENvZGUgYW5kIFJldmVudWUgQ2xhc3MuXHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgIDxzdHJvbmc+Q0FORElEQVRFIFRPIENBTkRJREFURSBWSU9MQVRJT046PC9zdHJvbmc+XHJcbiAgICAgICAgICAgIFZpb2xhdGlvbnMgZmxhZ2dlZCB3aGVuIHBvbGl0aWNhbCBzcG90cyBhcmUgYm9va2VkIGF0IGRpZmZlcmVudCByYXRlcyB0byBvdGhlciBwb2xpdGljYWwgc3BvdHMgZm9yIHRoZSBzYW1lXHJcbiAgICAgICAgICAgIHdlZWssIEludmVudG9yeSBDb2RlIGFuZCBSZXZlbnVlIENsYXNzLlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjaXJjdWxhclByb2dyZXNzQmFyPlxyXG4gICAgPGNpcmNsZS1wcm9ncmVzc1xyXG4gICAgICAgIFtwZXJjZW50XT1cInBlcmNlbnREb25lXCJcclxuICAgICAgICBbcmFkaXVzXT1cIjVcIlxyXG4gICAgICAgIFtzaG93VGl0bGVdPVwiZmFsc2VcIlxyXG4gICAgICAgIFtzaG93VW5pdHNdPVwiZmFsc2VcIlxyXG4gICAgICAgIFtzaG93U3VidGl0bGVdPVwiZmFsc2VcIlxyXG4gICAgICAgIFtvdXRlclN0cm9rZVdpZHRoXT1cIjNcIlxyXG4gICAgICAgIFtpbm5lclN0cm9rZVdpZHRoXT1cIjNcIlxyXG4gICAgICAgIFtzcGFjZV09XCItM1wiXHJcbiAgICAgICAgW291dGVyU3Ryb2tlQ29sb3JdPVwiJyMyNjhiZmYnXCJcclxuICAgICAgICBbaW5uZXJTdHJva2VDb2xvcl09XCInI2Q1ZDVkNSdcIlxyXG4gICAgICAgIFthbmltYXRpb25EdXJhdGlvbl09XCIxMFwiXHJcbiAgICA+PC9jaXJjbGUtcHJvZ3Jlc3M+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3VzZXJMb2dnZWRJbkRldGFpbHM+XHJcbiAgICA8ZGl2IGNsYXNzPVwidG9vbHRpcC1kaXYtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF0YSBvZiB0ZXh0QWN0aW9uVG9vbHRpcFwiPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGEua2V5ICE9ICdyZWFkJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YS5rZXkgfX0gPGI+IHt7IGRhdGEudmFsdWUgfX08L2I+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXRhLmtleSA9PSAncmVhZCdcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGEudmFsdWUgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI21hcmtBc1JlYWRUaXA+XHJcbiAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uLXRvb2x0aXAtZGl2LWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGV4dEFjdGlvblRvb2x0aXBcIj5cclxuICAgICAgICAgICAge3sgZGF0YS52YWx1ZSB9fVxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3RleHRBY3Rpb25Ub29sdGlwVGVtcGxhdGU+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRleHRBY3Rpb25Ub29sdGlwXCI+XHJcbiAgICAgICAge3sgZGF0YS5rZXkgfX0gPGI+IHt7IGRhdGEudmFsdWUgfX08L2I+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc2hvd09ySGlkZVRvZ2dsZUZvclRvdGFsUm93VG9vbHRpcD5cclxuICAgIDxkaXY+XHJcbiAgICAgICAge3sgc2hvd09ySGlkZVRvZ2dsZUZvclRvdGFsUm93ICYmICFndEdlbmVyYWxDb25maWcudG90YWxSb3cgPyBcIlNob3cgVG90YWwgUm93XCIgOiBcIkhpZGUgVG90YWwgUm93XCIgfX1cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN0b29sdGlwQ29udGFpbmluZ1RhYmxlVGVtcGxhdGU+XHJcbiAgICA8ZGl2XHJcbiAgICAgICAgKm5nSWY9XCJ0b29sdGlwQ29udGFpbmluZ1RhYmxlXCJcclxuICAgICAgICBbaW5uZXJIVE1MXT1cInRvb2x0aXBDb250YWluaW5nVGFibGUuaW5uZXJIdG1sXCJcclxuICAgICAgICBjbGFzcz1cIm5vdGlmaWNhdGlvbi10b29sdGlwLWRpdi1jb250YWluZXJcIlxyXG4gICAgPlxyXG4gICAgICAgIDwhLS0gPHVsPlxyXG4gICAgICA8bGkgKm5nRm9yPVwibGV0IGhlYWRlck1zZyBvZiB0b29sdGlwQ29udGFpbmluZ1RhYmxlLnRhYmxlSGVhZGVyTXNnXCI+XHJcbiAgICAgICAgPGI+IHt7aGVhZGVyTXNnfX0gIDwvYj5cclxuICAgICAgPC9saT5cclxuICAgIDwvdWw+XHJcblxyXG4gICAgPHRhYmxlIGNsYXNzPVwidG9vbHRpcC10YWJsZVwiPlxyXG4gICAgICA8dGhlYWQ+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgdG9vbHRpcENvbnRhaW5pbmdUYWJsZS50b29sdGlwVGFibGVIZWFkZXJcIj5cclxuICAgICAgICAgICAge3sgaGVhZGVyfX1cclxuICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC90aGVhZD5cclxuICAgICAgPHRib2R5PlxyXG4gICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93cyBvZiB0b29sdGlwQ29udGFpbmluZ1RhYmxlLnRvb2x0aXBUYWJsZUJvZHlcIj5cclxuICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgZGF0YSBvZiByb3dzXCI+XHJcbiAgICAgICAgICAgIHt7IGRhdGEgfX1cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC90Ym9keT5cclxuICAgIDwvdGFibGU+XHJcblxyXG4gICAgPHVsPlxyXG4gICAgICA8bGkgc3R5bGU9XCJtYXJnaW4tdG9wOjEwcHg7IHBhZGRpbmc6MFwiICpuZ0Zvcj1cImxldCBmb290ZXJNc2cgb2YgdG9vbHRpcENvbnRhaW5pbmdUYWJsZS50YWJsZUZvb3Rlck1zZ1wiPlxyXG4gICAgICAgIHt7IGZvb3Rlck1zZyB9fSBcclxuICAgICAgPC9saT5cclxuICAgIDwvdWw+IC0tPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0gPG5nLXRlbXBsYXRlICN0ZXh0QWN0aW9uVG9vbHRpcFRlbXBsYXRlPlxyXG4gICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRleHRBY3Rpb25Ub29sdGlwXCI+XHJcbiAgICAgIHt7IGRhdGEua2V5IH19IDxiPiB7e2RhdGEudmFsdWV9fTwvYj5cclxuICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+IC0tPlxyXG4iXX0=