gamma-app-controller 1.1.23 → 1.1.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/application-controller/application-controller.module.mjs +1 -4
- package/esm2020/lib/template-module/cdrConfigModule/cdr-browser.service.mjs +132 -0
- package/esm2020/lib/template-module/cdrConfigModule/cdr-config.component.mjs +237 -0
- package/esm2020/lib/template-module/cdrConfigModule/cdrConfig.module.mjs +144 -0
- package/esm2020/lib/template-module/exceptionConfigModule/exception-operation.component.mjs +2 -2
- package/esm2020/lib/template-module/exceptionConfigModule/exception-service.mjs +3 -6
- package/esm2020/public-api.mjs +3 -2
- package/fesm2015/gamma-app-controller.mjs +518 -264
- package/fesm2015/gamma-app-controller.mjs.map +1 -1
- package/fesm2020/gamma-app-controller.mjs +519 -267
- package/fesm2020/gamma-app-controller.mjs.map +1 -1
- package/lib/application-controller/application-controller.module.d.ts +45 -46
- package/lib/template-module/cdrConfigModule/cdr-browser.service.d.ts +36 -0
- package/lib/{application-controller/page-templates/cdr-config → template-module/cdrConfigModule}/cdr-config.component.d.ts +3 -3
- package/lib/template-module/cdrConfigModule/cdrConfig.module.d.ts +16 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -1
- package/esm2020/lib/application-controller/page-templates/cdr-config/cdr-config.component.mjs +0 -237
|
@@ -346,7 +346,7 @@ export class ExceptionOperationComponent {
|
|
|
346
346
|
}
|
|
347
347
|
}
|
|
348
348
|
ExceptionOperationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ExceptionOperationComponent, deps: [{ token: i1.CommonService }, { token: i2.ExceptionConfigsService }, { token: i3.ToastrService }], target: i0.ɵɵFactoryTarget.Component });
|
|
349
|
-
ExceptionOperationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ExceptionOperationComponent, selector: "app-exception-operation", viewQueries: [{ propertyName: "dataGrid", first: true, predicate: ["gridContainer"], descendants: true }], ngImport: i0, template: "<app-loading *ngIf=\"loadingModal\"></app-loading>\n<div class=\"flex flex-col flex-auto w-full\">\n <div class=\"flex flex-col\">\n <div class=\"flex justify-between border-b dark:bg-transparent\">\n <div class=\"flex flex-col ml-1\">\n <div class=\"flex items-center float-start\">\n <div class=\"flex items-center overflow-hidden\">\n <mat-icon class=\"icon-size-2\" [svgIcon]=\"'heroicons_solid:template'\"></mat-icon>\n </div>\n <h2\n class=\"text-2xl md:text-2xl py-3 font-extrabold items-center ml-2 tracking-tight leading-5 truncate capitalize\">\n Exception Configuration\n </h2>\n </div>\n <div class=\"\">\n </div>\n </div>\n <div class=\"flex justify-between items-center border-l-2 p-0 m-0\">\n\n\n <div class=\"w-1 h-full border-l-2\"></div>\n <div class=\"mx-2\">\n\n <div class=\"flex items-center p-1\">\n\n <div class=\"mx-2\">\n <button class=\"{{commonService.btn_primary_md}} cursor-pointer\"\n (click)=\"createExceptionConfig()\">Create Config\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n\n <div class=\"m-2\">\n <div class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <h6 class=\"mb-2 font-bold text-lg tracking-tight text-gray-900 dark:text-white border-b pb-3\"><i\n class=\"fa fa-table mr-2\"></i> File Sequence Analyzer configs | \n <button class=\"{{commonService.btn_success_md}}\" (click)=\"updateFileSequenceAnalyzerJobs()\">Update</button>\n </h6>\n <!-- <app-loader *ngIf=\"isLoader\"></app-loader> -->\n <dx-data-grid [columnAutoWidth]=\"true\" [dataSource]=\"allExceptionConfigDataSource\" [selectedRowKeys]=\"[]\"\n [showBorders]=\"true\" [showRowLines]=\"true\" id=\"gridContainer\" [hoverStateEnabled]=\"true\"\n *ngIf=\"!isLoader\">\n\n <dxo-search-panel [highlightCaseSensitive]=\"true\" [visible]=\"true\">\n </dxo-search-panel>\n <dxo-export [enabled]=\"true\" fileName=\"alert_data_by_status\"></dxo-export>\n <dxo-paging [pageSize]=\"10\"></dxo-paging>\n <dxo-pager [showInfo]=\"true\" [showPageSizeSelector]=\"true\" [allowedPageSizes]=\"[10,20,50,100]\">\n </dxo-pager>\n <dxi-column dataField=\"configName\"></dxi-column>\n <dxi-column dataField=\"datasource\"></dxi-column>\n <dxi-column dataField=\"dbConfig\"></dxi-column>\n <dxi-column dataField=\"analyzerType\"></dxi-column>\n <dxi-column dataField=\"fileNameAttributeName\"></dxi-column>\n <dxi-column dataField=\"dataSelectionType\"></dxi-column>\n <dxi-column caption=\"Status\" dataField=\"active\" cellTemplate=\"cellTemplate1\"></dxi-column>\n\n <dxi-column dataField=\"action\" cellTemplate=\"cellTemplate\" [fixed]=\"true\"\n fixedPosition=\"right\"></dxi-column>\n <div *dxTemplate=\"let data of 'cellTemplate'\">\n <button class=\"{{commonService.btnPrimaryBlue}}\" (click)=\"editExceptionConfigConfig(data.data)\">\n Edit\n </button>\n <!-- <button class=\"{{commonService.btnPrimaryBlue}}\" *ngIf=\"data.data.active == false\"\n (click)=\"editExceptionConfigConfig(data.data)\">\n Edit\n </button> -->\n\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"deleteExceptionConfig(data.data)\">\n Delete\n </button>\n </div>\n <div *dxTemplate=\"let data of 'cellTemplate1'\">\n <button type=\"button\" *ngIf=\"data.data.active == true\" class=\"{{commonService.btnSuccessGreen}}\"\n (click)=\"deActivatedException(data.data)\">Active</button>\n\n <button type=\"button\" *ngIf=\"data.data.active == false\" class=\"{{commonService.btnWarningYellow}}\"\n (click)=\"activatedException(data.data)\">Inactive</button>\n\n\n </div>\n\n </dx-data-grid>\n\n </div>\n </div>\n <ng-container *ngIf=\"isExceptionConfigCreation\">\n <div class=\"m-2\">\n <div\n class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <h6\n class=\"mb-2 text-lg tracking-tight text-gray-900 dark:text-white border-b pb-3 flex items-center capitalize\">\n {{contentType}} Exception Configurations\n\n <div class=\"ml-auto\">\n <button class=\"{{commonService.btnOthersPurple}}\" (click)=\"getCancleExceptionCreation()\">\n Back\n </button>\n </div>\n </h6>\n\n <!-- (onValueChanged)=\"valueChangeForDatabaseName($event)\" -->\n <div class=\"flex\">\n <div class=\"w-full border-r\">\n <div class=\"m-2\">\n <div class=\"flex flex-row mb-2\">\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Config Name</div>\n <dx-text-box [(ngModel)]=\"exceptionMainObject.configName\"\n [readOnly]=\"contentType == 'view'\"></dx-text-box>\n </div>\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Datasource</div>\n <dx-select-box [items]=\"datasourcelist\" [(ngModel)]=\"exceptionMainObject.datasource\"\n [readOnly]=\"contentType == 'view'\"></dx-select-box>\n </div>\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Analyzer Type</div>\n <dx-select-box [items]=\"analyzer_type\" valueExpr=\"key\" displayExpr=\"name\"\n [(ngModel)]=\"exceptionMainObject.analyzerType\"\n [readOnly]=\"contentType == 'view'\"></dx-select-box>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col\">\n <div class=\"w-full border-b my-4\">\n <div class=\"m-2\">\n <div class=\"pt-2\">\n <div class=\"flex flex-row p-2\">\n <div class=\"px-2 mb-2 w-1/2\">\n <div class=\"text-md mb-2\"> Db Config</div>\n <dx-select-box [items]=\"['mongo','impala','postgres','mysql','bigquery']\"\n (onValueChanged)=\"getDataConfig($event)\"\n [(ngModel)]=\"exceptionMainObject.dbConfig\"\n [readOnly]=\"contentType == 'view'\"></dx-select-box>\n </div>\n <div class=\"px-2 mb-2 w-1/2\">\n <div class=\"text-md mb-2\"> Table Name</div>\n <dx-text-box [(ngModel)]=\"exceptionMainObject.tableName\"\n [readOnly]=\"contentType == 'view'\"></dx-text-box>\n </div>\n <div class=\"px-2 mb-2 w-1/2\">\n <div class=\"text-md mb-2\"> Data Selection Type</div>\n <dx-select-box [items]=\"['select','distinct']\"\n [(ngModel)]=\"exceptionMainObject.dataSelectionType\"\n [readOnly]=\"contentType == 'view'\"></dx-select-box>\n </div>\n <div class=\"px-2 mb-2 w-1/2\">\n <div class=\"text-md mb-2\"> File Column Name</div>\n <dx-text-box [(ngModel)]=\"exceptionMainObject.fileNameAttributeName\"\n [readOnly]=\"contentType == 'view'\"></dx-text-box>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"w-full border-b my-4\">\n <div class=\"m-2\">\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"py-2 border-b border-b\">\n <div class=\"flex flex-row px-2\">\n <div class=\"w-1/2 px-2\">\n <div class=\"text-2xl font-extrabold\">Filter List</div>\n </div>\n <div class=\"w-1/2 px-2\">\n <div class=\"flex justify-end\">\n <button class=\"{{commonService.btn_primary_md}}\"\n (click)=\"getProcessForConfig()\">\n Add Filter\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"pt-2\">\n <div class=\"flex flex-row my-2\"\n *ngFor=\"let items of exceptionMainObject.filterList;let i = index;\">\n <div class=\"w-full px-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Column Name</p>\n <dx-text-box [(ngModel)]=\"items.columnName\"\n [readOnly]=\"contentType == 'view'\">\n </dx-text-box>\n </div>\n </div>\n <div class=\"w-full px-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Operator</p>\n <dx-select-box [items]=\"operator_list\" valueExpr=\"value\"\n displayExpr=\"name\" [(ngModel)]=\"items.operator\"\n [searchEnabled]=\"true\">\n </dx-select-box>\n </div>\n </div>\n <div class=\"w-full px-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Datatype</p>\n <dx-select-box\n [items]=\"['date','string','timestamp','int', 'double', 'boolean']\"\n [(ngModel)]=\"items.dataType\"\n [readOnly]=\"contentType == 'view'\"></dx-select-box>\n </div>\n </div>\n\n <div class=\"w-full px-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Select Function</p>\n <dx-select-box [items]=\"functionNameContainer\"\n [(ngModel)]=\"items.windowFunctionName\" [searchEnabled]=\"true\"\n [readOnly]=\"contentType == 'view'\"></dx-select-box>\n </div>\n </div>\n <div class=\"w-full px-2\"\n *ngIf=\"items.dataType == 'date' || items.dataType == 'timestamp'\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Date Format</p>\n <dx-text-box [(ngModel)]=\"items.dateFormat\"\n [readOnly]=\"contentType == 'view'\"></dx-text-box>\n </div>\n </div>\n <div class=\"w-full px-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Default Value</p>\n <dx-text-box [(ngModel)]=\"items.value\"\n [readOnly]=\"contentType == 'view'\"></dx-text-box>\n </div>\n </div>\n <div class=\"w-full px-2\">\n <div class=\"mx-2\">\n <div class=\"flex flex-row\">\n <button *ngIf=\"i !== 0\"\n class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1 mt-6\"\n (click)=\"moveItemForColumns(i, 'up')\">\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\n </button>\n\n <button *ngIf=\"i !== exceptionMainObject.filterList.length - 1\"\n class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1 mt-6\"\n (click)=\"moveItemForColumns(i, 'down')\">\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\n </button>\n\n <button\n class=\"{{commonService.btn_danger_sm}} cursor-pointer mx-1 mt-6\"\n (click)=\"deleteColume(i)\"><i class=\"fa fa-trash-o\"\n aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n\n\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"w-full border-b my-4\">\n <div class=\"m-2\">\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"py-2 border-b border-b\">\n <div class=\"flex flex-row px-2\">\n <div class=\"w-1/2 px-2\">\n <div class=\"text-2xl font-extrabold\">Pattern List</div>\n </div>\n <div class=\"w-1/2 px-2\">\n <div class=\"flex justify-end\">\n <button class=\"{{commonService.btn_primary_md}}\"\n (click)=\"getAddPatternsConfig()\">\n Add Pattern\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"pt-2\">\n <ng-container *ngFor=\"let items of exceptionMainObject.patternList;let i = index;\">\n <div class=\"flex flex-wrap my-2\">\n <div class=\"w-1/2 px-2 my-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Regex</p>\n <dx-text-box [(ngModel)]=\"items.regex\"\n [readOnly]=\"contentType == 'view'\">\n </dx-text-box>\n </div>\n </div>\n <div class=\"w-1/2 px-2 my-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">File Attributes</p>\n <dx-tag-box [multiline]=\"true\" [showSelectionControls]=\"true\"\n [acceptCustomValue]=\"true\"\n (onCustomItemCreating)=\"onCustomFileAttributesAdd($event)\"\n [(ngModel)]=\"items.fileAttributes\" [searchEnabled]=\"true\">\n </dx-tag-box>\n </div>\n </div>\n\n <div class=\"w-1/3 px-2 my-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">SequenceKey</p>\n <dx-text-box [(ngModel)]=\"items.sequenceKey\"\n [readOnly]=\"contentType == 'view'\">\n </dx-text-box>\n </div>\n </div>\n\n <div class=\"w-1/3 px-2 my-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Analyzer Keys</p>\n <dx-tag-box [multiline]=\"true\" [showSelectionControls]=\"true\"\n [acceptCustomValue]=\"true\"\n (onCustomItemCreating)=\"onCustomAnalizerKeyAdd($event)\"\n [(ngModel)]=\"items.analyzerKeys\" [searchEnabled]=\"true\">\n </dx-tag-box>\n </div>\n </div>\n <div class=\"w-1/6 px-2 my-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Sample</p>\n <dx-text-box [(ngModel)]=\"items.sample\"\n [readOnly]=\"contentType == 'view'\">\n </dx-text-box>\n </div>\n </div>\n <div class=\"w-1/6 px-2 my-2\">\n <div class=\"mx-2\">\n <div class=\"flex flex-row\">\n <button *ngIf=\"i !== 0\"\n class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1 mt-6\"\n (click)=\"moveItemForpatterns(i, 'up')\">\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\n </button>\n\n <button *ngIf=\"i !== exceptionMainObject.filterList.length - 1\"\n class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1 mt-6\"\n (click)=\"moveItemForpatterns(i, 'down')\">\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\n </button>\n\n <button\n class=\"{{commonService.btn_danger_sm}} cursor-pointer mx-1 mt-6\"\n (click)=\"deletePatternsColume(i)\"><i class=\"fa fa-trash-o\"\n aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"text-xl mb-2\">Dynamic Arguments |\n <button class=\"{{commonService.btn_primary_sm}}\"\n (click)=\"addDynamicArgument(i)\">Add Arguments</button>\n </div>\n <div class=\"m-5\">\n\n <div class=\"flex flex-wrap\">\n <ng-container *ngFor=\"let item of items.dynamicArgs | keyvalue\">\n <div class=\"w-1/2 p-2\">\n <div class=\"flex flex-row\">\n <div class=\"m-1\">\n <div class=\"text-md\"> Argument Key</div>\n <dx-text-box [(ngModel)]=\"item.key\"></dx-text-box>\n </div>\n <div class=\"m-1\">\n <div class=\"text-md\"> Argument Value</div>\n <dx-text-box\n [(ngModel)]=\"items.dynamicArgs[item.key]\"></dx-text-box>\n </div>\n <div class=\"m-1\">\n <button\n class=\"{{commonService.btn_danger_sm}} cursor-pointer mx-1 mt-6\"\n (click)=\"deleteDynamicArguments(item,item.key,i)\"><i\n class=\"fa fa-trash-o\"\n aria-hidden=\"true\"></i></button>\n </div>\n </div>\n </div>\n </ng-container>\n\n </div>\n </div>\n\n\n\n </ng-container>\n\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"flex w-full justify-end mt-5 border-t\" *ngIf=\"contentType !== 'view'\">\n\n <button class=\"{{commonService.btn_success_md}} cursor-pointer mx-1 my-2\"\n (click)=\"saveExceptionConfig()\" *ngIf=\"contentType == 'create'\">\n Create Exception Config\n </button>\n <button class=\"{{commonService.btn_success_md}} cursor-pointer mx-1 my-2\"\n (click)=\"updateExceptionConfig()\" *ngIf=\"contentType == 'edit'\">\n Update Exception Config\n </button>\n </div>\n </div>\n </div>\n </ng-container>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.LoadingComponent, selector: "app-loading" }, { kind: "directive", type: i6.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i7.DxoExportComponent, selector: "dxo-export", inputs: ["backgroundColor", "enabled", "fileName", "formats", "margin", "printingEnabled", "proxyUrl", "svgToCanvas", "allowExportSelectedData", "customizeExcelCell", "excelFilterEnabled", "excelWrapTextEnabled", "ignoreExcelErrors", "texts"] }, { kind: "component", type: i8.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "customizeExportData", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "focusStateEnabled", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExported", "onExporting", "onFileSaving", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "customizeExportDataChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "focusStateEnabledChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i7.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "component", type: i7.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i7.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i7.DxoSearchPanelComponent, selector: "dxo-search-panel", inputs: ["highlightCaseSensitive", "highlightSearchText", "placeholder", "searchVisibleColumnsOnly", "text", "visible", "width"], outputs: ["textChange"] }, { kind: "component", type: i9.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i10.DxTagBoxComponent, selector: "dx-tag-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "applyValueMode", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hideSelectedItems", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxDisplayedTags", "maxFilterQueryLength", "maxLength", "minSearchLength", "multiline", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectAllMode", "selectAllText", "selectedItems", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showMultiTagOnly", "showSelectionControls", "stylingMode", "tabIndex", "tagTemplate", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCustomItemCreating", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onMultiTagPreparing", "onOpened", "onOptionChanged", "onSelectAllValueChanged", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "applyValueModeChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hideSelectedItemsChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxDisplayedTagsChange", "maxFilterQueryLengthChange", "maxLengthChange", "minSearchLengthChange", "multilineChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectAllModeChange", "selectAllTextChange", "selectedItemsChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showMultiTagOnlyChange", "showSelectionControlsChange", "stylingModeChange", "tabIndexChange", "tagTemplateChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i11.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "directive", type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i13.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i4.KeyValuePipe, name: "keyvalue" }] });
|
|
349
|
+
ExceptionOperationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ExceptionOperationComponent, selector: "app-exception-operation", viewQueries: [{ propertyName: "dataGrid", first: true, predicate: ["gridContainer"], descendants: true }], ngImport: i0, template: "<app-loading *ngIf=\"loadingModal\"></app-loading>\n<div class=\"flex flex-col flex-auto w-full\">\n <div class=\"flex flex-col\">\n <div class=\"flex justify-between border-b dark:bg-transparent\">\n <div class=\"flex flex-col ml-1\">\n <div class=\"flex items-center float-start\">\n <div class=\"flex items-center overflow-hidden\">\n <mat-icon class=\"icon-size-2\" [svgIcon]=\"'heroicons_solid:template'\"></mat-icon>\n </div>\n <h2\n class=\"text-2xl md:text-2xl py-3 font-extrabold items-center ml-2 tracking-tight leading-5 truncate capitalize\">\n Exception Configuration\n </h2>\n </div>\n <div class=\"\">\n </div>\n </div>\n <div class=\"flex justify-between items-center border-l-2 p-0 m-0\">\n\n\n <div class=\"w-1 h-full border-l-2\"></div>\n <div class=\"mx-2\">\n\n <div class=\"flex items-center p-1\">\n\n <div class=\"mx-2\">\n <button class=\"{{commonService.btn_primary_md}} cursor-pointer\"\n (click)=\"createExceptionConfig()\">Create Config\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n\n <div class=\"m-2\">\n <div class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <h6 class=\"mb-2 font-bold text-lg tracking-tight text-gray-900 dark:text-white border-b pb-3\"><i\n class=\"fa fa-table mr-2\"></i> File Sequence Analyzer configs | \n <button class=\"{{commonService.btn_success_md}}\" (click)=\"updateFileSequenceAnalyzerJobs()\">Update</button>\n </h6>\n <!-- <app-loader *ngIf=\"isLoader\"></app-loader> -->\n <dx-data-grid [columnAutoWidth]=\"true\" [dataSource]=\"allExceptionConfigDataSource\" [selectedRowKeys]=\"[]\"\n [showBorders]=\"true\" [showRowLines]=\"true\" id=\"gridContainer\" [hoverStateEnabled]=\"true\"\n *ngIf=\"!isLoader\">\n\n <dxo-search-panel [highlightCaseSensitive]=\"true\" [visible]=\"true\">\n </dxo-search-panel>\n <dxo-export [enabled]=\"true\" fileName=\"alert_data_by_status\"></dxo-export>\n <dxo-paging [pageSize]=\"10\"></dxo-paging>\n <dxo-pager [showInfo]=\"true\" [showPageSizeSelector]=\"true\" [allowedPageSizes]=\"[10,20,50,100]\">\n </dxo-pager>\n <dxi-column dataField=\"configName\"></dxi-column>\n <dxi-column dataField=\"datasource\"></dxi-column>\n <dxi-column dataField=\"dbConfig\"></dxi-column>\n <dxi-column dataField=\"analyzerType\"></dxi-column>\n <dxi-column dataField=\"fileNameAttributeName\"></dxi-column>\n <dxi-column dataField=\"dataSelectionType\"></dxi-column>\n <dxi-column caption=\"Status\" dataField=\"active\" cellTemplate=\"cellTemplate1\"></dxi-column>\n\n <dxi-column dataField=\"action\" cellTemplate=\"cellTemplate\" [fixed]=\"true\"\n fixedPosition=\"right\"></dxi-column>\n <div *dxTemplate=\"let data of 'cellTemplate'\">\n <button class=\"{{commonService.btnPrimaryBlue}}\" (click)=\"editExceptionConfigConfig(data.data)\">\n Edit\n </button>\n <!-- <button class=\"{{commonService.btnPrimaryBlue}}\" *ngIf=\"data.data.active == false\"\n (click)=\"editExceptionConfigConfig(data.data)\">\n Edit\n </button> -->\n\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"deleteExceptionConfig(data.data)\">\n Delete\n </button>\n </div>\n <div *dxTemplate=\"let data of 'cellTemplate1'\">\n <button type=\"button\" *ngIf=\"data.data.active == true\" class=\"{{commonService.btnSuccessGreen}}\"\n (click)=\"deActivatedException(data.data)\">Active</button>\n\n <button type=\"button\" *ngIf=\"data.data.active == false\" class=\"{{commonService.btnWarningYellow}}\"\n (click)=\"activatedException(data.data)\">Inactive</button>\n\n\n </div>\n\n </dx-data-grid>\n\n </div>\n </div>\n <ng-container *ngIf=\"isExceptionConfigCreation\">\n <div class=\"m-2\">\n <div\n class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <h6\n class=\"mb-2 text-lg tracking-tight text-gray-900 dark:text-white border-b pb-3 flex items-center capitalize\">\n {{contentType}} Exception Configurations\n\n <div class=\"ml-auto\">\n <button class=\"{{commonService.btnOthersPurple}}\" (click)=\"getCancleExceptionCreation()\">\n Back\n </button>\n </div>\n </h6>\n\n <!-- (onValueChanged)=\"valueChangeForDatabaseName($event)\" -->\n <div class=\"flex\">\n <div class=\"w-full border-r\">\n <div class=\"m-2\">\n <div class=\"flex flex-row mb-2\">\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Config Name</div>\n <dx-text-box [(ngModel)]=\"exceptionMainObject.configName\"\n [readOnly]=\"contentType == 'view'\"></dx-text-box>\n </div>\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Datasource</div>\n <dx-select-box [items]=\"datasourcelist\" [(ngModel)]=\"exceptionMainObject.datasource\"\n [readOnly]=\"contentType == 'view'\"></dx-select-box>\n </div>\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Analyzer Type</div>\n <dx-select-box [items]=\"analyzer_type\" valueExpr=\"key\" displayExpr=\"name\"\n [(ngModel)]=\"exceptionMainObject.analyzerType\"\n [readOnly]=\"contentType == 'view'\"></dx-select-box>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col\">\n <div class=\"w-full border-b my-4\">\n <div class=\"m-2\">\n <div class=\"pt-2\">\n <div class=\"flex flex-row p-2\">\n <div class=\"px-2 mb-2 w-1/2\">\n <div class=\"text-md mb-2\"> Db Config</div>\n <dx-select-box [items]=\"['mongo','impala','postgres','mysql','bigquery']\"\n (onValueChanged)=\"getDataConfig($event)\"\n [(ngModel)]=\"exceptionMainObject.dbConfig\"\n [readOnly]=\"contentType == 'view'\"></dx-select-box>\n </div>\n <div class=\"px-2 mb-2 w-1/2\">\n <div class=\"text-md mb-2\"> Table Name</div>\n <dx-text-box [(ngModel)]=\"exceptionMainObject.tableName\"\n [readOnly]=\"contentType == 'view'\"></dx-text-box>\n </div>\n <div class=\"px-2 mb-2 w-1/2\">\n <div class=\"text-md mb-2\"> Data Selection Type</div>\n <dx-select-box [items]=\"['select','distinct']\"\n [(ngModel)]=\"exceptionMainObject.dataSelectionType\"\n [readOnly]=\"contentType == 'view'\"></dx-select-box>\n </div>\n <div class=\"px-2 mb-2 w-1/2\">\n <div class=\"text-md mb-2\"> File Column Name</div>\n <dx-text-box [(ngModel)]=\"exceptionMainObject.fileNameAttributeName\"\n [readOnly]=\"contentType == 'view'\"></dx-text-box>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"w-full border-b my-4\">\n <div class=\"m-2\">\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"py-2 border-b border-b\">\n <div class=\"flex flex-row px-2\">\n <div class=\"w-1/2 px-2\">\n <div class=\"text-2xl font-extrabold\">Filter List</div>\n </div>\n <div class=\"w-1/2 px-2\">\n <div class=\"flex justify-end\">\n <button class=\"{{commonService.btn_primary_md}}\"\n (click)=\"getProcessForConfig()\">\n Add Filter\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"pt-2\">\n <div class=\"flex flex-row my-2\"\n *ngFor=\"let items of exceptionMainObject.filterList;let i = index;\">\n <div class=\"w-full px-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Column Name</p>\n <dx-text-box [(ngModel)]=\"items.columnName\"\n [readOnly]=\"contentType == 'view'\">\n </dx-text-box>\n </div>\n </div>\n <div class=\"w-full px-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Operator</p>\n <dx-select-box [items]=\"operator_list\" valueExpr=\"value\"\n displayExpr=\"name\" [(ngModel)]=\"items.operator\"\n [searchEnabled]=\"true\">\n </dx-select-box>\n </div>\n </div>\n <div class=\"w-full px-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Datatype</p>\n <dx-select-box\n [items]=\"['date','string','timestamp','int', 'double', 'boolean']\"\n [(ngModel)]=\"items.dataType\"\n [readOnly]=\"contentType == 'view'\"></dx-select-box>\n </div>\n </div>\n\n <div class=\"w-full px-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Select Function</p>\n <dx-select-box [items]=\"functionNameContainer\"\n [(ngModel)]=\"items.windowFunctionName\" [searchEnabled]=\"true\"\n [readOnly]=\"contentType == 'view'\"></dx-select-box>\n </div>\n </div>\n <div class=\"w-full px-2\"\n *ngIf=\"items.dataType == 'date' || items.dataType == 'timestamp'\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Date Format</p>\n <dx-text-box [(ngModel)]=\"items.dateFormat\"\n [readOnly]=\"contentType == 'view'\"></dx-text-box>\n </div>\n </div>\n <div class=\"w-full px-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Default Value</p>\n <dx-text-box [(ngModel)]=\"items.value\"\n [readOnly]=\"contentType == 'view'\"></dx-text-box>\n </div>\n </div>\n <div class=\"w-full px-2\">\n <div class=\"mx-2\">\n <div class=\"flex flex-row\">\n <button *ngIf=\"i !== 0\"\n class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1 mt-6\"\n (click)=\"moveItemForColumns(i, 'up')\">\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\n </button>\n\n <button *ngIf=\"i !== exceptionMainObject.filterList.length - 1\"\n class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1 mt-6\"\n (click)=\"moveItemForColumns(i, 'down')\">\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\n </button>\n\n <button\n class=\"{{commonService.btn_danger_sm}} cursor-pointer mx-1 mt-6\"\n (click)=\"deleteColume(i)\"><i class=\"fa fa-trash-o\"\n aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n\n\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"w-full border-b my-4\">\n <div class=\"m-2\">\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"py-2 border-b border-b\">\n <div class=\"flex flex-row px-2\">\n <div class=\"w-1/2 px-2\">\n <div class=\"text-2xl font-extrabold\">Pattern List</div>\n </div>\n <div class=\"w-1/2 px-2\">\n <div class=\"flex justify-end\">\n <button class=\"{{commonService.btn_primary_md}}\"\n (click)=\"getAddPatternsConfig()\">\n Add Pattern\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"pt-2\">\n <ng-container *ngFor=\"let items of exceptionMainObject.patternList;let i = index;\">\n <div class=\"flex flex-wrap my-2\">\n <div class=\"w-1/2 px-2 my-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Regex</p>\n <dx-text-box [(ngModel)]=\"items.regex\"\n [readOnly]=\"contentType == 'view'\">\n </dx-text-box>\n </div>\n </div>\n <div class=\"w-1/2 px-2 my-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">File Attributes</p>\n <dx-tag-box [multiline]=\"true\" [showSelectionControls]=\"true\"\n [acceptCustomValue]=\"true\"\n (onCustomItemCreating)=\"onCustomFileAttributesAdd($event)\"\n [(ngModel)]=\"items.fileAttributes\" [searchEnabled]=\"true\">\n </dx-tag-box>\n </div>\n </div>\n\n <div class=\"w-1/3 px-2 my-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">SequenceKey</p>\n <dx-text-box [(ngModel)]=\"items.sequenceKey\"\n [readOnly]=\"contentType == 'view'\">\n </dx-text-box>\n </div>\n </div>\n\n <div class=\"w-1/3 px-2 my-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Analyzer Keys</p>\n <dx-tag-box [multiline]=\"true\" [showSelectionControls]=\"true\"\n [acceptCustomValue]=\"true\"\n (onCustomItemCreating)=\"onCustomAnalizerKeyAdd($event)\"\n [(ngModel)]=\"items.analyzerKeys\" [searchEnabled]=\"true\">\n </dx-tag-box>\n </div>\n </div>\n <div class=\"w-1/6 px-2 my-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Sample</p>\n <dx-text-box [(ngModel)]=\"items.sample\"\n [readOnly]=\"contentType == 'view'\">\n </dx-text-box>\n </div>\n </div>\n <div class=\"w-1/6 px-2 my-2\">\n <div class=\"mx-2\">\n <div class=\"flex flex-row\">\n <button *ngIf=\"i !== 0\"\n class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1 mt-6\"\n (click)=\"moveItemForpatterns(i, 'up')\">\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\n </button>\n\n <button *ngIf=\"i !== exceptionMainObject.filterList.length - 1\"\n class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1 mt-6\"\n (click)=\"moveItemForpatterns(i, 'down')\">\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\n </button>\n\n <button\n class=\"{{commonService.btn_danger_sm}} cursor-pointer mx-1 mt-6\"\n (click)=\"deletePatternsColume(i)\"><i class=\"fa fa-trash-o\"\n aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"text-xl mb-2\">Dynamic Arguments |\n <button class=\"{{commonService.btn_primary_sm}}\"\n (click)=\"addDynamicArgument(i)\">Add Arguments</button>\n </div>\n <div class=\"m-5\">\n\n <div class=\"flex flex-wrap\">\n <ng-container *ngFor=\"let item of items.dynamicArgs | keyvalue\">\n <div class=\"w-1/2 p-2\">\n <div class=\"flex flex-row\">\n <div class=\"m-1\">\n <div class=\"text-md\"> Argument Key</div>\n <dx-text-box [(ngModel)]=\"item.key\"></dx-text-box>\n </div>\n <div class=\"m-1\">\n <div class=\"text-md\"> Argument Value</div>\n <dx-text-box\n [(ngModel)]=\"items.dynamicArgs[item.key]\"></dx-text-box>\n </div>\n <div class=\"m-1\">\n <button\n class=\"{{commonService.btn_danger_sm}} cursor-pointer mx-1 mt-6\"\n (click)=\"deleteDynamicArguments(item,item.key,i)\"><i\n class=\"fa fa-trash-o\"\n aria-hidden=\"true\"></i></button>\n </div>\n </div>\n </div>\n </ng-container>\n\n </div>\n </div>\n\n\n\n </ng-container>\n\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"flex w-full justify-end mt-5 border-t\" *ngIf=\"contentType !== 'view'\">\n\n <button class=\"{{commonService.btn_success_md}} cursor-pointer mx-1 my-2\"\n (click)=\"saveExceptionConfig()\" *ngIf=\"contentType == 'create'\">\n Create Exception Config\n </button>\n <button class=\"{{commonService.btn_success_md}} cursor-pointer mx-1 my-2\"\n (click)=\"updateExceptionConfig()\" *ngIf=\"contentType == 'edit'\">\n Update Exception Config\n </button>\n </div>\n </div>\n </div>\n </ng-container>\n</div>", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.LoadingComponent, selector: "app-loading" }, { kind: "directive", type: i6.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }, { kind: "component", type: i7.DxoExportComponent, selector: "dxo-export", inputs: ["backgroundColor", "enabled", "fileName", "formats", "margin", "printingEnabled", "proxyUrl", "svgToCanvas", "allowExportSelectedData", "customizeExcelCell", "excelFilterEnabled", "excelWrapTextEnabled", "ignoreExcelErrors", "texts"] }, { kind: "component", type: i8.DxDataGridComponent, selector: "dx-data-grid", inputs: ["accessKey", "activeStateEnabled", "allowColumnReordering", "allowColumnResizing", "autoNavigateToFocusedRow", "cacheEnabled", "cellHintEnabled", "columnAutoWidth", "columnChooser", "columnFixing", "columnHidingEnabled", "columnMinWidth", "columnResizingMode", "columns", "columnWidth", "customizeColumns", "customizeExportData", "dataRowTemplate", "dataSource", "dateSerializationFormat", "disabled", "editing", "elementAttr", "errorRowEnabled", "export", "filterBuilder", "filterBuilderPopup", "filterPanel", "filterRow", "filterSyncEnabled", "filterValue", "focusedColumnIndex", "focusedRowEnabled", "focusedRowIndex", "focusedRowKey", "focusStateEnabled", "grouping", "groupPanel", "headerFilter", "height", "highlightChanges", "hint", "hoverStateEnabled", "keyboardNavigation", "keyExpr", "loadPanel", "masterDetail", "noDataText", "pager", "paging", "remoteOperations", "renderAsync", "repaintChangesOnly", "rowAlternationEnabled", "rowDragging", "rowTemplate", "rtlEnabled", "scrolling", "searchPanel", "selectedRowKeys", "selection", "selectionFilter", "showBorders", "showColumnHeaders", "showColumnLines", "showRowLines", "sortByGroupSummaryInfo", "sorting", "stateStoring", "summary", "syncLookupFilterValues", "tabIndex", "toolbar", "twoWayBindingEnabled", "visible", "width", "wordWrapEnabled"], outputs: ["onAdaptiveDetailRowPreparing", "onCellClick", "onCellDblClick", "onCellHoverChanged", "onCellPrepared", "onContentReady", "onContextMenuPreparing", "onDataErrorOccurred", "onDisposing", "onEditCanceled", "onEditCanceling", "onEditingStart", "onEditorPrepared", "onEditorPreparing", "onExported", "onExporting", "onFileSaving", "onFocusedCellChanged", "onFocusedCellChanging", "onFocusedRowChanged", "onFocusedRowChanging", "onInitialized", "onInitNewRow", "onKeyDown", "onOptionChanged", "onRowClick", "onRowCollapsed", "onRowCollapsing", "onRowDblClick", "onRowExpanded", "onRowExpanding", "onRowInserted", "onRowInserting", "onRowPrepared", "onRowRemoved", "onRowRemoving", "onRowUpdated", "onRowUpdating", "onRowValidating", "onSaved", "onSaving", "onSelectionChanged", "onToolbarPreparing", "accessKeyChange", "activeStateEnabledChange", "allowColumnReorderingChange", "allowColumnResizingChange", "autoNavigateToFocusedRowChange", "cacheEnabledChange", "cellHintEnabledChange", "columnAutoWidthChange", "columnChooserChange", "columnFixingChange", "columnHidingEnabledChange", "columnMinWidthChange", "columnResizingModeChange", "columnsChange", "columnWidthChange", "customizeColumnsChange", "customizeExportDataChange", "dataRowTemplateChange", "dataSourceChange", "dateSerializationFormatChange", "disabledChange", "editingChange", "elementAttrChange", "errorRowEnabledChange", "exportChange", "filterBuilderChange", "filterBuilderPopupChange", "filterPanelChange", "filterRowChange", "filterSyncEnabledChange", "filterValueChange", "focusedColumnIndexChange", "focusedRowEnabledChange", "focusedRowIndexChange", "focusedRowKeyChange", "focusStateEnabledChange", "groupingChange", "groupPanelChange", "headerFilterChange", "heightChange", "highlightChangesChange", "hintChange", "hoverStateEnabledChange", "keyboardNavigationChange", "keyExprChange", "loadPanelChange", "masterDetailChange", "noDataTextChange", "pagerChange", "pagingChange", "remoteOperationsChange", "renderAsyncChange", "repaintChangesOnlyChange", "rowAlternationEnabledChange", "rowDraggingChange", "rowTemplateChange", "rtlEnabledChange", "scrollingChange", "searchPanelChange", "selectedRowKeysChange", "selectionChange", "selectionFilterChange", "showBordersChange", "showColumnHeadersChange", "showColumnLinesChange", "showRowLinesChange", "sortByGroupSummaryInfoChange", "sortingChange", "stateStoringChange", "summaryChange", "syncLookupFilterValuesChange", "tabIndexChange", "toolbarChange", "twoWayBindingEnabledChange", "visibleChange", "widthChange", "wordWrapEnabledChange"] }, { kind: "component", type: i7.DxiColumnComponent, selector: "dxi-column", inputs: ["alignment", "allowEditing", "allowExporting", "allowFiltering", "allowFixing", "allowGrouping", "allowHeaderFiltering", "allowHiding", "allowReordering", "allowResizing", "allowSearch", "allowSorting", "autoExpandGroup", "buttons", "calculateCellValue", "calculateDisplayValue", "calculateFilterExpression", "calculateGroupValue", "calculateSortValue", "caption", "cellTemplate", "columns", "cssClass", "customizeText", "dataField", "dataType", "editCellTemplate", "editorOptions", "encodeHtml", "falseText", "filterOperations", "filterType", "filterValue", "filterValues", "fixed", "fixedPosition", "format", "formItem", "groupCellTemplate", "groupIndex", "headerCellTemplate", "headerFilter", "hidingPriority", "isBand", "lookup", "minWidth", "name", "ownerBand", "renderAsync", "selectedFilterOperation", "setCellValue", "showEditorAlways", "showInColumnChooser", "showWhenGrouped", "sortIndex", "sortingMethod", "sortOrder", "trueText", "type", "validationRules", "visible", "visibleIndex", "width"], outputs: ["filterValueChange", "filterValuesChange", "groupIndexChange", "selectedFilterOperationChange", "sortIndexChange", "sortOrderChange", "visibleChange", "visibleIndexChange"] }, { kind: "component", type: i7.DxoPagerComponent, selector: "dxo-pager", inputs: ["allowedPageSizes", "displayMode", "infoText", "showInfo", "showNavigationButtons", "showPageSizeSelector", "visible"] }, { kind: "component", type: i7.DxoPagingComponent, selector: "dxo-paging", inputs: ["enabled", "pageIndex", "pageSize"], outputs: ["pageIndexChange", "pageSizeChange"] }, { kind: "component", type: i7.DxoSearchPanelComponent, selector: "dxo-search-panel", inputs: ["highlightCaseSensitive", "highlightSearchText", "placeholder", "searchVisibleColumnsOnly", "text", "visible", "width"], outputs: ["textChange"] }, { kind: "component", type: i9.DxSelectBoxComponent, selector: "dx-select-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "displayValue", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxLength", "minSearchLength", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectedItem", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showSelectionControls", "spellcheck", "stylingMode", "tabIndex", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCopy", "onCustomItemCreating", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onOpened", "onOptionChanged", "onPaste", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "displayValueChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxLengthChange", "minSearchLengthChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectedItemChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showSelectionControlsChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i10.DxTagBoxComponent, selector: "dx-tag-box", inputs: ["acceptCustomValue", "accessKey", "activeStateEnabled", "applyValueMode", "buttons", "dataSource", "deferRendering", "disabled", "displayExpr", "dropDownButtonTemplate", "dropDownOptions", "elementAttr", "fieldTemplate", "focusStateEnabled", "grouped", "groupTemplate", "height", "hideSelectedItems", "hint", "hoverStateEnabled", "inputAttr", "isValid", "items", "itemTemplate", "label", "labelMode", "maxDisplayedTags", "maxFilterQueryLength", "maxLength", "minSearchLength", "multiline", "name", "noDataText", "opened", "openOnFieldClick", "placeholder", "readOnly", "rtlEnabled", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "selectAllMode", "selectAllText", "selectedItems", "showClearButton", "showDataBeforeSearch", "showDropDownButton", "showMultiTagOnly", "showSelectionControls", "stylingMode", "tabIndex", "tagTemplate", "text", "useItemTextAsTitle", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueExpr", "visible", "width", "wrapItemText"], outputs: ["onChange", "onClosed", "onContentReady", "onCustomItemCreating", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onItemClick", "onKeyDown", "onKeyUp", "onMultiTagPreparing", "onOpened", "onOptionChanged", "onSelectAllValueChanged", "onSelectionChanged", "onValueChanged", "acceptCustomValueChange", "accessKeyChange", "activeStateEnabledChange", "applyValueModeChange", "buttonsChange", "dataSourceChange", "deferRenderingChange", "disabledChange", "displayExprChange", "dropDownButtonTemplateChange", "dropDownOptionsChange", "elementAttrChange", "fieldTemplateChange", "focusStateEnabledChange", "groupedChange", "groupTemplateChange", "heightChange", "hideSelectedItemsChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "itemsChange", "itemTemplateChange", "labelChange", "labelModeChange", "maxDisplayedTagsChange", "maxFilterQueryLengthChange", "maxLengthChange", "minSearchLengthChange", "multilineChange", "nameChange", "noDataTextChange", "openedChange", "openOnFieldClickChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "selectAllModeChange", "selectAllTextChange", "selectedItemsChange", "showClearButtonChange", "showDataBeforeSearchChange", "showDropDownButtonChange", "showMultiTagOnlyChange", "showSelectionControlsChange", "stylingModeChange", "tabIndexChange", "tagTemplateChange", "textChange", "useItemTextAsTitleChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueExprChange", "visibleChange", "widthChange", "wrapItemTextChange", "onBlur"] }, { kind: "component", type: i11.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "directive", type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i13.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i4.KeyValuePipe, name: "keyvalue" }] });
|
|
350
350
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ExceptionOperationComponent, decorators: [{
|
|
351
351
|
type: Component,
|
|
352
352
|
args: [{ selector: 'app-exception-operation', template: "<app-loading *ngIf=\"loadingModal\"></app-loading>\n<div class=\"flex flex-col flex-auto w-full\">\n <div class=\"flex flex-col\">\n <div class=\"flex justify-between border-b dark:bg-transparent\">\n <div class=\"flex flex-col ml-1\">\n <div class=\"flex items-center float-start\">\n <div class=\"flex items-center overflow-hidden\">\n <mat-icon class=\"icon-size-2\" [svgIcon]=\"'heroicons_solid:template'\"></mat-icon>\n </div>\n <h2\n class=\"text-2xl md:text-2xl py-3 font-extrabold items-center ml-2 tracking-tight leading-5 truncate capitalize\">\n Exception Configuration\n </h2>\n </div>\n <div class=\"\">\n </div>\n </div>\n <div class=\"flex justify-between items-center border-l-2 p-0 m-0\">\n\n\n <div class=\"w-1 h-full border-l-2\"></div>\n <div class=\"mx-2\">\n\n <div class=\"flex items-center p-1\">\n\n <div class=\"mx-2\">\n <button class=\"{{commonService.btn_primary_md}} cursor-pointer\"\n (click)=\"createExceptionConfig()\">Create Config\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n\n <div class=\"m-2\">\n <div class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <h6 class=\"mb-2 font-bold text-lg tracking-tight text-gray-900 dark:text-white border-b pb-3\"><i\n class=\"fa fa-table mr-2\"></i> File Sequence Analyzer configs | \n <button class=\"{{commonService.btn_success_md}}\" (click)=\"updateFileSequenceAnalyzerJobs()\">Update</button>\n </h6>\n <!-- <app-loader *ngIf=\"isLoader\"></app-loader> -->\n <dx-data-grid [columnAutoWidth]=\"true\" [dataSource]=\"allExceptionConfigDataSource\" [selectedRowKeys]=\"[]\"\n [showBorders]=\"true\" [showRowLines]=\"true\" id=\"gridContainer\" [hoverStateEnabled]=\"true\"\n *ngIf=\"!isLoader\">\n\n <dxo-search-panel [highlightCaseSensitive]=\"true\" [visible]=\"true\">\n </dxo-search-panel>\n <dxo-export [enabled]=\"true\" fileName=\"alert_data_by_status\"></dxo-export>\n <dxo-paging [pageSize]=\"10\"></dxo-paging>\n <dxo-pager [showInfo]=\"true\" [showPageSizeSelector]=\"true\" [allowedPageSizes]=\"[10,20,50,100]\">\n </dxo-pager>\n <dxi-column dataField=\"configName\"></dxi-column>\n <dxi-column dataField=\"datasource\"></dxi-column>\n <dxi-column dataField=\"dbConfig\"></dxi-column>\n <dxi-column dataField=\"analyzerType\"></dxi-column>\n <dxi-column dataField=\"fileNameAttributeName\"></dxi-column>\n <dxi-column dataField=\"dataSelectionType\"></dxi-column>\n <dxi-column caption=\"Status\" dataField=\"active\" cellTemplate=\"cellTemplate1\"></dxi-column>\n\n <dxi-column dataField=\"action\" cellTemplate=\"cellTemplate\" [fixed]=\"true\"\n fixedPosition=\"right\"></dxi-column>\n <div *dxTemplate=\"let data of 'cellTemplate'\">\n <button class=\"{{commonService.btnPrimaryBlue}}\" (click)=\"editExceptionConfigConfig(data.data)\">\n Edit\n </button>\n <!-- <button class=\"{{commonService.btnPrimaryBlue}}\" *ngIf=\"data.data.active == false\"\n (click)=\"editExceptionConfigConfig(data.data)\">\n Edit\n </button> -->\n\n <button class=\"{{commonService.btn_danger_md}}\" (click)=\"deleteExceptionConfig(data.data)\">\n Delete\n </button>\n </div>\n <div *dxTemplate=\"let data of 'cellTemplate1'\">\n <button type=\"button\" *ngIf=\"data.data.active == true\" class=\"{{commonService.btnSuccessGreen}}\"\n (click)=\"deActivatedException(data.data)\">Active</button>\n\n <button type=\"button\" *ngIf=\"data.data.active == false\" class=\"{{commonService.btnWarningYellow}}\"\n (click)=\"activatedException(data.data)\">Inactive</button>\n\n\n </div>\n\n </dx-data-grid>\n\n </div>\n </div>\n <ng-container *ngIf=\"isExceptionConfigCreation\">\n <div class=\"m-2\">\n <div\n class=\"m-3 p-4 bg-white border border-gray-200 rounded-lg shadow-md dark:bg-gray-800 dark:border-gray-700\">\n <h6\n class=\"mb-2 text-lg tracking-tight text-gray-900 dark:text-white border-b pb-3 flex items-center capitalize\">\n {{contentType}} Exception Configurations\n\n <div class=\"ml-auto\">\n <button class=\"{{commonService.btnOthersPurple}}\" (click)=\"getCancleExceptionCreation()\">\n Back\n </button>\n </div>\n </h6>\n\n <!-- (onValueChanged)=\"valueChangeForDatabaseName($event)\" -->\n <div class=\"flex\">\n <div class=\"w-full border-r\">\n <div class=\"m-2\">\n <div class=\"flex flex-row mb-2\">\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Config Name</div>\n <dx-text-box [(ngModel)]=\"exceptionMainObject.configName\"\n [readOnly]=\"contentType == 'view'\"></dx-text-box>\n </div>\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Datasource</div>\n <dx-select-box [items]=\"datasourcelist\" [(ngModel)]=\"exceptionMainObject.datasource\"\n [readOnly]=\"contentType == 'view'\"></dx-select-box>\n </div>\n <div class=\"mx-2 w-1/3\">\n <div class=\"text-md mb-2\">Analyzer Type</div>\n <dx-select-box [items]=\"analyzer_type\" valueExpr=\"key\" displayExpr=\"name\"\n [(ngModel)]=\"exceptionMainObject.analyzerType\"\n [readOnly]=\"contentType == 'view'\"></dx-select-box>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col\">\n <div class=\"w-full border-b my-4\">\n <div class=\"m-2\">\n <div class=\"pt-2\">\n <div class=\"flex flex-row p-2\">\n <div class=\"px-2 mb-2 w-1/2\">\n <div class=\"text-md mb-2\"> Db Config</div>\n <dx-select-box [items]=\"['mongo','impala','postgres','mysql','bigquery']\"\n (onValueChanged)=\"getDataConfig($event)\"\n [(ngModel)]=\"exceptionMainObject.dbConfig\"\n [readOnly]=\"contentType == 'view'\"></dx-select-box>\n </div>\n <div class=\"px-2 mb-2 w-1/2\">\n <div class=\"text-md mb-2\"> Table Name</div>\n <dx-text-box [(ngModel)]=\"exceptionMainObject.tableName\"\n [readOnly]=\"contentType == 'view'\"></dx-text-box>\n </div>\n <div class=\"px-2 mb-2 w-1/2\">\n <div class=\"text-md mb-2\"> Data Selection Type</div>\n <dx-select-box [items]=\"['select','distinct']\"\n [(ngModel)]=\"exceptionMainObject.dataSelectionType\"\n [readOnly]=\"contentType == 'view'\"></dx-select-box>\n </div>\n <div class=\"px-2 mb-2 w-1/2\">\n <div class=\"text-md mb-2\"> File Column Name</div>\n <dx-text-box [(ngModel)]=\"exceptionMainObject.fileNameAttributeName\"\n [readOnly]=\"contentType == 'view'\"></dx-text-box>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"w-full border-b my-4\">\n <div class=\"m-2\">\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"py-2 border-b border-b\">\n <div class=\"flex flex-row px-2\">\n <div class=\"w-1/2 px-2\">\n <div class=\"text-2xl font-extrabold\">Filter List</div>\n </div>\n <div class=\"w-1/2 px-2\">\n <div class=\"flex justify-end\">\n <button class=\"{{commonService.btn_primary_md}}\"\n (click)=\"getProcessForConfig()\">\n Add Filter\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"pt-2\">\n <div class=\"flex flex-row my-2\"\n *ngFor=\"let items of exceptionMainObject.filterList;let i = index;\">\n <div class=\"w-full px-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Column Name</p>\n <dx-text-box [(ngModel)]=\"items.columnName\"\n [readOnly]=\"contentType == 'view'\">\n </dx-text-box>\n </div>\n </div>\n <div class=\"w-full px-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Operator</p>\n <dx-select-box [items]=\"operator_list\" valueExpr=\"value\"\n displayExpr=\"name\" [(ngModel)]=\"items.operator\"\n [searchEnabled]=\"true\">\n </dx-select-box>\n </div>\n </div>\n <div class=\"w-full px-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Datatype</p>\n <dx-select-box\n [items]=\"['date','string','timestamp','int', 'double', 'boolean']\"\n [(ngModel)]=\"items.dataType\"\n [readOnly]=\"contentType == 'view'\"></dx-select-box>\n </div>\n </div>\n\n <div class=\"w-full px-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Select Function</p>\n <dx-select-box [items]=\"functionNameContainer\"\n [(ngModel)]=\"items.windowFunctionName\" [searchEnabled]=\"true\"\n [readOnly]=\"contentType == 'view'\"></dx-select-box>\n </div>\n </div>\n <div class=\"w-full px-2\"\n *ngIf=\"items.dataType == 'date' || items.dataType == 'timestamp'\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Date Format</p>\n <dx-text-box [(ngModel)]=\"items.dateFormat\"\n [readOnly]=\"contentType == 'view'\"></dx-text-box>\n </div>\n </div>\n <div class=\"w-full px-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Default Value</p>\n <dx-text-box [(ngModel)]=\"items.value\"\n [readOnly]=\"contentType == 'view'\"></dx-text-box>\n </div>\n </div>\n <div class=\"w-full px-2\">\n <div class=\"mx-2\">\n <div class=\"flex flex-row\">\n <button *ngIf=\"i !== 0\"\n class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1 mt-6\"\n (click)=\"moveItemForColumns(i, 'up')\">\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\n </button>\n\n <button *ngIf=\"i !== exceptionMainObject.filterList.length - 1\"\n class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1 mt-6\"\n (click)=\"moveItemForColumns(i, 'down')\">\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\n </button>\n\n <button\n class=\"{{commonService.btn_danger_sm}} cursor-pointer mx-1 mt-6\"\n (click)=\"deleteColume(i)\"><i class=\"fa fa-trash-o\"\n aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n\n\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"w-full border-b my-4\">\n <div class=\"m-2\">\n <div class=\"flex flex-col flex-auto min-w-0 my-2\">\n <div class=\"py-2 border-b border-b\">\n <div class=\"flex flex-row px-2\">\n <div class=\"w-1/2 px-2\">\n <div class=\"text-2xl font-extrabold\">Pattern List</div>\n </div>\n <div class=\"w-1/2 px-2\">\n <div class=\"flex justify-end\">\n <button class=\"{{commonService.btn_primary_md}}\"\n (click)=\"getAddPatternsConfig()\">\n Add Pattern\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"pt-2\">\n <ng-container *ngFor=\"let items of exceptionMainObject.patternList;let i = index;\">\n <div class=\"flex flex-wrap my-2\">\n <div class=\"w-1/2 px-2 my-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Regex</p>\n <dx-text-box [(ngModel)]=\"items.regex\"\n [readOnly]=\"contentType == 'view'\">\n </dx-text-box>\n </div>\n </div>\n <div class=\"w-1/2 px-2 my-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">File Attributes</p>\n <dx-tag-box [multiline]=\"true\" [showSelectionControls]=\"true\"\n [acceptCustomValue]=\"true\"\n (onCustomItemCreating)=\"onCustomFileAttributesAdd($event)\"\n [(ngModel)]=\"items.fileAttributes\" [searchEnabled]=\"true\">\n </dx-tag-box>\n </div>\n </div>\n\n <div class=\"w-1/3 px-2 my-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">SequenceKey</p>\n <dx-text-box [(ngModel)]=\"items.sequenceKey\"\n [readOnly]=\"contentType == 'view'\">\n </dx-text-box>\n </div>\n </div>\n\n <div class=\"w-1/3 px-2 my-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Analyzer Keys</p>\n <dx-tag-box [multiline]=\"true\" [showSelectionControls]=\"true\"\n [acceptCustomValue]=\"true\"\n (onCustomItemCreating)=\"onCustomAnalizerKeyAdd($event)\"\n [(ngModel)]=\"items.analyzerKeys\" [searchEnabled]=\"true\">\n </dx-tag-box>\n </div>\n </div>\n <div class=\"w-1/6 px-2 my-2\">\n <div class=\"dx-field\">\n <p class=\"mb-1\">Sample</p>\n <dx-text-box [(ngModel)]=\"items.sample\"\n [readOnly]=\"contentType == 'view'\">\n </dx-text-box>\n </div>\n </div>\n <div class=\"w-1/6 px-2 my-2\">\n <div class=\"mx-2\">\n <div class=\"flex flex-row\">\n <button *ngIf=\"i !== 0\"\n class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1 mt-6\"\n (click)=\"moveItemForpatterns(i, 'up')\">\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\n </button>\n\n <button *ngIf=\"i !== exceptionMainObject.filterList.length - 1\"\n class=\"{{commonService.btn_light_sm}} cursor-pointer mx-1 mt-6\"\n (click)=\"moveItemForpatterns(i, 'down')\">\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\n </button>\n\n <button\n class=\"{{commonService.btn_danger_sm}} cursor-pointer mx-1 mt-6\"\n (click)=\"deletePatternsColume(i)\"><i class=\"fa fa-trash-o\"\n aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"text-xl mb-2\">Dynamic Arguments |\n <button class=\"{{commonService.btn_primary_sm}}\"\n (click)=\"addDynamicArgument(i)\">Add Arguments</button>\n </div>\n <div class=\"m-5\">\n\n <div class=\"flex flex-wrap\">\n <ng-container *ngFor=\"let item of items.dynamicArgs | keyvalue\">\n <div class=\"w-1/2 p-2\">\n <div class=\"flex flex-row\">\n <div class=\"m-1\">\n <div class=\"text-md\"> Argument Key</div>\n <dx-text-box [(ngModel)]=\"item.key\"></dx-text-box>\n </div>\n <div class=\"m-1\">\n <div class=\"text-md\"> Argument Value</div>\n <dx-text-box\n [(ngModel)]=\"items.dynamicArgs[item.key]\"></dx-text-box>\n </div>\n <div class=\"m-1\">\n <button\n class=\"{{commonService.btn_danger_sm}} cursor-pointer mx-1 mt-6\"\n (click)=\"deleteDynamicArguments(item,item.key,i)\"><i\n class=\"fa fa-trash-o\"\n aria-hidden=\"true\"></i></button>\n </div>\n </div>\n </div>\n </ng-container>\n\n </div>\n </div>\n\n\n\n </ng-container>\n\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"flex w-full justify-end mt-5 border-t\" *ngIf=\"contentType !== 'view'\">\n\n <button class=\"{{commonService.btn_success_md}} cursor-pointer mx-1 my-2\"\n (click)=\"saveExceptionConfig()\" *ngIf=\"contentType == 'create'\">\n Create Exception Config\n </button>\n <button class=\"{{commonService.btn_success_md}} cursor-pointer mx-1 my-2\"\n (click)=\"updateExceptionConfig()\" *ngIf=\"contentType == 'edit'\">\n Update Exception Config\n </button>\n </div>\n </div>\n </div>\n </ng-container>\n</div>" }]
|
|
@@ -354,4 +354,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
354
354
|
type: ViewChild,
|
|
355
355
|
args: ['gridContainer', { static: false }]
|
|
356
356
|
}] } });
|
|
357
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZXB0aW9uLW9wZXJhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3RlbXBsYXRlLW1vZHVsZS9leGNlcHRpb25Db25maWdNb2R1bGUvZXhjZXB0aW9uLW9wZXJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3RlbXBsYXRlLW1vZHVsZS9leGNlcHRpb25Db25maWdNb2R1bGUvZXhjZXB0aW9uLW9wZXJhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQVcvQyxNQUFNLE9BQU8sMkJBQTJCO0lBK0N0QyxZQUNTLGFBQTRCLEVBQzNCLE9BQWdDLEVBQ2hDLE1BQXFCO1FBRnRCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzNCLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBQ2hDLFdBQU0sR0FBTixNQUFNLENBQWU7UUE5Qy9CLGdCQUFXLEdBQUcsUUFBUSxDQUFDO1FBRXZCLHdCQUFtQixHQUFHO1lBQ3BCLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLEVBQUU7WUFDZCxVQUFVLEVBQUUsRUFBRTtZQUNkLE1BQU0sRUFBRSxLQUFLO1lBQ2IsWUFBWSxFQUFFLEVBQUU7WUFDaEIsUUFBUSxFQUFFLEVBQUU7WUFDWixTQUFTLEVBQUUsRUFBRTtZQUNiLGlCQUFpQixFQUFFLEVBQUU7WUFDckIscUJBQXFCLEVBQUUsRUFBRTtZQUN6QixVQUFVLEVBQUUsQ0FBQztvQkFDWCxZQUFZLEVBQUUsRUFBRTtvQkFDaEIsVUFBVSxFQUFFLEVBQUU7b0JBQ2QsVUFBVSxFQUFFLEVBQUU7b0JBQ2Qsb0JBQW9CLEVBQUUsRUFBRTtvQkFDeEIsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsWUFBWSxFQUFFLEVBQUU7aUJBQ2pCLENBQUM7WUFDRixXQUFXLEVBQUU7Z0JBQ1g7b0JBQ0UsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLGdCQUFnQixFQUFFLEVBRWpCO29CQUNELGNBQWMsRUFBRSxFQUVmO29CQUNELGFBQWEsRUFBRSxFQUFFO29CQUNqQixhQUFhLEVBQUUsRUFFZDtpQkFDRjthQUNGO1NBQ0YsQ0FBQTtRQUNELGtCQUFhLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUE7UUFHeEgsYUFBUSxHQUFZLElBQUksQ0FBQztJQU9yQixDQUFDO0lBRUwsUUFBUTtRQUNOLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9DLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDekUsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLDhCQUE4QixFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQy9ELElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUN0QixPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QseUJBQXlCLENBQUMsSUFBSTtRQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQTtRQUN6QixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7SUFDbEMsQ0FBQztJQUlELHFCQUFxQjtRQUNuQixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxtQkFBbUIsR0FBRztZQUN6QixRQUFRLEVBQUUsRUFBRTtZQUNaLFVBQVUsRUFBRSxFQUFFO1lBQ2QsVUFBVSxFQUFFLEVBQUU7WUFDZCxNQUFNLEVBQUUsSUFBSTtZQUNaLFlBQVksRUFBRSxFQUFFO1lBQ2hCLFFBQVEsRUFBRSxFQUFFO1lBQ1osU0FBUyxFQUFFLEVBQUU7WUFDYixpQkFBaUIsRUFBRSxFQUFFO1lBQ3JCLHFCQUFxQixFQUFFLEVBQUU7WUFDekIsVUFBVSxFQUFFLENBQUM7b0JBQ1gsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLFVBQVUsRUFBRSxFQUFFO29CQUNkLFVBQVUsRUFBRSxFQUFFO29CQUNkLG9CQUFvQixFQUFFLEVBQUU7b0JBQ3hCLFlBQVksRUFBRSxFQUFFO29CQUNoQixPQUFPLEVBQUUsRUFBRTtpQkFDWixDQUFDO1lBQ0YsV0FBVyxFQUFFO2dCQUNYO29CQUNFLE9BQU8sRUFBRSxFQUFFO29CQUNYLFFBQVEsRUFBRSxFQUFFO29CQUNaLGdCQUFnQixFQUFFLEVBRWpCO29CQUNELGNBQWMsRUFBRSxFQUVmO29CQUNELGFBQWEsRUFBRSxFQUFFO29CQUNqQixhQUFhLEVBQUUsRUFFZDtpQkFDRjthQUNGO1NBQ0YsQ0FBQTtJQUNILENBQUM7SUFFRCwwQkFBMEI7UUFDeEIsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQztRQUN2QyxJQUFJLENBQUMsbUJBQW1CLEdBQUc7WUFDekIsUUFBUSxFQUFFLEVBQUU7WUFDWixVQUFVLEVBQUUsRUFBRTtZQUNkLFVBQVUsRUFBRSxFQUFFO1lBQ2QsTUFBTSxFQUFFLElBQUk7WUFDWixZQUFZLEVBQUUsRUFBRTtZQUNoQixRQUFRLEVBQUUsRUFBRTtZQUNaLFNBQVMsRUFBRSxFQUFFO1lBQ2IsaUJBQWlCLEVBQUUsRUFBRTtZQUNyQixxQkFBcUIsRUFBRSxFQUFFO1lBQ3pCLFVBQVUsRUFBRSxDQUFDO29CQUNYLFlBQVksRUFBRSxFQUFFO29CQUNoQixVQUFVLEVBQUUsRUFBRTtvQkFDZCxVQUFVLEVBQUUsRUFBRTtvQkFDZCxvQkFBb0IsRUFBRSxFQUFFO29CQUN4QixPQUFPLEVBQUUsRUFBRTtvQkFDWCxZQUFZLEVBQUUsRUFBRTtpQkFDakIsQ0FBQztZQUNGLFdBQVcsRUFBRTtnQkFDWDtvQkFDRSxPQUFPLEVBQUUsRUFBRTtvQkFDWCxRQUFRLEVBQUUsRUFBRTtvQkFDWixnQkFBZ0IsRUFBRSxFQUVqQjtvQkFDRCxjQUFjLEVBQUUsRUFFZjtvQkFDRCxhQUFhLEVBQUUsRUFBRTtvQkFDakIsYUFBYSxFQUFFLEVBRWQ7aUJBQ0Y7YUFDRjtTQUNGLENBQUE7SUFDSCxDQUFDO0lBR0QsYUFBYSxDQUFDLENBQUM7SUFFZixDQUFDO0lBR0QsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ3ZDLFlBQVksRUFBRSxFQUFFO1lBQ2hCLFVBQVUsRUFBRSxFQUFFO1lBQ2QsVUFBVSxFQUFFLEVBQUU7WUFDZCxvQkFBb0IsRUFBRSxFQUFFO1lBQ3hCLFlBQVksRUFBRSxFQUFFO1lBQ2hCLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ2xELENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUs7UUFDckMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxLQUFLO1FBQ3RCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUM7SUFDaEYsQ0FBQztJQUlELGtCQUFrQixDQUFDLEtBQWEsRUFBRSxTQUF3QjtRQUN4RCxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDN0UsTUFBTSxXQUFXLEdBQUcsU0FBUyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUMvRCxJQUFJLFdBQVcsR0FBRyxDQUFDLElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsTUFBTTtZQUFFLE9BQU87UUFFekYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBSUQsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ3hDLE9BQU8sRUFBRSxFQUFFO1lBQ1gsUUFBUSxFQUFFLEVBQUU7WUFDWixhQUFhLEVBQUUsRUFBRTtZQUNqQixnQkFBZ0IsRUFBRSxFQUFFO1lBQ3BCLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLGFBQWEsRUFBRSxFQUFFO1NBQ2xCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFhLEVBQUUsU0FBd0I7UUFDekQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQzlFLE1BQU0sV0FBVyxHQUFHLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDL0QsSUFBSSxXQUFXLEdBQUcsQ0FBQyxJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRTFGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELG9CQUFvQixDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ25ELENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxJQUFJO1FBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7UUFDM0IsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDcEgsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDMUU7SUFDSCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsSUFBSTtRQUN6QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO1FBQzNCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztRQUNsSCxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDdkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDeEU7SUFDSCxDQUFDO0lBR0QscUJBQXFCO1FBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzdFLElBQUksRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUNsQixJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQ2pDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywyREFBMkQsRUFBRSx5QkFBeUIsQ0FBQyxDQUFBO1lBRTNHLENBQUM7U0FDRixDQUFDLENBQUE7UUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7SUFDRCxtQkFBbUI7UUFFakIsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFO1lBQzFELElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7Z0JBQzVDLE9BQU87YUFDUjtZQUVELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMzRixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRXpHLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztnQkFDN0MsT0FBTzthQUNSO1lBRUQsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDdEMsT0FBTzthQUNSO1lBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FDbkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxHQUFHLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUM1RixDQUFDO1lBQ0YsT0FBTyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7U0FDbEM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM3RSxJQUFJLEVBQUUsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQztnQkFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNqQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMkRBQTJELEVBQUUseUJBQXlCLENBQUMsQ0FBQTtZQUUzRyxDQUFDO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQUk7UUFDeEIsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzlELE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUMzQixJQUFJLFlBQVksRUFBRTtnQkFDaEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUE7Z0JBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDcEUsSUFBSSxFQUFFLENBQUMsSUFBUyxFQUFFLEVBQUU7d0JBQ2xCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7d0JBQzdELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7NEJBQ3ZDLElBQUksZ0JBQWdCLEtBQUssU0FBUyxFQUFFO2dDQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzs2QkFDcEQ7NEJBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7NEJBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTt3QkFDcEMsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO3dCQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQzt3QkFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMkRBQTJELEVBQUUsbUJBQW1CLENBQUMsQ0FBQztvQkFDdEcsQ0FBQztpQkFDRixDQUFDLENBQUE7YUFDSDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQixDQUFDLElBQUk7UUFDckIsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDaEUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQzNCLElBQUksWUFBWSxFQUFFO2dCQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLGlDQUFpQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQ3RFLElBQUksRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFO3dCQUNsQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO3dCQUM3RCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFOzRCQUN2QyxJQUFJLGdCQUFnQixLQUFLLFNBQVMsRUFBRTtnQ0FDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7NkJBQ3BEOzRCQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDOzRCQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7d0JBQ3BDLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTt3QkFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7d0JBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxFQUFFLGtCQUFrQixDQUFDLENBQUM7b0JBQ3JHLENBQUM7aUJBQ0YsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDRCxvQkFBb0IsQ0FBQyxJQUFJO1FBQ3ZCLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUMzQixJQUFJLFlBQVksRUFBRTtnQkFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDO29CQUN4RSxJQUFJLEVBQUUsQ0FBQyxJQUFTLEVBQUUsRUFBRTt3QkFDbEIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQzt3QkFDN0QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTs0QkFDdkMsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7Z0NBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDOzZCQUNwRDs0QkFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzs0QkFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO3dCQUNwQyxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7d0JBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO3dCQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywyREFBMkQsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO29CQUNyRyxDQUFDO2lCQUNGLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsOEJBQThCO1FBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsOEJBQThCLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDdEQsSUFBSSxFQUFFLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUUxQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFBO1lBQzVELENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBRTFCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFFckcsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7O3dIQTNZVSwyQkFBMkI7NEdBQTNCLDJCQUEyQiwwS0NieEMsdS8wQkEyWk07MkZEOVlPLDJCQUEyQjtrQkFMdkMsU0FBUzsrQkFDRSx5QkFBeUI7c0tBS1ksUUFBUTtzQkFBdEQsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuLy8gaW1wb3J0IHsgQXBwbGljYXRpb25Db250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBjb25maXJtIH0gZnJvbSAnZGV2ZXh0cmVtZS91aS9kaWFsb2cnO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHsgRHhEYXRhR3JpZENvbXBvbmVudCB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhcic7XG5pbXBvcnQgeyBFeGNlcHRpb25Db25maWdzU2VydmljZSB9IGZyb20gJy4vZXhjZXB0aW9uLXNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWV4Y2VwdGlvbi1vcGVyYXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZXhjZXB0aW9uLW9wZXJhdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2V4Y2VwdGlvbi1vcGVyYXRpb24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBFeGNlcHRpb25PcGVyYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBAVmlld0NoaWxkKCdncmlkQ29udGFpbmVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGRhdGFHcmlkOiBEeERhdGFHcmlkQ29tcG9uZW50O1xuXG4gIGxvYWRpbmdNb2RhbDogYm9vbGVhbjtcbiAgY29udGVudFR5cGUgPSBcImNyZWF0ZVwiO1xuICBmdW5jdGlvbk5hbWVDb250YWluZXI6IGFueTtcbiAgZXhjZXB0aW9uTWFpbk9iamVjdCA9IHtcbiAgICBjb25maWdJZDogXCJcIixcbiAgICBjb25maWdOYW1lOiBcIlwiLFxuICAgIGRhdGFzb3VyY2U6IFwiXCIsXG4gICAgYWN0aXZlOiBmYWxzZSxcbiAgICBhbmFseXplclR5cGU6IFwiXCIsXG4gICAgZGJDb25maWc6IFwiXCIsXG4gICAgdGFibGVOYW1lOiBcIlwiLFxuICAgIGRhdGFTZWxlY3Rpb25UeXBlOiBcIlwiLFxuICAgIGZpbGVOYW1lQXR0cmlidXRlTmFtZTogXCJcIixcbiAgICBmaWx0ZXJMaXN0OiBbe1xuICAgICAgXCJjb2x1bW5OYW1lXCI6IFwiXCIsXG4gICAgICBcImRhdGFUeXBlXCI6IFwiXCIsXG4gICAgICBcIm9wZXJhdG9yXCI6IFwiXCIsXG4gICAgICBcIndpbmRvd0Z1bmN0aW9uTmFtZVwiOiBcIlwiLFxuICAgICAgXCJ2YWx1ZVwiOiBcIlwiLFxuICAgICAgXCJkYXRlRm9ybWF0XCI6IFwiXCIsXG4gICAgfV0sXG4gICAgcGF0dGVybkxpc3Q6IFtcbiAgICAgIHtcbiAgICAgICAgXCJyZWdleFwiOiBcIlwiLFxuICAgICAgICBcInNhbXBsZVwiOiBcIj9fPz9fP1wiLFxuICAgICAgICBcImZpbGVBdHRyaWJ1dGVzXCI6IFtcblxuICAgICAgICBdLFxuICAgICAgICBcImFuYWx5emVyS2V5c1wiOiBbXG5cbiAgICAgICAgXSxcbiAgICAgICAgXCJzZXF1ZW5jZUtleVwiOiBcIlwiLFxuICAgICAgICBcImR5bmFtaWNBcmdzXCI6IHtcblxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9XG4gIGFuYWx5emVyX3R5cGUgPSBbeyBrZXk6IFwibnVtZXJpY19zZXF1ZW5jZVwiLCBuYW1lOiBcIk51bWVyaWMgU2VxdWVuY2VcIiB9LCB7IGtleTogXCJkYXRlX3NlcXVlbmNlXCIsIG5hbWU6IFwiRGF0ZSBTZXF1ZW5jZVwiIH1dXG4gIG9wZXJhdG9yX2xpc3Q6IGFueTtcbiAgYWxsRXhjZXB0aW9uQ29uZmlnRGF0YVNvdXJjZTogYW55O1xuICBpc0xvYWRlcjogYm9vbGVhbiA9IHRydWU7XG4gIGlzRXhjZXB0aW9uQ29uZmlnQ3JlYXRpb246IGJvb2xlYW47XG4gIGRhdGFzb3VyY2VsaXN0OiBhbnk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VydmljZTogRXhjZXB0aW9uQ29uZmlnc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdldEV4Y2VwdGlvbkRhdGFDb25naWdzKCk7XG4gICAgdGhpcy5zZXJ2aWNlLmdldEFwcFNxbEZ1bmN0aW9uTGlzdCgpLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIHRoaXMuZnVuY3Rpb25OYW1lQ29udGFpbmVyID0gZGF0YTtcbiAgICB9KVxuXG4gICAgdGhpcy5zZXJ2aWNlLmdldENkckJyb3dzZXJPcGVyYXRpb25zKCkuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgdGhpcy5vcGVyYXRvcl9saXN0ID0gZGF0YTtcbiAgICB9KVxuICAgIHRoaXMuc2VydmljZS5nZXRBcHBEYXRhc291cmNlKCkuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgdGhpcy5kYXRhc291cmNlbGlzdCA9IChkYXRhWydkYXRhc291cmNlJ10pID8gZGF0YVsnZGF0YXNvdXJjZSddIDogZGF0YTtcbiAgICB9KVxuICB9XG5cbiAgZ2V0RXhjZXB0aW9uRGF0YUNvbmdpZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICB0aGlzLnNlcnZpY2UubGlzdEZpbGVTZXF1ZW5jZUFuYWx5emVyR3JvdXBzKCkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMuYWxsRXhjZXB0aW9uQ29uZmlnRGF0YVNvdXJjZSA9IGRhdGE7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZWRpdEV4Y2VwdGlvbkNvbmZpZ0NvbmZpZyhkYXRhKSB7XG4gICAgdGhpcy5jb250ZW50VHlwZSA9IFwiZWRpdFwiXG4gICAgdGhpcy5pc0V4Y2VwdGlvbkNvbmZpZ0NyZWF0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLmV4Y2VwdGlvbk1haW5PYmplY3QgPSBkYXRhO1xuICB9XG5cblxuXG4gIGNyZWF0ZUV4Y2VwdGlvbkNvbmZpZygpIHtcbiAgICB0aGlzLmlzRXhjZXB0aW9uQ29uZmlnQ3JlYXRpb24gPSB0cnVlO1xuICAgIHRoaXMuZXhjZXB0aW9uTWFpbk9iamVjdCA9IHtcbiAgICAgIGNvbmZpZ0lkOiBcIlwiLFxuICAgICAgY29uZmlnTmFtZTogXCJcIixcbiAgICAgIGRhdGFzb3VyY2U6IFwiXCIsXG4gICAgICBhY3RpdmU6IHRydWUsXG4gICAgICBhbmFseXplclR5cGU6IFwiXCIsXG4gICAgICBkYkNvbmZpZzogXCJcIixcbiAgICAgIHRhYmxlTmFtZTogXCJcIixcbiAgICAgIGRhdGFTZWxlY3Rpb25UeXBlOiBcIlwiLFxuICAgICAgZmlsZU5hbWVBdHRyaWJ1dGVOYW1lOiBcIlwiLFxuICAgICAgZmlsdGVyTGlzdDogW3tcbiAgICAgICAgXCJjb2x1bW5OYW1lXCI6IFwiXCIsXG4gICAgICAgIFwiZGF0YVR5cGVcIjogXCJcIixcbiAgICAgICAgXCJvcGVyYXRvclwiOiBcIlwiLFxuICAgICAgICBcIndpbmRvd0Z1bmN0aW9uTmFtZVwiOiBcIlwiLFxuICAgICAgICBcImRhdGVGb3JtYXRcIjogXCJcIixcbiAgICAgICAgXCJ2YWx1ZVwiOiBcIlwiXG4gICAgICB9XSxcbiAgICAgIHBhdHRlcm5MaXN0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICBcInJlZ2V4XCI6IFwiXCIsXG4gICAgICAgICAgXCJzYW1wbGVcIjogXCJcIixcbiAgICAgICAgICBcImZpbGVBdHRyaWJ1dGVzXCI6IFtcblxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJhbmFseXplcktleXNcIjogW1xuXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcInNlcXVlbmNlS2V5XCI6IFwiXCIsXG4gICAgICAgICAgXCJkeW5hbWljQXJnc1wiOiB7XG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIH1cblxuICBnZXRDYW5jbGVFeGNlcHRpb25DcmVhdGlvbigpIHtcbiAgICB0aGlzLmlzRXhjZXB0aW9uQ29uZmlnQ3JlYXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLmV4Y2VwdGlvbk1haW5PYmplY3QgPSB7XG4gICAgICBjb25maWdJZDogXCJcIixcbiAgICAgIGNvbmZpZ05hbWU6IFwiXCIsXG4gICAgICBkYXRhc291cmNlOiBcIlwiLFxuICAgICAgYWN0aXZlOiB0cnVlLFxuICAgICAgYW5hbHl6ZXJUeXBlOiBcIlwiLFxuICAgICAgZGJDb25maWc6IFwiXCIsXG4gICAgICB0YWJsZU5hbWU6IFwiXCIsXG4gICAgICBkYXRhU2VsZWN0aW9uVHlwZTogXCJcIixcbiAgICAgIGZpbGVOYW1lQXR0cmlidXRlTmFtZTogXCJcIixcbiAgICAgIGZpbHRlckxpc3Q6IFt7XG4gICAgICAgIFwiY29sdW1uTmFtZVwiOiBcIlwiLFxuICAgICAgICBcImRhdGFUeXBlXCI6IFwiXCIsXG4gICAgICAgIFwib3BlcmF0b3JcIjogXCJcIixcbiAgICAgICAgXCJ3aW5kb3dGdW5jdGlvbk5hbWVcIjogXCJcIixcbiAgICAgICAgXCJ2YWx1ZVwiOiBcIlwiLFxuICAgICAgICBcImRhdGVGb3JtYXRcIjogXCJcIlxuICAgICAgfV0sXG4gICAgICBwYXR0ZXJuTGlzdDogW1xuICAgICAgICB7XG4gICAgICAgICAgXCJyZWdleFwiOiBcIlwiLFxuICAgICAgICAgIFwic2FtcGxlXCI6IFwiXCIsXG4gICAgICAgICAgXCJmaWxlQXR0cmlidXRlc1wiOiBbXG5cbiAgICAgICAgICBdLFxuICAgICAgICAgIFwiYW5hbHl6ZXJLZXlzXCI6IFtcblxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJzZXF1ZW5jZUtleVwiOiBcIlwiLFxuICAgICAgICAgIFwiZHluYW1pY0FyZ3NcIjoge1xuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICB9XG5cblxuICBnZXREYXRhQ29uZmlnKGUpIHtcblxuICB9XG5cblxuICBnZXRQcm9jZXNzRm9yQ29uZmlnKCkge1xuICAgIHRoaXMuZXhjZXB0aW9uTWFpbk9iamVjdC5maWx0ZXJMaXN0LnB1c2goe1xuICAgICAgXCJjb2x1bW5OYW1lXCI6IFwiXCIsXG4gICAgICBcImRhdGFUeXBlXCI6IFwiXCIsXG4gICAgICBcIm9wZXJhdG9yXCI6IFwiXCIsXG4gICAgICBcIndpbmRvd0Z1bmN0aW9uTmFtZVwiOiBcIlwiLFxuICAgICAgXCJkYXRlRm9ybWF0XCI6IFwiXCIsXG4gICAgICBcInZhbHVlXCI6IFwiXCJcbiAgICB9KVxuICB9XG5cbiAgZGVsZXRlQ29sdW1lKGkpIHtcbiAgICB0aGlzLmV4Y2VwdGlvbk1haW5PYmplY3QuZmlsdGVyTGlzdC5zcGxpY2UoaSwgMSlcbiAgfVxuXG4gIGRlbGV0ZUR5bmFtaWNBcmd1bWVudHMoaXRlbSwga2V5LCBpbmRleCkge1xuICAgIGRlbGV0ZSB0aGlzLmV4Y2VwdGlvbk1haW5PYmplY3QucGF0dGVybkxpc3RbaW5kZXhdWydkeW5hbWljQXJncyddW2tleV07XG4gIH1cbiAgYWRkRHluYW1pY0FyZ3VtZW50KGluZGV4KSB7XG4gICAgbGV0IG5ld0tleSA9ICcnO1xuICAgIGxldCBuZXdWYWx1ZSA9ICcnO1xuICAgIHRoaXMuZXhjZXB0aW9uTWFpbk9iamVjdC5wYXR0ZXJuTGlzdFtpbmRleF1bJ2R5bmFtaWNBcmdzJ11bbmV3S2V5XSA9IG5ld1ZhbHVlO1xuICB9XG5cblxuXG4gIG1vdmVJdGVtRm9yQ29sdW1ucyhpbmRleDogbnVtYmVyLCBkaXJlY3Rpb246ICd1cCcgfCAnZG93bicpOiB2b2lkIHtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuZXhjZXB0aW9uTWFpbk9iamVjdC5maWx0ZXJMaXN0Lmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gZGlyZWN0aW9uID09PSAndXAnID8gaW5kZXggLSAxIDogaW5kZXggKyAxO1xuICAgIGlmIChuZXdQb3NpdGlvbiA8IDAgfHwgbmV3UG9zaXRpb24gPj0gdGhpcy5leGNlcHRpb25NYWluT2JqZWN0LmZpbHRlckxpc3QubGVuZ3RoKSByZXR1cm47XG5cbiAgICBjb25zdCBpdGVtVG9Nb3ZlID0gdGhpcy5leGNlcHRpb25NYWluT2JqZWN0LmZpbHRlckxpc3RbaW5kZXhdO1xuICAgIHRoaXMuZXhjZXB0aW9uTWFpbk9iamVjdC5maWx0ZXJMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5leGNlcHRpb25NYWluT2JqZWN0LmZpbHRlckxpc3Quc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBpdGVtVG9Nb3ZlKTtcbiAgfVxuXG5cblxuICBnZXRBZGRQYXR0ZXJuc0NvbmZpZygpIHtcbiAgICB0aGlzLmV4Y2VwdGlvbk1haW5PYmplY3QucGF0dGVybkxpc3QucHVzaCh7XG4gICAgICBcInJlZ2V4XCI6IFwiXCIsXG4gICAgICBcInNhbXBsZVwiOiBcIlwiLFxuICAgICAgXCJzZXF1ZW5jZUtleVwiOiBcIlwiLFxuICAgICAgXCJmaWxlQXR0cmlidXRlc1wiOiBbXSxcbiAgICAgIFwiYW5hbHl6ZXJLZXlzXCI6IFtdLFxuICAgICAgXCJkeW5hbWljQXJnc1wiOiB7fVxuICAgIH0pXG4gIH1cblxuICBtb3ZlSXRlbUZvcnBhdHRlcm5zKGluZGV4OiBudW1iZXIsIGRpcmVjdGlvbjogJ3VwJyB8ICdkb3duJyk6IHZvaWQge1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5leGNlcHRpb25NYWluT2JqZWN0LnBhdHRlcm5MaXN0Lmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gZGlyZWN0aW9uID09PSAndXAnID8gaW5kZXggLSAxIDogaW5kZXggKyAxO1xuICAgIGlmIChuZXdQb3NpdGlvbiA8IDAgfHwgbmV3UG9zaXRpb24gPj0gdGhpcy5leGNlcHRpb25NYWluT2JqZWN0LnBhdHRlcm5MaXN0Lmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgaXRlbVRvTW92ZSA9IHRoaXMuZXhjZXB0aW9uTWFpbk9iamVjdC5wYXR0ZXJuTGlzdFtpbmRleF07XG4gICAgdGhpcy5leGNlcHRpb25NYWluT2JqZWN0LnBhdHRlcm5MaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5leGNlcHRpb25NYWluT2JqZWN0LnBhdHRlcm5MaXN0LnNwbGljZShuZXdQb3NpdGlvbiwgMCwgaXRlbVRvTW92ZSk7XG4gIH1cblxuICBkZWxldGVQYXR0ZXJuc0NvbHVtZShpKSB7XG4gICAgdGhpcy5leGNlcHRpb25NYWluT2JqZWN0LnBhdHRlcm5MaXN0LnNwbGljZShpLCAxKVxuICB9XG5cbiAgb25DdXN0b21GaWxlQXR0cmlidXRlc0FkZChhcmdzKSB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBhcmdzLnRleHQ7XG4gICAgYXJncy5jdXN0b21JdGVtID0gbmV3VmFsdWU7XG4gICAgY29uc3QgaXNJdGVtSW5EYXRhU291cmNlID0gdGhpcy5leGNlcHRpb25NYWluT2JqZWN0LnBhdHRlcm5MaXN0WydmaWxlQXR0cmlidXRlcyddLnNvbWUoKGl0ZW0pID0+IGl0ZW0gPT09IG5ld1ZhbHVlKTtcbiAgICBpZiAoIWlzSXRlbUluRGF0YVNvdXJjZSkge1xuICAgICAgdGhpcy5leGNlcHRpb25NYWluT2JqZWN0LnBhdHRlcm5MaXN0WydmaWxlQXR0cmlidXRlcyddLnVuc2hpZnQobmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ3VzdG9tQW5hbGl6ZXJLZXlBZGQoYXJncykge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gYXJncy50ZXh0O1xuICAgIGFyZ3MuY3VzdG9tSXRlbSA9IG5ld1ZhbHVlO1xuICAgIGNvbnN0IGlzSXRlbUluRGF0YVNvdXJjZSA9IHRoaXMuZXhjZXB0aW9uTWFpbk9iamVjdC5wYXR0ZXJuTGlzdFsnYW5hbHl6ZXJLZXlzJ10uc29tZSgoaXRlbSkgPT4gaXRlbSA9PT0gbmV3VmFsdWUpO1xuICAgIGlmICghaXNJdGVtSW5EYXRhU291cmNlKSB7XG4gICAgICB0aGlzLmV4Y2VwdGlvbk1haW5PYmplY3QucGF0dGVybkxpc3RbJ2FuYWx5emVyS2V5cyddLnVuc2hpZnQobmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuXG5cbiAgdXBkYXRlRXhjZXB0aW9uQ29uZmlnKCkge1xuICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICB0aGlzLnNlcnZpY2UuZWRpdEZpbGVTZXF1ZW5jZUFuYWx5emVyR3JvdXAodGhpcy5leGNlcHRpb25NYWluT2JqZWN0KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzRXhjZXB0aW9uQ29uZmlnQ3JlYXRpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2V0RXhjZXB0aW9uRGF0YUNvbmdpZ3MoKTtcbiAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0NyZWF0ZSBFeGNlcHRpb24gQ29uZmlnJylcblxuICAgICAgfVxuICAgIH0pXG4gICAgY29uc29sZS5sb2codGhpcy5leGNlcHRpb25NYWluT2JqZWN0KVxuICB9XG4gIHNhdmVFeGNlcHRpb25Db25maWcoKSB7XG5cbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5leGNlcHRpb25NYWluT2JqZWN0LnBhdHRlcm5MaXN0KSB7XG4gICAgICBpZiAoIWVsZW1lbnQuZmlsZUF0dHJpYnV0ZXMuaW5jbHVkZXMoZWxlbWVudC5zZXF1ZW5jZUtleSkpIHtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1NlcXVlbmNlIEtleSBub3QgdmFsaWQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhbGxNYXRjaCA9IGVsZW1lbnQuYW5hbHl6ZXJLZXlzLmV2ZXJ5KGl0ZW0gPT4gZWxlbWVudC5maWxlQXR0cmlidXRlcy5pbmNsdWRlcyhpdGVtKSk7XG4gICAgICBjb25zdCBhbGxLZXlzTWF0Y2ggPSBPYmplY3Qua2V5cyhlbGVtZW50LmR5bmFtaWNBcmdzKS5ldmVyeShrZXkgPT4gZWxlbWVudC5maWxlQXR0cmlidXRlcy5pbmNsdWRlcyhrZXkpKTtcblxuICAgICAgaWYgKCFhbGxNYXRjaCkge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignQW5hbHl6ZXIgS2V5cyBub3QgdmFsaWQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWFsbEtleXNNYXRjaCkge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignRmlsbGVyIG5vdCB2YWxpZCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVwZGF0ZWRPYmogPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGVsZW1lbnQuZHluYW1pY0FyZ3MpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBbYGRlZmF1bHRfJHtrZXl9X2ZpbHRlcmAsIHZhbHVlXSlcbiAgICAgICk7XG4gICAgICBlbGVtZW50LmR5bmFtaWNBcmdzID0gdXBkYXRlZE9iajtcbiAgICB9XG5cbiAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG4gICAgdGhpcy5zZXJ2aWNlLnNhdmVGaWxlU2VxdWVuY2VBbmFseXplckdyb3VwKHRoaXMuZXhjZXB0aW9uTWFpbk9iamVjdCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5pc0V4Y2VwdGlvbkNvbmZpZ0NyZWF0aW9uID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgICAgICB0aGlzLmdldEV4Y2VwdGlvbkRhdGFDb25naWdzKCk7XG4gICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdDcmVhdGUgRXhjZXB0aW9uIENvbmZpZycpXG5cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZGVsZXRlRXhjZXB0aW9uQ29uZmlnKGRhdGEpIHtcbiAgICBsZXQgcmVzdWx0ID0gY29uZmlybShcIjxpPkFyZSBZb3UgU3VyZT88L2k+XCIsIFwiRGVsZXRlIENvbmZpZ1wiKTtcbiAgICByZXN1bHQudGhlbigoZGlhbG9nUmVzdWx0KSA9PiB7XG4gICAgICBpZiAoZGlhbG9nUmVzdWx0KSB7XG4gICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZVxuICAgICAgICB0aGlzLnNlcnZpY2UuZGVsZXRlRmlsZVNlcXVlbmNlQW5hbHl6ZXJHcm91cChkYXRhLmNvbmZpZ0lkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlSW5kZXggPSB0aGlzLmRhdGFHcmlkPy5pbnN0YW5jZS5wYWdlSW5kZXgoKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0RXhjZXB0aW9uRGF0YUNvbmdpZ3MoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQYWdlSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUdyaWQuaW5zdGFuY2UucGFnZUluZGV4KGN1cnJlbnRQYWdlSW5kZXgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhkYXRhLnJlc3BvbnNlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnQ0RSIENvbmZpZyBEZWxldGUnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhY3RpdmF0ZWRFeGNlcHRpb24oZGF0YSkge1xuICAgIGxldCByZXN1bHQgPSBjb25maXJtKFwiPGk+QXJlIFlvdSBTdXJlPzwvaT5cIiwgXCJBY3RpdmF0ZSBDb25maWdcIik7XG4gICAgcmVzdWx0LnRoZW4oKGRpYWxvZ1Jlc3VsdCkgPT4ge1xuICAgICAgaWYgKGRpYWxvZ1Jlc3VsdCkge1xuICAgICAgICB0aGlzLnNlcnZpY2UuYWN0aXZhdGVGaWxlU2VxdWVuY2VBbmFseXplckdyb3VwKGRhdGEuY29uZmlnSWQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFBhZ2VJbmRleCA9IHRoaXMuZGF0YUdyaWQ/Lmluc3RhbmNlLnBhZ2VJbmRleCgpO1xuICAgICAgICAgICAgdGhpcy5nZXRFeGNlcHRpb25EYXRhQ29uZ2lncygpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoY3VycmVudFBhZ2VJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhR3JpZC5pbnN0YW5jZS5wYWdlSW5kZXgoY3VycmVudFBhZ2VJbmRleCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKGRhdGEucmVzcG9uc2UpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnRXhjZXB0aW9uIENvbmZpZycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuICBkZUFjdGl2YXRlZEV4Y2VwdGlvbihkYXRhKSB7XG4gICAgbGV0IHJlc3VsdCA9IGNvbmZpcm0oXCI8aT5BcmUgWW91IFN1cmU/PC9pPlwiLCBcIkRlYWN0aXZhdGUgQ29uZmlnXCIpO1xuICAgIHJlc3VsdC50aGVuKChkaWFsb2dSZXN1bHQpID0+IHtcbiAgICAgIGlmIChkaWFsb2dSZXN1bHQpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmRlYWN0aXZhdGVGaWxlU2VxdWVuY2VBbmFseXplckdyb3VwKGRhdGEuY29uZmlnSWQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFBhZ2VJbmRleCA9IHRoaXMuZGF0YUdyaWQ/Lmluc3RhbmNlLnBhZ2VJbmRleCgpO1xuICAgICAgICAgICAgdGhpcy5nZXRFeGNlcHRpb25EYXRhQ29uZ2lncygpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoY3VycmVudFBhZ2VJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhR3JpZC5pbnN0YW5jZS5wYWdlSW5kZXgoY3VycmVudFBhZ2VJbmRleCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKGRhdGEucmVzcG9uc2UpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnRXhjZXB0aW9uIENvbmZpZycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHVwZGF0ZUZpbGVTZXF1ZW5jZUFuYWx5emVySm9icygpIHtcbiAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IHRydWU7XG4gICAgdGhpcy5zZXJ2aWNlLnVwZGF0ZUZpbGVTZXF1ZW5jZUFuYWx5emVySm9icygpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ01vZGFsID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhcIkZpbGUgU2VxdWVuY2UgQW5hbHl6ZXIgSm9icyBVcGRhdGVkXCIpXG4gICAgICB9LCBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0V4Y2VwdGlvbiBDb25maWcnKTtcblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuXG59XG4iLCI8YXBwLWxvYWRpbmcgKm5nSWY9XCJsb2FkaW5nTW9kYWxcIj48L2FwcC1sb2FkaW5nPlxuPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC1hdXRvIHctZnVsbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBib3JkZXItYiAgZGFyazpiZy10cmFuc3BhcmVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggIGZsZXgtY29sIG1sLTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCAgaXRlbXMtY2VudGVyIGZsb2F0LXN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24tc2l6ZS0yXCIgW3N2Z0ljb25dPVwiJ2hlcm9pY29uc19zb2xpZDp0ZW1wbGF0ZSdcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGgyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtMnhsIG1kOnRleHQtMnhsIHB5LTMgZm9udC1leHRyYWJvbGQgaXRlbXMtY2VudGVyIG1sLTIgdHJhY2tpbmctdGlnaHQgbGVhZGluZy01IHRydW5jYXRlIGNhcGl0YWxpemVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBDb25maWd1cmF0aW9uXG4gICAgICAgICAgICAgICAgICAgIDwvaDI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGJvcmRlci1sLTIgcC0wIG0tMFwiPlxuXG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xIGgtZnVsbCBib3JkZXItbC0yXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTJcIj5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcC0xXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fcHJpbWFyeV9tZH19IGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZUV4Y2VwdGlvbkNvbmZpZygpXCI+Q3JlYXRlIENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwibS0yXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLTMgcC00IGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1sZyBzaGFkb3ctbWQgZGFyazpiZy1ncmF5LTgwMCBkYXJrOmJvcmRlci1ncmF5LTcwMFwiPlxuICAgICAgICAgICAgPGg2IGNsYXNzPVwibWItMiBmb250LWJvbGQgdGV4dC1sZyB0cmFja2luZy10aWdodCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBib3JkZXItYiBwYi0zXCI+PGlcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS10YWJsZSBtci0yXCI+PC9pPiBGaWxlIFNlcXVlbmNlIEFuYWx5emVyIGNvbmZpZ3MgfCBcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fc3VjY2Vzc19tZH19XCIgKGNsaWNrKT1cInVwZGF0ZUZpbGVTZXF1ZW5jZUFuYWx5emVySm9icygpXCI+VXBkYXRlPC9idXR0b24+XG4gICAgICAgICAgICA8L2g2PlxuICAgICAgICAgICAgPCEtLSA8YXBwLWxvYWRlciAqbmdJZj1cImlzTG9hZGVyXCI+PC9hcHAtbG9hZGVyPiAtLT5cbiAgICAgICAgICAgIDxkeC1kYXRhLWdyaWQgW2NvbHVtbkF1dG9XaWR0aF09XCJ0cnVlXCIgW2RhdGFTb3VyY2VdPVwiYWxsRXhjZXB0aW9uQ29uZmlnRGF0YVNvdXJjZVwiIFtzZWxlY3RlZFJvd0tleXNdPVwiW11cIlxuICAgICAgICAgICAgICAgIFtzaG93Qm9yZGVyc109XCJ0cnVlXCIgW3Nob3dSb3dMaW5lc109XCJ0cnVlXCIgaWQ9XCJncmlkQ29udGFpbmVyXCIgW2hvdmVyU3RhdGVFbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzTG9hZGVyXCI+XG5cbiAgICAgICAgICAgICAgICA8ZHhvLXNlYXJjaC1wYW5lbCBbaGlnaGxpZ2h0Q2FzZVNlbnNpdGl2ZV09XCJ0cnVlXCIgW3Zpc2libGVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDwvZHhvLXNlYXJjaC1wYW5lbD5cbiAgICAgICAgICAgICAgICA8ZHhvLWV4cG9ydCBbZW5hYmxlZF09XCJ0cnVlXCIgZmlsZU5hbWU9XCJhbGVydF9kYXRhX2J5X3N0YXR1c1wiPjwvZHhvLWV4cG9ydD5cbiAgICAgICAgICAgICAgICA8ZHhvLXBhZ2luZyBbcGFnZVNpemVdPVwiMTBcIj48L2R4by1wYWdpbmc+XG4gICAgICAgICAgICAgICAgPGR4by1wYWdlciBbc2hvd0luZm9dPVwidHJ1ZVwiIFtzaG93UGFnZVNpemVTZWxlY3Rvcl09XCJ0cnVlXCIgW2FsbG93ZWRQYWdlU2l6ZXNdPVwiWzEwLDIwLDUwLDEwMF1cIj5cbiAgICAgICAgICAgICAgICA8L2R4by1wYWdlcj5cbiAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJjb25maWdOYW1lXCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImRhdGFzb3VyY2VcIj48L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZGJDb25maWdcIj48L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiYW5hbHl6ZXJUeXBlXCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImZpbGVOYW1lQXR0cmlidXRlTmFtZVwiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJkYXRhU2VsZWN0aW9uVHlwZVwiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBjYXB0aW9uPVwiU3RhdHVzXCIgZGF0YUZpZWxkPVwiYWN0aXZlXCIgY2VsbFRlbXBsYXRlPVwiY2VsbFRlbXBsYXRlMVwiPjwvZHhpLWNvbHVtbj5cblxuICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImFjdGlvblwiIGNlbGxUZW1wbGF0ZT1cImNlbGxUZW1wbGF0ZVwiIFtmaXhlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgZml4ZWRQb3NpdGlvbj1cInJpZ2h0XCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgZGF0YSBvZiAnY2VsbFRlbXBsYXRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0blByaW1hcnlCbHVlfX1cIiAoY2xpY2spPVwiZWRpdEV4Y2VwdGlvbkNvbmZpZ0NvbmZpZyhkYXRhLmRhdGEpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuUHJpbWFyeUJsdWV9fVwiICpuZ0lmPVwiZGF0YS5kYXRhLmFjdGl2ZSA9PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdEV4Y2VwdGlvbkNvbmZpZ0NvbmZpZyhkYXRhLmRhdGEpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cblxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9kYW5nZXJfbWR9fVwiIChjbGljayk9XCJkZWxldGVFeGNlcHRpb25Db25maWcoZGF0YS5kYXRhKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRlXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgKmR4VGVtcGxhdGU9XCJsZXQgZGF0YSBvZiAnY2VsbFRlbXBsYXRlMSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJkYXRhLmRhdGEuYWN0aXZlID09IHRydWVcIiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5TdWNjZXNzR3JlZW59fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVBY3RpdmF0ZWRFeGNlcHRpb24oZGF0YS5kYXRhKVwiPkFjdGl2ZTwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiZGF0YS5kYXRhLmFjdGl2ZSA9PSBmYWxzZVwiIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bldhcm5pbmdZZWxsb3d9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVkRXhjZXB0aW9uKGRhdGEuZGF0YSlcIj5JbmFjdGl2ZTwvYnV0dG9uPlxuXG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9keC1kYXRhLWdyaWQ+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRXhjZXB0aW9uQ29uZmlnQ3JlYXRpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tMlwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibS0zIHAtNCBiZy13aGl0ZSBib3JkZXIgYm9yZGVyLWdyYXktMjAwIHJvdW5kZWQtbGcgc2hhZG93LW1kIGRhcms6YmctZ3JheS04MDAgZGFyazpib3JkZXItZ3JheS03MDBcIj5cbiAgICAgICAgICAgICAgICA8aDZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0yIHRleHQtbGcgdHJhY2tpbmctdGlnaHQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUgYm9yZGVyLWIgcGItMyBmbGV4IGl0ZW1zLWNlbnRlciBjYXBpdGFsaXplXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7Y29udGVudFR5cGV9fSBFeGNlcHRpb24gQ29uZmlndXJhdGlvbnNcblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5PdGhlcnNQdXJwbGV9fVwiIChjbGljayk9XCJnZXRDYW5jbGVFeGNlcHRpb25DcmVhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFja1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvaDY+XG5cbiAgICAgICAgICAgICAgICA8IS0tICAob25WYWx1ZUNoYW5nZWQpPVwidmFsdWVDaGFuZ2VGb3JEYXRhYmFzZU5hbWUoJGV2ZW50KVwiIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgYm9yZGVyLXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yIHctMS8zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+Q29uZmlnIE5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cImV4Y2VwdGlvbk1haW5PYmplY3QuY29uZmlnTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImNvbnRlbnRUeXBlID09ICd2aWV3J1wiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiB3LTEvM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPkRhdGFzb3VyY2U8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtpdGVtc109XCJkYXRhc291cmNlbGlzdFwiIFsobmdNb2RlbCldPVwiZXhjZXB0aW9uTWFpbk9iamVjdC5kYXRhc291cmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiY29udGVudFR5cGUgPT0gJ3ZpZXcnXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgdy0xLzNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5BbmFseXplciBUeXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwiYW5hbHl6ZXJfdHlwZVwiIHZhbHVlRXhwcj1cImtleVwiIGRpc3BsYXlFeHByPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJleGNlcHRpb25NYWluT2JqZWN0LmFuYWx5emVyVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImNvbnRlbnRUeXBlID09ICd2aWV3J1wiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBib3JkZXItYiBteS00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB0LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBtYi0yIHctMS8yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPiBEYiBDb25maWc8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwiWydtb25nbycsJ2ltcGFsYScsJ3Bvc3RncmVzJywnbXlzcWwnLCdiaWdxdWVyeSddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cImdldERhdGFDb25maWcoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZXhjZXB0aW9uTWFpbk9iamVjdC5kYkNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJjb250ZW50VHlwZSA9PSAndmlldydcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIG1iLTIgdy0xLzJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+IFRhYmxlIE5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJleGNlcHRpb25NYWluT2JqZWN0LnRhYmxlTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJjb250ZW50VHlwZSA9PSAndmlldydcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBtYi0yIHctMS8yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPiBEYXRhIFNlbGVjdGlvbiBUeXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW2l0ZW1zXT1cIlsnc2VsZWN0JywnZGlzdGluY3QnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZXhjZXB0aW9uTWFpbk9iamVjdC5kYXRhU2VsZWN0aW9uVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJjb250ZW50VHlwZSA9PSAndmlldydcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIG1iLTIgdy0xLzJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+IEZpbGUgQ29sdW1uIE5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJleGNlcHRpb25NYWluT2JqZWN0LmZpbGVOYW1lQXR0cmlidXRlTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJjb250ZW50VHlwZSA9PSAndmlldydcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGJvcmRlci1iIG15LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LWF1dG8gbWluLXctMCBteS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0yIGJvcmRlci1iIGJvcmRlci1iXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBweC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMS8yIHB4LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtMnhsIGZvbnQtZXh0cmFib2xkXCI+RmlsdGVyIExpc3Q8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzIgcHgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fcHJpbWFyeV9tZH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ2V0UHJvY2Vzc0ZvckNvbmZpZygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIEZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgbXktMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW1zIG9mIGV4Y2VwdGlvbk1haW5PYmplY3QuZmlsdGVyTGlzdDtsZXQgaSA9IGluZGV4O1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgcHgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPkNvbHVtbiBOYW1lPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiaXRlbXMuY29sdW1uTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImNvbnRlbnRUeXBlID09ICd2aWV3J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBweC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+T3BlcmF0b3I8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwib3BlcmF0b3JfbGlzdFwiIHZhbHVlRXhwcj1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RXhwcj1cIm5hbWVcIiBbKG5nTW9kZWwpXT1cIml0ZW1zLm9wZXJhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoRW5hYmxlZF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgcHgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPkRhdGF0eXBlPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiWydkYXRlJywnc3RyaW5nJywndGltZXN0YW1wJywnaW50JywgJ2RvdWJsZScsICdib29sZWFuJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbXMuZGF0YVR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJjb250ZW50VHlwZSA9PSAndmlldydcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBweC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+U2VsZWN0IEZ1bmN0aW9uPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW2l0ZW1zXT1cImZ1bmN0aW9uTmFtZUNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtcy53aW5kb3dGdW5jdGlvbk5hbWVcIiBbc2VhcmNoRW5hYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiY29udGVudFR5cGUgPT0gJ3ZpZXcnXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIHB4LTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW1zLmRhdGFUeXBlID09ICdkYXRlJyB8fCBpdGVtcy5kYXRhVHlwZSA9PSAndGltZXN0YW1wJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPkRhdGUgRm9ybWF0PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiaXRlbXMuZGF0ZUZvcm1hdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImNvbnRlbnRUeXBlID09ICd2aWV3J1wiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgcHgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPkRlZmF1bHQgVmFsdWU8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJpdGVtcy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImNvbnRlbnRUeXBlID09ICd2aWV3J1wiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgcHgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaSAhPT0gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9saWdodF9zbX19IGN1cnNvci1wb2ludGVyIG14LTEgbXQtNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb3ZlSXRlbUZvckNvbHVtbnMoaSwgJ3VwJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy11cFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpICE9PSBleGNlcHRpb25NYWluT2JqZWN0LmZpbHRlckxpc3QubGVuZ3RoIC0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9saWdodF9zbX19IGN1cnNvci1wb2ludGVyIG14LTEgbXQtNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJtb3ZlSXRlbUZvckNvbHVtbnMoaSwgJ2Rvd24nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LWRvd25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9kYW5nZXJfc219fSBjdXJzb3ItcG9pbnRlciBteC0xIG10LTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQ29sdW1lKGkpXCI+PGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgYm9yZGVyLWIgbXktNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtYXV0byBtaW4tdy0wIG15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTIgYm9yZGVyLWIgYm9yZGVyLWJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IHB4LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzIgcHgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC0yeGwgZm9udC1leHRyYWJvbGRcIj5QYXR0ZXJuIExpc3Q8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzIgcHgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fcHJpbWFyeV9tZH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ2V0QWRkUGF0dGVybnNDb25maWcoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBQYXR0ZXJuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtcyBvZiBleGNlcHRpb25NYWluT2JqZWN0LnBhdHRlcm5MaXN0O2xldCBpID0gaW5kZXg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIG15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMS8yIHB4LTIgbXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR4LWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+UmVnZXg8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiaXRlbXMucmVnZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiY29udGVudFR5cGUgPT0gJ3ZpZXcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMS8yIHB4LTIgbXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR4LWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+RmlsZSBBdHRyaWJ1dGVzPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10YWctYm94IFttdWx0aWxpbmVdPVwidHJ1ZVwiIFtzaG93U2VsZWN0aW9uQ29udHJvbHNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY2NlcHRDdXN0b21WYWx1ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ3VzdG9tSXRlbUNyZWF0aW5nKT1cIm9uQ3VzdG9tRmlsZUF0dHJpYnV0ZXNBZGQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbXMuZmlsZUF0dHJpYnV0ZXNcIiBbc2VhcmNoRW5hYmxlZF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keC10YWctYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEvMyBweC0yIG15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPlNlcXVlbmNlS2V5PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cIml0ZW1zLnNlcXVlbmNlS2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImNvbnRlbnRUeXBlID09ICd2aWV3J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMS8zIHB4LTIgbXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR4LWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+QW5hbHl6ZXIgS2V5czwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGFnLWJveCBbbXVsdGlsaW5lXT1cInRydWVcIiBbc2hvd1NlbGVjdGlvbkNvbnRyb2xzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWNjZXB0Q3VzdG9tVmFsdWVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkN1c3RvbUl0ZW1DcmVhdGluZyk9XCJvbkN1c3RvbUFuYWxpemVyS2V5QWRkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW1zLmFuYWx5emVyS2V5c1wiIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4LXRhZy1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEvNiBweC0yIG15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMVwiPlNhbXBsZTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJpdGVtcy5zYW1wbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiY29udGVudFR5cGUgPT0gJ3ZpZXcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMS82IHB4LTIgbXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaSAhPT0gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fbGlnaHRfc219fSBjdXJzb3ItcG9pbnRlciBteC0xIG10LTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmVJdGVtRm9ycGF0dGVybnMoaSwgJ3VwJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctdXBcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpICE9PSBleGNlcHRpb25NYWluT2JqZWN0LmZpbHRlckxpc3QubGVuZ3RoIC0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fbGlnaHRfc219fSBjdXJzb3ItcG9pbnRlciBteC0xIG10LTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmVJdGVtRm9ycGF0dGVybnMoaSwgJ2Rvd24nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1kb3duXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fZGFuZ2VyX3NtfX0gY3Vyc29yLXBvaW50ZXIgbXgtMSBtdC02XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVQYXR0ZXJuc0NvbHVtZShpKVwiPjxpIGNsYXNzPVwiZmEgZmEtdHJhc2gtb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14bCBtYi0yXCI+RHluYW1pYyBBcmd1bWVudHMgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X3NtfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZER5bmFtaWNBcmd1bWVudChpKVwiPkFkZCBBcmd1bWVudHM8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS01XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zLmR5bmFtaWNBcmdzIHwga2V5dmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzIgcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWRcIj4gQXJndW1lbnQgS2V5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiaXRlbS5rZXlcIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWRcIj4gQXJndW1lbnQgVmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtcy5keW5hbWljQXJnc1tpdGVtLmtleV1cIj48L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fZGFuZ2VyX3NtfX0gY3Vyc29yLXBvaW50ZXIgbXgtMSBtdC02XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUR5bmFtaWNBcmd1bWVudHMoaXRlbSxpdGVtLmtleSxpKVwiPjxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLXRyYXNoLW9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwganVzdGlmeS1lbmQgbXQtNSBib3JkZXItdFwiICpuZ0lmPVwiY29udGVudFR5cGUgIT09ICd2aWV3J1wiPlxuXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3N1Y2Nlc3NfbWR9fSBjdXJzb3ItcG9pbnRlciBteC0xIG15LTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVFeGNlcHRpb25Db25maWcoKVwiICpuZ0lmPVwiY29udGVudFR5cGUgPT0gJ2NyZWF0ZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZSBFeGNlcHRpb24gQ29uZmlnXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9zdWNjZXNzX21kfX0gY3Vyc29yLXBvaW50ZXIgbXgtMSBteS0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVFeGNlcHRpb25Db25maWcoKVwiICpuZ0lmPVwiY29udGVudFR5cGUgPT0gJ2VkaXQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBVcGRhdGUgRXhjZXB0aW9uIENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PiJdfQ==
|
|
357
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZXB0aW9uLW9wZXJhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3RlbXBsYXRlLW1vZHVsZS9leGNlcHRpb25Db25maWdNb2R1bGUvZXhjZXB0aW9uLW9wZXJhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3RlbXBsYXRlLW1vZHVsZS9leGNlcHRpb25Db25maWdNb2R1bGUvZXhjZXB0aW9uLW9wZXJhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQVUvQyxNQUFNLE9BQU8sMkJBQTJCO0lBK0N0QyxZQUNTLGFBQTRCLEVBQzNCLE9BQWdDLEVBQ2hDLE1BQXFCO1FBRnRCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzNCLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBQ2hDLFdBQU0sR0FBTixNQUFNLENBQWU7UUE5Qy9CLGdCQUFXLEdBQUcsUUFBUSxDQUFDO1FBRXZCLHdCQUFtQixHQUFHO1lBQ3BCLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLEVBQUU7WUFDZCxVQUFVLEVBQUUsRUFBRTtZQUNkLE1BQU0sRUFBRSxLQUFLO1lBQ2IsWUFBWSxFQUFFLEVBQUU7WUFDaEIsUUFBUSxFQUFFLEVBQUU7WUFDWixTQUFTLEVBQUUsRUFBRTtZQUNiLGlCQUFpQixFQUFFLEVBQUU7WUFDckIscUJBQXFCLEVBQUUsRUFBRTtZQUN6QixVQUFVLEVBQUUsQ0FBQztvQkFDWCxZQUFZLEVBQUUsRUFBRTtvQkFDaEIs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QyxDQUFDO29CQUNyRyxDQUFDO2lCQUNGLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsOEJBQThCO1FBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsOEJBQThCLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDdEQsSUFBSSxFQUFFLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUUxQixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFBO1lBQzVELENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBRTFCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFFckcsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7O3dIQTNZVSwyQkFBMkI7NEdBQTNCLDJCQUEyQiwwS0NaeEMsdS8wQkEyWk07MkZEL1lPLDJCQUEyQjtrQkFKdkMsU0FBUzsrQkFDRSx5QkFBeUI7c0tBSVksUUFBUTtzQkFBdEQsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuLy8gaW1wb3J0IHsgQXBwbGljYXRpb25Db250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBjb25maXJtIH0gZnJvbSAnZGV2ZXh0cmVtZS91aS9kaWFsb2cnO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHsgRHhEYXRhR3JpZENvbXBvbmVudCB9IGZyb20gJ2RldmV4dHJlbWUtYW5ndWxhcic7XG5pbXBvcnQgeyBFeGNlcHRpb25Db25maWdzU2VydmljZSB9IGZyb20gJy4vZXhjZXB0aW9uLXNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWV4Y2VwdGlvbi1vcGVyYXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZXhjZXB0aW9uLW9wZXJhdGlvbi5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIEV4Y2VwdGlvbk9wZXJhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoJ2dyaWRDb250YWluZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgZGF0YUdyaWQ6IER4RGF0YUdyaWRDb21wb25lbnQ7XG5cbiAgbG9hZGluZ01vZGFsOiBib29sZWFuO1xuICBjb250ZW50VHlwZSA9IFwiY3JlYXRlXCI7XG4gIGZ1bmN0aW9uTmFtZUNvbnRhaW5lcjogYW55O1xuICBleGNlcHRpb25NYWluT2JqZWN0ID0ge1xuICAgIGNvbmZpZ0lkOiBcIlwiLFxuICAgIGNvbmZpZ05hbWU6IFwiXCIsXG4gICAgZGF0YXNvdXJjZTogXCJcIixcbiAgICBhY3RpdmU6IGZhbHNlLFxuICAgIGFuYWx5emVyVHlwZTogXCJcIixcbiAgICBkYkNvbmZpZzogXCJcIixcbiAgICB0YWJsZU5hbWU6IFwiXCIsXG4gICAgZGF0YVNlbGVjdGlvblR5cGU6IFwiXCIsXG4gICAgZmlsZU5hbWVBdHRyaWJ1dGVOYW1lOiBcIlwiLFxuICAgIGZpbHRlckxpc3Q6IFt7XG4gICAgICBcImNvbHVtbk5hbWVcIjogXCJcIixcbiAgICAgIFwiZGF0YVR5cGVcIjogXCJcIixcbiAgICAgIFwib3BlcmF0b3JcIjogXCJcIixcbiAgICAgIFwid2luZG93RnVuY3Rpb25OYW1lXCI6IFwiXCIsXG4gICAgICBcInZhbHVlXCI6IFwiXCIsXG4gICAgICBcImRhdGVGb3JtYXRcIjogXCJcIixcbiAgICB9XSxcbiAgICBwYXR0ZXJuTGlzdDogW1xuICAgICAge1xuICAgICAgICBcInJlZ2V4XCI6IFwiXCIsXG4gICAgICAgIFwic2FtcGxlXCI6IFwiP18/P18/XCIsXG4gICAgICAgIFwiZmlsZUF0dHJpYnV0ZXNcIjogW1xuXG4gICAgICAgIF0sXG4gICAgICAgIFwiYW5hbHl6ZXJLZXlzXCI6IFtcblxuICAgICAgICBdLFxuICAgICAgICBcInNlcXVlbmNlS2V5XCI6IFwiXCIsXG4gICAgICAgIFwiZHluYW1pY0FyZ3NcIjoge1xuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH1cbiAgYW5hbHl6ZXJfdHlwZSA9IFt7IGtleTogXCJudW1lcmljX3NlcXVlbmNlXCIsIG5hbWU6IFwiTnVtZXJpYyBTZXF1ZW5jZVwiIH0sIHsga2V5OiBcImRhdGVfc2VxdWVuY2VcIiwgbmFtZTogXCJEYXRlIFNlcXVlbmNlXCIgfV1cbiAgb3BlcmF0b3JfbGlzdDogYW55O1xuICBhbGxFeGNlcHRpb25Db25maWdEYXRhU291cmNlOiBhbnk7XG4gIGlzTG9hZGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNFeGNlcHRpb25Db25maWdDcmVhdGlvbjogYm9vbGVhbjtcbiAgZGF0YXNvdXJjZWxpc3Q6IGFueTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXJ2aWNlOiBFeGNlcHRpb25Db25maWdzU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZVxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0RXhjZXB0aW9uRGF0YUNvbmdpZ3MoKTtcbiAgICB0aGlzLnNlcnZpY2UuZ2V0QXBwU3FsRnVuY3Rpb25MaXN0KCkuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgdGhpcy5mdW5jdGlvbk5hbWVDb250YWluZXIgPSBkYXRhO1xuICAgIH0pXG5cbiAgICB0aGlzLnNlcnZpY2UuZ2V0Q2RyQnJvd3Nlck9wZXJhdGlvbnMoKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICB0aGlzLm9wZXJhdG9yX2xpc3QgPSBkYXRhO1xuICAgIH0pXG4gICAgdGhpcy5zZXJ2aWNlLmdldEFwcERhdGFzb3VyY2UoKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICB0aGlzLmRhdGFzb3VyY2VsaXN0ID0gKGRhdGFbJ2RhdGFzb3VyY2UnXSkgPyBkYXRhWydkYXRhc291cmNlJ10gOiBkYXRhO1xuICAgIH0pXG4gIH1cblxuICBnZXRFeGNlcHRpb25EYXRhQ29uZ2lncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMuc2VydmljZS5saXN0RmlsZVNlcXVlbmNlQW5hbHl6ZXJHcm91cHMoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgdGhpcy5hbGxFeGNlcHRpb25Db25maWdEYXRhU291cmNlID0gZGF0YTtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBlZGl0RXhjZXB0aW9uQ29uZmlnQ29uZmlnKGRhdGEpIHtcbiAgICB0aGlzLmNvbnRlbnRUeXBlID0gXCJlZGl0XCJcbiAgICB0aGlzLmlzRXhjZXB0aW9uQ29uZmlnQ3JlYXRpb24gPSB0cnVlO1xuICAgIHRoaXMuZXhjZXB0aW9uTWFpbk9iamVjdCA9IGRhdGE7XG4gIH1cblxuXG5cbiAgY3JlYXRlRXhjZXB0aW9uQ29uZmlnKCkge1xuICAgIHRoaXMuaXNFeGNlcHRpb25Db25maWdDcmVhdGlvbiA9IHRydWU7XG4gICAgdGhpcy5leGNlcHRpb25NYWluT2JqZWN0ID0ge1xuICAgICAgY29uZmlnSWQ6IFwiXCIsXG4gICAgICBjb25maWdOYW1lOiBcIlwiLFxuICAgICAgZGF0YXNvdXJjZTogXCJcIixcbiAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgIGFuYWx5emVyVHlwZTogXCJcIixcbiAgICAgIGRiQ29uZmlnOiBcIlwiLFxuICAgICAgdGFibGVOYW1lOiBcIlwiLFxuICAgICAgZGF0YVNlbGVjdGlvblR5cGU6IFwiXCIsXG4gICAgICBmaWxlTmFtZUF0dHJpYnV0ZU5hbWU6IFwiXCIsXG4gICAgICBmaWx0ZXJMaXN0OiBbe1xuICAgICAgICBcImNvbHVtbk5hbWVcIjogXCJcIixcbiAgICAgICAgXCJkYXRhVHlwZVwiOiBcIlwiLFxuICAgICAgICBcIm9wZXJhdG9yXCI6IFwiXCIsXG4gICAgICAgIFwid2luZG93RnVuY3Rpb25OYW1lXCI6IFwiXCIsXG4gICAgICAgIFwiZGF0ZUZvcm1hdFwiOiBcIlwiLFxuICAgICAgICBcInZhbHVlXCI6IFwiXCJcbiAgICAgIH1dLFxuICAgICAgcGF0dGVybkxpc3Q6IFtcbiAgICAgICAge1xuICAgICAgICAgIFwicmVnZXhcIjogXCJcIixcbiAgICAgICAgICBcInNhbXBsZVwiOiBcIlwiLFxuICAgICAgICAgIFwiZmlsZUF0dHJpYnV0ZXNcIjogW1xuXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcImFuYWx5emVyS2V5c1wiOiBbXG5cbiAgICAgICAgICBdLFxuICAgICAgICAgIFwic2VxdWVuY2VLZXlcIjogXCJcIixcbiAgICAgICAgICBcImR5bmFtaWNBcmdzXCI6IHtcblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgfVxuXG4gIGdldENhbmNsZUV4Y2VwdGlvbkNyZWF0aW9uKCkge1xuICAgIHRoaXMuaXNFeGNlcHRpb25Db25maWdDcmVhdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuZXhjZXB0aW9uTWFpbk9iamVjdCA9IHtcbiAgICAgIGNvbmZpZ0lkOiBcIlwiLFxuICAgICAgY29uZmlnTmFtZTogXCJcIixcbiAgICAgIGRhdGFzb3VyY2U6IFwiXCIsXG4gICAgICBhY3RpdmU6IHRydWUsXG4gICAgICBhbmFseXplclR5cGU6IFwiXCIsXG4gICAgICBkYkNvbmZpZzogXCJcIixcbiAgICAgIHRhYmxlTmFtZTogXCJcIixcbiAgICAgIGRhdGFTZWxlY3Rpb25UeXBlOiBcIlwiLFxuICAgICAgZmlsZU5hbWVBdHRyaWJ1dGVOYW1lOiBcIlwiLFxuICAgICAgZmlsdGVyTGlzdDogW3tcbiAgICAgICAgXCJjb2x1bW5OYW1lXCI6IFwiXCIsXG4gICAgICAgIFwiZGF0YVR5cGVcIjogXCJcIixcbiAgICAgICAgXCJvcGVyYXRvclwiOiBcIlwiLFxuICAgICAgICBcIndpbmRvd0Z1bmN0aW9uTmFtZVwiOiBcIlwiLFxuICAgICAgICBcInZhbHVlXCI6IFwiXCIsXG4gICAgICAgIFwiZGF0ZUZvcm1hdFwiOiBcIlwiXG4gICAgICB9XSxcbiAgICAgIHBhdHRlcm5MaXN0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICBcInJlZ2V4XCI6IFwiXCIsXG4gICAgICAgICAgXCJzYW1wbGVcIjogXCJcIixcbiAgICAgICAgICBcImZpbGVBdHRyaWJ1dGVzXCI6IFtcblxuICAgICAgICAgIF0sXG4gICAgICAgICAgXCJhbmFseXplcktleXNcIjogW1xuXG4gICAgICAgICAgXSxcbiAgICAgICAgICBcInNlcXVlbmNlS2V5XCI6IFwiXCIsXG4gICAgICAgICAgXCJkeW5hbWljQXJnc1wiOiB7XG5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG4gIH1cblxuXG4gIGdldERhdGFDb25maWcoZSkge1xuXG4gIH1cblxuXG4gIGdldFByb2Nlc3NGb3JDb25maWcoKSB7XG4gICAgdGhpcy5leGNlcHRpb25NYWluT2JqZWN0LmZpbHRlckxpc3QucHVzaCh7XG4gICAgICBcImNvbHVtbk5hbWVcIjogXCJcIixcbiAgICAgIFwiZGF0YVR5cGVcIjogXCJcIixcbiAgICAgIFwib3BlcmF0b3JcIjogXCJcIixcbiAgICAgIFwid2luZG93RnVuY3Rpb25OYW1lXCI6IFwiXCIsXG4gICAgICBcImRhdGVGb3JtYXRcIjogXCJcIixcbiAgICAgIFwidmFsdWVcIjogXCJcIlxuICAgIH0pXG4gIH1cblxuICBkZWxldGVDb2x1bWUoaSkge1xuICAgIHRoaXMuZXhjZXB0aW9uTWFpbk9iamVjdC5maWx0ZXJMaXN0LnNwbGljZShpLCAxKVxuICB9XG5cbiAgZGVsZXRlRHluYW1pY0FyZ3VtZW50cyhpdGVtLCBrZXksIGluZGV4KSB7XG4gICAgZGVsZXRlIHRoaXMuZXhjZXB0aW9uTWFpbk9iamVjdC5wYXR0ZXJuTGlzdFtpbmRleF1bJ2R5bmFtaWNBcmdzJ11ba2V5XTtcbiAgfVxuICBhZGREeW5hbWljQXJndW1lbnQoaW5kZXgpIHtcbiAgICBsZXQgbmV3S2V5ID0gJyc7XG4gICAgbGV0IG5ld1ZhbHVlID0gJyc7XG4gICAgdGhpcy5leGNlcHRpb25NYWluT2JqZWN0LnBhdHRlcm5MaXN0W2luZGV4XVsnZHluYW1pY0FyZ3MnXVtuZXdLZXldID0gbmV3VmFsdWU7XG4gIH1cblxuXG5cbiAgbW92ZUl0ZW1Gb3JDb2x1bW5zKGluZGV4OiBudW1iZXIsIGRpcmVjdGlvbjogJ3VwJyB8ICdkb3duJyk6IHZvaWQge1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5leGNlcHRpb25NYWluT2JqZWN0LmZpbHRlckxpc3QubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgbmV3UG9zaXRpb24gPSBkaXJlY3Rpb24gPT09ICd1cCcgPyBpbmRleCAtIDEgOiBpbmRleCArIDE7XG4gICAgaWYgKG5ld1Bvc2l0aW9uIDwgMCB8fCBuZXdQb3NpdGlvbiA+PSB0aGlzLmV4Y2VwdGlvbk1haW5PYmplY3QuZmlsdGVyTGlzdC5sZW5ndGgpIHJldHVybjtcblxuICAgIGNvbnN0IGl0ZW1Ub01vdmUgPSB0aGlzLmV4Y2VwdGlvbk1haW5PYmplY3QuZmlsdGVyTGlzdFtpbmRleF07XG4gICAgdGhpcy5leGNlcHRpb25NYWluT2JqZWN0LmZpbHRlckxpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLmV4Y2VwdGlvbk1haW5PYmplY3QuZmlsdGVyTGlzdC5zcGxpY2UobmV3UG9zaXRpb24sIDAsIGl0ZW1Ub01vdmUpO1xuICB9XG5cblxuXG4gIGdldEFkZFBhdHRlcm5zQ29uZmlnKCkge1xuICAgIHRoaXMuZXhjZXB0aW9uTWFpbk9iamVjdC5wYXR0ZXJuTGlzdC5wdXNoKHtcbiAgICAgIFwicmVnZXhcIjogXCJcIixcbiAgICAgIFwic2FtcGxlXCI6IFwiXCIsXG4gICAgICBcInNlcXVlbmNlS2V5XCI6IFwiXCIsXG4gICAgICBcImZpbGVBdHRyaWJ1dGVzXCI6IFtdLFxuICAgICAgXCJhbmFseXplcktleXNcIjogW10sXG4gICAgICBcImR5bmFtaWNBcmdzXCI6IHt9XG4gICAgfSlcbiAgfVxuXG4gIG1vdmVJdGVtRm9ycGF0dGVybnMoaW5kZXg6IG51bWJlciwgZGlyZWN0aW9uOiAndXAnIHwgJ2Rvd24nKTogdm9pZCB7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmV4Y2VwdGlvbk1haW5PYmplY3QucGF0dGVybkxpc3QubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgbmV3UG9zaXRpb24gPSBkaXJlY3Rpb24gPT09ICd1cCcgPyBpbmRleCAtIDEgOiBpbmRleCArIDE7XG4gICAgaWYgKG5ld1Bvc2l0aW9uIDwgMCB8fCBuZXdQb3NpdGlvbiA+PSB0aGlzLmV4Y2VwdGlvbk1haW5PYmplY3QucGF0dGVybkxpc3QubGVuZ3RoKSByZXR1cm47XG5cbiAgICBjb25zdCBpdGVtVG9Nb3ZlID0gdGhpcy5leGNlcHRpb25NYWluT2JqZWN0LnBhdHRlcm5MaXN0W2luZGV4XTtcbiAgICB0aGlzLmV4Y2VwdGlvbk1haW5PYmplY3QucGF0dGVybkxpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLmV4Y2VwdGlvbk1haW5PYmplY3QucGF0dGVybkxpc3Quc3BsaWNlKG5ld1Bvc2l0aW9uLCAwLCBpdGVtVG9Nb3ZlKTtcbiAgfVxuXG4gIGRlbGV0ZVBhdHRlcm5zQ29sdW1lKGkpIHtcbiAgICB0aGlzLmV4Y2VwdGlvbk1haW5PYmplY3QucGF0dGVybkxpc3Quc3BsaWNlKGksIDEpXG4gIH1cblxuICBvbkN1c3RvbUZpbGVBdHRyaWJ1dGVzQWRkKGFyZ3MpIHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IGFyZ3MudGV4dDtcbiAgICBhcmdzLmN1c3RvbUl0ZW0gPSBuZXdWYWx1ZTtcbiAgICBjb25zdCBpc0l0ZW1JbkRhdGFTb3VyY2UgPSB0aGlzLmV4Y2VwdGlvbk1haW5PYmplY3QucGF0dGVybkxpc3RbJ2ZpbGVBdHRyaWJ1dGVzJ10uc29tZSgoaXRlbSkgPT4gaXRlbSA9PT0gbmV3VmFsdWUpO1xuICAgIGlmICghaXNJdGVtSW5EYXRhU291cmNlKSB7XG4gICAgICB0aGlzLmV4Y2VwdGlvbk1haW5PYmplY3QucGF0dGVybkxpc3RbJ2ZpbGVBdHRyaWJ1dGVzJ10udW5zaGlmdChuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgb25DdXN0b21BbmFsaXplcktleUFkZChhcmdzKSB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBhcmdzLnRleHQ7XG4gICAgYXJncy5jdXN0b21JdGVtID0gbmV3VmFsdWU7XG4gICAgY29uc3QgaXNJdGVtSW5EYXRhU291cmNlID0gdGhpcy5leGNlcHRpb25NYWluT2JqZWN0LnBhdHRlcm5MaXN0WydhbmFseXplcktleXMnXS5zb21lKChpdGVtKSA9PiBpdGVtID09PSBuZXdWYWx1ZSk7XG4gICAgaWYgKCFpc0l0ZW1JbkRhdGFTb3VyY2UpIHtcbiAgICAgIHRoaXMuZXhjZXB0aW9uTWFpbk9iamVjdC5wYXR0ZXJuTGlzdFsnYW5hbHl6ZXJLZXlzJ10udW5zaGlmdChuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG5cblxuICB1cGRhdGVFeGNlcHRpb25Db25maWcoKSB7XG4gICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlO1xuICAgIHRoaXMuc2VydmljZS5lZGl0RmlsZVNlcXVlbmNlQW5hbHl6ZXJHcm91cCh0aGlzLmV4Y2VwdGlvbk1haW5PYmplY3QpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuaXNFeGNlcHRpb25Db25maWdDcmVhdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5nZXRFeGNlcHRpb25EYXRhQ29uZ2lncygpO1xuICAgICAgfSwgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnQ3JlYXRlIEV4Y2VwdGlvbiBDb25maWcnKVxuXG4gICAgICB9XG4gICAgfSlcbiAgICBjb25zb2xlLmxvZyh0aGlzLmV4Y2VwdGlvbk1haW5PYmplY3QpXG4gIH1cbiAgc2F2ZUV4Y2VwdGlvbkNvbmZpZygpIHtcblxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLmV4Y2VwdGlvbk1haW5PYmplY3QucGF0dGVybkxpc3QpIHtcbiAgICAgIGlmICghZWxlbWVudC5maWxlQXR0cmlidXRlcy5pbmNsdWRlcyhlbGVtZW50LnNlcXVlbmNlS2V5KSkge1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignU2VxdWVuY2UgS2V5IG5vdCB2YWxpZCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFsbE1hdGNoID0gZWxlbWVudC5hbmFseXplcktleXMuZXZlcnkoaXRlbSA9PiBlbGVtZW50LmZpbGVBdHRyaWJ1dGVzLmluY2x1ZGVzKGl0ZW0pKTtcbiAgICAgIGNvbnN0IGFsbEtleXNNYXRjaCA9IE9iamVjdC5rZXlzKGVsZW1lbnQuZHluYW1pY0FyZ3MpLmV2ZXJ5KGtleSA9PiBlbGVtZW50LmZpbGVBdHRyaWJ1dGVzLmluY2x1ZGVzKGtleSkpO1xuXG4gICAgICBpZiAoIWFsbE1hdGNoKSB7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdBbmFseXplciBLZXlzIG5vdCB2YWxpZCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghYWxsS2V5c01hdGNoKSB7XG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdGaWxsZXIgbm90IHZhbGlkJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXBkYXRlZE9iaiA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZWxlbWVudC5keW5hbWljQXJncykubWFwKChba2V5LCB2YWx1ZV0pID0+IFtgZGVmYXVsdF8ke2tleX1fZmlsdGVyYCwgdmFsdWVdKVxuICAgICAgKTtcbiAgICAgIGVsZW1lbnQuZHluYW1pY0FyZ3MgPSB1cGRhdGVkT2JqO1xuICAgIH1cblxuICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICB0aGlzLnNlcnZpY2Uuc2F2ZUZpbGVTZXF1ZW5jZUFuYWx5emVyR3JvdXAodGhpcy5leGNlcHRpb25NYWluT2JqZWN0KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzRXhjZXB0aW9uQ29uZmlnQ3JlYXRpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2V0RXhjZXB0aW9uRGF0YUNvbmdpZ3MoKTtcbiAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVW5leHBlY3RlZCBTZXJ2ZXIgRXhjZXB0aW9uLiBQbGVhc2UgY29udGFjdCBTeXN0ZW0gQWRtaW4uJywgJ0NyZWF0ZSBFeGNlcHRpb24gQ29uZmlnJylcblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBkZWxldGVFeGNlcHRpb25Db25maWcoZGF0YSkge1xuICAgIGxldCByZXN1bHQgPSBjb25maXJtKFwiPGk+QXJlIFlvdSBTdXJlPzwvaT5cIiwgXCJEZWxldGUgQ29uZmlnXCIpO1xuICAgIHJlc3VsdC50aGVuKChkaWFsb2dSZXN1bHQpID0+IHtcbiAgICAgIGlmIChkaWFsb2dSZXN1bHQpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSB0cnVlXG4gICAgICAgIHRoaXMuc2VydmljZS5kZWxldGVGaWxlU2VxdWVuY2VBbmFseXplckdyb3VwKGRhdGEuY29uZmlnSWQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFBhZ2VJbmRleCA9IHRoaXMuZGF0YUdyaWQ/Lmluc3RhbmNlLnBhZ2VJbmRleCgpO1xuICAgICAgICAgICAgdGhpcy5nZXRFeGNlcHRpb25EYXRhQ29uZ2lncygpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoY3VycmVudFBhZ2VJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhR3JpZC5pbnN0YW5jZS5wYWdlSW5kZXgoY3VycmVudFBhZ2VJbmRleCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKGRhdGEucmVzcG9uc2UpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LCBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdDRFIgQ29uZmlnIERlbGV0ZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFjdGl2YXRlZEV4Y2VwdGlvbihkYXRhKSB7XG4gICAgbGV0IHJlc3VsdCA9IGNvbmZpcm0oXCI8aT5BcmUgWW91IFN1cmU/PC9pPlwiLCBcIkFjdGl2YXRlIENvbmZpZ1wiKTtcbiAgICByZXN1bHQudGhlbigoZGlhbG9nUmVzdWx0KSA9PiB7XG4gICAgICBpZiAoZGlhbG9nUmVzdWx0KSB7XG4gICAgICAgIHRoaXMuc2VydmljZS5hY3RpdmF0ZUZpbGVTZXF1ZW5jZUFuYWx5emVyR3JvdXAoZGF0YS5jb25maWdJZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UGFnZUluZGV4ID0gdGhpcy5kYXRhR3JpZD8uaW5zdGFuY2UucGFnZUluZGV4KCk7XG4gICAgICAgICAgICB0aGlzLmdldEV4Y2VwdGlvbkRhdGFDb25naWdzKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjdXJyZW50UGFnZUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFHcmlkLmluc3RhbmNlLnBhZ2VJbmRleChjdXJyZW50UGFnZUluZGV4KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoZGF0YS5yZXNwb25zZSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdFeGNlcHRpb24gQ29uZmlnJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIGRlQWN0aXZhdGVkRXhjZXB0aW9uKGRhdGEpIHtcbiAgICBsZXQgcmVzdWx0ID0gY29uZmlybShcIjxpPkFyZSBZb3UgU3VyZT88L2k+XCIsIFwiRGVhY3RpdmF0ZSBDb25maWdcIik7XG4gICAgcmVzdWx0LnRoZW4oKGRpYWxvZ1Jlc3VsdCkgPT4ge1xuICAgICAgaWYgKGRpYWxvZ1Jlc3VsdCkge1xuICAgICAgICB0aGlzLnNlcnZpY2UuZGVhY3RpdmF0ZUZpbGVTZXF1ZW5jZUFuYWx5emVyR3JvdXAoZGF0YS5jb25maWdJZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UGFnZUluZGV4ID0gdGhpcy5kYXRhR3JpZD8uaW5zdGFuY2UucGFnZUluZGV4KCk7XG4gICAgICAgICAgICB0aGlzLmdldEV4Y2VwdGlvbkRhdGFDb25naWdzKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjdXJyZW50UGFnZUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFHcmlkLmluc3RhbmNlLnBhZ2VJbmRleChjdXJyZW50UGFnZUluZGV4KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoZGF0YS5yZXNwb25zZSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VuZXhwZWN0ZWQgU2VydmVyIEV4Y2VwdGlvbi4gUGxlYXNlIGNvbnRhY3QgU3lzdGVtIEFkbWluLicsICdFeGNlcHRpb24gQ29uZmlnJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgdXBkYXRlRmlsZVNlcXVlbmNlQW5hbHl6ZXJKb2JzKCkge1xuICAgIHRoaXMubG9hZGluZ01vZGFsID0gdHJ1ZTtcbiAgICB0aGlzLnNlcnZpY2UudXBkYXRlRmlsZVNlcXVlbmNlQW5hbHl6ZXJKb2JzKCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nTW9kYWwgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKFwiRmlsZSBTZXF1ZW5jZSBBbmFseXplciBKb2JzIFVwZGF0ZWRcIilcbiAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmdNb2RhbCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdVbmV4cGVjdGVkIFNlcnZlciBFeGNlcHRpb24uIFBsZWFzZSBjb250YWN0IFN5c3RlbSBBZG1pbi4nLCAnRXhjZXB0aW9uIENvbmZpZycpO1xuXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG5cbn1cbiIsIjxhcHAtbG9hZGluZyAqbmdJZj1cImxvYWRpbmdNb2RhbFwiPjwvYXBwLWxvYWRpbmc+XG48ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LWF1dG8gdy1mdWxsXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGJvcmRlci1iICBkYXJrOmJnLXRyYW5zcGFyZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCAgZmxleC1jb2wgbWwtMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4ICBpdGVtcy1jZW50ZXIgZmxvYXQtc3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbi1zaXplLTJcIiBbc3ZnSWNvbl09XCInaGVyb2ljb25zX3NvbGlkOnRlbXBsYXRlJ1wiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aDJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC0yeGwgbWQ6dGV4dC0yeGwgcHktMyBmb250LWV4dHJhYm9sZCBpdGVtcy1jZW50ZXIgbWwtMiB0cmFja2luZy10aWdodCBsZWFkaW5nLTUgdHJ1bmNhdGUgY2FwaXRhbGl6ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uIENvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgYm9yZGVyLWwtMiBwLTAgbS0wXCI+XG5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEgaC1mdWxsIGJvcmRlci1sLTJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMlwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBwLTFcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X21kfX0gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlRXhjZXB0aW9uQ29uZmlnKClcIj5DcmVhdGUgQ29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJtLTJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tMyBwLTQgYmctd2hpdGUgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkLWxnIHNoYWRvdy1tZCBkYXJrOmJnLWdyYXktODAwIGRhcms6Ym9yZGVyLWdyYXktNzAwXCI+XG4gICAgICAgICAgICA8aDYgY2xhc3M9XCJtYi0yIGZvbnQtYm9sZCB0ZXh0LWxnIHRyYWNraW5nLXRpZ2h0IHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlIGJvcmRlci1iIHBiLTNcIj48aVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLXRhYmxlIG1yLTJcIj48L2k+IEZpbGUgU2VxdWVuY2UgQW5hbHl6ZXIgY29uZmlncyB8IFxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9zdWNjZXNzX21kfX1cIiAoY2xpY2spPVwidXBkYXRlRmlsZVNlcXVlbmNlQW5hbHl6ZXJKb2JzKClcIj5VcGRhdGU8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvaDY+XG4gICAgICAgICAgICA8IS0tIDxhcHAtbG9hZGVyICpuZ0lmPVwiaXNMb2FkZXJcIj48L2FwcC1sb2FkZXI+IC0tPlxuICAgICAgICAgICAgPGR4LWRhdGEtZ3JpZCBbY29sdW1uQXV0b1dpZHRoXT1cInRydWVcIiBbZGF0YVNvdXJjZV09XCJhbGxFeGNlcHRpb25Db25maWdEYXRhU291cmNlXCIgW3NlbGVjdGVkUm93S2V5c109XCJbXVwiXG4gICAgICAgICAgICAgICAgW3Nob3dCb3JkZXJzXT1cInRydWVcIiBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIiBpZD1cImdyaWRDb250YWluZXJcIiBbaG92ZXJTdGF0ZUVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNMb2FkZXJcIj5cblxuICAgICAgICAgICAgICAgIDxkeG8tc2VhcmNoLXBhbmVsIFtoaWdobGlnaHRDYXNlU2Vuc2l0aXZlXT1cInRydWVcIiBbdmlzaWJsZV09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPC9keG8tc2VhcmNoLXBhbmVsPlxuICAgICAgICAgICAgICAgIDxkeG8tZXhwb3J0IFtlbmFibGVkXT1cInRydWVcIiBmaWxlTmFtZT1cImFsZXJ0X2RhdGFfYnlfc3RhdHVzXCI+PC9keG8tZXhwb3J0PlxuICAgICAgICAgICAgICAgIDxkeG8tcGFnaW5nIFtwYWdlU2l6ZV09XCIxMFwiPjwvZHhvLXBhZ2luZz5cbiAgICAgICAgICAgICAgICA8ZHhvLXBhZ2VyIFtzaG93SW5mb109XCJ0cnVlXCIgW3Nob3dQYWdlU2l6ZVNlbGVjdG9yXT1cInRydWVcIiBbYWxsb3dlZFBhZ2VTaXplc109XCJbMTAsMjAsNTAsMTAwXVwiPlxuICAgICAgICAgICAgICAgIDwvZHhvLXBhZ2VyPlxuICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImNvbmZpZ05hbWVcIj48L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZGF0YXNvdXJjZVwiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJkYkNvbmZpZ1wiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBkYXRhRmllbGQ9XCJhbmFseXplclR5cGVcIj48L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiZmlsZU5hbWVBdHRyaWJ1dGVOYW1lXCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGRhdGFGaWVsZD1cImRhdGFTZWxlY3Rpb25UeXBlXCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGNhcHRpb249XCJTdGF0dXNcIiBkYXRhRmllbGQ9XCJhY3RpdmVcIiBjZWxsVGVtcGxhdGU9XCJjZWxsVGVtcGxhdGUxXCI+PC9keGktY29sdW1uPlxuXG4gICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gZGF0YUZpZWxkPVwiYWN0aW9uXCIgY2VsbFRlbXBsYXRlPVwiY2VsbFRlbXBsYXRlXCIgW2ZpeGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBmaXhlZFBvc2l0aW9uPVwicmlnaHRcIj48L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBkYXRhIG9mICdjZWxsVGVtcGxhdGUnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuUHJpbWFyeUJsdWV9fVwiIChjbGljayk9XCJlZGl0RXhjZXB0aW9uQ29uZmlnQ29uZmlnKGRhdGEuZGF0YSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5QcmltYXJ5Qmx1ZX19XCIgKm5nSWY9XCJkYXRhLmRhdGEuYWN0aXZlID09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlZGl0RXhjZXB0aW9uQ29uZmlnQ29uZmlnKGRhdGEuZGF0YSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+IC0tPlxuXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2Rhbmdlcl9tZH19XCIgKGNsaWNrKT1cImRlbGV0ZUV4Y2VwdGlvbkNvbmZpZyhkYXRhLmRhdGEpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBEZWxldGVcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBkYXRhIG9mICdjZWxsVGVtcGxhdGUxJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cImRhdGEuZGF0YS5hY3RpdmUgPT0gdHJ1ZVwiIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0blN1Y2Nlc3NHcmVlbn19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZUFjdGl2YXRlZEV4Y2VwdGlvbihkYXRhLmRhdGEpXCI+QWN0aXZlPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJkYXRhLmRhdGEuYWN0aXZlID09IGZhbHNlXCIgY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuV2FybmluZ1llbGxvd319XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZWRFeGNlcHRpb24oZGF0YS5kYXRhKVwiPkluYWN0aXZlPC9idXR0b24+XG5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L2R4LWRhdGEtZ3JpZD5cblxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFeGNlcHRpb25Db25maWdDcmVhdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibS0yXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtLTMgcC00IGJnLXdoaXRlIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZC1sZyBzaGFkb3ctbWQgZGFyazpiZy1ncmF5LTgwMCBkYXJrOmJvcmRlci1ncmF5LTcwMFwiPlxuICAgICAgICAgICAgICAgIDxoNlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTIgdGV4dC1sZyB0cmFja2luZy10aWdodCB0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSBib3JkZXItYiBwYi0zIGZsZXggaXRlbXMtY2VudGVyIGNhcGl0YWxpemVcIj5cbiAgICAgICAgICAgICAgICAgICAge3tjb250ZW50VHlwZX19IEV4Y2VwdGlvbiBDb25maWd1cmF0aW9uc1xuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bk90aGVyc1B1cnBsZX19XCIgKGNsaWNrKT1cImdldENhbmNsZUV4Y2VwdGlvbkNyZWF0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9oNj5cblxuICAgICAgICAgICAgICAgIDwhLS0gIChvblZhbHVlQ2hhbmdlZCk9XCJ2YWx1ZUNoYW5nZUZvckRhdGFiYXNlTmFtZSgkZXZlbnQpXCIgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBib3JkZXItclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgdy0xLzNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj5Db25maWcgTmFtZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiZXhjZXB0aW9uTWFpbk9iamVjdC5jb25maWdOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiY29udGVudFR5cGUgPT0gJ3ZpZXcnXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yIHctMS8zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+RGF0YXNvdXJjZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXNlbGVjdC1ib3ggW2l0ZW1zXT1cImRhdGFzb3VyY2VsaXN0XCIgWyhuZ01vZGVsKV09XCJleGNlcHRpb25NYWluT2JqZWN0LmRhdGFzb3VyY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJjb250ZW50VHlwZSA9PSAndmlldydcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiB3LTEvM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbWQgbWItMlwiPkFuYWx5emVyIFR5cGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtpdGVtc109XCJhbmFseXplcl90eXBlXCIgdmFsdWVFeHByPVwia2V5XCIgZGlzcGxheUV4cHI9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImV4Y2VwdGlvbk1haW5PYmplY3QuYW5hbHl6ZXJUeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiY29udGVudFR5cGUgPT0gJ3ZpZXcnXCI+PC9keC1zZWxlY3QtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGJvcmRlci1iIG15LTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIG1iLTIgdy0xLzJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+IERiIENvbmZpZzwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtpdGVtc109XCJbJ21vbmdvJywnaW1wYWxhJywncG9zdGdyZXMnLCdteXNxbCcsJ2JpZ3F1ZXJ5J11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwiZ2V0RGF0YUNvbmZpZygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJleGNlcHRpb25NYWluT2JqZWN0LmRiQ29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImNvbnRlbnRUeXBlID09ICd2aWV3J1wiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgbWItMiB3LTEvMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj4gVGFibGUgTmFtZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cImV4Y2VwdGlvbk1haW5PYmplY3QudGFibGVOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImNvbnRlbnRUeXBlID09ICd2aWV3J1wiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweC0yIG1iLTIgdy0xLzJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZCBtYi0yXCI+IERhdGEgU2VsZWN0aW9uIFR5cGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwiWydzZWxlY3QnLCdkaXN0aW5jdCddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJleGNlcHRpb25NYWluT2JqZWN0LmRhdGFTZWxlY3Rpb25UeXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImNvbnRlbnRUeXBlID09ICd2aWV3J1wiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgbWItMiB3LTEvMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW1kIG1iLTJcIj4gRmlsZSBDb2x1bW4gTmFtZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cImV4Y2VwdGlvbk1haW5PYmplY3QuZmlsZU5hbWVBdHRyaWJ1dGVOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImNvbnRlbnRUeXBlID09ICd2aWV3J1wiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgYm9yZGVyLWIgbXktNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtYXV0byBtaW4tdy0wIG15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTIgYm9yZGVyLWIgYm9yZGVyLWJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IHB4LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzIgcHgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC0yeGwgZm9udC1leHRyYWJvbGRcIj5GaWx0ZXIgTGlzdDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEvMiBweC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X21kfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnZXRQcm9jZXNzRm9yQ29uZmlnKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgRmlsdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBteS0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbXMgb2YgZXhjZXB0aW9uTWFpbk9iamVjdC5maWx0ZXJMaXN0O2xldCBpID0gaW5kZXg7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBweC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+Q29sdW1uIE5hbWU8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJpdGVtcy5jb2x1bW5OYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiY29udGVudFR5cGUgPT0gJ3ZpZXcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIHB4LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR4LWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTFcIj5PcGVyYXRvcjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC1zZWxlY3QtYm94IFtpdGVtc109XCJvcGVyYXRvcl9saXN0XCIgdmFsdWVFeHByPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlFeHByPVwibmFtZVwiIFsobmdNb2RlbCldPVwiaXRlbXMub3BlcmF0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBweC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+RGF0YXR5cGU8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJbJ2RhdGUnLCdzdHJpbmcnLCd0aW1lc3RhbXAnLCdpbnQnLCAnZG91YmxlJywgJ2Jvb2xlYW4nXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtcy5kYXRhVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cImNvbnRlbnRUeXBlID09ICd2aWV3J1wiPjwvZHgtc2VsZWN0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIHB4LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR4LWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTFcIj5TZWxlY3QgRnVuY3Rpb248L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtc2VsZWN0LWJveCBbaXRlbXNdPVwiZnVuY3Rpb25OYW1lQ29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW1zLndpbmRvd0Z1bmN0aW9uTmFtZVwiIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJjb250ZW50VHlwZSA9PSAndmlldydcIj48L2R4LXNlbGVjdC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgcHgtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbXMuZGF0YVR5cGUgPT0gJ2RhdGUnIHx8IGl0ZW1zLmRhdGFUeXBlID09ICd0aW1lc3RhbXAnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+RGF0ZSBGb3JtYXQ8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJpdGVtcy5kYXRlRm9ybWF0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiY29udGVudFR5cGUgPT0gJ3ZpZXcnXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBweC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkeC1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+RGVmYXVsdCBWYWx1ZTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cIml0ZW1zLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiY29udGVudFR5cGUgPT0gJ3ZpZXcnXCI+PC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBweC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpICE9PSAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2xpZ2h0X3NtfX0gY3Vyc29yLXBvaW50ZXIgbXgtMSBtdC02XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmVJdGVtRm9yQ29sdW1ucyhpLCAndXAnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LXVwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImkgIT09IGV4Y2VwdGlvbk1haW5PYmplY3QuZmlsdGVyTGlzdC5sZW5ndGggLSAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2xpZ2h0X3NtfX0gY3Vyc29yLXBvaW50ZXIgbXgtMSBtdC02XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmVJdGVtRm9yQ29sdW1ucyhpLCAnZG93bicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctZG93blwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX2Rhbmdlcl9zbX19IGN1cnNvci1wb2ludGVyIG14LTEgbXQtNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVDb2x1bWUoaSlcIj48aSBjbGFzcz1cImZhIGZhLXRyYXNoLW9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBib3JkZXItYiBteS00XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC1hdXRvIG1pbi13LTAgbXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktMiBib3JkZXItYiBib3JkZXItYlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgcHgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEvMiBweC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LTJ4bCBmb250LWV4dHJhYm9sZFwiPlBhdHRlcm4gTGlzdDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEvMiBweC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9wcmltYXJ5X21kfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnZXRBZGRQYXR0ZXJuc0NvbmZpZygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIFBhdHRlcm5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB0LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW1zIG9mIGV4Y2VwdGlvbk1haW5PYmplY3QucGF0dGVybkxpc3Q7bGV0IGkgPSBpbmRleDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgbXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzIgcHgtMiBteS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTFcIj5SZWdleDwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJpdGVtcy5yZWdleFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJjb250ZW50VHlwZSA9PSAndmlldydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzIgcHgtMiBteS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTFcIj5GaWxlIEF0dHJpYnV0ZXM8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRhZy1ib3ggW211bHRpbGluZV09XCJ0cnVlXCIgW3Nob3dTZWxlY3Rpb25Db250cm9sc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjY2VwdEN1c3RvbVZhbHVlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DdXN0b21JdGVtQ3JlYXRpbmcpPVwib25DdXN0b21GaWxlQXR0cmlidXRlc0FkZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtcy5maWxlQXR0cmlidXRlc1wiIFtzZWFyY2hFbmFibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4LXRhZy1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMS8zIHB4LTIgbXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR4LWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+U2VxdWVuY2VLZXk8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4LXRleHQtYm94IFsobmdNb2RlbCldPVwiaXRlbXMuc2VxdWVuY2VLZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZE9ubHldPVwiY29udGVudFR5cGUgPT0gJ3ZpZXcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzMgcHgtMiBteS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHgtZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTFcIj5BbmFseXplciBLZXlzPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10YWctYm94IFttdWx0aWxpbmVdPVwidHJ1ZVwiIFtzaG93U2VsZWN0aW9uQ29udHJvbHNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY2NlcHRDdXN0b21WYWx1ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ3VzdG9tSXRlbUNyZWF0aW5nKT1cIm9uQ3VzdG9tQW5hbGl6ZXJLZXlBZGQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbXMuYW5hbHl6ZXJLZXlzXCIgW3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHgtdGFnLWJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMS82IHB4LTIgbXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR4LWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xXCI+U2FtcGxlPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveCBbKG5nTW9kZWwpXT1cIml0ZW1zLnNhbXBsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJjb250ZW50VHlwZSA9PSAndmlldydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzYgcHgtMiBteS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpICE9PSAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9saWdodF9zbX19IGN1cnNvci1wb2ludGVyIG14LTEgbXQtNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibW92ZUl0ZW1Gb3JwYXR0ZXJucyhpLCAndXAnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy11cFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImkgIT09IGV4Y2VwdGlvbk1haW5PYmplY3QuZmlsdGVyTGlzdC5sZW5ndGggLSAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9saWdodF9zbX19IGN1cnNvci1wb2ludGVyIG14LTEgbXQtNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibW92ZUl0ZW1Gb3JwYXR0ZXJucyhpLCAnZG93bicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LWRvd25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9kYW5nZXJfc219fSBjdXJzb3ItcG9pbnRlciBteC0xIG10LTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVBhdHRlcm5zQ29sdW1lKGkpXCI+PGkgY2xhc3M9XCJmYSBmYS10cmFzaC1vXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhsIG1iLTJcIj5EeW5hbWljIEFyZ3VtZW50cyB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3ByaW1hcnlfc219fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkRHluYW1pY0FyZ3VtZW50KGkpXCI+QWRkIEFyZ3VtZW50czwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTVcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXMuZHluYW1pY0FyZ3MgfCBrZXl2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEvMiBwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZFwiPiBBcmd1bWVudCBLZXk8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHgtdGV4dC1ib3ggWyhuZ01vZGVsKV09XCJpdGVtLmtleVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tZFwiPiBBcmd1bWVudCBWYWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeC10ZXh0LWJveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW1zLmR5bmFtaWNBcmdzW2l0ZW0ua2V5XVwiPjwvZHgtdGV4dC1ib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tjb21tb25TZXJ2aWNlLmJ0bl9kYW5nZXJfc219fSBjdXJzb3ItcG9pbnRlciBteC0xIG10LTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlRHluYW1pY0FyZ3VtZW50cyhpdGVtLGl0ZW0ua2V5LGkpXCI+PGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtdHJhc2gtb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBqdXN0aWZ5LWVuZCBtdC01IGJvcmRlci10XCIgKm5nSWY9XCJjb250ZW50VHlwZSAhPT0gJ3ZpZXcnXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInt7Y29tbW9uU2VydmljZS5idG5fc3VjY2Vzc19tZH19IGN1cnNvci1wb2ludGVyIG14LTEgbXktMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZUV4Y2VwdGlvbkNvbmZpZygpXCIgKm5nSWY9XCJjb250ZW50VHlwZSA9PSAnY3JlYXRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlIEV4Y2VwdGlvbiBDb25maWdcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ7e2NvbW1vblNlcnZpY2UuYnRuX3N1Y2Nlc3NfbWR9fSBjdXJzb3ItcG9pbnRlciBteC0xIG15LTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZUV4Y2VwdGlvbkNvbmZpZygpXCIgKm5nSWY9XCJjb250ZW50VHlwZSA9PSAnZWRpdCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZSBFeGNlcHRpb24gQ29uZmlnXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+Il19
|