@sachin9822/reports-lib 0.0.185 → 0.0.186

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.
@@ -180,7 +180,7 @@ export class AccountingReportComponent {
180
180
  }
181
181
  onGridReady(params, id) {
182
182
  this.gridApis[id] = params.api;
183
- this.gridColumnApis[id] = params.columnApi; // ✅ keep per grid
183
+ this.gridColumnApis[id] = params.columnApi;
184
184
  setTimeout(() => this.autoSizeAllColumns(id), 100);
185
185
  }
186
186
  onGridSizeChanged(params, id) {
@@ -360,7 +360,7 @@ export class AccountingReportComponent {
360
360
  currentRow++;
361
361
  });
362
362
  });
363
- // 🔹 Auto-adjust column widths (including Sr No)
363
+ // Auto-adjust column widths (including Sr No)
364
364
  const allHeaders = ['Sr No', ...this.columnDefs.map(c => c.headerName)];
365
365
  allHeaders.forEach((header, i) => {
366
366
  let maxLength = header.length; // start with header length
@@ -388,7 +388,7 @@ export class AccountingReportComponent {
388
388
  const currencyFields = ['amountPaid', 'serviceFee', 'tax', 'principleSendAmount', 'clientSettlementInSCcy'];
389
389
  const headers = ['Sr No', ...this.columnDefs.map(c => c.headerName)];
390
390
  if (!data || data.length === 0) {
391
- return { headers, rows: [] }; // return headers only, empty rows
391
+ return { headers, rows: [] }; // return headers only, empty rows
392
392
  }
393
393
  const rows = data.map((row, i) => {
394
394
  return [
@@ -425,10 +425,10 @@ export class AccountingReportComponent {
425
425
  if (!subGroup.entries?.length)
426
426
  return;
427
427
  rows.push(`Sub Group: ${subGroup.subGroupName}`);
428
- // 🔹 Add "Sr No" at the beginning of headers
428
+ // Add "Sr No" at the beginning of headers
429
429
  rows.push(['"Sr No"', ...this.columnDefs.map(col => `"${col.headerName}"`)].join(','));
430
430
  subGroup.entries.forEach((entry, idx) => {
431
- // 🔹 Add serial number at start of each row
431
+ // Add serial number at start of each row
432
432
  const row = [
433
433
  (idx + 1).toString(),
434
434
  ...this.columnDefs.map(col => {
@@ -475,9 +475,9 @@ export class AccountingReportComponent {
475
475
  }
476
476
  }
477
477
  AccountingReportComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccountingReportComponent, deps: [{ token: i1.ReportService }, { token: i2.ExportService }], target: i0.ɵɵFactoryTarget.Component });
478
- AccountingReportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AccountingReportComponent, selector: "lib-accounting-report", ngImport: i0, template: "<lib-search-filter [ReportName]=\"ReportName\" (searchClicked)=\"getReport($event)\"></lib-search-filter>\r\n\r\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\r\n\r\n<div *ngIf=\"accountingReportModel!=undefined && accountingReportModel.accountingReportByBranchGroups?.length\">\r\n\r\n <lib-metadata [reportName]=\"ReportName\" [showmetaDataOne]=\"true\" [showmetaDataTwo]=\"true\" [metaDataOne]=\"leftData\"\r\n [metaDataTwo]=\"rightData\" (exportEvent)=\"handleExport($event)\" (searchEvent)=\"onSearch($event)\"></lib-metadata>\r\n\r\n <ngb-accordion #acc=\"ngbAccordion\" [closeOthers]=\"false\" [activeIds]=\"'panel-0'\">\r\n <ng-container *ngFor=\"let group of accountingReportModel?.accountingReportByBranchGroups; let i = index\">\r\n <ngb-panel [id]=\"'panel-' + i\">\r\n <ng-template ngbPanelTitle>\r\n <label style=\"font-weight: bold; font-size: 13px; line-height: 1.2; margin: 0; padding: 2px 0;color: #0c63e4;\">\r\n {{ group.branchNameAndCode }}\r\n </label>\r\n </ng-template>\r\n\r\n <ng-template ngbPanelContent>\r\n <!-- Send Transactions -->\r\n <div *ngIf=\"group.sendTransactions.entries.length\">\r\n <h6 class=\"subgroupcolumn\">{{ group.sendTransactions.subGroupName }}</h6>\r\n <div style=\"position: relative;\">\r\n <lib-page-size-selector [totalEntries]=\"group.sendTransactions.entries.length\" [defaultSize]=\"'15'\"\r\n [gridApi]=\"gridApis[i * 2]\">\r\n </lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine compact-grid grid-size\" style=\"width: 100%; height: 375px;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"group.sendTransactions.entries\"\r\n [rowHeight]=\"20\" [headerHeight]=\"24\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\"\r\n (gridReady)=\"onGridReady($event, i * 2)\" (gridSizeChanged)=\"onGridSizeChanged($event, i * 2)\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n\r\n <!-- Receive Transactions -->\r\n <div *ngIf=\"group.receiveTransactions.entries.length\" class=\"mt-3\">\r\n <h6 class=\"subgroupcolumn\">{{ group.receiveTransactions.subGroupName }}</h6>\r\n <div style=\"position: relative;\">\r\n <lib-page-size-selector [totalEntries]=\"group.receiveTransactions.entries.length\" [defaultSize]=\"'15'\"\r\n [gridApi]=\"gridApis[i * 2 + 1]\">\r\n </lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine compact-grid grid-size\" style=\"width: 100%; height: 375px;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"group.receiveTransactions.entries\"\r\n [rowHeight]=\"20\" [headerHeight]=\"24\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\"\r\n (gridReady)=\"onGridReady($event, i * 2 + 1)\" (gridSizeChanged)=\"onGridSizeChanged($event, i * 2)\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ngb-panel>\r\n </ng-container>\r\n </ngb-accordion>\r\n\r\n\r\n</div>\r\n\r\n<div class=\"alert alert-warning mt-3\" *ngIf=\"noDataFound && loadingState!=ComponentLoadingState.Loading\">\r\n No Data found matching your search criteria.\r\n</div>", styles: [".btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px!important;height:32px;min-width:110px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2!important}.cal:focus{box-shadow:none!important}.input-group-button{background:none;border:1px solid #0081c6;background-color:#0081c6;border-radius:0 3px 3px 0;min-width:35px;margin-left:1px;cursor:pointer}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}.meta-td{padding:0!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{display:inline-flex;font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important;width:100%}.search-btn{height:32px!important;height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}.searchBox{margin-right:auto;display:flex}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;overflow-y:auto;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:hidden!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.panel-cls{font-weight:700;font-size:13px;line-height:1.2;margin:0;padding:2px 0;color:#16181e}.transaction-grid ::ng-deep .ag-header{background-color:#f9f9f9;font-weight:600;font-size:10px;color:#000;border-right:1px solid #e0e0e0}:host ::ng-deep .ag-header-cell{padding:2px!important;align-items:center!important;justify-content:center!important;border-right:1px solid #e0e0e0;white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-align:center!important;height:auto!important}::ng-deep .ag-header-cell-label{display:flex!important;justify-content:center!important;align-items:center!important;width:100%;text-align:center!important}::ng-deep .ag-header-cell-text{text-align:center!important;width:100%!important;display:flex!important;justify-content:center!important}.transaction-grid ::ng-deep .ag-row{border-bottom:1px solid #e0e0e0}.transaction-grid ::ng-deep .ag-cell{font-size:9px;white-space:normal!important;word-break:keep-all!important;overflow-wrap:anywhere;line-height:1.4;padding:4px!important;color:#000;font-weight:500;border-right:.5px solid #e0e0e0;align-content:center;user-select:text!important;-webkit-user-select:text!important;-moz-user-select:text!important;-ms-user-select:text!important;cursor:text}::ng-deep .ag-cell-label-container{padding:0!important}.ag-theme-alpine{--ag-header-font-size: 10px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}::ng-deep .ag-paging-panel{height:30px!important}::ng-deep .compact-grid .ag-cell{cursor:default!important;border-right:1px solid #e0e0e0;padding:2px 3px!important;font-size:9px!important;display:flex!important;align-items:center!important}::ng-deep .compact-grid .ag-cell-value{cursor:text!important;font-size:9px!important;padding:0 3px 0 2px!important}::ng-deep .compact-grid .ag-right-aligned-cell{text-align:right!important;justify-content:flex-end!important;text-overflow:ellipsis}.grid-size{width:100%!important;font-weight:500!important;height:375px!important}::ng-deep .ag-cell{-webkit-user-select:text!important;user-select:text!important}.subgroupcolumn{font-family:Open Sans!important;font-size:13px!important;color:#052c65!important;font-weight:700!important}:host ::ng-deep .my-2{margin-bottom:10px!important}\n"], dependencies: [{ kind: "component", type: i3.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "suppressMenuHide", "enableBrowserTooltips", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "maintainColumnOrder", "suppressFieldDotNotation", "deltaColumnMode", "applyColumnDefOrder", "immutableColumns", "suppressSetColumnStateEvents", "suppressColumnStateEvents", "colWidth", "minColWidth", "maxColWidth", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "components", "frameworkComponents", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "stopEditingWhenGridLosesFocus", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "defaultExportParams", "quickFilterText", "cacheQuickFilter", "excludeChildrenWhenTreeDataFiltering", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "chartToolPanelsDef", "loadingCellRenderer", "loadingCellRendererFramework", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererFramework", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentFramework", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentFramework", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDelay", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererFramework", "fullWidthCellRendererParams", "embedFullWidthRows", "deprecatedEmbedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererFramework", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "groupRowsSticky", "groupRowInnerRenderer", "groupRowInnerRendererFramework", "groupMultiAutoColumn", "groupUseEntireRow", "groupSuppressAutoColumn", "rememberGroupStateWhenNewData", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "immutableData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "deltaRowDataMode", "batchUpdateWaitMillis", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "serverSideStoreType", "serverSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSideSortingAlwaysResets", "serverSideFilteringAlwaysResets", "suppressEnterpriseResetOnNewColumns", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellSelection", "suppressCellFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "deltaSort", "treeDataDisplayType", "angularCompileRows", "angularCompileFilters", "functionsPassive", "enableGroupEdit", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "suppressKeyboardEvent", "localeTextFunc", "getLocaleText", "getDocument", "paginationNumberFormatter", "groupRowAggNodes", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "defaultGroupOrderComparator", "processSecondaryColDef", "processSecondaryColGroupDef", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "defaultGroupSortComparator", "getChildCount", "getServerSideGroupLevelParams", "getServerSideStoreParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowNodeId", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSort", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthCell", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "filterOpened", "filterChanged", "filterModified", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "cellKeyPress", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pinnedRowDataChanged", "rowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { 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.PageSizeSelectorComponent, selector: "lib-page-size-selector", inputs: ["pageSizeArray", "defaultSize", "totalEntries", "gridApi"] }, { kind: "component", type: i6.MetadataComponent, selector: "lib-metadata", inputs: ["metaDataOne", "metaDataTwo", "showmetaDataOne", "showmetaDataTwo", "reportName"], outputs: ["searchEvent", "exportEvent"] }, { kind: "component", type: i7.NgbAccordion, selector: "ngb-accordion", inputs: ["animation", "activeIds", "closeOthers", "destroyOnHide", "type"], outputs: ["panelChange", "shown", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i7.NgbPanel, selector: "ngb-panel", inputs: ["disabled", "id", "title", "type", "cardClass"], outputs: ["shown", "hidden"] }, { kind: "directive", type: i7.NgbPanelTitle, selector: "ng-template[ngbPanelTitle]" }, { kind: "directive", type: i7.NgbPanelContent, selector: "ng-template[ngbPanelContent]" }, { kind: "component", type: i8.LoaderComponent, selector: "app-loader" }, { kind: "component", type: i9.SearchFilterComponent, selector: "lib-search-filter", inputs: ["ReportName"], outputs: ["searchClicked"] }] });
478
+ AccountingReportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AccountingReportComponent, selector: "lib-accounting-report", ngImport: i0, template: "<lib-search-filter [ReportName]=\"ReportName\" (searchClicked)=\"getReport($event)\"></lib-search-filter>\r\n\r\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\r\n\r\n<div *ngIf=\"accountingReportModel!=undefined && accountingReportModel.accountingReportByBranchGroups?.length\">\r\n\r\n <lib-metadata [reportName]=\"ReportName\" [showmetaDataOne]=\"true\" [showmetaDataTwo]=\"true\" [metaDataOne]=\"leftData\"\r\n [metaDataTwo]=\"rightData\" (exportEvent)=\"handleExport($event)\" (searchEvent)=\"onSearch($event)\"></lib-metadata>\r\n\r\n <ngb-accordion #acc=\"ngbAccordion\" [closeOthers]=\"false\" [activeIds]=\"'panel-0'\">\r\n <ng-container *ngFor=\"let group of accountingReportModel?.accountingReportByBranchGroups; let i = index\">\r\n <ngb-panel [id]=\"'panel-' + i\">\r\n <ng-template ngbPanelTitle>\r\n <label class=\"panel-cls\">\r\n {{ group.branchNameAndCode }}\r\n </label>\r\n </ng-template>\r\n\r\n <ng-template ngbPanelContent>\r\n <!-- Send Transactions -->\r\n <div *ngIf=\"group.sendTransactions.entries.length\">\r\n <h6 class=\"subgroupcolumn\">{{ group.sendTransactions.subGroupName }}</h6>\r\n <div style=\"position: relative;\">\r\n <lib-page-size-selector [totalEntries]=\"group.sendTransactions.entries.length\" [defaultSize]=\"'15'\"\r\n [gridApi]=\"gridApis[i * 2]\">\r\n </lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine compact-grid grid-size\" style=\"width: 100%; height: 375px;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"group.sendTransactions.entries\"\r\n [rowHeight]=\"20\" [headerHeight]=\"24\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\"\r\n (gridReady)=\"onGridReady($event, i * 2)\" (gridSizeChanged)=\"onGridSizeChanged($event, i * 2)\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n\r\n <!-- Receive Transactions -->\r\n <div *ngIf=\"group.receiveTransactions.entries.length\" class=\"mt-3\">\r\n <h6 class=\"subgroupcolumn\">{{ group.receiveTransactions.subGroupName }}</h6>\r\n <div style=\"position: relative;\">\r\n <lib-page-size-selector [totalEntries]=\"group.receiveTransactions.entries.length\" [defaultSize]=\"'15'\"\r\n [gridApi]=\"gridApis[i * 2 + 1]\">\r\n </lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine compact-grid grid-size\" style=\"width: 100%; height: 375px;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"group.receiveTransactions.entries\"\r\n [rowHeight]=\"20\" [headerHeight]=\"24\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\"\r\n (gridReady)=\"onGridReady($event, i * 2 + 1)\" (gridSizeChanged)=\"onGridSizeChanged($event, i * 2)\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ngb-panel>\r\n </ng-container>\r\n </ngb-accordion>\r\n\r\n\r\n</div>\r\n\r\n<div class=\"alert alert-warning mt-3\" *ngIf=\"noDataFound && loadingState!=ComponentLoadingState.Loading\">\r\n No Data found matching your search criteria.\r\n</div>", styles: [".btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px!important;height:32px;min-width:110px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2!important}.cal:focus{box-shadow:none!important}.input-group-button{background:none;border:1px solid #0081c6;background-color:#0081c6;border-radius:0 3px 3px 0;min-width:35px;margin-left:1px;cursor:pointer}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}.meta-td{padding:0!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{display:inline-flex;font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important;width:100%}.search-btn{height:32px!important;height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}.searchBox{margin-right:auto;display:flex}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;overflow-y:auto;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:hidden!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.panel-cls{font-weight:700;font-size:13px;line-height:1.2;margin:0;padding:2px 0;color:#16181e}.transaction-grid ::ng-deep .ag-header{background-color:#f9f9f9;font-weight:600;font-size:10px;color:#000;border-right:1px solid #e0e0e0}:host ::ng-deep .ag-header-cell{padding:2px!important;align-items:center!important;justify-content:center!important;border-right:1px solid #e0e0e0;white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-align:center!important;height:auto!important}::ng-deep .ag-header-cell-label{display:flex!important;justify-content:center!important;align-items:center!important;width:100%;text-align:center!important}::ng-deep .ag-header-cell-text{text-align:center!important;width:100%!important;display:flex!important;justify-content:center!important}.transaction-grid ::ng-deep .ag-row{border-bottom:1px solid #e0e0e0}.transaction-grid ::ng-deep .ag-cell{font-size:9px;white-space:normal!important;word-break:keep-all!important;overflow-wrap:anywhere;line-height:1.4;padding:4px!important;color:#000;font-weight:500;border-right:.5px solid #e0e0e0;align-content:center;user-select:text!important;-webkit-user-select:text!important;-moz-user-select:text!important;-ms-user-select:text!important;cursor:text}::ng-deep .ag-cell-label-container{padding:0!important}.ag-theme-alpine{--ag-header-font-size: 10px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}::ng-deep .ag-paging-panel{height:30px!important}::ng-deep .compact-grid .ag-cell{cursor:default!important;border-right:1px solid #e0e0e0;padding:2px 3px!important;font-size:9px!important;display:flex!important;align-items:center!important}::ng-deep .compact-grid .ag-cell-value{cursor:text!important;font-size:9px!important;padding:0 3px 0 2px!important}::ng-deep .compact-grid .ag-right-aligned-cell{text-align:right!important;justify-content:flex-end!important;text-overflow:ellipsis}.grid-size{width:100%!important;font-weight:500!important;height:375px!important}::ng-deep .ag-cell{-webkit-user-select:text!important;user-select:text!important}.subgroupcolumn{font-family:Open Sans!important;font-size:13px!important;color:#052c65!important;font-weight:700!important}:host ::ng-deep .my-2{margin-bottom:10px!important}\n"], dependencies: [{ kind: "component", type: i3.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "suppressMenuHide", "enableBrowserTooltips", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "maintainColumnOrder", "suppressFieldDotNotation", "deltaColumnMode", "applyColumnDefOrder", "immutableColumns", "suppressSetColumnStateEvents", "suppressColumnStateEvents", "colWidth", "minColWidth", "maxColWidth", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "components", "frameworkComponents", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "stopEditingWhenGridLosesFocus", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "defaultExportParams", "quickFilterText", "cacheQuickFilter", "excludeChildrenWhenTreeDataFiltering", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "chartToolPanelsDef", "loadingCellRenderer", "loadingCellRendererFramework", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererFramework", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentFramework", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentFramework", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDelay", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererFramework", "fullWidthCellRendererParams", "embedFullWidthRows", "deprecatedEmbedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererFramework", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "groupRowsSticky", "groupRowInnerRenderer", "groupRowInnerRendererFramework", "groupMultiAutoColumn", "groupUseEntireRow", "groupSuppressAutoColumn", "rememberGroupStateWhenNewData", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "immutableData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "deltaRowDataMode", "batchUpdateWaitMillis", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "serverSideStoreType", "serverSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSideSortingAlwaysResets", "serverSideFilteringAlwaysResets", "suppressEnterpriseResetOnNewColumns", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellSelection", "suppressCellFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "deltaSort", "treeDataDisplayType", "angularCompileRows", "angularCompileFilters", "functionsPassive", "enableGroupEdit", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "suppressKeyboardEvent", "localeTextFunc", "getLocaleText", "getDocument", "paginationNumberFormatter", "groupRowAggNodes", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "defaultGroupOrderComparator", "processSecondaryColDef", "processSecondaryColGroupDef", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "defaultGroupSortComparator", "getChildCount", "getServerSideGroupLevelParams", "getServerSideStoreParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowNodeId", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSort", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthCell", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "filterOpened", "filterChanged", "filterModified", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "cellKeyPress", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pinnedRowDataChanged", "rowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { 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.PageSizeSelectorComponent, selector: "lib-page-size-selector", inputs: ["pageSizeArray", "defaultSize", "totalEntries", "gridApi"] }, { kind: "component", type: i6.MetadataComponent, selector: "lib-metadata", inputs: ["metaDataOne", "metaDataTwo", "showmetaDataOne", "showmetaDataTwo", "reportName"], outputs: ["searchEvent", "exportEvent"] }, { kind: "component", type: i7.NgbAccordion, selector: "ngb-accordion", inputs: ["animation", "activeIds", "closeOthers", "destroyOnHide", "type"], outputs: ["panelChange", "shown", "hidden"], exportAs: ["ngbAccordion"] }, { kind: "directive", type: i7.NgbPanel, selector: "ngb-panel", inputs: ["disabled", "id", "title", "type", "cardClass"], outputs: ["shown", "hidden"] }, { kind: "directive", type: i7.NgbPanelTitle, selector: "ng-template[ngbPanelTitle]" }, { kind: "directive", type: i7.NgbPanelContent, selector: "ng-template[ngbPanelContent]" }, { kind: "component", type: i8.LoaderComponent, selector: "app-loader" }, { kind: "component", type: i9.SearchFilterComponent, selector: "lib-search-filter", inputs: ["ReportName"], outputs: ["searchClicked"] }] });
479
479
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AccountingReportComponent, decorators: [{
480
480
  type: Component,
481
- args: [{ selector: 'lib-accounting-report', template: "<lib-search-filter [ReportName]=\"ReportName\" (searchClicked)=\"getReport($event)\"></lib-search-filter>\r\n\r\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\r\n\r\n<div *ngIf=\"accountingReportModel!=undefined && accountingReportModel.accountingReportByBranchGroups?.length\">\r\n\r\n <lib-metadata [reportName]=\"ReportName\" [showmetaDataOne]=\"true\" [showmetaDataTwo]=\"true\" [metaDataOne]=\"leftData\"\r\n [metaDataTwo]=\"rightData\" (exportEvent)=\"handleExport($event)\" (searchEvent)=\"onSearch($event)\"></lib-metadata>\r\n\r\n <ngb-accordion #acc=\"ngbAccordion\" [closeOthers]=\"false\" [activeIds]=\"'panel-0'\">\r\n <ng-container *ngFor=\"let group of accountingReportModel?.accountingReportByBranchGroups; let i = index\">\r\n <ngb-panel [id]=\"'panel-' + i\">\r\n <ng-template ngbPanelTitle>\r\n <label style=\"font-weight: bold; font-size: 13px; line-height: 1.2; margin: 0; padding: 2px 0;color: #0c63e4;\">\r\n {{ group.branchNameAndCode }}\r\n </label>\r\n </ng-template>\r\n\r\n <ng-template ngbPanelContent>\r\n <!-- Send Transactions -->\r\n <div *ngIf=\"group.sendTransactions.entries.length\">\r\n <h6 class=\"subgroupcolumn\">{{ group.sendTransactions.subGroupName }}</h6>\r\n <div style=\"position: relative;\">\r\n <lib-page-size-selector [totalEntries]=\"group.sendTransactions.entries.length\" [defaultSize]=\"'15'\"\r\n [gridApi]=\"gridApis[i * 2]\">\r\n </lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine compact-grid grid-size\" style=\"width: 100%; height: 375px;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"group.sendTransactions.entries\"\r\n [rowHeight]=\"20\" [headerHeight]=\"24\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\"\r\n (gridReady)=\"onGridReady($event, i * 2)\" (gridSizeChanged)=\"onGridSizeChanged($event, i * 2)\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n\r\n <!-- Receive Transactions -->\r\n <div *ngIf=\"group.receiveTransactions.entries.length\" class=\"mt-3\">\r\n <h6 class=\"subgroupcolumn\">{{ group.receiveTransactions.subGroupName }}</h6>\r\n <div style=\"position: relative;\">\r\n <lib-page-size-selector [totalEntries]=\"group.receiveTransactions.entries.length\" [defaultSize]=\"'15'\"\r\n [gridApi]=\"gridApis[i * 2 + 1]\">\r\n </lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine compact-grid grid-size\" style=\"width: 100%; height: 375px;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"group.receiveTransactions.entries\"\r\n [rowHeight]=\"20\" [headerHeight]=\"24\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\"\r\n (gridReady)=\"onGridReady($event, i * 2 + 1)\" (gridSizeChanged)=\"onGridSizeChanged($event, i * 2)\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ngb-panel>\r\n </ng-container>\r\n </ngb-accordion>\r\n\r\n\r\n</div>\r\n\r\n<div class=\"alert alert-warning mt-3\" *ngIf=\"noDataFound && loadingState!=ComponentLoadingState.Loading\">\r\n No Data found matching your search criteria.\r\n</div>", styles: [".btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px!important;height:32px;min-width:110px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2!important}.cal:focus{box-shadow:none!important}.input-group-button{background:none;border:1px solid #0081c6;background-color:#0081c6;border-radius:0 3px 3px 0;min-width:35px;margin-left:1px;cursor:pointer}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}.meta-td{padding:0!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{display:inline-flex;font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important;width:100%}.search-btn{height:32px!important;height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}.searchBox{margin-right:auto;display:flex}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;overflow-y:auto;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:hidden!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.panel-cls{font-weight:700;font-size:13px;line-height:1.2;margin:0;padding:2px 0;color:#16181e}.transaction-grid ::ng-deep .ag-header{background-color:#f9f9f9;font-weight:600;font-size:10px;color:#000;border-right:1px solid #e0e0e0}:host ::ng-deep .ag-header-cell{padding:2px!important;align-items:center!important;justify-content:center!important;border-right:1px solid #e0e0e0;white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-align:center!important;height:auto!important}::ng-deep .ag-header-cell-label{display:flex!important;justify-content:center!important;align-items:center!important;width:100%;text-align:center!important}::ng-deep .ag-header-cell-text{text-align:center!important;width:100%!important;display:flex!important;justify-content:center!important}.transaction-grid ::ng-deep .ag-row{border-bottom:1px solid #e0e0e0}.transaction-grid ::ng-deep .ag-cell{font-size:9px;white-space:normal!important;word-break:keep-all!important;overflow-wrap:anywhere;line-height:1.4;padding:4px!important;color:#000;font-weight:500;border-right:.5px solid #e0e0e0;align-content:center;user-select:text!important;-webkit-user-select:text!important;-moz-user-select:text!important;-ms-user-select:text!important;cursor:text}::ng-deep .ag-cell-label-container{padding:0!important}.ag-theme-alpine{--ag-header-font-size: 10px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}::ng-deep .ag-paging-panel{height:30px!important}::ng-deep .compact-grid .ag-cell{cursor:default!important;border-right:1px solid #e0e0e0;padding:2px 3px!important;font-size:9px!important;display:flex!important;align-items:center!important}::ng-deep .compact-grid .ag-cell-value{cursor:text!important;font-size:9px!important;padding:0 3px 0 2px!important}::ng-deep .compact-grid .ag-right-aligned-cell{text-align:right!important;justify-content:flex-end!important;text-overflow:ellipsis}.grid-size{width:100%!important;font-weight:500!important;height:375px!important}::ng-deep .ag-cell{-webkit-user-select:text!important;user-select:text!important}.subgroupcolumn{font-family:Open Sans!important;font-size:13px!important;color:#052c65!important;font-weight:700!important}:host ::ng-deep .my-2{margin-bottom:10px!important}\n"] }]
481
+ args: [{ selector: 'lib-accounting-report', template: "<lib-search-filter [ReportName]=\"ReportName\" (searchClicked)=\"getReport($event)\"></lib-search-filter>\r\n\r\n<app-loader class=\"\" *ngIf=\"loadingState == ComponentLoadingState.Loading\"></app-loader>\r\n\r\n<div *ngIf=\"accountingReportModel!=undefined && accountingReportModel.accountingReportByBranchGroups?.length\">\r\n\r\n <lib-metadata [reportName]=\"ReportName\" [showmetaDataOne]=\"true\" [showmetaDataTwo]=\"true\" [metaDataOne]=\"leftData\"\r\n [metaDataTwo]=\"rightData\" (exportEvent)=\"handleExport($event)\" (searchEvent)=\"onSearch($event)\"></lib-metadata>\r\n\r\n <ngb-accordion #acc=\"ngbAccordion\" [closeOthers]=\"false\" [activeIds]=\"'panel-0'\">\r\n <ng-container *ngFor=\"let group of accountingReportModel?.accountingReportByBranchGroups; let i = index\">\r\n <ngb-panel [id]=\"'panel-' + i\">\r\n <ng-template ngbPanelTitle>\r\n <label class=\"panel-cls\">\r\n {{ group.branchNameAndCode }}\r\n </label>\r\n </ng-template>\r\n\r\n <ng-template ngbPanelContent>\r\n <!-- Send Transactions -->\r\n <div *ngIf=\"group.sendTransactions.entries.length\">\r\n <h6 class=\"subgroupcolumn\">{{ group.sendTransactions.subGroupName }}</h6>\r\n <div style=\"position: relative;\">\r\n <lib-page-size-selector [totalEntries]=\"group.sendTransactions.entries.length\" [defaultSize]=\"'15'\"\r\n [gridApi]=\"gridApis[i * 2]\">\r\n </lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine compact-grid grid-size\" style=\"width: 100%; height: 375px;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"group.sendTransactions.entries\"\r\n [rowHeight]=\"20\" [headerHeight]=\"24\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\"\r\n (gridReady)=\"onGridReady($event, i * 2)\" (gridSizeChanged)=\"onGridSizeChanged($event, i * 2)\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n\r\n <!-- Receive Transactions -->\r\n <div *ngIf=\"group.receiveTransactions.entries.length\" class=\"mt-3\">\r\n <h6 class=\"subgroupcolumn\">{{ group.receiveTransactions.subGroupName }}</h6>\r\n <div style=\"position: relative;\">\r\n <lib-page-size-selector [totalEntries]=\"group.receiveTransactions.entries.length\" [defaultSize]=\"'15'\"\r\n [gridApi]=\"gridApis[i * 2 + 1]\">\r\n </lib-page-size-selector>\r\n\r\n <ag-grid-angular class=\"ag-theme-alpine compact-grid grid-size\" style=\"width: 100%; height: 375px;\"\r\n [columnDefs]=\"columnDefs\" [defaultColDef]=\"defaultColDef\" [rowData]=\"group.receiveTransactions.entries\"\r\n [rowHeight]=\"20\" [headerHeight]=\"24\" [pagination]=\"true\" [paginationPageSize]=\"paginationArray[i]\"\r\n (gridReady)=\"onGridReady($event, i * 2 + 1)\" (gridSizeChanged)=\"onGridSizeChanged($event, i * 2)\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ngb-panel>\r\n </ng-container>\r\n </ngb-accordion>\r\n\r\n\r\n</div>\r\n\r\n<div class=\"alert alert-warning mt-3\" *ngIf=\"noDataFound && loadingState!=ComponentLoadingState.Loading\">\r\n No Data found matching your search criteria.\r\n</div>", styles: [".btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px!important;height:32px;min-width:110px;margin:0 0 0 20px!important;padding:4px 15px!important}.tooltip-block{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid #ccc!important}.dpicker{border:1px solid #ccc!important;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2!important}.cal:focus{box-shadow:none!important}.input-group-button{background:none;border:1px solid #0081c6;background-color:#0081c6;border-radius:0 3px 3px 0;min-width:35px;margin-left:1px;cursor:pointer}.labl{font-size:11.2px;font-weight:700!important}.info{font-size:12px!important;font-weight:400;padding-left:.5rem}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}.meta-td{padding:0!important}.title{text-align:center;font-size:18px;font-weight:700!important}.export-options{display:inline-flex;font-size:.75rem;height:2rem!important;width:5rem!important;margin-right:-1;margin-left:.4rem}.opt-cls{display:block;height:100%;width:5rem;border:1px solid #ccc!important;border-radius:4px!important;margin-right:1rem!important;outline:none!important}.opt-cls:focus{box-shadow:0 0 5px 3px #1877f2}.export-selector{height:2rem!important;width:100%}.search-btn{height:32px!important;height:32px;width:36px;background-color:#8091a5;border:none;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center}.search-btn:hover{background-color:#8091a5}.search-icon{height:16px;width:16px;object-fit:contain}.search-input{outline:none!important;border:1px solid #ccc!important;width:190px;height:32px!important;font-size:.75rem;padding:.25rem .5rem;border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0!important;border-bottom-right-radius:0!important;text-transform:uppercase}.search-input:focus{box-shadow:0 0 5px 3px #1877f2!important}.searchBox{margin-right:auto;display:flex}table{width:100%;border-collapse:separate;margin-bottom:0!important;table-layout:fixed!important}td{padding:0 1rem 6px 0!important;border-right:0 solid #ffffff!important;background-color:#fff!important}.row-cls{height:2.5rem!important}.inputbox{padding-left:1rem;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Noto Sans,Liberation Sans,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\"}::ng-deep .ng-select.ng-select-single .ng-select-container{height:32px I!important}::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;overflow-y:auto;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container{max-height:32px!important;overflow-x:auto!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-multiple .ng-select-container .ng-value-container .ng-value{max-width:200px!important;overflow:hidden!important;text-overflow:hidden!important;white-space:nowrap!important}::ng-deep .ng-select .ng-select-container{cursor:default;display:flex;outline:none;overflow:hidden;position:relative;width:100%}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{box-sizing:border-box;cursor:pointer;display:block;white-space:nowrap;overflow-x:scroll!important;text-overflow:clip!important}::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option::-webkit-scrollbar{display:none!important;width:0!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container,::ng-deep .ng-select.ng-select-single .ng-select-container,::ng-deep .ng-select.ng-select-multiple .ng-select-container{min-height:32px!important;height:32px!important;font-size:12px!important}.panel-cls{font-weight:700;font-size:13px;line-height:1.2;margin:0;padding:2px 0;color:#16181e}.transaction-grid ::ng-deep .ag-header{background-color:#f9f9f9;font-weight:600;font-size:10px;color:#000;border-right:1px solid #e0e0e0}:host ::ng-deep .ag-header-cell{padding:2px!important;align-items:center!important;justify-content:center!important;border-right:1px solid #e0e0e0;white-space:normal!important;word-break:normal!important;overflow-wrap:break-word!important;text-align:center!important;height:auto!important}::ng-deep .ag-header-cell-label{display:flex!important;justify-content:center!important;align-items:center!important;width:100%;text-align:center!important}::ng-deep .ag-header-cell-text{text-align:center!important;width:100%!important;display:flex!important;justify-content:center!important}.transaction-grid ::ng-deep .ag-row{border-bottom:1px solid #e0e0e0}.transaction-grid ::ng-deep .ag-cell{font-size:9px;white-space:normal!important;word-break:keep-all!important;overflow-wrap:anywhere;line-height:1.4;padding:4px!important;color:#000;font-weight:500;border-right:.5px solid #e0e0e0;align-content:center;user-select:text!important;-webkit-user-select:text!important;-moz-user-select:text!important;-ms-user-select:text!important;cursor:text}::ng-deep .ag-cell-label-container{padding:0!important}.ag-theme-alpine{--ag-header-font-size: 10px;--ag-font-size: 10px;--ag-header-background-color: #fdfdfd;--ag-header-foreground-color: rgb(0, 0, 0)}::ng-deep .ag-paging-panel{height:30px!important}::ng-deep .compact-grid .ag-cell{cursor:default!important;border-right:1px solid #e0e0e0;padding:2px 3px!important;font-size:9px!important;display:flex!important;align-items:center!important}::ng-deep .compact-grid .ag-cell-value{cursor:text!important;font-size:9px!important;padding:0 3px 0 2px!important}::ng-deep .compact-grid .ag-right-aligned-cell{text-align:right!important;justify-content:flex-end!important;text-overflow:ellipsis}.grid-size{width:100%!important;font-weight:500!important;height:375px!important}::ng-deep .ag-cell{-webkit-user-select:text!important;user-select:text!important}.subgroupcolumn{font-family:Open Sans!important;font-size:13px!important;color:#052c65!important;font-weight:700!important}:host ::ng-deep .my-2{margin-bottom:10px!important}\n"] }]
482
482
  }], ctorParameters: function () { return [{ type: i1.ReportService }, { type: i2.ExportService }]; } });
483
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudGluZy1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwb3J0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2FjY291bnRpbmctcmVwb3J0L2FjY291bnRpbmctcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9hY2NvdW50aW5nLXJlcG9ydC9hY2NvdW50aW5nLXJlcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQUtyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFL0UsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8saUJBQWlCLENBQUM7QUFDekIsT0FBTyxLQUFLLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7Ozs7O0FBMEJ4QyxNQUFNLE9BQU8seUJBQXlCO0lBd0VwQyxZQUFvQixhQUE0QixFQUFVLGFBQTRCO1FBQWxFLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUF0RXRGLGVBQVUsR0FBVyxZQUFZLENBQUM7UUFNbEMsMEJBQXFCLEdBQUcsc0JBQXNCLENBQUM7UUFDL0MsaUJBQVksR0FBMkIsc0JBQXNCLENBQUMsUUFBUSxDQUFDO1FBQ3ZFLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBSzdCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUViLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFF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S0FBSztZQUMzQyxlQUFlLEVBQUUsS0FBSyxDQUFDLGNBQWMsSUFBSSxLQUFLO1lBQzlDLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSztZQUNuRCxpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUNwRCxjQUFjLEVBQUUsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLO1lBQ3ZDLGVBQWUsRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUs7WUFDdkMsVUFBVSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSztZQUNqQyxXQUFXLEVBQUUsS0FBSyxDQUFDLCtDQUErQztTQUNuRSxDQUFDO1FBRUYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7O3NIQXppQlUseUJBQXlCOzBHQUF6Qix5QkFBeUIsNkRDckN0Qyx5OUdBNERNOzJGRHZCTyx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0UsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjY291bnRpbmdSZXBvcnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9hY2NvdW50aW5nLXJlcG9ydC9hY2NvdW50aW5nLXJlcG9ydC1tb2RlbCc7XHJcbmltcG9ydCB7IENvbERlZiwgQ29sdW1uQXBpLCBHcmlkQXBpLCBHcmlkUmVhZHlFdmVudCB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcclxuaW1wb3J0IHsgUmVwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9leHBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnRMb2FkaW5nU3RhdGVzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbXBvbmVudC1sb2FkaW5nLXN0YXRlcyc7XHJcbmltcG9ydCB7IEFjY291bnRpbmdSZXBvcnRCcmFuY2hHcm91cCB9IGZyb20gJy4uLy4uL21vZGVscy9hY2NvdW50aW5nLXJlcG9ydC9hY2NvdW50aW5nLXJlcG9ydC1icmFuY2gtZ3JvdXAnO1xyXG5pbXBvcnQganNQREYgZnJvbSAnanNwZGYnO1xyXG5pbXBvcnQgJ2pzcGRmLWF1dG90YWJsZSc7XHJcbmltcG9ydCAqIGFzIEV4Y2VsSlMgZnJvbSAnZXhjZWxqcyc7XHJcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcclxuXHJcbmRlY2xhcmUgbW9kdWxlICdqc3BkZicge1xyXG4gIGludGVyZmFjZSBqc1BERiB7XHJcbiAgICBhdXRvVGFibGU6IChvcHRpb25zOiBhbnkpID0+IGpzUERGO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBY2NvdW50aW5nUmVwb3J0UmVxdWVzdCB7XHJcbiAgc3RhcnREYXRlOiBzdHJpbmc7XHJcbiAgZW5kRGF0ZTogc3RyaW5nO1xyXG4gIHNlbmRDb3VudHJ5Q29kZTogc3RyaW5nO1xyXG4gIHJlY3ZDb3VudHJ5Q29kZTogc3RyaW5nO1xyXG4gIGJ1c2luZXNzUGFydG5lckNvcnJlbGF0aW9uSUQ6IHN0cmluZztcclxuICB0cmFuc2FjdGlvblN0YXR1czogc3RyaW5nO1xyXG4gIHBheW91dEN1cnJlbmN5OiBzdHJpbmc7XHJcbiAgdHJhbnNhY3Rpb25UeXBlOiBzdHJpbmc7XHJcbiAgYnJhbmNoQ29kZTogc3RyaW5nO1xyXG4gIGNvbXBhbnlDb2RlOiBzdHJpbmc7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWFjY291bnRpbmctcmVwb3J0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWNjb3VudGluZy1yZXBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FjY291bnRpbmctcmVwb3J0LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY2NvdW50aW5nUmVwb3J0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgUmVwb3J0TmFtZTogc3RyaW5nID0gXCJBY2NvdW50aW5nXCI7XHJcbiAgcmVwb3J0VXNlcjogYW55O1xyXG4gIHJlcG9ydFRpbWU6IGFueTtcclxuICByZXBvcnRQZXJpb2Q6IGFueTtcclxuICBicmFuY2hOYW1lQW5kQ29kZTogYW55O1xyXG4gIHN1Ykdyb3VwQ29sdW1uOiBhbnk7XHJcbiAgQ29tcG9uZW50TG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcztcclxuICBsb2FkaW5nU3RhdGU6IENvbXBvbmVudExvYWRpbmdTdGF0ZXMgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkNvbXBsZXRlO1xyXG4gIG5vRGF0YUZvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGxlZnREYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIHJpZ2h0RGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxuXHJcbiAgc2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcm93RGF0YSA9IFtdO1xyXG4gIGFjY291bnRpbmdSZXBvcnRNb2RlbDogQWNjb3VudGluZ1JlcG9ydE1vZGVsO1xyXG4gIHBhZ2VTaXplOiBudW1iZXIgPSAxNTtcclxuXHJcbiAgc2VsZWN0ZWRFeHBvcnRPcHRpb246IHN0cmluZyA9ICdleGNlbCc7XHJcbiAgZXhwb3J0Rm9ybWF0cyA9IFt7IGZvcm1hdE5hbWU6IFwiRXhjZWxcIiwgY29kZTogJ2V4Y2VsJyB9LCB7IGZvcm1hdE5hbWU6IFwiUERGXCIsIGNvZGU6ICdwZGYnIH0sIHsgZm9ybWF0TmFtZTogXCJDU1ZcIiwgY29kZTogJ2NzdicgfV1cclxuXHJcbiAgZGVmYXVsdENvbERlZjogQ29sRGVmID0ge1xyXG4gICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgc29ydGFibGU6IGZhbHNlLFxyXG4gICAgbWluV2lkdGg6IDQwLFxyXG4gICAgc3VwcHJlc3NTaXplVG9GaXQ6IGZhbHNlLFxyXG4gICAgY2VsbFN0eWxlOiB7IHVzZXJTZWxlY3Q6ICd0ZXh0JywgJ2xpbmUtaGVpZ2h0JzogJzEuMicsICd3aGl0ZS1zcGFjZSc6ICdub3JtYWwnLCAnd29yZC1icmVhayc6ICdub3JtYWwnLCAnb3ZlcmZsb3ctd3JhcCc6ICdicmVhay13b3JkJyB9LFxyXG5cclxuICAgIC8vICBIZWFkZXIgd3JhcHBpbmdcclxuICAgIHdyYXBIZWFkZXJUZXh0OiB0cnVlLFxyXG4gICAgYXV0b0hlYWRlckhlaWdodDogdHJ1ZSxcclxuXHJcbiAgICAvLyAgQ2VsbCB3cmFwcGluZ1xyXG4gICAgd3JhcFRleHQ6IHRydWUsXHJcbiAgICBhdXRvSGVpZ2h0OiB0cnVlXHJcbiAgfTtcclxuXHJcbiAgY29sdW1uRGVmczogQ29sRGVmW10gPSBbXHJcbiAgICB7IGhlYWRlck5hbWU6ICdCdXNpbmVzc0RhdGUnLCBmaWVsZDogJ2J1c2luZXNzRGF0ZScsIHRvb2x0aXBGaWVsZDogJ2J1c2luZXNzRGF0ZScgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1R4bkRhdGUmVGltZScsIGZpZWxkOiAndHJhbnNhY3Rpb25EYXRlQW5kVGltZScsIHRvb2x0aXBGaWVsZDogJ3RyYW5zYWN0aW9uRGF0ZUFuZFRpbWUnLCBtaW5XaWR0aDogMTEwLCB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnVHJhbnNhY3Rpb24gTnVtYmVyJywgZmllbGQ6ICd0cmFuc2FjdGlvbk51bWJlcicsIHRvb2x0aXBGaWVsZDogJ3RyYW5zYWN0aW9uTnVtYmVyJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2VuZENsaWVudCcsIGZpZWxkOiAnc2VuZENsaWVudCcsIHRvb2x0aXBGaWVsZDogJ3NlbmRDbGllbnQnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdQcmluY2lwbGUgU2VuZENsaWVudCAoSWYgQXBwbGljYWJsZSknLCBmaWVsZDogJ3ByaW5jaXBsZVNlbmRDbGllbnQnLCB0b29sdGlwRmllbGQ6ICdwcmluY2lwbGVTZW5kQ2xpZW50JyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnUmVjZWl2ZUNsaWVudCcsIGZpZWxkOiAncmVjZWl2ZUNsaWVudCcsIHRvb2x0aXBGaWVsZDogJ3JlY2VpdmVDbGllbnQnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdQcmluY2lwbGUgUmVjZWl2ZUNsaWVudCAoSWYgQXBwbGljYWJsZSknLCBmaWVsZDogJ3ByaW5jaXBsZVJlY2VpdmVDbGllbnQnLCB0b29sdGlwRmllbGQ6ICdwcmluY2lwbGVSZWNlaXZlQ2xpZW50JyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnUmVjZWl2ZUNjeScsIGZpZWxkOiAncmVjZWl2ZUN1cnJlbmN5JywgdG9vbHRpcEZpZWxkOiAncmVjZWl2ZUN1cnJlbmN5JyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnQW1vdW50UGFpZCcsIGZpZWxkOiAnYW1vdW50UGFpZCcsIHRvb2x0aXBGaWVsZDogJ2Ftb3VudFBhaWQnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdTZW5kQ2N5JywgZmllbGQ6ICdzZW5kQ3VycmVuY3knLCB0b29sdGlwRmllbGQ6ICdzZW5kQ3VycmVuY3knLCB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2VydmljZUZlZScsIGZpZWxkOiAnc2VydmljZUZlZScsIHRvb2x0aXBGaWVsZDogJ3NlcnZpY2VGZWUnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdUYXgnLCBmaWVsZDogJ3RheCcsIHRvb2x0aXBGaWVsZDogJ3RheCcsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1ByaW5jaXBsZVNlbmQgQW1vdW50JywgZmllbGQ6ICdwcmluY2lwbGVTZW5kQW1vdW50JywgdG9vbHRpcEZpZWxkOiAncHJpbmNpcGxlU2VuZEFtb3VudCcsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1RyYW5zYWN0aW9uIFN0YXR1cycsIGZpZWxkOiAndHJhbnNhY3Rpb25TdGF0dXMnLCB0b29sdGlwRmllbGQ6ICd0cmFuc2FjdGlvblN0YXR1cycgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1NldHRsZW1lbnRDY3knLCBmaWVsZDogJ3NldHRsZW1lbnRDdXJyZW5jeScsIHRvb2x0aXBGaWVsZDogJ3NldHRsZW1lbnRDdXJyZW5jeScsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ0NsaWVudFNldHRsIChpbiBTQ2N5KScsIGZpZWxkOiAnY2xpZW50U2V0dGxlbWVudEluU0NjeScsIHRvb2x0aXBGaWVsZDogJ2NsaWVudFNldHRsZW1lbnRJblNDY3knLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdDbGllbnRTZXR0bCAoaW4gVVNEKScsIGZpZWxkOiAnY2xpZW50U2V0dGxlbWVudEluVVNEJywgdG9vbHRpcEZpZWxkOiAnY2xpZW50U2V0dGxlbWVudEluVVNEJywgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2hhcmVUeXBlJywgZmllbGQ6ICdzaGFyZVR5cGUnLCB0b29sdGlwRmllbGQ6ICdzaGFyZVR5cGUnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdTaGFyZVZhbHVlJywgZmllbGQ6ICdzaGFyZVZhbHVlJywgdG9vbHRpcEZpZWxkOiAnc2hhcmVWYWx1ZScsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1NlbmQvUmVjZWl2ZSBGZWVDY3knLCBmaWVsZDogJ3NlbmRSZWNlaXZlRmVlQ2N5JywgdG9vbHRpcEZpZWxkOiAnc2VuZFJlY2VpdmVGZWVDY3knIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdTaGFyZUFtdCAoaW4gVVNEKScsIGZpZWxkOiAnc2hhcmVBbW91bnRJblVTRCcsIHRvb2x0aXBGaWVsZDogJ3NoYXJlQW1vdW50SW5VU0QnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdTZXR0bGVtZW50IFJhdGUnLCBmaWVsZDogJ3NldHRsZW1lbnRSYXRlJywgdG9vbHRpcEZpZWxkOiAnc2V0dGxlbWVudFJhdGUnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgXTtcclxuXHJcblxyXG4gIGdyaWRBcGlzOiBHcmlkQXBpW10gPSBbXTtcclxuICBncmlkQ29sdW1uQXBpczogQ29sdW1uQXBpW10gPSBbXTtcclxuXHJcbiAgcGFnaW5hdGlvbkFycmF5OiBhbnlbXTtcclxuICBlenJlbWl0VXNlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG9yaWdpbmFsR3JvdXBFbnRyaWVzOiBBY2NvdW50aW5nUmVwb3J0QnJhbmNoR3JvdXBbXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlcG9ydFNlcnZpY2U6IFJlcG9ydFNlcnZpY2UsIHByaXZhdGUgZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZSkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZXpyZW1pdHVzZXJuYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZXpyZW1pdHVzZXJuYW1lJyk7XHJcbiAgICBpZiAoZXpyZW1pdHVzZXJuYW1lKSB7XHJcbiAgICAgIHRoaXMuZXpyZW1pdFVzZXIgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEFjY291bnRpbmdSZXBvcnQocmVxdWVzdD86IEFjY291bnRpbmdSZXBvcnRSZXF1ZXN0KSB7XHJcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuTG9hZGluZztcclxuICAgIHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5icmFuY2hOYW1lQW5kQ29kZSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc3ViR3JvdXBDb2x1bW4gPSB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBmaW5hbFJlcSA9IHJlcXVlc3Q7XHJcblxyXG4gICAgdGhpcy5yZXBvcnRTZXJ2aWNlLmdldEFjY291bnRpbmdSZXBvcnQoZmluYWxSZXEpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwgPSBkYXRhO1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuQ29tcGxldGU7XHJcblxyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbCk7XHJcblxyXG4gICAgICB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHMuZm9yRWFjaChncm91cCA9PiB7XHJcbiAgICAgICAgZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucy5lbnRyaWVzID0gZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucy5lbnRyaWVzLm1hcChlbnRyeSA9PiAoe1xyXG4gICAgICAgICAgLi4uZW50cnksXHJcbiAgICAgICAgICBidXNpbmVzc0RhdGU6IGZvcm1hdERhdGUoZW50cnkuYnVzaW5lc3NEYXRlLCAnZGQvTU0veXl5eScsICdlbi1VUycpLFxyXG4gICAgICAgICAgdHJhbnNhY3Rpb25EYXRlQW5kVGltZTogZm9ybWF0RGF0ZShlbnRyeS50cmFuc2FjdGlvbkRhdGVBbmRUaW1lLCAnZGQvTU0veXl5eSBoaDptbSBhJywgJ2VuLVVTJyksXHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICBncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXMgPSBncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXMubWFwKGVudHJ5ID0+ICh7XHJcbiAgICAgICAgICAuLi5lbnRyeSxcclxuICAgICAgICAgIGJ1c2luZXNzRGF0ZTogZm9ybWF0RGF0ZShlbnRyeS5idXNpbmVzc0RhdGUsICdkZC9NTS95eXl5JywgJ2VuLVVTJyksXHJcbiAgICAgICAgICB0cmFuc2FjdGlvbkRhdGVBbmRUaW1lOiBmb3JtYXREYXRlKGVudHJ5LnRyYW5zYWN0aW9uRGF0ZUFuZFRpbWUsICdkZC9NTS95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKSxcclxuICAgICAgICB9KSk7XHJcbiAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgIHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsID0gZGF0YTtcclxuICAgICAgdGhpcy5ub0RhdGFGb3VuZCA9IE9iamVjdC5rZXlzKHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3VwcykubGVuZ3RoID09IDAgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgIGNvbnN0IGJyYW5jaENvdW50ID0gdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzLmxlbmd0aDtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uQXJyYXkgPSBuZXcgQXJyYXkoYnJhbmNoQ291bnQgKiAyKS5maWxsKDE1KTtcclxuXHJcblxyXG4gICAgICB0aGlzLnJlcG9ydFVzZXIgPSB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5yZXBvcnRVc2VyO1xyXG4gICAgICB0aGlzLnJlcG9ydFRpbWUgPSBmb3JtYXREYXRlKG5ldyBEYXRlKCksICdkZC9NTS95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKTtcclxuICAgICAgdGhpcy5yZXBvcnRQZXJpb2QgPSBgJHtmb3JtYXREYXRlKGZpbmFsUmVxLnN0YXJ0RGF0ZSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKX0gLSAke2Zvcm1hdERhdGUoZmluYWxSZXEuZW5kRGF0ZSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKX1gO1xyXG5cclxuICAgICAgdGhpcy5sZWZ0RGF0YSA9IHtcclxuICAgICAgICAnUmVwb3J0IFVzZXIgJzogYCR7dGhpcy5yZXBvcnRVc2VyfWAsXHJcbiAgICAgICAgJ1JlcG9ydCBUaW1lJzogYCR7dGhpcy5yZXBvcnRUaW1lfWAsXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucmlnaHREYXRhID0ge1xyXG4gICAgICAgICdSZXBvcnQgUGVyaW9kJzogYCR7dGhpcy5yZXBvcnRQZXJpb2R9YCxcclxuICAgICAgICAnQ29tcGFueSc6IFwiWHByZXNzIE1vbmV5XCJcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gRGVlcCBjb3B5IHRvIHByZXNlcnZlIG9yaWdpbmFsIGRhdGEgZm9yIHNlYXJjaFxyXG4gICAgICB0aGlzLm9yaWdpbmFsR3JvdXBFbnRyaWVzID0gdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzLm1hcChncm91cCA9PiAoe1xyXG4gICAgICAgIC4uLmdyb3VwLFxyXG4gICAgICAgIHNlbmRUcmFuc2FjdGlvbnM6IHtcclxuICAgICAgICAgIC4uLmdyb3VwLnNlbmRUcmFuc2FjdGlvbnMsXHJcbiAgICAgICAgICBlbnRyaWVzOiBbLi4uZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucy5lbnRyaWVzXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVjZWl2ZVRyYW5zYWN0aW9uczoge1xyXG4gICAgICAgICAgLi4uZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucyxcclxuICAgICAgICAgIGVudHJpZXM6IFsuLi5ncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXNdXHJcbiAgICAgICAgfVxyXG4gICAgICB9KSk7XHJcblxyXG5cclxuICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBoYW5kbGVFeHBvcnQob3B0aW9uOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRFeHBvcnRPcHRpb24gPSBvcHRpb247XHJcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRFeHBvcnRPcHRpb24pIHtcclxuICAgICAgY2FzZSAnZXhjZWwnOlxyXG4gICAgICAgIHRoaXMuZXhwb3J0VG9FeGNlbCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdwZGYnOlxyXG4gICAgICAgIHRoaXMuZXhwb3J0VG9QZGYoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY3N2JzpcclxuICAgICAgICB0aGlzLmV4cG9ydFRvQ3N2KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYWxlcnQoJ1BsZWFzZSBzZWxlY3QgYW4gZXhwb3J0IGZvcm1hdC4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU2VhcmNoKHRleHQ6IHN0cmluZykge1xyXG4gICAgY29uc3Qgbm9ybWFsaXplID0gKHN0cjogYW55KTogc3RyaW5nID0+XHJcbiAgICAgIHN0cj8udG9TdHJpbmcoKVxyXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgLnJlcGxhY2UoLywvZywgJycpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xccysvZywgJyAnKVxyXG4gICAgICAgIC5yZXBsYWNlKC9bXFx1MjAwQi1cXHUyMDBEXFx1RkVGRl0vZywgJycpXHJcbiAgICAgICAgLnRyaW0oKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaFRleHQgPSB0ZXh0O1xyXG4gICAgY29uc3Qgc2VhcmNoID0gbm9ybWFsaXplKHRleHQpO1xyXG5cclxuICAgIGlmICghdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWw/LmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3VwcykgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcy5mb3JFYWNoKChncm91cCwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3Qgb3JpZ2luYWxTZW5kRW50cmllcyA9IHRoaXMub3JpZ2luYWxHcm91cEVudHJpZXNbaW5kZXhdPy5zZW5kVHJhbnNhY3Rpb25zLmVudHJpZXMgfHwgW107XHJcbiAgICAgIGNvbnN0IG9yaWdpbmFsUmVjZWl2ZUVudHJpZXMgPSB0aGlzLm9yaWdpbmFsR3JvdXBFbnRyaWVzW2luZGV4XT8ucmVjZWl2ZVRyYW5zYWN0aW9ucy5lbnRyaWVzIHx8IFtdO1xyXG5cclxuICAgICAgaWYgKHNlYXJjaCkge1xyXG4gICAgICAgIGdyb3VwLnNlbmRUcmFuc2FjdGlvbnMuZW50cmllcyA9IG9yaWdpbmFsU2VuZEVudHJpZXMuZmlsdGVyKGVudHJ5ID0+XHJcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGVudHJ5KS5zb21lKHZhbHVlID0+IG5vcm1hbGl6ZSh2YWx1ZSkuaW5jbHVkZXMoc2VhcmNoKSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGdyb3VwLnJlY2VpdmVUcmFuc2FjdGlvbnMuZW50cmllcyA9IG9yaWdpbmFsUmVjZWl2ZUVudHJpZXMuZmlsdGVyKGVudHJ5ID0+XHJcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGVudHJ5KS5zb21lKHZhbHVlID0+IG5vcm1hbGl6ZSh2YWx1ZSkuaW5jbHVkZXMoc2VhcmNoKSlcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGdyb3VwLnNlbmRUcmFuc2FjdGlvbnMuZW50cmllcyA9IFsuLi5vcmlnaW5hbFNlbmRFbnRyaWVzXTtcclxuICAgICAgICBncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXMgPSBbLi4ub3JpZ2luYWxSZWNlaXZlRW50cmllc107XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJlc2V0IGJvdGggZ3JpZHNcclxuICAgICAgW2dyb3VwLnNlbmRUcmFuc2FjdGlvbnMuZW50cmllcywgZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucy5lbnRyaWVzXS5mb3JFYWNoKChlbnRyaWVzLCBpZHgpID0+IHtcclxuICAgICAgICBjb25zdCBncmlkQXBpID0gdGhpcy5ncmlkQXBpc1tpbmRleCAqIDIgKyBpZHhdOyAvLyBrZWVwIHNlcGFyYXRlIGlkcyBmb3IgZ3JpZHNcclxuICAgICAgICBpZiAoZ3JpZEFwaSkge1xyXG4gICAgICAgICAgZ3JpZEFwaS5zZXRSb3dEYXRhKGVudHJpZXMpO1xyXG4gICAgICAgICAgaWYgKGdyaWRBcGkucGFnaW5hdGlvbkdvVG9GaXJzdFBhZ2UpIGdyaWRBcGkucGFnaW5hdGlvbkdvVG9GaXJzdFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgb25HcmlkUmVhZHkocGFyYW1zOiBHcmlkUmVhZHlFdmVudCwgaWQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5ncmlkQXBpc1tpZF0gPSBwYXJhbXMuYXBpO1xyXG4gICAgdGhpcy5ncmlkQ29sdW1uQXBpc1tpZF0gPSBwYXJhbXMuY29sdW1uQXBpOyAgIC8vIOKchSBrZWVwIHBlciBncmlkXHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmF1dG9TaXplQWxsQ29sdW1ucyhpZCksIDEwMCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25HcmlkU2l6ZUNoYW5nZWQocGFyYW1zOiBhbnksIGlkOiBudW1iZXIpIHtcclxuICAgIHRoaXMuYXV0b1NpemVBbGxDb2x1bW5zKGlkKTtcclxuICB9XHJcblxyXG5cclxuICBhdXRvU2l6ZUFsbENvbHVtbnMoaWQ6IG51bWJlciwgc2tpcEhlYWRlcjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBjb2x1bW5BcGkgPSB0aGlzLmdyaWRDb2x1bW5BcGlzW2lkXTtcclxuICAgIGlmICghY29sdW1uQXBpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgYWxsQ29sdW1uSWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgY29sdW1uQXBpLmdldENvbHVtbnMoKS5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgICBhbGxDb2x1bW5JZHMucHVzaChjb2x1bW4uZ2V0SWQoKSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb2x1bW5BcGkuYXV0b1NpemVDb2x1bW5zKGFsbENvbHVtbklkcywgc2tpcEhlYWRlcik7XHJcbiAgfVxyXG5cclxuXHJcbiAgZm9ybWF0TnVtYmVyKHBhcmFtczogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChwYXJhbXMudmFsdWUgPT0gbnVsbCkgcmV0dXJuICcnO1xyXG5cclxuICAgIGNvbnN0IGZpZWxkID0gcGFyYW1zLmNvbERlZi5maWVsZDtcclxuXHJcbiAgICBpZiAoZmllbGQgPT09ICdzZXR0bGVtZW50UmF0ZScpIHtcclxuICAgICAgcmV0dXJuIE51bWJlcihwYXJhbXMudmFsdWUpLnRvRml4ZWQoOCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE51bWJlcihwYXJhbXMudmFsdWUpLnRvRml4ZWQoMyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cG9ydFRvUGRmKCkge1xyXG4gICAgaWYgKCF0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHM/Lmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgY29uc3QgdGl0bGUgPSAnQWNjb3VudGluZyBSZXBvcnQnO1xyXG4gICAgY29uc3QgZmlsZU5hbWUgPSAnQWNjb3VudGluZy1SZXBvcnQucGRmJztcclxuXHJcbiAgICBjb25zdCBtZXRhZGF0YTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xyXG4gICAgICBbJ1JlcG9ydCBVc2VyOicsIHRoaXMucmVwb3J0VXNlcl0sXHJcbiAgICAgIFsnUmVwb3J0IFRpbWU6JywgdGhpcy5yZXBvcnRUaW1lXSxcclxuICAgICAgWydSZXBvcnQgUGVyaW9kOicsIHRoaXMucmVwb3J0UGVyaW9kXSxcclxuICAgIF07XHJcblxyXG4gICAgY29uc3QgZG9jID0gbmV3IGpzUERGKHsgb3JpZW50YXRpb246ICdsYW5kc2NhcGUnLCB1bml0OiAnbW0nLCBmb3JtYXQ6IFs3MDAsIDIxMF0gfSk7XHJcblxyXG4gICAgY29uc3QgbG9nb1dpZHRoID0gMzguNCwgbG9nb0hlaWdodCA9IDE3LjUsIGxvZ29YID0gMTUsIGxvZ29ZID0gODtcclxuICAgIGNvbnN0IHBhZ2VXaWR0aCA9IGRvYy5pbnRlcm5hbC5wYWdlU2l6ZS53aWR0aDtcclxuICAgIGNvbnN0IHRpdGxlWSA9IDE4O1xyXG5cclxuICAgIC8vIExvZ29cclxuICAgIGlmICh0aGlzLmV4cG9ydFNlcnZpY2VbJ2xvZ29CYXNlNjQnXSkge1xyXG4gICAgICBkb2MuYWRkSW1hZ2UodGhpcy5leHBvcnRTZXJ2aWNlWydsb2dvQmFzZTY0J10sICdQTkcnLCBsb2dvWCwgbG9nb1ksIGxvZ29XaWR0aCwgbG9nb0hlaWdodCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGl0bGVcclxuICAgIGRvYy5zZXRGb250U2l6ZSgxNSk7XHJcbiAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcclxuICAgIGRvYy50ZXh0KHRpdGxlLCBwYWdlV2lkdGggLyAyLCB0aXRsZVksIHsgYWxpZ246ICdjZW50ZXInIH0pO1xyXG5cclxuICAgIGxldCBjdXJyZW50WSA9IHRpdGxlWSArIDE0O1xyXG5cclxuICAgIC8vIE1ldGFkYXRhXHJcbiAgICBkb2Muc2V0Rm9udFNpemUoMTApO1xyXG4gICAgbWV0YWRhdGEuZm9yRWFjaCgoW2xhYmVsLCB2YWx1ZV0sIGkpID0+IHtcclxuICAgICAgY29uc3QgeSA9IGN1cnJlbnRZICsgaSAqIDc7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICBkb2MudGV4dChsYWJlbCwgMTUsIHkpO1xyXG4gICAgICBjb25zdCBsYWJlbFdpZHRoID0gZG9jLmdldFRleHRXaWR0aChsYWJlbCArICcgJyk7XHJcbiAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnbm9ybWFsJyk7XHJcbiAgICAgIGRvYy50ZXh0KHZhbHVlID8/ICcnLCAxNSArIGxhYmVsV2lkdGgsIHkpO1xyXG4gICAgfSk7XHJcbiAgICBjdXJyZW50WSArPSBtZXRhZGF0YS5sZW5ndGggKiA3ICsgNTtcclxuXHJcbiAgICAvLyBCcmFuY2hlc1xyXG4gICAgdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xyXG4gICAgICBkb2Muc2V0Rm9udFNpemUoMTApO1xyXG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcclxuXHJcbiAgICAgIGNvbnN0IGJyYW5jaFRleHQgPSBgQnJhbmNoIChOYW1lICYgQ29kZSk6ICR7Z3JvdXAuYnJhbmNoTmFtZUFuZENvZGV9YDtcclxuICAgICAgZG9jLnRleHQoYnJhbmNoVGV4dCwgMTUsIGN1cnJlbnRZKTtcclxuICAgICAgY3VycmVudFkgKz0gNztcclxuXHJcbiAgICAgIC8vIExvb3Agc3ViZ3JvdXBzIChTZW5kICsgUmVjZWl2ZSlcclxuICAgICAgW2dyb3VwLnNlbmRUcmFuc2FjdGlvbnMsIGdyb3VwLnJlY2VpdmVUcmFuc2FjdGlvbnNdLmZvckVhY2goc3ViR3JvdXAgPT4ge1xyXG4gICAgICAgIGlmICghc3ViR3JvdXAuZW50cmllcz8ubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgICAgIGRvYy5zZXRGb250KCdoZWx2ZXRpY2EnLCAnYm9sZCcpO1xyXG4gICAgICAgIGRvYy50ZXh0KGBTdWIgR3JvdXA6ICR7c3ViR3JvdXAuc3ViR3JvdXBOYW1lfWAsIDE1LCBjdXJyZW50WSk7XHJcbiAgICAgICAgY3VycmVudFkgKz0gNTtcclxuXHJcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzLCByb3dzIH0gPSB0aGlzLnByZXBhcmVBY2NvdW50aW5nVGFibGUoc3ViR3JvdXAuZW50cmllcyk7XHJcblxyXG4gICAgICAgIChkb2MgYXMgYW55KS5hdXRvVGFibGUoe1xyXG4gICAgICAgICAgaGVhZDogW2hlYWRlcnNdLFxyXG4gICAgICAgICAgYm9keTogcm93cyxcclxuICAgICAgICAgIHN0YXJ0WTogY3VycmVudFksXHJcbiAgICAgICAgICB0aGVtZTogJ2dyaWQnLFxyXG4gICAgICAgICAgaGVhZFN0eWxlczoge1xyXG4gICAgICAgICAgICBmaWxsQ29sb3I6IFsyMjAsIDIyMCwgMjIwXSwgdGV4dENvbG9yOiAwLFxyXG4gICAgICAgICAgICBmb250U3R5bGU6ICdib2xkJywgZm9udFNpemU6IDksIGhhbGlnbjogJ2NlbnRlcicsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgYm9keVN0eWxlczogeyBmb250U2l6ZTogOCwgZmlsbENvbG9yOiBbMjU1LCAyNTUsIDI1NV0sIHRleHRDb2xvcjogWzAsIDAsIDBdIH0sXHJcbiAgICAgICAgICBzdHlsZXM6IHsgY2VsbFBhZGRpbmc6IDIsIG92ZXJmbG93OiAnbGluZWJyZWFrJywgbWluQ2VsbEhlaWdodDogNiB9LFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjdXJyZW50WSA9IChkb2MgYXMgYW55KS5sYXN0QXV0b1RhYmxlLmZpbmFsWSArIDEwO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGRvYy5zYXZlKGZpbGVOYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwb3J0VG9FeGNlbCgpIHtcclxuICAgIGlmICghdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzPy5sZW5ndGgpIHJldHVybjtcclxuICAgIGNvbnN0IHRpdGxlID0gJ0FjY291bnRpbmcgUmVwb3J0JztcclxuICAgIGNvbnN0IGZpbGVOYW1lID0gJ0FjY291bnRpbmctUmVwb3J0Lnhsc3gnO1xyXG5cclxuICAgIGNvbnN0IHdvcmtib29rID0gbmV3IEV4Y2VsSlMuV29ya2Jvb2soKTtcclxuICAgIGNvbnN0IHdvcmtzaGVldCA9IHdvcmtib29rLmFkZFdvcmtzaGVldCgnQWNjb3VudGluZyBSZXBvcnQnKTtcclxuICAgIGxldCBjdXJyZW50Um93ID0gMTtcclxuXHJcbiAgICAvLyBMb2dvXHJcbiAgICBpZiAodGhpcy5leHBvcnRTZXJ2aWNlLmxvZ29CYXNlNjQpIHtcclxuICAgICAgY29uc3QgYmFzZTY0RGF0YSA9IHRoaXMuZXhwb3J0U2VydmljZS5sb2dvQmFzZTY0LnJlcGxhY2UoL15kYXRhOmltYWdlXFwvXFx3KztiYXNlNjQsLywgJycpO1xyXG4gICAgICBjb25zdCBpbWFnZUlkID0gd29ya2Jvb2suYWRkSW1hZ2Uoe1xyXG4gICAgICAgIGJhc2U2NDogYmFzZTY0RGF0YSxcclxuICAgICAgICBleHRlbnNpb246ICdwbmcnLFxyXG4gICAgICB9KTtcclxuICAgICAgd29ya3NoZWV0LmFkZEltYWdlKGltYWdlSWQsIHsgdGw6IHsgY29sOiAwLCByb3c6IDAgfSwgZXh0OiB7IHdpZHRoOiAxNDUsIGhlaWdodDogNjYgfSwgZWRpdEFzOiAnb25lQ2VsbCcgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGl0bGVcclxuICAgIGNvbnN0IHRpdGxlUm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KTtcclxuICAgIHRpdGxlUm93LmdldENlbGwoNikudmFsdWUgPSB0aXRsZTtcclxuICAgIHRpdGxlUm93LmdldENlbGwoNikuZm9udCA9IHsgYm9sZDogdHJ1ZSwgc2l6ZTogMTYgfTtcclxuICAgIHRpdGxlUm93LmdldENlbGwoNikuYWxpZ25tZW50ID0geyB2ZXJ0aWNhbDogJ21pZGRsZScsIGhvcml6b250YWw6ICdsZWZ0JyB9O1xyXG4gICAgd29ya3NoZWV0Lm1lcmdlQ2VsbHMoYEYke2N1cnJlbnRSb3d9Okoke2N1cnJlbnRSb3d9YCk7XHJcbiAgICBjdXJyZW50Um93ICs9IDM7XHJcblxyXG4gICAgLy8gTWV0YWRhdGFcclxuICAgIGNvbnN0IG1ldGFkYXRhOiBbc3RyaW5nLCBzdHJpbmddW10gPSBbXHJcbiAgICAgIFsnUmVwb3J0IFVzZXInLCB0aGlzLnJlcG9ydFVzZXJdLFxyXG4gICAgICBbJ1JlcG9ydCBUaW1lJywgdGhpcy5yZXBvcnRUaW1lXSxcclxuICAgICAgWydSZXBvcnQgUGVyaW9kJywgdGhpcy5yZXBvcnRQZXJpb2RdLFxyXG4gICAgXTtcclxuICAgIG1ldGFkYXRhLmZvckVhY2goKFtsYWJlbCwgdmFsdWVdKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJvdyA9IHdvcmtzaGVldC5nZXRSb3coY3VycmVudFJvdysrKTtcclxuICAgICAgcm93LmdldENlbGwoMSkudmFsdWUgPSB7XHJcbiAgICAgICAgcmljaFRleHQ6IFtcclxuICAgICAgICAgIHsgdGV4dDogYCR7bGFiZWx9OiBgLCBmb250OiB7IGJvbGQ6IHRydWUgfSB9LFxyXG4gICAgICAgICAgeyB0ZXh0OiB2YWx1ZSA/PyAnJywgZm9udDogeyBib2xkOiBmYWxzZSB9IH1cclxuICAgICAgICBdXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuXHJcbiAgICB3b3Jrc2hlZXQuYWRkUm93KFtdKTsgY3VycmVudFJvdysrO1xyXG5cclxuICAgIC8vIEJyYW5jaGVzXHJcbiAgICB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHMuZm9yRWFjaChncm91cCA9PiB7XHJcbiAgICAgIGNvbnN0IGJyYW5jaFJvdyA9IHdvcmtzaGVldC5nZXRSb3coY3VycmVudFJvdysrKTtcclxuICAgICAgYnJhbmNoUm93LmdldENlbGwoMSkudmFsdWUgPSB7XHJcbiAgICAgICAgcmljaFRleHQ6IFtcclxuICAgICAgICAgIHsgdGV4dDogJ0JyYW5jaCAoTmFtZSAmIENvZGUpOiAnLCBmb250OiB7IGJvbGQ6IHRydWUgfSB9LFxyXG4gICAgICAgICAgeyB0ZXh0OiBncm91cC5icmFuY2hOYW1lQW5kQ29kZSA/PyAnJywgZm9udDogeyBib2xkOiBmYWxzZSB9IH1cclxuICAgICAgICBdXHJcbiAgICAgIH07XHJcbiAgICAgIHdvcmtzaGVldC5hZGRSb3coW10pOyBjdXJyZW50Um93Kys7XHJcblxyXG4gICAgICAvLyBMb29wIHN1Ymdyb3Vwc1xyXG4gICAgICBbZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucywgZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9uc10uZm9yRWFjaChzdWJHcm91cCA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWJHcm91cC5lbnRyaWVzPy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3Qgc3ViR3JvdXBSb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XHJcbiAgICAgICAgc3ViR3JvdXBSb3cuZ2V0Q2VsbCgxKS52YWx1ZSA9IHtcclxuICAgICAgICAgIHJpY2hUZXh0OiBbXHJcbiAgICAgICAgICAgIHsgdGV4dDogJ1N1YiBHcm91cDogJywgZm9udDogeyBib2xkOiB0cnVlIH0gfSxcclxuICAgICAgICAgICAgeyB0ZXh0OiBzdWJHcm91cC5zdWJHcm91cE5hbWUgPz8gJycsIGZvbnQ6IHsgYm9sZDogZmFsc2UgfSB9XHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgd29ya3NoZWV0LmFkZFJvdyhbXSk7IGN1cnJlbnRSb3crKztcclxuXHJcbiAgICAgICAgLy8gSGVhZGVyc1xyXG4gICAgICAgIGNvbnN0IHsgaGVhZGVycywgcm93cyB9ID0gdGhpcy5wcmVwYXJlQWNjb3VudGluZ1RhYmxlKHN1Ykdyb3VwLmVudHJpZXMpO1xyXG4gICAgICAgIGNvbnN0IGhlYWRlclJvdyA9IHdvcmtzaGVldC5nZXRSb3coY3VycmVudFJvdysrKTtcclxuICAgICAgICBoZWFkZXJzLmZvckVhY2goKGhlYWRlciwgaSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY2VsbCA9IGhlYWRlclJvdy5nZXRDZWxsKGkgKyAxKTtcclxuICAgICAgICAgIGNlbGwudmFsdWUgPSBoZWFkZXI7XHJcbiAgICAgICAgICBjZWxsLmZvbnQgPSB7IGJvbGQ6IHRydWUgfTtcclxuICAgICAgICAgIGNlbGwuZmlsbCA9IHsgdHlwZTogJ3BhdHRlcm4nLCBwYXR0ZXJuOiAnc29saWQnLCBmZ0NvbG9yOiB7IGFyZ2I6ICdEOUQ5RDknIH0gfTtcclxuICAgICAgICAgIGNlbGwuYWxpZ25tZW50ID0geyB2ZXJ0aWNhbDogJ21pZGRsZScsIGhvcml6b250YWw6ICdjZW50ZXInIH07XHJcbiAgICAgICAgICBjZWxsLmJvcmRlciA9IHsgdG9wOiB7IHN0eWxlOiAndGhpbicgfSwgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSwgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfSB9O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBSb3dzXHJcbiAgICAgICAgcm93cy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgcm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG4gICAgICAgICAgci5mb3JFYWNoKCh2YWwsIGkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHJvdy5nZXRDZWxsKGkgKyAxKTtcclxuICAgICAgICAgICAgY2VsbC52YWx1ZSA9IHZhbDtcclxuICAgICAgICAgICAgY2VsbC5ib3JkZXIgPSB7IHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sIGJvdHRvbTogeyBzdHlsZTogJ3RoaW4nIH0sIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LCByaWdodDogeyBzdHlsZTogJ3RoaW4nIH0gfTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB3b3Jrc2hlZXQuYWRkUm93KFtdKTsgY3VycmVudFJvdysrO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIPCflLkgQXV0by1hZGp1c3QgY29sdW1uIHdpZHRocyAoaW5jbHVkaW5nIFNyIE5vKVxyXG4gICAgY29uc3QgYWxsSGVhZGVycyA9IFsnU3IgTm8nLCAuLi50aGlzLmNvbHVtbkRlZnMubWFwKGMgPT4gYy5oZWFkZXJOYW1lKV07XHJcbiAgICBhbGxIZWFkZXJzLmZvckVhY2goKGhlYWRlciwgaSkgPT4ge1xyXG4gICAgICBsZXQgbWF4TGVuZ3RoID0gaGVhZGVyLmxlbmd0aDsgLy8gc3RhcnQgd2l0aCBoZWFkZXIgbGVuZ3RoXHJcblxyXG4gICAgICB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHMuZm9yRWFjaChncm91cCA9PiB7XHJcbiAgICAgICAgW2dyb3VwLnNlbmRUcmFuc2FjdGlvbnMsIGdyb3VwLnJlY2VpdmVUcmFuc2FjdGlvbnNdLmZvckVhY2goc3ViR3JvdXAgPT4ge1xyXG4gICAgICAgICAgc3ViR3JvdXAuZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcclxuICAgICAgICAgICAgLy8gU3IgTm8gY29sdW1uIChpID0gMCkgaXMganVzdCBudW1iZXJzXHJcbiAgICAgICAgICAgIGxldCB2YWwgPSBpID09PSAwID8gKHN1Ykdyb3VwLmVudHJpZXMuaW5kZXhPZihlbnRyeSkgKyAxKS50b1N0cmluZygpIDogKGVudHJ5W3RoaXMuY29sdW1uRGVmc1tpIC0gMV0/LmZpZWxkXSA/PyAnJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IHZhbC50b1N0cmluZygpLmxlbmd0aDtcclxuICAgICAgICAgICAgaWYgKGxlbiA+IG1heExlbmd0aCkgbWF4TGVuZ3RoID0gbGVuO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgd29ya3NoZWV0LmdldENvbHVtbihpICsgMSkud2lkdGggPSBtYXhMZW5ndGggKyA1OyAvLyBwYWRkaW5nXHJcbiAgICB9KTtcclxuXHJcbiAgICB3b3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCkudGhlbihidWZmZXIgPT4ge1xyXG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHtcclxuICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnXHJcbiAgICAgIH0pO1xyXG4gICAgICBGaWxlU2F2ZXIuc2F2ZUFzKGJsb2IsIGZpbGVOYW1lKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUFjY291bnRpbmdUYWJsZShkYXRhOiBhbnlbXSk6IHsgaGVhZGVyczogc3RyaW5nW10sIHJvd3M6IGFueVtdW10gfSB7XHJcbiAgICBjb25zdCBjdXJyZW5jeUZpZWxkcyA9IFsnYW1vdW50UGFpZCcsICdzZXJ2aWNlRmVlJywgJ3RheCcsICdwcmluY2lwbGVTZW5kQW1vdW50JywgJ2NsaWVudFNldHRsZW1lbnRJblNDY3knXTtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBbJ1NyIE5vJywgLi4udGhpcy5jb2x1bW5EZWZzLm1hcChjID0+IGMuaGVhZGVyTmFtZSldO1xyXG5cclxuICAgIGlmICghZGF0YSB8fCBkYXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4geyBoZWFkZXJzLCByb3dzOiBbXSB9OyAvLyDinIUgcmV0dXJuIGhlYWRlcnMgb25seSwgZW1wdHkgcm93c1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJvd3MgPSBkYXRhLm1hcCgocm93LCBpKSA9PiB7XHJcbiAgICAgIHJldHVybiBbXHJcbiAgICAgICAgaSArIDEsXHJcbiAgICAgICAgLi4udGhpcy5jb2x1bW5EZWZzLm1hcChjb2wgPT4ge1xyXG4gICAgICAgICAgbGV0IHZhbCA9IHJvd1tjb2wuZmllbGRdO1xyXG4gICAgICAgICAgaWYgKHZhbCA9PSBudWxsKSByZXR1cm4gJyc7XHJcbiAgICAgICAgICBpZiAoY3VycmVuY3lGaWVsZHMuaW5jbHVkZXMoY29sLmZpZWxkKSkgcmV0dXJuIHBhcnNlRmxvYXQodmFsKS50b0ZpeGVkKDMpO1xyXG4gICAgICAgICAgaWYgKGNvbC5maWVsZCA9PT0gJ3NldHRsZW1lbnRSYXRlJykgcmV0dXJuIHBhcnNlRmxvYXQodmFsKS50b0ZpeGVkKDgpO1xyXG4gICAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgICB9KVxyXG4gICAgICBdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHsgaGVhZGVycywgcm93cyB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBvcnRUb0NzdigpIHtcclxuICAgIGlmICghdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzPy5sZW5ndGgpIHJldHVybjtcclxuICAgIGNvbnN0IGZpbGVOYW1lID0gJ0FjY291bnRpbmctUmVwb3J0LmNzdic7XHJcbiAgICBjb25zdCByb3dzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIHJvd3MucHVzaCgnUmVwb3J0IFRpdGxlOiBBY2NvdW50aW5nIFJlcG9ydCcpO1xyXG4gICAgcm93cy5wdXNoKCcnKTtcclxuICAgIHJvd3MucHVzaChgUmVwb3J0IFVzZXI6ICR7dGhpcy5yZXBvcnRVc2VyfWApO1xyXG4gICAgcm93cy5wdXNoKGBSZXBvcnQgVGltZTogJHt0aGlzLnJlcG9ydFRpbWV9YCk7XHJcbiAgICByb3dzLnB1c2goYFJlcG9ydCBQZXJpb2Q6ICR7dGhpcy5yZXBvcnRQZXJpb2R9YCk7XHJcbiAgICByb3dzLnB1c2goYENvbXBhbnk6IFhwcmVzcyBNb25leWApO1xyXG4gICAgcm93cy5wdXNoKCcnKTtcclxuXHJcbiAgICB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHMuZm9yRWFjaChncm91cCA9PiB7XHJcbiAgICAgIHJvd3MucHVzaChgQnJhbmNoIChOYW1lICYgQ29kZSk6ICR7Z3JvdXAuYnJhbmNoTmFtZUFuZENvZGV9YCk7XHJcblxyXG4gICAgICBbZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucywgZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9uc10uZm9yRWFjaChzdWJHcm91cCA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWJHcm91cC5lbnRyaWVzPy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICAgICAgcm93cy5wdXNoKGBTdWIgR3JvdXA6ICR7c3ViR3JvdXAuc3ViR3JvdXBOYW1lfWApO1xyXG5cclxuICAgICAgICAvLyDwn5S5IEFkZCBcIlNyIE5vXCIgYXQgdGhlIGJlZ2lubmluZyBvZiBoZWFkZXJzXHJcbiAgICAgICAgcm93cy5wdXNoKFsnXCJTciBOb1wiJywgLi4udGhpcy5jb2x1bW5EZWZzLm1hcChjb2wgPT4gYFwiJHtjb2wuaGVhZGVyTmFtZX1cImApXS5qb2luKCcsJykpO1xyXG5cclxuICAgICAgICBzdWJHcm91cC5lbnRyaWVzLmZvckVhY2goKGVudHJ5LCBpZHgpID0+IHtcclxuICAgICAgICAgIC8vIPCflLkgQWRkIHNlcmlhbCBudW1iZXIgYXQgc3RhcnQgb2YgZWFjaCByb3dcclxuICAgICAgICAgIGNvbnN0IHJvdyA9IFtcclxuICAgICAgICAgICAgKGlkeCArIDEpLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIC4uLnRoaXMuY29sdW1uRGVmcy5tYXAoY29sID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBlbnRyeVtjb2wuZmllbGRdO1xyXG4gICAgICAgICAgICAgIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICAgIGlmIChbJ2Ftb3VudFBhaWQnLCAnc2VydmljZUZlZScsICd0YXgnLCAncHJpbmNpcGxlU2VuZEFtb3VudCcsICdjbGllbnRTZXR0bGVtZW50SW5TQ2N5J10uaW5jbHVkZXMoY29sLmZpZWxkKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsKS50b0ZpeGVkKDMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoY29sLmZpZWxkID09PSAnc2V0dGxlbWVudFJhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWwpLnRvRml4ZWQoOCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBgXCIke3ZhbH1cImA7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICBdLmpvaW4oJywnKTtcclxuICAgICAgICAgIHJvd3MucHVzaChyb3cpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByb3dzLnB1c2goJycpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcm93cy5qb2luKCdcXG4nKV0sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcclxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBsaW5rLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgZmlsZU5hbWUpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgZ2V0UmVwb3J0KHBheWxvYWQ6IGFueSkge1xyXG4gICAgY29uc3QgbW9kYWwgPSBwYXlsb2FkPy5tb2RhbCB8fCBwYXlsb2FkO1xyXG5cclxuICAgIGNvbnN0IHJlcTogQWNjb3VudGluZ1JlcG9ydFJlcXVlc3QgPSB7XHJcbiAgICAgIHN0YXJ0RGF0ZTogbW9kYWwuZnJvbURhdGUsIC8vIHl5eXktTU0tZGQgZnJvbSB0aGUgZmlsdGVyXHJcbiAgICAgIGVuZERhdGU6IG1vZGFsLnRvRGF0ZSxcclxuICAgICAgc2VuZENvdW50cnlDb2RlOiBtb2RhbC5zZW5kQ291bnRyeSA/PyAnQUxMJyxcclxuICAgICAgcmVjdkNvdW50cnlDb2RlOiBtb2RhbC5yZWNlaXZlQ291bnRyeSA/PyAnQUxMJyxcclxuICAgICAgYnVzaW5lc3NQYXJ0bmVyQ29ycmVsYXRpb25JRDogbW9kYWwuY2xpZW50ID8/ICdBTEwnLFxyXG4gICAgICB0cmFuc2FjdGlvblN0YXR1czogbW9kYWwudHJhbnNhY3Rpb25TdGF0dXMuam9pbihcIixcIiksXHJcbiAgICAgIHBheW91dEN1cnJlbmN5OiBtb2RhbC5jdXJyZW5jeSA/PyAnQUxMJyxcclxuICAgICAgdHJhbnNhY3Rpb25UeXBlOiBtb2RhbC5wcm9kdWN0ID8/ICdBTEwnLFxyXG4gICAgICBicmFuY2hDb2RlOiBtb2RhbC5icmFuY2ggPz8gJ0FMTCcsXHJcbiAgICAgIGNvbXBhbnlDb2RlOiAnQUxMJyAvLyBvciAnQkgnIGlmIHlvdXIgQVBJIHJlcXVpcmVzIGl0IHNwZWNpZmljYWxseVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmdldEFjY291bnRpbmdSZXBvcnQocmVxKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxsaWItc2VhcmNoLWZpbHRlciBbUmVwb3J0TmFtZV09XCJSZXBvcnROYW1lXCIgKHNlYXJjaENsaWNrZWQpPVwiZ2V0UmVwb3J0KCRldmVudClcIj48L2xpYi1zZWFyY2gtZmlsdGVyPlxyXG5cclxuPGFwcC1sb2FkZXIgY2xhc3M9XCJcIiAqbmdJZj1cImxvYWRpbmdTdGF0ZSA9PSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZ1wiPjwvYXBwLWxvYWRlcj5cclxuXHJcbjxkaXYgKm5nSWY9XCJhY2NvdW50aW5nUmVwb3J0TW9kZWwhPXVuZGVmaW5lZCAmJiBhY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzPy5sZW5ndGhcIj5cclxuXHJcbiAgPGxpYi1tZXRhZGF0YSBbcmVwb3J0TmFtZV09XCJSZXBvcnROYW1lXCIgW3Nob3dtZXRhRGF0YU9uZV09XCJ0cnVlXCIgW3Nob3dtZXRhRGF0YVR3b109XCJ0cnVlXCIgW21ldGFEYXRhT25lXT1cImxlZnREYXRhXCJcclxuICAgIFttZXRhRGF0YVR3b109XCJyaWdodERhdGFcIiAoZXhwb3J0RXZlbnQpPVwiaGFuZGxlRXhwb3J0KCRldmVudClcIiAoc2VhcmNoRXZlbnQpPVwib25TZWFyY2goJGV2ZW50KVwiPjwvbGliLW1ldGFkYXRhPlxyXG5cclxuICA8bmdiLWFjY29yZGlvbiAjYWNjPVwibmdiQWNjb3JkaW9uXCIgW2Nsb3NlT3RoZXJzXT1cImZhbHNlXCIgW2FjdGl2ZUlkc109XCIncGFuZWwtMCdcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGFjY291bnRpbmdSZXBvcnRNb2RlbD8uYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgIDxuZ2ItcGFuZWwgW2lkXT1cIidwYW5lbC0nICsgaVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JQYW5lbFRpdGxlPlxyXG4gICAgICAgICAgPGxhYmVsIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMTNweDsgbGluZS1oZWlnaHQ6IDEuMjsgbWFyZ2luOiAwOyBwYWRkaW5nOiAycHggMDtjb2xvcjogIzBjNjNlNDtcIj5cclxuICAgICAgICAgICAge3sgZ3JvdXAuYnJhbmNoTmFtZUFuZENvZGUgfX1cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nYlBhbmVsQ29udGVudD5cclxuICAgICAgICAgIDwhLS0gU2VuZCBUcmFuc2FjdGlvbnMgLS0+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucy5lbnRyaWVzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8aDYgY2xhc3M9XCJzdWJncm91cGNvbHVtblwiPnt7IGdyb3VwLnNlbmRUcmFuc2FjdGlvbnMuc3ViR3JvdXBOYW1lIH19PC9oNj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cclxuICAgICAgICAgICAgICA8bGliLXBhZ2Utc2l6ZS1zZWxlY3RvciBbdG90YWxFbnRyaWVzXT1cImdyb3VwLnNlbmRUcmFuc2FjdGlvbnMuZW50cmllcy5sZW5ndGhcIiBbZGVmYXVsdFNpemVdPVwiJzE1J1wiXHJcbiAgICAgICAgICAgICAgICBbZ3JpZEFwaV09XCJncmlkQXBpc1tpICogMl1cIj5cclxuICAgICAgICAgICAgICA8L2xpYi1wYWdlLXNpemUtc2VsZWN0b3I+XHJcblxyXG4gICAgICAgICAgICAgIDxhZy1ncmlkLWFuZ3VsYXIgY2xhc3M9XCJhZy10aGVtZS1hbHBpbmUgY29tcGFjdC1ncmlkIGdyaWQtc2l6ZVwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMzc1cHg7XCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIiBbZGVmYXVsdENvbERlZl09XCJkZWZhdWx0Q29sRGVmXCIgW3Jvd0RhdGFdPVwiZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucy5lbnRyaWVzXCJcclxuICAgICAgICAgICAgICAgIFtyb3dIZWlnaHRdPVwiMjBcIiBbaGVhZGVySGVpZ2h0XT1cIjI0XCIgW3BhZ2luYXRpb25dPVwidHJ1ZVwiIFtwYWdpbmF0aW9uUGFnZVNpemVdPVwicGFnaW5hdGlvbkFycmF5W2ldXCJcclxuICAgICAgICAgICAgICAgIChncmlkUmVhZHkpPVwib25HcmlkUmVhZHkoJGV2ZW50LCBpICogMilcIiAoZ3JpZFNpemVDaGFuZ2VkKT1cIm9uR3JpZFNpemVDaGFuZ2VkKCRldmVudCwgaSAqIDIpXCI+XHJcbiAgICAgICAgICAgICAgPC9hZy1ncmlkLWFuZ3VsYXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBSZWNlaXZlIFRyYW5zYWN0aW9ucyAtLT5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXMubGVuZ3RoXCIgY2xhc3M9XCJtdC0zXCI+XHJcbiAgICAgICAgICAgIDxoNiBjbGFzcz1cInN1Ymdyb3VwY29sdW1uXCI+e3sgZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucy5zdWJHcm91cE5hbWUgfX08L2g2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgIDxsaWItcGFnZS1zaXplLXNlbGVjdG9yIFt0b3RhbEVudHJpZXNdPVwiZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucy5lbnRyaWVzLmxlbmd0aFwiIFtkZWZhdWx0U2l6ZV09XCInMTUnXCJcclxuICAgICAgICAgICAgICAgIFtncmlkQXBpXT1cImdyaWRBcGlzW2kgKiAyICsgMV1cIj5cclxuICAgICAgICAgICAgICA8L2xpYi1wYWdlLXNpemUtc2VsZWN0b3I+XHJcblxyXG4gICAgICAgICAgICAgIDxhZy1ncmlkLWFuZ3VsYXIgY2xhc3M9XCJhZy10aGVtZS1hbHBpbmUgY29tcGFjdC1ncmlkIGdyaWQtc2l6ZVwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMzc1cHg7XCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIiBbZGVmYXVsdENvbERlZl09XCJkZWZhdWx0Q29sRGVmXCIgW3Jvd0RhdGFdPVwiZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucy5lbnRyaWVzXCJcclxuICAgICAgICAgICAgICAgIFtyb3dIZWlnaHRdPVwiMjBcIiBbaGVhZGVySGVpZ2h0XT1cIjI0XCIgW3BhZ2luYXRpb25dPVwidHJ1ZVwiIFtwYWdpbmF0aW9uUGFnZVNpemVdPVwicGFnaW5hdGlvbkFycmF5W2ldXCJcclxuICAgICAgICAgICAgICAgIChncmlkUmVhZHkpPVwib25HcmlkUmVhZHkoJGV2ZW50LCBpICogMiArIDEpXCIgKGdyaWRTaXplQ2hhbmdlZCk9XCJvbkdyaWRTaXplQ2hhbmdlZCgkZXZlbnQsIGkgKiAyKVwiPlxyXG4gICAgICAgICAgICAgIDwvYWctZ3JpZC1hbmd1bGFyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvbmdiLXBhbmVsPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9uZ2ItYWNjb3JkaW9uPlxyXG5cclxuXHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmcgbXQtM1wiICpuZ0lmPVwibm9EYXRhRm91bmQgJiYgbG9hZGluZ1N0YXRlIT1Db21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZ1wiPlxyXG4gIE5vIERhdGEgZm91bmQgbWF0Y2hpbmcgeW91ciBzZWFyY2ggY3JpdGVyaWEuXHJcbjwvZGl2PiJdfQ==
483
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudGluZy1yZXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwb3J0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2FjY291bnRpbmctcmVwb3J0L2FjY291bnRpbmctcmVwb3J0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JlcG9ydHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9hY2NvdW50aW5nLXJlcG9ydC9hY2NvdW50aW5nLXJlcG9ydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQUtyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFL0UsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8saUJBQWlCLENBQUM7QUFDekIsT0FBTyxLQUFLLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDbkMsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7Ozs7O0FBMEJ4QyxNQUFNLE9BQU8seUJBQXlCO0lBd0VwQyxZQUFvQixhQUE0QixFQUFVLGFBQTRCO1FBQWxFLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsa0JBQWEsR0FBYixhQUFhLENBQWU7UUF0RXRGLGVBQVUsR0FBVyxZQUFZLENBQUM7UUFNbEMsMEJBQXFCLEdBQUcsc0JBQXNCLENBQUM7UUFDL0MsaUJBQVksR0FBMkIsc0JBQXNCLENBQUMsUUFBUSxDQUFDO1FBQ3ZFLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBSzdCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUViLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFF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QUFlLEVBQUUsS0FBSyxDQUFDLGNBQWMsSUFBSSxLQUFLO1lBQzlDLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSztZQUNuRCxpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUNwRCxjQUFjLEVBQUUsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLO1lBQ3ZDLGVBQWUsRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUs7WUFDdkMsVUFBVSxFQUFFLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSztZQUNqQyxXQUFXLEVBQUUsS0FBSyxDQUFDLCtDQUErQztTQUNuRSxDQUFDO1FBRUYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7O3NIQXppQlUseUJBQXlCOzBHQUF6Qix5QkFBeUIsNkRDckN0QyxtNEdBNERNOzJGRHZCTyx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0UsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjY291bnRpbmdSZXBvcnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9hY2NvdW50aW5nLXJlcG9ydC9hY2NvdW50aW5nLXJlcG9ydC1tb2RlbCc7XHJcbmltcG9ydCB7IENvbERlZiwgQ29sdW1uQXBpLCBHcmlkQXBpLCBHcmlkUmVhZHlFdmVudCB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcclxuaW1wb3J0IHsgUmVwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9leHBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnRMb2FkaW5nU3RhdGVzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NvbXBvbmVudC1sb2FkaW5nLXN0YXRlcyc7XHJcbmltcG9ydCB7IEFjY291bnRpbmdSZXBvcnRCcmFuY2hHcm91cCB9IGZyb20gJy4uLy4uL21vZGVscy9hY2NvdW50aW5nLXJlcG9ydC9hY2NvdW50aW5nLXJlcG9ydC1icmFuY2gtZ3JvdXAnO1xyXG5pbXBvcnQganNQREYgZnJvbSAnanNwZGYnO1xyXG5pbXBvcnQgJ2pzcGRmLWF1dG90YWJsZSc7XHJcbmltcG9ydCAqIGFzIEV4Y2VsSlMgZnJvbSAnZXhjZWxqcyc7XHJcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcclxuXHJcbmRlY2xhcmUgbW9kdWxlICdqc3BkZicge1xyXG4gIGludGVyZmFjZSBqc1BERiB7XHJcbiAgICBhdXRvVGFibGU6IChvcHRpb25zOiBhbnkpID0+IGpzUERGO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBY2NvdW50aW5nUmVwb3J0UmVxdWVzdCB7XHJcbiAgc3RhcnREYXRlOiBzdHJpbmc7XHJcbiAgZW5kRGF0ZTogc3RyaW5nO1xyXG4gIHNlbmRDb3VudHJ5Q29kZTogc3RyaW5nO1xyXG4gIHJlY3ZDb3VudHJ5Q29kZTogc3RyaW5nO1xyXG4gIGJ1c2luZXNzUGFydG5lckNvcnJlbGF0aW9uSUQ6IHN0cmluZztcclxuICB0cmFuc2FjdGlvblN0YXR1czogc3RyaW5nO1xyXG4gIHBheW91dEN1cnJlbmN5OiBzdHJpbmc7XHJcbiAgdHJhbnNhY3Rpb25UeXBlOiBzdHJpbmc7XHJcbiAgYnJhbmNoQ29kZTogc3RyaW5nO1xyXG4gIGNvbXBhbnlDb2RlOiBzdHJpbmc7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWFjY291bnRpbmctcmVwb3J0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWNjb3VudGluZy1yZXBvcnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FjY291bnRpbmctcmVwb3J0LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY2NvdW50aW5nUmVwb3J0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgUmVwb3J0TmFtZTogc3RyaW5nID0gXCJBY2NvdW50aW5nXCI7XHJcbiAgcmVwb3J0VXNlcjogYW55O1xyXG4gIHJlcG9ydFRpbWU6IGFueTtcclxuICByZXBvcnRQZXJpb2Q6IGFueTtcclxuICBicmFuY2hOYW1lQW5kQ29kZTogYW55O1xyXG4gIHN1Ykdyb3VwQ29sdW1uOiBhbnk7XHJcbiAgQ29tcG9uZW50TG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlcztcclxuICBsb2FkaW5nU3RhdGU6IENvbXBvbmVudExvYWRpbmdTdGF0ZXMgPSBDb21wb25lbnRMb2FkaW5nU3RhdGVzLkNvbXBsZXRlO1xyXG4gIG5vRGF0YUZvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGxlZnREYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIHJpZ2h0RGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxuXHJcbiAgc2VhcmNoVGV4dDogc3RyaW5nID0gJyc7XHJcbiAgcm93RGF0YSA9IFtdO1xyXG4gIGFjY291bnRpbmdSZXBvcnRNb2RlbDogQWNjb3VudGluZ1JlcG9ydE1vZGVsO1xyXG4gIHBhZ2VTaXplOiBudW1iZXIgPSAxNTtcclxuXHJcbiAgc2VsZWN0ZWRFeHBvcnRPcHRpb246IHN0cmluZyA9ICdleGNlbCc7XHJcbiAgZXhwb3J0Rm9ybWF0cyA9IFt7IGZvcm1hdE5hbWU6IFwiRXhjZWxcIiwgY29kZTogJ2V4Y2VsJyB9LCB7IGZvcm1hdE5hbWU6IFwiUERGXCIsIGNvZGU6ICdwZGYnIH0sIHsgZm9ybWF0TmFtZTogXCJDU1ZcIiwgY29kZTogJ2NzdicgfV1cclxuXHJcbiAgZGVmYXVsdENvbERlZjogQ29sRGVmID0ge1xyXG4gICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgc29ydGFibGU6IGZhbHNlLFxyXG4gICAgbWluV2lkdGg6IDQwLFxyXG4gICAgc3VwcHJlc3NTaXplVG9GaXQ6IGZhbHNlLFxyXG4gICAgY2VsbFN0eWxlOiB7IHVzZXJTZWxlY3Q6ICd0ZXh0JywgJ2xpbmUtaGVpZ2h0JzogJzEuMicsICd3aGl0ZS1zcGFjZSc6ICdub3JtYWwnLCAnd29yZC1icmVhayc6ICdub3JtYWwnLCAnb3ZlcmZsb3ctd3JhcCc6ICdicmVhay13b3JkJyB9LFxyXG5cclxuICAgIC8vICBIZWFkZXIgd3JhcHBpbmdcclxuICAgIHdyYXBIZWFkZXJUZXh0OiB0cnVlLFxyXG4gICAgYXV0b0hlYWRlckhlaWdodDogdHJ1ZSxcclxuXHJcbiAgICAvLyAgQ2VsbCB3cmFwcGluZ1xyXG4gICAgd3JhcFRleHQ6IHRydWUsXHJcbiAgICBhdXRvSGVpZ2h0OiB0cnVlXHJcbiAgfTtcclxuXHJcbiAgY29sdW1uRGVmczogQ29sRGVmW10gPSBbXHJcbiAgICB7IGhlYWRlck5hbWU6ICdCdXNpbmVzc0RhdGUnLCBmaWVsZDogJ2J1c2luZXNzRGF0ZScsIHRvb2x0aXBGaWVsZDogJ2J1c2luZXNzRGF0ZScgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1R4bkRhdGUmVGltZScsIGZpZWxkOiAndHJhbnNhY3Rpb25EYXRlQW5kVGltZScsIHRvb2x0aXBGaWVsZDogJ3RyYW5zYWN0aW9uRGF0ZUFuZFRpbWUnLCBtaW5XaWR0aDogMTEwLCB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnVHJhbnNhY3Rpb24gTnVtYmVyJywgZmllbGQ6ICd0cmFuc2FjdGlvbk51bWJlcicsIHRvb2x0aXBGaWVsZDogJ3RyYW5zYWN0aW9uTnVtYmVyJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2VuZENsaWVudCcsIGZpZWxkOiAnc2VuZENsaWVudCcsIHRvb2x0aXBGaWVsZDogJ3NlbmRDbGllbnQnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdQcmluY2lwbGUgU2VuZENsaWVudCAoSWYgQXBwbGljYWJsZSknLCBmaWVsZDogJ3ByaW5jaXBsZVNlbmRDbGllbnQnLCB0b29sdGlwRmllbGQ6ICdwcmluY2lwbGVTZW5kQ2xpZW50JyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnUmVjZWl2ZUNsaWVudCcsIGZpZWxkOiAncmVjZWl2ZUNsaWVudCcsIHRvb2x0aXBGaWVsZDogJ3JlY2VpdmVDbGllbnQnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdQcmluY2lwbGUgUmVjZWl2ZUNsaWVudCAoSWYgQXBwbGljYWJsZSknLCBmaWVsZDogJ3ByaW5jaXBsZVJlY2VpdmVDbGllbnQnLCB0b29sdGlwRmllbGQ6ICdwcmluY2lwbGVSZWNlaXZlQ2xpZW50JyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnUmVjZWl2ZUNjeScsIGZpZWxkOiAncmVjZWl2ZUN1cnJlbmN5JywgdG9vbHRpcEZpZWxkOiAncmVjZWl2ZUN1cnJlbmN5JyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnQW1vdW50UGFpZCcsIGZpZWxkOiAnYW1vdW50UGFpZCcsIHRvb2x0aXBGaWVsZDogJ2Ftb3VudFBhaWQnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdTZW5kQ2N5JywgZmllbGQ6ICdzZW5kQ3VycmVuY3knLCB0b29sdGlwRmllbGQ6ICdzZW5kQ3VycmVuY3knLCB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2VydmljZUZlZScsIGZpZWxkOiAnc2VydmljZUZlZScsIHRvb2x0aXBGaWVsZDogJ3NlcnZpY2VGZWUnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdUYXgnLCBmaWVsZDogJ3RheCcsIHRvb2x0aXBGaWVsZDogJ3RheCcsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1ByaW5jaXBsZVNlbmQgQW1vdW50JywgZmllbGQ6ICdwcmluY2lwbGVTZW5kQW1vdW50JywgdG9vbHRpcEZpZWxkOiAncHJpbmNpcGxlU2VuZEFtb3VudCcsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1RyYW5zYWN0aW9uIFN0YXR1cycsIGZpZWxkOiAndHJhbnNhY3Rpb25TdGF0dXMnLCB0b29sdGlwRmllbGQ6ICd0cmFuc2FjdGlvblN0YXR1cycgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1NldHRsZW1lbnRDY3knLCBmaWVsZDogJ3NldHRsZW1lbnRDdXJyZW5jeScsIHRvb2x0aXBGaWVsZDogJ3NldHRsZW1lbnRDdXJyZW5jeScsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ0NsaWVudFNldHRsIChpbiBTQ2N5KScsIGZpZWxkOiAnY2xpZW50U2V0dGxlbWVudEluU0NjeScsIHRvb2x0aXBGaWVsZDogJ2NsaWVudFNldHRsZW1lbnRJblNDY3knLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdDbGllbnRTZXR0bCAoaW4gVVNEKScsIGZpZWxkOiAnY2xpZW50U2V0dGxlbWVudEluVVNEJywgdG9vbHRpcEZpZWxkOiAnY2xpZW50U2V0dGxlbWVudEluVVNEJywgY2VsbENsYXNzOiAnYWctcmlnaHQtYWxpZ25lZC1jZWxsJyB9LFxyXG4gICAgeyBoZWFkZXJOYW1lOiAnU2hhcmVUeXBlJywgZmllbGQ6ICdzaGFyZVR5cGUnLCB0b29sdGlwRmllbGQ6ICdzaGFyZVR5cGUnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdTaGFyZVZhbHVlJywgZmllbGQ6ICdzaGFyZVZhbHVlJywgdG9vbHRpcEZpZWxkOiAnc2hhcmVWYWx1ZScsIGNlbGxDbGFzczogJ2FnLXJpZ2h0LWFsaWduZWQtY2VsbCcgfSxcclxuICAgIHsgaGVhZGVyTmFtZTogJ1NlbmQvUmVjZWl2ZSBGZWVDY3knLCBmaWVsZDogJ3NlbmRSZWNlaXZlRmVlQ2N5JywgdG9vbHRpcEZpZWxkOiAnc2VuZFJlY2VpdmVGZWVDY3knIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdTaGFyZUFtdCAoaW4gVVNEKScsIGZpZWxkOiAnc2hhcmVBbW91bnRJblVTRCcsIHRvb2x0aXBGaWVsZDogJ3NoYXJlQW1vdW50SW5VU0QnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgICB7IGhlYWRlck5hbWU6ICdTZXR0bGVtZW50IFJhdGUnLCBmaWVsZDogJ3NldHRsZW1lbnRSYXRlJywgdG9vbHRpcEZpZWxkOiAnc2V0dGxlbWVudFJhdGUnLCBjZWxsQ2xhc3M6ICdhZy1yaWdodC1hbGlnbmVkLWNlbGwnIH0sXHJcbiAgXTtcclxuXHJcblxyXG4gIGdyaWRBcGlzOiBHcmlkQXBpW10gPSBbXTtcclxuICBncmlkQ29sdW1uQXBpczogQ29sdW1uQXBpW10gPSBbXTtcclxuXHJcbiAgcGFnaW5hdGlvbkFycmF5OiBhbnlbXTtcclxuICBlenJlbWl0VXNlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG9yaWdpbmFsR3JvdXBFbnRyaWVzOiBBY2NvdW50aW5nUmVwb3J0QnJhbmNoR3JvdXBbXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlcG9ydFNlcnZpY2U6IFJlcG9ydFNlcnZpY2UsIHByaXZhdGUgZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZSkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZXpyZW1pdHVzZXJuYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZXpyZW1pdHVzZXJuYW1lJyk7XHJcbiAgICBpZiAoZXpyZW1pdHVzZXJuYW1lKSB7XHJcbiAgICAgIHRoaXMuZXpyZW1pdFVzZXIgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEFjY291bnRpbmdSZXBvcnQocmVxdWVzdD86IEFjY291bnRpbmdSZXBvcnRSZXF1ZXN0KSB7XHJcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuTG9hZGluZztcclxuICAgIHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5icmFuY2hOYW1lQW5kQ29kZSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc3ViR3JvdXBDb2x1bW4gPSB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBmaW5hbFJlcSA9IHJlcXVlc3Q7XHJcblxyXG4gICAgdGhpcy5yZXBvcnRTZXJ2aWNlLmdldEFjY291bnRpbmdSZXBvcnQoZmluYWxSZXEpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwgPSBkYXRhO1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZXMuQ29tcGxldGU7XHJcblxyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbCk7XHJcblxyXG4gICAgICB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHMuZm9yRWFjaChncm91cCA9PiB7XHJcbiAgICAgICAgZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucy5lbnRyaWVzID0gZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucy5lbnRyaWVzLm1hcChlbnRyeSA9PiAoe1xyXG4gICAgICAgICAgLi4uZW50cnksXHJcbiAgICAgICAgICBidXNpbmVzc0RhdGU6IGZvcm1hdERhdGUoZW50cnkuYnVzaW5lc3NEYXRlLCAnZGQvTU0veXl5eScsICdlbi1VUycpLFxyXG4gICAgICAgICAgdHJhbnNhY3Rpb25EYXRlQW5kVGltZTogZm9ybWF0RGF0ZShlbnRyeS50cmFuc2FjdGlvbkRhdGVBbmRUaW1lLCAnZGQvTU0veXl5eSBoaDptbSBhJywgJ2VuLVVTJyksXHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICBncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXMgPSBncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXMubWFwKGVudHJ5ID0+ICh7XHJcbiAgICAgICAgICAuLi5lbnRyeSxcclxuICAgICAgICAgIGJ1c2luZXNzRGF0ZTogZm9ybWF0RGF0ZShlbnRyeS5idXNpbmVzc0RhdGUsICdkZC9NTS95eXl5JywgJ2VuLVVTJyksXHJcbiAgICAgICAgICB0cmFuc2FjdGlvbkRhdGVBbmRUaW1lOiBmb3JtYXREYXRlKGVudHJ5LnRyYW5zYWN0aW9uRGF0ZUFuZFRpbWUsICdkZC9NTS95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKSxcclxuICAgICAgICB9KSk7XHJcbiAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgIHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsID0gZGF0YTtcclxuICAgICAgdGhpcy5ub0RhdGFGb3VuZCA9IE9iamVjdC5rZXlzKHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3VwcykubGVuZ3RoID09IDAgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgIGNvbnN0IGJyYW5jaENvdW50ID0gdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzLmxlbmd0aDtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uQXJyYXkgPSBuZXcgQXJyYXkoYnJhbmNoQ291bnQgKiAyKS5maWxsKDE1KTtcclxuXHJcblxyXG4gICAgICB0aGlzLnJlcG9ydFVzZXIgPSB0aGlzLmFjY291bnRpbmdSZXBvcnRNb2RlbC5yZXBvcnRVc2VyO1xyXG4gICAgICB0aGlzLnJlcG9ydFRpbWUgPSBmb3JtYXREYXRlKG5ldyBEYXRlKCksICdkZC9NTS95eXl5IGhoOm1tIGEnLCAnZW4tVVMnKTtcclxuICAgICAgdGhpcy5yZXBvcnRQZXJpb2QgPSBgJHtmb3JtYXREYXRlKGZpbmFsUmVxLnN0YXJ0RGF0ZSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKX0gLSAke2Zvcm1hdERhdGUoZmluYWxSZXEuZW5kRGF0ZSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKX1gO1xyXG5cclxuICAgICAgdGhpcy5sZWZ0RGF0YSA9IHtcclxuICAgICAgICAnUmVwb3J0IFVzZXIgJzogYCR7dGhpcy5yZXBvcnRVc2VyfWAsXHJcbiAgICAgICAgJ1JlcG9ydCBUaW1lJzogYCR7dGhpcy5yZXBvcnRUaW1lfWAsXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucmlnaHREYXRhID0ge1xyXG4gICAgICAgICdSZXBvcnQgUGVyaW9kJzogYCR7dGhpcy5yZXBvcnRQZXJpb2R9YCxcclxuICAgICAgICAnQ29tcGFueSc6IFwiWHByZXNzIE1vbmV5XCJcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gRGVlcCBjb3B5IHRvIHByZXNlcnZlIG9yaWdpbmFsIGRhdGEgZm9yIHNlYXJjaFxyXG4gICAgICB0aGlzLm9yaWdpbmFsR3JvdXBFbnRyaWVzID0gdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzLm1hcChncm91cCA9PiAoe1xyXG4gICAgICAgIC4uLmdyb3VwLFxyXG4gICAgICAgIHNlbmRUcmFuc2FjdGlvbnM6IHtcclxuICAgICAgICAgIC4uLmdyb3VwLnNlbmRUcmFuc2FjdGlvbnMsXHJcbiAgICAgICAgICBlbnRyaWVzOiBbLi4uZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucy5lbnRyaWVzXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVjZWl2ZVRyYW5zYWN0aW9uczoge1xyXG4gICAgICAgICAgLi4uZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucyxcclxuICAgICAgICAgIGVudHJpZXM6IFsuLi5ncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXNdXHJcbiAgICAgICAgfVxyXG4gICAgICB9KSk7XHJcblxyXG5cclxuICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBoYW5kbGVFeHBvcnQob3B0aW9uOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRFeHBvcnRPcHRpb24gPSBvcHRpb247XHJcbiAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0ZWRFeHBvcnRPcHRpb24pIHtcclxuICAgICAgY2FzZSAnZXhjZWwnOlxyXG4gICAgICAgIHRoaXMuZXhwb3J0VG9FeGNlbCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdwZGYnOlxyXG4gICAgICAgIHRoaXMuZXhwb3J0VG9QZGYoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY3N2JzpcclxuICAgICAgICB0aGlzLmV4cG9ydFRvQ3N2KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYWxlcnQoJ1BsZWFzZSBzZWxlY3QgYW4gZXhwb3J0IGZvcm1hdC4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU2VhcmNoKHRleHQ6IHN0cmluZykge1xyXG4gICAgY29uc3Qgbm9ybWFsaXplID0gKHN0cjogYW55KTogc3RyaW5nID0+XHJcbiAgICAgIHN0cj8udG9TdHJpbmcoKVxyXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgLnJlcGxhY2UoLywvZywgJycpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xccysvZywgJyAnKVxyXG4gICAgICAgIC5yZXBsYWNlKC9bXFx1MjAwQi1cXHUyMDBEXFx1RkVGRl0vZywgJycpXHJcbiAgICAgICAgLnRyaW0oKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaFRleHQgPSB0ZXh0O1xyXG4gICAgY29uc3Qgc2VhcmNoID0gbm9ybWFsaXplKHRleHQpO1xyXG5cclxuICAgIGlmICghdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWw/LmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3VwcykgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcy5mb3JFYWNoKChncm91cCwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3Qgb3JpZ2luYWxTZW5kRW50cmllcyA9IHRoaXMub3JpZ2luYWxHcm91cEVudHJpZXNbaW5kZXhdPy5zZW5kVHJhbnNhY3Rpb25zLmVudHJpZXMgfHwgW107XHJcbiAgICAgIGNvbnN0IG9yaWdpbmFsUmVjZWl2ZUVudHJpZXMgPSB0aGlzLm9yaWdpbmFsR3JvdXBFbnRyaWVzW2luZGV4XT8ucmVjZWl2ZVRyYW5zYWN0aW9ucy5lbnRyaWVzIHx8IFtdO1xyXG5cclxuICAgICAgaWYgKHNlYXJjaCkge1xyXG4gICAgICAgIGdyb3VwLnNlbmRUcmFuc2FjdGlvbnMuZW50cmllcyA9IG9yaWdpbmFsU2VuZEVudHJpZXMuZmlsdGVyKGVudHJ5ID0+XHJcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGVudHJ5KS5zb21lKHZhbHVlID0+IG5vcm1hbGl6ZSh2YWx1ZSkuaW5jbHVkZXMoc2VhcmNoKSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGdyb3VwLnJlY2VpdmVUcmFuc2FjdGlvbnMuZW50cmllcyA9IG9yaWdpbmFsUmVjZWl2ZUVudHJpZXMuZmlsdGVyKGVudHJ5ID0+XHJcbiAgICAgICAgICBPYmplY3QudmFsdWVzKGVudHJ5KS5zb21lKHZhbHVlID0+IG5vcm1hbGl6ZSh2YWx1ZSkuaW5jbHVkZXMoc2VhcmNoKSlcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGdyb3VwLnNlbmRUcmFuc2FjdGlvbnMuZW50cmllcyA9IFsuLi5vcmlnaW5hbFNlbmRFbnRyaWVzXTtcclxuICAgICAgICBncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXMgPSBbLi4ub3JpZ2luYWxSZWNlaXZlRW50cmllc107XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJlc2V0IGJvdGggZ3JpZHNcclxuICAgICAgW2dyb3VwLnNlbmRUcmFuc2FjdGlvbnMuZW50cmllcywgZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucy5lbnRyaWVzXS5mb3JFYWNoKChlbnRyaWVzLCBpZHgpID0+IHtcclxuICAgICAgICBjb25zdCBncmlkQXBpID0gdGhpcy5ncmlkQXBpc1tpbmRleCAqIDIgKyBpZHhdOyAvLyBrZWVwIHNlcGFyYXRlIGlkcyBmb3IgZ3JpZHNcclxuICAgICAgICBpZiAoZ3JpZEFwaSkge1xyXG4gICAgICAgICAgZ3JpZEFwaS5zZXRSb3dEYXRhKGVudHJpZXMpO1xyXG4gICAgICAgICAgaWYgKGdyaWRBcGkucGFnaW5hdGlvbkdvVG9GaXJzdFBhZ2UpIGdyaWRBcGkucGFnaW5hdGlvbkdvVG9GaXJzdFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgb25HcmlkUmVhZHkocGFyYW1zOiBHcmlkUmVhZHlFdmVudCwgaWQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5ncmlkQXBpc1tpZF0gPSBwYXJhbXMuYXBpO1xyXG4gICAgdGhpcy5ncmlkQ29sdW1uQXBpc1tpZF0gPSBwYXJhbXMuY29sdW1uQXBpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdXRvU2l6ZUFsbENvbHVtbnMoaWQpLCAxMDApO1xyXG4gIH1cclxuXHJcblxyXG4gIG9uR3JpZFNpemVDaGFuZ2VkKHBhcmFtczogYW55LCBpZDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmF1dG9TaXplQWxsQ29sdW1ucyhpZCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgYXV0b1NpemVBbGxDb2x1bW5zKGlkOiBudW1iZXIsIHNraXBIZWFkZXI6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgY29uc3QgY29sdW1uQXBpID0gdGhpcy5ncmlkQ29sdW1uQXBpc1tpZF07XHJcbiAgICBpZiAoIWNvbHVtbkFwaSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGFsbENvbHVtbklkczogc3RyaW5nW10gPSBbXTtcclxuICAgIGNvbHVtbkFwaS5nZXRDb2x1bW5zKCkuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcclxuICAgICAgYWxsQ29sdW1uSWRzLnB1c2goY29sdW1uLmdldElkKCkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29sdW1uQXBpLmF1dG9TaXplQ29sdW1ucyhhbGxDb2x1bW5JZHMsIHNraXBIZWFkZXIpO1xyXG4gIH1cclxuXHJcblxyXG4gIGZvcm1hdE51bWJlcihwYXJhbXM6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAocGFyYW1zLnZhbHVlID09IG51bGwpIHJldHVybiAnJztcclxuXHJcbiAgICBjb25zdCBmaWVsZCA9IHBhcmFtcy5jb2xEZWYuZmllbGQ7XHJcblxyXG4gICAgaWYgKGZpZWxkID09PSAnc2V0dGxlbWVudFJhdGUnKSB7XHJcbiAgICAgIHJldHVybiBOdW1iZXIocGFyYW1zLnZhbHVlKS50b0ZpeGVkKDgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBOdW1iZXIocGFyYW1zLnZhbHVlKS50b0ZpeGVkKDMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHBvcnRUb1BkZigpIHtcclxuICAgIGlmICghdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzPy5sZW5ndGgpIHJldHVybjtcclxuICAgIGNvbnN0IHRpdGxlID0gJ0FjY291bnRpbmcgUmVwb3J0JztcclxuICAgIGNvbnN0IGZpbGVOYW1lID0gJ0FjY291bnRpbmctUmVwb3J0LnBkZic7XHJcblxyXG4gICAgY29uc3QgbWV0YWRhdGE6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtcclxuICAgICAgWydSZXBvcnQgVXNlcjonLCB0aGlzLnJlcG9ydFVzZXJdLFxyXG4gICAgICBbJ1JlcG9ydCBUaW1lOicsIHRoaXMucmVwb3J0VGltZV0sXHJcbiAgICAgIFsnUmVwb3J0IFBlcmlvZDonLCB0aGlzLnJlcG9ydFBlcmlvZF0sXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0IGRvYyA9IG5ldyBqc1BERih7IG9yaWVudGF0aW9uOiAnbGFuZHNjYXBlJywgdW5pdDogJ21tJywgZm9ybWF0OiBbNzAwLCAyMTBdIH0pO1xyXG5cclxuICAgIGNvbnN0IGxvZ29XaWR0aCA9IDM4LjQsIGxvZ29IZWlnaHQgPSAxNy41LCBsb2dvWCA9IDE1LCBsb2dvWSA9IDg7XHJcbiAgICBjb25zdCBwYWdlV2lkdGggPSBkb2MuaW50ZXJuYWwucGFnZVNpemUud2lkdGg7XHJcbiAgICBjb25zdCB0aXRsZVkgPSAxODtcclxuXHJcbiAgICAvLyBMb2dvXHJcbiAgICBpZiAodGhpcy5leHBvcnRTZXJ2aWNlWydsb2dvQmFzZTY0J10pIHtcclxuICAgICAgZG9jLmFkZEltYWdlKHRoaXMuZXhwb3J0U2VydmljZVsnbG9nb0Jhc2U2NCddLCAnUE5HJywgbG9nb1gsIGxvZ29ZLCBsb2dvV2lkdGgsIGxvZ29IZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRpdGxlXHJcbiAgICBkb2Muc2V0Rm9udFNpemUoMTUpO1xyXG4gICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcbiAgICBkb2MudGV4dCh0aXRsZSwgcGFnZVdpZHRoIC8gMiwgdGl0bGVZLCB7IGFsaWduOiAnY2VudGVyJyB9KTtcclxuXHJcbiAgICBsZXQgY3VycmVudFkgPSB0aXRsZVkgKyAxNDtcclxuXHJcbiAgICAvLyBNZXRhZGF0YVxyXG4gICAgZG9jLnNldEZvbnRTaXplKDEwKTtcclxuICAgIG1ldGFkYXRhLmZvckVhY2goKFtsYWJlbCwgdmFsdWVdLCBpKSA9PiB7XHJcbiAgICAgIGNvbnN0IHkgPSBjdXJyZW50WSArIGkgKiA3O1xyXG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcclxuICAgICAgZG9jLnRleHQobGFiZWwsIDE1LCB5KTtcclxuICAgICAgY29uc3QgbGFiZWxXaWR0aCA9IGRvYy5nZXRUZXh0V2lkdGgobGFiZWwgKyAnICcpO1xyXG4gICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ25vcm1hbCcpO1xyXG4gICAgICBkb2MudGV4dCh2YWx1ZSA/PyAnJywgMTUgKyBsYWJlbFdpZHRoLCB5KTtcclxuICAgIH0pO1xyXG4gICAgY3VycmVudFkgKz0gbWV0YWRhdGEubGVuZ3RoICogNyArIDU7XHJcblxyXG4gICAgLy8gQnJhbmNoZXNcclxuICAgIHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgZG9jLnNldEZvbnRTaXplKDEwKTtcclxuICAgICAgZG9jLnNldEZvbnQoJ2hlbHZldGljYScsICdib2xkJyk7XHJcblxyXG4gICAgICBjb25zdCBicmFuY2hUZXh0ID0gYEJyYW5jaCAoTmFtZSAmIENvZGUpOiAke2dyb3VwLmJyYW5jaE5hbWVBbmRDb2RlfWA7XHJcbiAgICAgIGRvYy50ZXh0KGJyYW5jaFRleHQsIDE1LCBjdXJyZW50WSk7XHJcbiAgICAgIGN1cnJlbnRZICs9IDc7XHJcblxyXG4gICAgICAvLyBMb29wIHN1Ymdyb3VwcyAoU2VuZCArIFJlY2VpdmUpXHJcbiAgICAgIFtncm91cC5zZW5kVHJhbnNhY3Rpb25zLCBncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zXS5mb3JFYWNoKHN1Ykdyb3VwID0+IHtcclxuICAgICAgICBpZiAoIXN1Ykdyb3VwLmVudHJpZXM/Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBkb2Muc2V0Rm9udCgnaGVsdmV0aWNhJywgJ2JvbGQnKTtcclxuICAgICAgICBkb2MudGV4dChgU3ViIEdyb3VwOiAke3N1Ykdyb3VwLnN1Ykdyb3VwTmFtZX1gLCAxNSwgY3VycmVudFkpO1xyXG4gICAgICAgIGN1cnJlbnRZICs9IDU7XHJcblxyXG4gICAgICAgIGNvbnN0IHsgaGVhZGVycywgcm93cyB9ID0gdGhpcy5wcmVwYXJlQWNjb3VudGluZ1RhYmxlKHN1Ykdyb3VwLmVudHJpZXMpO1xyXG5cclxuICAgICAgICAoZG9jIGFzIGFueSkuYXV0b1RhYmxlKHtcclxuICAgICAgICAgIGhlYWQ6IFtoZWFkZXJzXSxcclxuICAgICAgICAgIGJvZHk6IHJvd3MsXHJcbiAgICAgICAgICBzdGFydFk6IGN1cnJlbnRZLFxyXG4gICAgICAgICAgdGhlbWU6ICdncmlkJyxcclxuICAgICAgICAgIGhlYWRTdHlsZXM6IHtcclxuICAgICAgICAgICAgZmlsbENvbG9yOiBbMjIwLCAyMjAsIDIyMF0sIHRleHRDb2xvcjogMCxcclxuICAgICAgICAgICAgZm9udFN0eWxlOiAnYm9sZCcsIGZvbnRTaXplOiA5LCBoYWxpZ246ICdjZW50ZXInLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGJvZHlTdHlsZXM6IHsgZm9udFNpemU6IDgsIGZpbGxDb2xvcjogWzI1NSwgMjU1LCAyNTVdLCB0ZXh0Q29sb3I6IFswLCAwLCAwXSB9LFxyXG4gICAgICAgICAgc3R5bGVzOiB7IGNlbGxQYWRkaW5nOiAyLCBvdmVyZmxvdzogJ2xpbmVicmVhaycsIG1pbkNlbGxIZWlnaHQ6IDYgfSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY3VycmVudFkgPSAoZG9jIGFzIGFueSkubGFzdEF1dG9UYWJsZS5maW5hbFkgKyAxMDtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBkb2Muc2F2ZShmaWxlTmFtZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cG9ydFRvRXhjZWwoKSB7XHJcbiAgICBpZiAoIXRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcz8ubGVuZ3RoKSByZXR1cm47XHJcbiAgICBjb25zdCB0aXRsZSA9ICdBY2NvdW50aW5nIFJlcG9ydCc7XHJcbiAgICBjb25zdCBmaWxlTmFtZSA9ICdBY2NvdW50aW5nLVJlcG9ydC54bHN4JztcclxuXHJcbiAgICBjb25zdCB3b3JrYm9vayA9IG5ldyBFeGNlbEpTLldvcmtib29rKCk7XHJcbiAgICBjb25zdCB3b3Jrc2hlZXQgPSB3b3JrYm9vay5hZGRXb3Jrc2hlZXQoJ0FjY291bnRpbmcgUmVwb3J0Jyk7XHJcbiAgICBsZXQgY3VycmVudFJvdyA9IDE7XHJcblxyXG4gICAgLy8gTG9nb1xyXG4gICAgaWYgKHRoaXMuZXhwb3J0U2VydmljZS5sb2dvQmFzZTY0KSB7XHJcbiAgICAgIGNvbnN0IGJhc2U2NERhdGEgPSB0aGlzLmV4cG9ydFNlcnZpY2UubG9nb0Jhc2U2NC5yZXBsYWNlKC9eZGF0YTppbWFnZVxcL1xcdys7YmFzZTY0LC8sICcnKTtcclxuICAgICAgY29uc3QgaW1hZ2VJZCA9IHdvcmtib29rLmFkZEltYWdlKHtcclxuICAgICAgICBiYXNlNjQ6IGJhc2U2NERhdGEsXHJcbiAgICAgICAgZXh0ZW5zaW9uOiAncG5nJyxcclxuICAgICAgfSk7XHJcbiAgICAgIHdvcmtzaGVldC5hZGRJbWFnZShpbWFnZUlkLCB7IHRsOiB7IGNvbDogMCwgcm93OiAwIH0sIGV4dDogeyB3aWR0aDogMTQ1LCBoZWlnaHQ6IDY2IH0sIGVkaXRBczogJ29uZUNlbGwnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRpdGxlXHJcbiAgICBjb25zdCB0aXRsZVJvdyA9IHdvcmtzaGVldC5nZXRSb3coY3VycmVudFJvdyk7XHJcbiAgICB0aXRsZVJvdy5nZXRDZWxsKDYpLnZhbHVlID0gdGl0bGU7XHJcbiAgICB0aXRsZVJvdy5nZXRDZWxsKDYpLmZvbnQgPSB7IGJvbGQ6IHRydWUsIHNpemU6IDE2IH07XHJcbiAgICB0aXRsZVJvdy5nZXRDZWxsKDYpLmFsaWdubWVudCA9IHsgdmVydGljYWw6ICdtaWRkbGUnLCBob3Jpem9udGFsOiAnbGVmdCcgfTtcclxuICAgIHdvcmtzaGVldC5tZXJnZUNlbGxzKGBGJHtjdXJyZW50Um93fTpKJHtjdXJyZW50Um93fWApO1xyXG4gICAgY3VycmVudFJvdyArPSAzO1xyXG5cclxuICAgIC8vIE1ldGFkYXRhXHJcbiAgICBjb25zdCBtZXRhZGF0YTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xyXG4gICAgICBbJ1JlcG9ydCBVc2VyJywgdGhpcy5yZXBvcnRVc2VyXSxcclxuICAgICAgWydSZXBvcnQgVGltZScsIHRoaXMucmVwb3J0VGltZV0sXHJcbiAgICAgIFsnUmVwb3J0IFBlcmlvZCcsIHRoaXMucmVwb3J0UGVyaW9kXSxcclxuICAgIF07XHJcbiAgICBtZXRhZGF0YS5mb3JFYWNoKChbbGFiZWwsIHZhbHVlXSkgPT4ge1xyXG4gICAgICBjb25zdCByb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XHJcbiAgICAgIHJvdy5nZXRDZWxsKDEpLnZhbHVlID0ge1xyXG4gICAgICAgIHJpY2hUZXh0OiBbXHJcbiAgICAgICAgICB7IHRleHQ6IGAke2xhYmVsfTogYCwgZm9udDogeyBib2xkOiB0cnVlIH0gfSxcclxuICAgICAgICAgIHsgdGV4dDogdmFsdWUgPz8gJycsIGZvbnQ6IHsgYm9sZDogZmFsc2UgfSB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgd29ya3NoZWV0LmFkZFJvdyhbXSk7IGN1cnJlbnRSb3crKztcclxuXHJcbiAgICAvLyBCcmFuY2hlc1xyXG4gICAgdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xyXG4gICAgICBjb25zdCBicmFuY2hSb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XHJcbiAgICAgIGJyYW5jaFJvdy5nZXRDZWxsKDEpLnZhbHVlID0ge1xyXG4gICAgICAgIHJpY2hUZXh0OiBbXHJcbiAgICAgICAgICB7IHRleHQ6ICdCcmFuY2ggKE5hbWUgJiBDb2RlKTogJywgZm9udDogeyBib2xkOiB0cnVlIH0gfSxcclxuICAgICAgICAgIHsgdGV4dDogZ3JvdXAuYnJhbmNoTmFtZUFuZENvZGUgPz8gJycsIGZvbnQ6IHsgYm9sZDogZmFsc2UgfSB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9O1xyXG4gICAgICB3b3Jrc2hlZXQuYWRkUm93KFtdKTsgY3VycmVudFJvdysrO1xyXG5cclxuICAgICAgLy8gTG9vcCBzdWJncm91cHNcclxuICAgICAgW2dyb3VwLnNlbmRUcmFuc2FjdGlvbnMsIGdyb3VwLnJlY2VpdmVUcmFuc2FjdGlvbnNdLmZvckVhY2goc3ViR3JvdXAgPT4ge1xyXG4gICAgICAgIGlmICghc3ViR3JvdXAuZW50cmllcz8ubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IHN1Ykdyb3VwUm93ID0gd29ya3NoZWV0LmdldFJvdyhjdXJyZW50Um93KyspO1xyXG4gICAgICAgIHN1Ykdyb3VwUm93LmdldENlbGwoMSkudmFsdWUgPSB7XHJcbiAgICAgICAgICByaWNoVGV4dDogW1xyXG4gICAgICAgICAgICB7IHRleHQ6ICdTdWIgR3JvdXA6ICcsIGZvbnQ6IHsgYm9sZDogdHJ1ZSB9IH0sXHJcbiAgICAgICAgICAgIHsgdGV4dDogc3ViR3JvdXAuc3ViR3JvdXBOYW1lID8/ICcnLCBmb250OiB7IGJvbGQ6IGZhbHNlIH0gfVxyXG4gICAgICAgICAgXVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHdvcmtzaGVldC5hZGRSb3coW10pOyBjdXJyZW50Um93Kys7XHJcblxyXG4gICAgICAgIC8vIEhlYWRlcnNcclxuICAgICAgICBjb25zdCB7IGhlYWRlcnMsIHJvd3MgfSA9IHRoaXMucHJlcGFyZUFjY291bnRpbmdUYWJsZShzdWJHcm91cC5lbnRyaWVzKTtcclxuICAgICAgICBjb25zdCBoZWFkZXJSb3cgPSB3b3Jrc2hlZXQuZ2V0Um93KGN1cnJlbnRSb3crKyk7XHJcbiAgICAgICAgaGVhZGVycy5mb3JFYWNoKChoZWFkZXIsIGkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNlbGwgPSBoZWFkZXJSb3cuZ2V0Q2VsbChpICsgMSk7XHJcbiAgICAgICAgICBjZWxsLnZhbHVlID0gaGVhZGVyO1xyXG4gICAgICAgICAgY2VsbC5mb250ID0geyBib2xkOiB0cnVlIH07XHJcbiAgICAgICAgICBjZWxsLmZpbGwgPSB7IHR5cGU6ICdwYXR0ZXJuJywgcGF0dGVybjogJ3NvbGlkJywgZmdDb2xvcjogeyBhcmdiOiAnRDlEOUQ5JyB9IH07XHJcbiAgICAgICAgICBjZWxsLmFsaWdubWVudCA9IHsgdmVydGljYWw6ICdtaWRkbGUnLCBob3Jpem9udGFsOiAnY2VudGVyJyB9O1xyXG4gICAgICAgICAgY2VsbC5ib3JkZXIgPSB7IHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sIGJvdHRvbTogeyBzdHlsZTogJ3RoaW4nIH0sIGxlZnQ6IHsgc3R5bGU6ICd0aGluJyB9LCByaWdodDogeyBzdHlsZTogJ3RoaW4nIH0gfTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gUm93c1xyXG4gICAgICAgIHJvd3MuZm9yRWFjaChyID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJvdyA9IHdvcmtzaGVldC5nZXRSb3coY3VycmVudFJvdysrKTtcclxuICAgICAgICAgIHIuZm9yRWFjaCgodmFsLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSByb3cuZ2V0Q2VsbChpICsgMSk7XHJcbiAgICAgICAgICAgIGNlbGwudmFsdWUgPSB2YWw7XHJcbiAgICAgICAgICAgIGNlbGwuYm9yZGVyID0geyB0b3A6IHsgc3R5bGU6ICd0aGluJyB9LCBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LCBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSwgcmlnaHQ6IHsgc3R5bGU6ICd0aGluJyB9IH07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgd29ya3NoZWV0LmFkZFJvdyhbXSk7IGN1cnJlbnRSb3crKztcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBBdXRvLWFkanVzdCBjb2x1bW4gd2lkdGhzIChpbmNsdWRpbmcgU3IgTm8pXHJcbiAgICBjb25zdCBhbGxIZWFkZXJzID0gWydTciBObycsIC4uLnRoaXMuY29sdW1uRGVmcy5tYXAoYyA9PiBjLmhlYWRlck5hbWUpXTtcclxuICAgIGFsbEhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyLCBpKSA9PiB7XHJcbiAgICAgIGxldCBtYXhMZW5ndGggPSBoZWFkZXIubGVuZ3RoOyAvLyBzdGFydCB3aXRoIGhlYWRlciBsZW5ndGhcclxuXHJcbiAgICAgIHRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcclxuICAgICAgICBbZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucywgZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9uc10uZm9yRWFjaChzdWJHcm91cCA9PiB7XHJcbiAgICAgICAgICBzdWJHcm91cC5lbnRyaWVzLmZvckVhY2goZW50cnkgPT4ge1xyXG4gICAgICAgICAgICAvLyBTciBObyBjb2x1bW4gKGkgPSAwKSBpcyBqdXN0IG51bWJlcnNcclxuICAgICAgICAgICAgbGV0IHZhbCA9IGkgPT09IDAgPyAoc3ViR3JvdXAuZW50cmllcy5pbmRleE9mKGVudHJ5KSArIDEpLnRvU3RyaW5nKCkgOiAoZW50cnlbdGhpcy5jb2x1bW5EZWZzW2kgLSAxXT8uZmllbGRdID8/ICcnKTtcclxuICAgICAgICAgICAgY29uc3QgbGVuID0gdmFsLnRvU3RyaW5nKCkubGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAobGVuID4gbWF4TGVuZ3RoKSBtYXhMZW5ndGggPSBsZW47XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB3b3Jrc2hlZXQuZ2V0Q29sdW1uKGkgKyAxKS53aWR0aCA9IG1heExlbmd0aCArIDU7IC8vIHBhZGRpbmdcclxuICAgIH0pO1xyXG5cclxuICAgIHdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKS50aGVuKGJ1ZmZlciA9PiB7XHJcbiAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xyXG4gICAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCdcclxuICAgICAgfSk7XHJcbiAgICAgIEZpbGVTYXZlci5zYXZlQXMoYmxvYiwgZmlsZU5hbWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgcHJpdmF0ZSBwcmVwYXJlQWNjb3VudGluZ1RhYmxlKGRhdGE6IGFueVtdKTogeyBoZWFkZXJzOiBzdHJpbmdbXSwgcm93czogYW55W11bXSB9IHtcclxuICAgIGNvbnN0IGN1cnJlbmN5RmllbGRzID0gWydhbW91bnRQYWlkJywgJ3NlcnZpY2VGZWUnLCAndGF4JywgJ3ByaW5jaXBsZVNlbmRBbW91bnQnLCAnY2xpZW50U2V0dGxlbWVudEluU0NjeSddO1xyXG4gICAgY29uc3QgaGVhZGVycyA9IFsnU3IgTm8nLCAuLi50aGlzLmNvbHVtbkRlZnMubWFwKGMgPT4gYy5oZWFkZXJOYW1lKV07XHJcblxyXG4gICAgaWYgKCFkYXRhIHx8IGRhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiB7IGhlYWRlcnMsIHJvd3M6IFtdIH07IC8vIHJldHVybiBoZWFkZXJzIG9ubHksIGVtcHR5IHJvd3NcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByb3dzID0gZGF0YS5tYXAoKHJvdywgaSkgPT4ge1xyXG4gICAgICByZXR1cm4gW1xyXG4gICAgICAgIGkgKyAxLFxyXG4gICAgICAgIC4uLnRoaXMuY29sdW1uRGVmcy5tYXAoY29sID0+IHtcclxuICAgICAgICAgIGxldCB2YWwgPSByb3dbY29sLmZpZWxkXTtcclxuICAgICAgICAgIGlmICh2YWwgPT0gbnVsbCkgcmV0dXJuICcnO1xyXG4gICAgICAgICAgaWYgKGN1cnJlbmN5RmllbGRzLmluY2x1ZGVzKGNvbC5maWVsZCkpIHJldHVybiBwYXJzZUZsb2F0KHZhbCkudG9GaXhlZCgzKTtcclxuICAgICAgICAgIGlmIChjb2wuZmllbGQgPT09ICdzZXR0bGVtZW50UmF0ZScpIHJldHVybiBwYXJzZUZsb2F0KHZhbCkudG9GaXhlZCg4KTtcclxuICAgICAgICAgIHJldHVybiB2YWw7XHJcbiAgICAgICAgfSlcclxuICAgICAgXTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB7IGhlYWRlcnMsIHJvd3MgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhwb3J0VG9Dc3YoKSB7XHJcbiAgICBpZiAoIXRoaXMuYWNjb3VudGluZ1JlcG9ydE1vZGVsLmFjY291bnRpbmdSZXBvcnRCeUJyYW5jaEdyb3Vwcz8ubGVuZ3RoKSByZXR1cm47XHJcbiAgICBjb25zdCBmaWxlTmFtZSA9ICdBY2NvdW50aW5nLVJlcG9ydC5jc3YnO1xyXG4gICAgY29uc3Qgcm93czogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICByb3dzLnB1c2goJ1JlcG9ydCBUaXRsZTogQWNjb3VudGluZyBSZXBvcnQnKTtcclxuICAgIHJvd3MucHVzaCgnJyk7XHJcbiAgICByb3dzLnB1c2goYFJlcG9ydCBVc2VyOiAke3RoaXMucmVwb3J0VXNlcn1gKTtcclxuICAgIHJvd3MucHVzaChgUmVwb3J0IFRpbWU6ICR7dGhpcy5yZXBvcnRUaW1lfWApO1xyXG4gICAgcm93cy5wdXNoKGBSZXBvcnQgUGVyaW9kOiAke3RoaXMucmVwb3J0UGVyaW9kfWApO1xyXG4gICAgcm93cy5wdXNoKGBDb21wYW55OiBYcHJlc3MgTW9uZXlgKTtcclxuICAgIHJvd3MucHVzaCgnJyk7XHJcblxyXG4gICAgdGhpcy5hY2NvdW50aW5nUmVwb3J0TW9kZWwuYWNjb3VudGluZ1JlcG9ydEJ5QnJhbmNoR3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xyXG4gICAgICByb3dzLnB1c2goYEJyYW5jaCAoTmFtZSAmIENvZGUpOiAke2dyb3VwLmJyYW5jaE5hbWVBbmRDb2RlfWApO1xyXG5cclxuICAgICAgW2dyb3VwLnNlbmRUcmFuc2FjdGlvbnMsIGdyb3VwLnJlY2VpdmVUcmFuc2FjdGlvbnNdLmZvckVhY2goc3ViR3JvdXAgPT4ge1xyXG4gICAgICAgIGlmICghc3ViR3JvdXAuZW50cmllcz8ubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgICAgIHJvd3MucHVzaChgU3ViIEdyb3VwOiAke3N1Ykdyb3VwLnN1Ykdyb3VwTmFtZX1gKTtcclxuXHJcbiAgICAgICAgLy8gIEFkZCBcIlNyIE5vXCIgYXQgdGhlIGJlZ2lubmluZyBvZiBoZWFkZXJzXHJcbiAgICAgICAgcm93cy5wdXNoKFsnXCJTciBOb1wiJywgLi4udGhpcy5jb2x1bW5EZWZzLm1hcChjb2wgPT4gYFwiJHtjb2wuaGVhZGVyTmFtZX1cImApXS5qb2luKCcsJykpO1xyXG5cclxuICAgICAgICBzdWJHcm91cC5lbnRyaWVzLmZvckVhY2goKGVudHJ5LCBpZHgpID0+IHtcclxuICAgICAgICAgIC8vICBBZGQgc2VyaWFsIG51bWJlciBhdCBzdGFydCBvZiBlYWNoIHJvd1xyXG4gICAgICAgICAgY29uc3Qgcm93ID0gW1xyXG4gICAgICAgICAgICAoaWR4ICsgMSkudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgLi4udGhpcy5jb2x1bW5EZWZzLm1hcChjb2wgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IGVudHJ5W2NvbC5maWVsZF07XHJcbiAgICAgICAgICAgICAgaWYgKHZhbCA9PSBudWxsKSByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgICAgaWYgKFsnYW1vdW50UGFpZCcsICdzZXJ2aWNlRmVlJywgJ3RheCcsICdwcmluY2lwbGVTZW5kQW1vdW50JywgJ2NsaWVudFNldHRsZW1lbnRJblNDY3knXS5pbmNsdWRlcyhjb2wuZmllbGQpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWwpLnRvRml4ZWQoMyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChjb2wuZmllbGQgPT09ICdzZXR0bGVtZW50UmF0ZScpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbCkudG9GaXhlZCg4KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGBcIiR7dmFsfVwiYDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIF0uam9pbignLCcpO1xyXG4gICAgICAgICAgcm93cy5wdXNoKHJvdyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJvd3MucHVzaCgnJyk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtyb3dzLmpvaW4oJ1xcbicpXSwgeyB0eXBlOiAndGV4dC9jc3Y7Y2hhcnNldD11dGYtODsnIH0pO1xyXG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgIGxpbmsuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCBmaWxlTmFtZSk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgbGluay5jbGljaygpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG5cclxuICBnZXRSZXBvcnQocGF5bG9hZDogYW55KSB7XHJcbiAgICBjb25zdCBtb2RhbCA9IHBheWxvYWQ/Lm1vZGFsIHx8IHBheWxvYWQ7XHJcblxyXG4gICAgY29uc3QgcmVxOiBBY2NvdW50aW5nUmVwb3J0UmVxdWVzdCA9IHtcclxuICAgICAgc3RhcnREYXRlOiBtb2RhbC5mcm9tRGF0ZSwgLy8geXl5eS1NTS1kZCBmcm9tIHRoZSBmaWx0ZXJcclxuICAgICAgZW5kRGF0ZTogbW9kYWwudG9EYXRlLFxyXG4gICAgICBzZW5kQ291bnRyeUNvZGU6IG1vZGFsLnNlbmRDb3VudHJ5ID8/ICdBTEwnLFxyXG4gICAgICByZWN2Q291bnRyeUNvZGU6IG1vZGFsLnJlY2VpdmVDb3VudHJ5ID8/ICdBTEwnLFxyXG4gICAgICBidXNpbmVzc1BhcnRuZXJDb3JyZWxhdGlvbklEOiBtb2RhbC5jbGllbnQgPz8gJ0FMTCcsXHJcbiAgICAgIHRyYW5zYWN0aW9uU3RhdHVzOiBtb2RhbC50cmFuc2FjdGlvblN0YXR1cy5qb2luKFwiLFwiKSxcclxuICAgICAgcGF5b3V0Q3VycmVuY3k6IG1vZGFsLmN1cnJlbmN5ID8/ICdBTEwnLFxyXG4gICAgICB0cmFuc2FjdGlvblR5cGU6IG1vZGFsLnByb2R1Y3QgPz8gJ0FMTCcsXHJcbiAgICAgIGJyYW5jaENvZGU6IG1vZGFsLmJyYW5jaCA/PyAnQUxMJyxcclxuICAgICAgY29tcGFueUNvZGU6ICdBTEwnIC8vIG9yICdCSCcgaWYgeW91ciBBUEkgcmVxdWlyZXMgaXQgc3BlY2lmaWNhbGx5XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuZ2V0QWNjb3VudGluZ1JlcG9ydChyZXEpO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGxpYi1zZWFyY2gtZmlsdGVyIFtSZXBvcnROYW1lXT1cIlJlcG9ydE5hbWVcIiAoc2VhcmNoQ2xpY2tlZCk9XCJnZXRSZXBvcnQoJGV2ZW50KVwiPjwvbGliLXNlYXJjaC1maWx0ZXI+XHJcblxyXG48YXBwLWxvYWRlciBjbGFzcz1cIlwiICpuZ0lmPVwibG9hZGluZ1N0YXRlID09IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nXCI+PC9hcHAtbG9hZGVyPlxyXG5cclxuPGRpdiAqbmdJZj1cImFjY291bnRpbmdSZXBvcnRNb2RlbCE9dW5kZWZpbmVkICYmIGFjY291bnRpbmdSZXBvcnRNb2RlbC5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHM/Lmxlbmd0aFwiPlxyXG5cclxuICA8bGliLW1ldGFkYXRhIFtyZXBvcnROYW1lXT1cIlJlcG9ydE5hbWVcIiBbc2hvd21ldGFEYXRhT25lXT1cInRydWVcIiBbc2hvd21ldGFEYXRhVHdvXT1cInRydWVcIiBbbWV0YURhdGFPbmVdPVwibGVmdERhdGFcIlxyXG4gICAgW21ldGFEYXRhVHdvXT1cInJpZ2h0RGF0YVwiIChleHBvcnRFdmVudCk9XCJoYW5kbGVFeHBvcnQoJGV2ZW50KVwiIChzZWFyY2hFdmVudCk9XCJvblNlYXJjaCgkZXZlbnQpXCI+PC9saWItbWV0YWRhdGE+XHJcblxyXG4gIDxuZ2ItYWNjb3JkaW9uICNhY2M9XCJuZ2JBY2NvcmRpb25cIiBbY2xvc2VPdGhlcnNdPVwiZmFsc2VcIiBbYWN0aXZlSWRzXT1cIidwYW5lbC0wJ1wiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgYWNjb3VudGluZ1JlcG9ydE1vZGVsPy5hY2NvdW50aW5nUmVwb3J0QnlCcmFuY2hHcm91cHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgPG5nYi1wYW5lbCBbaWRdPVwiJ3BhbmVsLScgKyBpXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nYlBhbmVsVGl0bGU+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJwYW5lbC1jbHNcIj5cclxuICAgICAgICAgICAge3sgZ3JvdXAuYnJhbmNoTmFtZUFuZENvZGUgfX1cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIG5nYlBhbmVsQ29udGVudD5cclxuICAgICAgICAgIDwhLS0gU2VuZCBUcmFuc2FjdGlvbnMgLS0+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucy5lbnRyaWVzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8aDYgY2xhc3M9XCJzdWJncm91cGNvbHVtblwiPnt7IGdyb3VwLnNlbmRUcmFuc2FjdGlvbnMuc3ViR3JvdXBOYW1lIH19PC9oNj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTtcIj5cclxuICAgICAgICAgICAgICA8bGliLXBhZ2Utc2l6ZS1zZWxlY3RvciBbdG90YWxFbnRyaWVzXT1cImdyb3VwLnNlbmRUcmFuc2FjdGlvbnMuZW50cmllcy5sZW5ndGhcIiBbZGVmYXVsdFNpemVdPVwiJzE1J1wiXHJcbiAgICAgICAgICAgICAgICBbZ3JpZEFwaV09XCJncmlkQXBpc1tpICogMl1cIj5cclxuICAgICAgICAgICAgICA8L2xpYi1wYWdlLXNpemUtc2VsZWN0b3I+XHJcblxyXG4gICAgICAgICAgICAgIDxhZy1ncmlkLWFuZ3VsYXIgY2xhc3M9XCJhZy10aGVtZS1hbHBpbmUgY29tcGFjdC1ncmlkIGdyaWQtc2l6ZVwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMzc1cHg7XCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIiBbZGVmYXVsdENvbERlZl09XCJkZWZhdWx0Q29sRGVmXCIgW3Jvd0RhdGFdPVwiZ3JvdXAuc2VuZFRyYW5zYWN0aW9ucy5lbnRyaWVzXCJcclxuICAgICAgICAgICAgICAgIFtyb3dIZWlnaHRdPVwiMjBcIiBbaGVhZGVySGVpZ2h0XT1cIjI0XCIgW3BhZ2luYXRpb25dPVwidHJ1ZVwiIFtwYWdpbmF0aW9uUGFnZVNpemVdPVwicGFnaW5hdGlvbkFycmF5W2ldXCJcclxuICAgICAgICAgICAgICAgIChncmlkUmVhZHkpPVwib25HcmlkUmVhZHkoJGV2ZW50LCBpICogMilcIiAoZ3JpZFNpemVDaGFuZ2VkKT1cIm9uR3JpZFNpemVDaGFuZ2VkKCRldmVudCwgaSAqIDIpXCI+XHJcbiAgICAgICAgICAgICAgPC9hZy1ncmlkLWFuZ3VsYXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBSZWNlaXZlIFRyYW5zYWN0aW9ucyAtLT5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cC5yZWNlaXZlVHJhbnNhY3Rpb25zLmVudHJpZXMubGVuZ3RoXCIgY2xhc3M9XCJtdC0zXCI+XHJcbiAgICAgICAgICAgIDxoNiBjbGFzcz1cInN1Ymdyb3VwY29sdW1uXCI+e3sgZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucy5zdWJHcm91cE5hbWUgfX08L2g2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICAgICAgICAgIDxsaWItcGFnZS1zaXplLXNlbGVjdG9yIFt0b3RhbEVudHJpZXNdPVwiZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucy5lbnRyaWVzLmxlbmd0aFwiIFtkZWZhdWx0U2l6ZV09XCInMTUnXCJcclxuICAgICAgICAgICAgICAgIFtncmlkQXBpXT1cImdyaWRBcGlzW2kgKiAyICsgMV1cIj5cclxuICAgICAgICAgICAgICA8L2xpYi1wYWdlLXNpemUtc2VsZWN0b3I+XHJcblxyXG4gICAgICAgICAgICAgIDxhZy1ncmlkLWFuZ3VsYXIgY2xhc3M9XCJhZy10aGVtZS1hbHBpbmUgY29tcGFjdC1ncmlkIGdyaWQtc2l6ZVwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMzc1cHg7XCJcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNcIiBbZGVmYXVsdENvbERlZl09XCJkZWZhdWx0Q29sRGVmXCIgW3Jvd0RhdGFdPVwiZ3JvdXAucmVjZWl2ZVRyYW5zYWN0aW9ucy5lbnRyaWVzXCJcclxuICAgICAgICAgICAgICAgIFtyb3dIZWlnaHRdPVwiMjBcIiBbaGVhZGVySGVpZ2h0XT1cIjI0XCIgW3BhZ2luYXRpb25dPVwidHJ1ZVwiIFtwYWdpbmF0aW9uUGFnZVNpemVdPVwicGFnaW5hdGlvbkFycmF5W2ldXCJcclxuICAgICAgICAgICAgICAgIChncmlkUmVhZHkpPVwib25HcmlkUmVhZHkoJGV2ZW50LCBpICogMiArIDEpXCIgKGdyaWRTaXplQ2hhbmdlZCk9XCJvbkdyaWRTaXplQ2hhbmdlZCgkZXZlbnQsIGkgKiAyKVwiPlxyXG4gICAgICAgICAgICAgIDwvYWctZ3JpZC1hbmd1bGFyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvbmdiLXBhbmVsPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9uZ2ItYWNjb3JkaW9uPlxyXG5cclxuXHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmcgbXQtM1wiICpuZ0lmPVwibm9EYXRhRm91bmQgJiYgbG9hZGluZ1N0YXRlIT1Db21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZ1wiPlxyXG4gIE5vIERhdGEgZm91bmQgbWF0Y2hpbmcgeW91ciBzZWFyY2ggY3JpdGVyaWEuXHJcbjwvZGl2PiJdfQ==