@huntsman-cancer-institute/dictionary-editor 17.7.0 → 17.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dictionary-editor.module.d.ts +11 -10
- package/directives/ri-ripple-effect-dict.directive.d.ts +12 -0
- package/esm2022/components/detail.component.mjs +11 -10
- package/esm2022/components/new-row.component.mjs +7 -6
- package/esm2022/dictionary-editor.module.mjs +10 -5
- package/esm2022/directives/ri-ripple-effect-dict.directive.mjs +45 -0
- package/esm2022/grid-editors/select.editor.mjs +3 -3
- package/esm2022/index.mjs +2 -1
- package/fesm2022/huntsman-cancer-institute-dictionary-editor.mjs +69 -22
- package/fesm2022/huntsman-cancer-institute-dictionary-editor.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/package.json +1 -1
|
@@ -3,15 +3,16 @@ import * as i1 from "./dictionary-editor.component";
|
|
|
3
3
|
import * as i2 from "./components/home.component";
|
|
4
4
|
import * as i3 from "./components/detail.component";
|
|
5
5
|
import * as i4 from "./components/new-row.component";
|
|
6
|
-
import * as i5 from "
|
|
7
|
-
import * as i6 from "@angular/
|
|
8
|
-
import * as i7 from "@angular/
|
|
9
|
-
import * as i8 from "@
|
|
10
|
-
import * as i9 from "@
|
|
11
|
-
import * as i10 from "@huntsman-cancer-institute/
|
|
12
|
-
import * as i11 from "
|
|
13
|
-
import * as i12 from "./grid-
|
|
14
|
-
import * as i13 from "ag-grid-
|
|
6
|
+
import * as i5 from "./directives/ri-ripple-effect-dict.directive";
|
|
7
|
+
import * as i6 from "@angular/common";
|
|
8
|
+
import * as i7 from "@angular/forms";
|
|
9
|
+
import * as i8 from "@angular/router";
|
|
10
|
+
import * as i9 from "@ng-bootstrap/ng-bootstrap";
|
|
11
|
+
import * as i10 from "@huntsman-cancer-institute/navigation";
|
|
12
|
+
import * as i11 from "@huntsman-cancer-institute/misc";
|
|
13
|
+
import * as i12 from "./grid-editors/ag-grid-editor.module";
|
|
14
|
+
import * as i13 from "./grid-renderers/ag-grid-renderer.module";
|
|
15
|
+
import * as i14 from "ag-grid-angular";
|
|
15
16
|
/**
|
|
16
17
|
* The module defining the dictionary editor.
|
|
17
18
|
*
|
|
@@ -19,6 +20,6 @@ import * as i13 from "ag-grid-angular";
|
|
|
19
20
|
*/
|
|
20
21
|
export declare class DictionaryEditorModule {
|
|
21
22
|
static ɵfac: i0.ɵɵFactoryDeclaration<DictionaryEditorModule, never>;
|
|
22
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<DictionaryEditorModule, [typeof i1.DictionaryEditorComponent, typeof i2.DictionaryEditorHomeComponent, typeof i3.DictionaryEditorDetailComponent, typeof i4.NewRowComponent], [typeof
|
|
23
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<DictionaryEditorModule, [typeof i1.DictionaryEditorComponent, typeof i2.DictionaryEditorHomeComponent, typeof i3.DictionaryEditorDetailComponent, typeof i4.NewRowComponent, typeof i5.RIRippleEffectDictDirective], [typeof i6.CommonModule, typeof i7.FormsModule, typeof i8.RouterModule, typeof i9.NgbModule, typeof i10.NavigationModule, typeof i11.MiscModule, typeof i12.AgGridEditorModule, typeof i13.AgGridRendererModule, typeof i14.AgGridModule], [typeof i1.DictionaryEditorComponent, typeof i2.DictionaryEditorHomeComponent, typeof i3.DictionaryEditorDetailComponent, typeof i5.RIRippleEffectDictDirective]>;
|
|
23
24
|
static ɵinj: i0.ɵɵInjectorDeclaration<DictionaryEditorModule>;
|
|
24
25
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ElementRef, Renderer2 } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class RIRippleEffectDictDirective {
|
|
4
|
+
private el;
|
|
5
|
+
private renderer;
|
|
6
|
+
hostClass: string;
|
|
7
|
+
rippleClass: string;
|
|
8
|
+
constructor(el: ElementRef, renderer: Renderer2);
|
|
9
|
+
onMouseDown(event: MouseEvent): void;
|
|
10
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RIRippleEffectDictDirective, never>;
|
|
11
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<RIRippleEffectDictDirective, "[riRippleEffectDict]", never, { "hostClass": { "alias": "hostClass"; "required": false; }; "rippleClass": { "alias": "rippleClass"; "required": false; }; }, {}, never, never, false, never>;
|
|
12
|
+
}
|
|
@@ -16,6 +16,7 @@ import * as i2 from "@ng-bootstrap/ng-bootstrap";
|
|
|
16
16
|
import * as i3 from "@huntsman-cancer-institute/dictionary-service";
|
|
17
17
|
import * as i4 from "@huntsman-cancer-institute/misc";
|
|
18
18
|
import * as i5 from "ag-grid-angular";
|
|
19
|
+
import * as i6 from "../directives/ri-ripple-effect-dict.directive";
|
|
19
20
|
/**
|
|
20
21
|
* When a dictionary is selected this component is shown. There is a top grid which for its data shows all the columns
|
|
21
22
|
* for the dictionary. Currently, keep this for reference only and have non-editable.
|
|
@@ -633,7 +634,7 @@ export class DictionaryEditorDetailComponent {
|
|
|
633
634
|
<span class="dictionary-title">
|
|
634
635
|
{{displayName}}
|
|
635
636
|
</span>
|
|
636
|
-
<button class="btn btn-primary metadata-button"
|
|
637
|
+
<button riRippleEffectDict class="btn btn-primary metadata-button"
|
|
637
638
|
(click)="openModal(metaDataModal)">
|
|
638
639
|
View Meta Data
|
|
639
640
|
</button>
|
|
@@ -687,7 +688,7 @@ export class DictionaryEditorDetailComponent {
|
|
|
687
688
|
</ag-grid-angular>
|
|
688
689
|
</div>
|
|
689
690
|
<div class="modal-footer">
|
|
690
|
-
<button class="btn btn-primary" (click)="close('Close')">Close</button>
|
|
691
|
+
<button riRippleEffectDict class="btn btn-primary" (click)="close('Close')">Close</button>
|
|
691
692
|
</div>
|
|
692
693
|
</div>
|
|
693
694
|
</ng-template>
|
|
@@ -701,12 +702,12 @@ export class DictionaryEditorDetailComponent {
|
|
|
701
702
|
Are you sure?
|
|
702
703
|
</div>
|
|
703
704
|
<div class="modal-footer">
|
|
704
|
-
<button class="btn btn-primary" (click)="close('Cancel')">Cancel</button>
|
|
705
|
-
<button class="btn btn-primary btn-red" (click)="close('Delete')">Delete</button>
|
|
705
|
+
<button riRippleEffectDict class="btn btn-primary" (click)="close('Cancel')">Cancel</button>
|
|
706
|
+
<button riRippleEffectDict class="btn btn-primary btn-red" (click)="close('Delete')">Delete</button>
|
|
706
707
|
</div>
|
|
707
708
|
</ng-template>
|
|
708
709
|
</div>
|
|
709
|
-
`, isInline: true, styles: [".full-height{height:100%}.full-width{width:100%}.ag-theme-balham{font-family:hci-font;font-weight:500}.active-color{float:right;font-size:15px;color:var(--bluewarm-darkest)}.deactivated-color{float:right;font-size:15px;color:var(--greywarm-darkest)}.dictionary-info-section{padding-top:10px}.dictionary-title{float:left;font-size:16px;padding-left:10px;padding-right:10px;padding-top:5px}.metadata-button{color:var(--white-lightest);float:left;font-size:15px}:host::ng-deep .ag-header-cell{background-color:var(--bluewarmvividfade-lightest);border:lightgray solid thin}:host::ng-deep .ag-cell{border-right:lightgray solid thin;border-left:lightgray solid thin}:host::ng-deep .ag-row{border-bottom:0;border-top:0}:host::ng-deep .ag-row-even{background-color:var(--white-medium)}.hci-dictionary-detail-body{height:100%;width:100%;background:linear-gradient(0deg,var(--white-lightest) 30%,var(--bluewarmvividfade-lighter) 100%)!important}.hci-dictionary-display-grid{padding-right:5px;padding-left:5px;box-shadow:#00000059 0 5px 15px}:host::ng-deep .ag-row-hover{color:var(--grey-darkest)!important;background-color:var(--bluewarmvividfade-lighter)!important}:host::ng-deep .ag-row-selected .ag-cell{color:var(--white-lightest)!important}:host::ng-deep .ag-row-selected .ag-cell-not-inline-editing{color:var(--white-lightest)!important}:host::ng-deep .ag-row-selected .ag-cell-inline-editing{color:var(--black-darkest)!important}:host::ng-deep .ag-row-selected{color:var(--white-darkest)!important;background-color:var(--bluewarmvivid-lighter)!important}\n"], dependencies: [{ kind: "component", type: i4.BusyComponent, selector: "hci-busy", inputs: ["busy", "busySubjects", "getBusySubjects", "parentSelector", "rootClass", "icon", "iconSize", "showIcon", "mxAuto", "myAuto", "text", "template", "config"] }, { kind: "component", type: i5.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"] }] }); }
|
|
710
|
+
`, isInline: true, styles: [".full-height{height:100%}.full-width{width:100%}.ag-theme-balham{font-family:hci-font;font-weight:500}.active-color{float:right;font-size:15px;color:var(--bluewarm-darkest)}.deactivated-color{float:right;font-size:15px;color:var(--greywarm-darkest)}.dictionary-info-section{padding-top:10px}.dictionary-title{float:left;font-size:16px;padding-left:10px;padding-right:10px;padding-top:5px}.metadata-button{color:var(--white-lightest);float:left;font-size:15px}:host::ng-deep .ag-header-cell{background-color:var(--bluewarmvividfade-lightest);border:lightgray solid thin}:host::ng-deep .ag-cell{border-right:lightgray solid thin;border-left:lightgray solid thin}:host::ng-deep .ag-row{border-bottom:0;border-top:0}:host::ng-deep .ag-row-even{background-color:var(--white-medium)}.hci-dictionary-detail-body{height:100%;width:100%;background:linear-gradient(0deg,var(--white-lightest) 30%,var(--bluewarmvividfade-lighter) 100%)!important}.hci-dictionary-display-grid{padding-right:5px;padding-left:5px;box-shadow:#00000059 0 5px 15px}:host::ng-deep .ag-row-hover{color:var(--grey-darkest)!important;background-color:var(--bluewarmvividfade-lighter)!important}:host::ng-deep .ag-row-selected .ag-cell{color:var(--white-lightest)!important}:host::ng-deep .ag-row-selected .ag-cell-not-inline-editing{color:var(--white-lightest)!important}:host::ng-deep .ag-row-selected .ag-cell-inline-editing{color:var(--black-darkest)!important}:host::ng-deep .ag-row-selected{color:var(--white-darkest)!important;background-color:var(--bluewarmvivid-lighter)!important}\n"], dependencies: [{ kind: "component", type: i4.BusyComponent, selector: "hci-busy", inputs: ["busy", "busySubjects", "getBusySubjects", "parentSelector", "rootClass", "icon", "iconSize", "showIcon", "mxAuto", "myAuto", "text", "template", "config"] }, { kind: "component", type: i5.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: i6.RIRippleEffectDictDirective, selector: "[riRippleEffectDict]", inputs: ["hostClass", "rippleClass"] }] }); }
|
|
710
711
|
}
|
|
711
712
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: DictionaryEditorDetailComponent, decorators: [{
|
|
712
713
|
type: Component,
|
|
@@ -719,7 +720,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
719
720
|
<span class="dictionary-title">
|
|
720
721
|
{{displayName}}
|
|
721
722
|
</span>
|
|
722
|
-
<button class="btn btn-primary metadata-button"
|
|
723
|
+
<button riRippleEffectDict class="btn btn-primary metadata-button"
|
|
723
724
|
(click)="openModal(metaDataModal)">
|
|
724
725
|
View Meta Data
|
|
725
726
|
</button>
|
|
@@ -773,7 +774,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
773
774
|
</ag-grid-angular>
|
|
774
775
|
</div>
|
|
775
776
|
<div class="modal-footer">
|
|
776
|
-
<button class="btn btn-primary" (click)="close('Close')">Close</button>
|
|
777
|
+
<button riRippleEffectDict class="btn btn-primary" (click)="close('Close')">Close</button>
|
|
777
778
|
</div>
|
|
778
779
|
</div>
|
|
779
780
|
</ng-template>
|
|
@@ -787,8 +788,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
787
788
|
Are you sure?
|
|
788
789
|
</div>
|
|
789
790
|
<div class="modal-footer">
|
|
790
|
-
<button class="btn btn-primary" (click)="close('Cancel')">Cancel</button>
|
|
791
|
-
<button class="btn btn-primary btn-red" (click)="close('Delete')">Delete</button>
|
|
791
|
+
<button riRippleEffectDict class="btn btn-primary" (click)="close('Cancel')">Cancel</button>
|
|
792
|
+
<button riRippleEffectDict class="btn btn-primary btn-red" (click)="close('Delete')">Delete</button>
|
|
792
793
|
</div>
|
|
793
794
|
</ng-template>
|
|
794
795
|
</div>
|
|
@@ -813,4 +814,4 @@ function monthToComparableNumber(date) {
|
|
|
813
814
|
let dayNumber = date.substring(8, 10);
|
|
814
815
|
return yearNumber * 10000 + monthNumber * 100 + dayNumber;
|
|
815
816
|
}
|
|
816
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2RpY3Rpb25hcnktZWRpdG9yL3NyYy9jb21wb25lbnRzL2RldGFpbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFhLFdBQVcsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUNoRyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFDLGVBQWUsRUFBYyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFXLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUMsUUFBUSxFQUFjLE1BQU0sNEJBQTRCLENBQUM7QUFFakUsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGlCQUFpQixFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFRckcsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7OztBQUVqRzs7Ozs7Ozs7R0FRRztBQXNNSCxNQUFNLE9BQU8sK0JBQStCO0lBa0MxQyxZQUNVLEtBQXFCLEVBQ3JCLFlBQXNCLEVBQ3RCLGlCQUFvQyxFQUNQLGtCQUEwQjtRQUh2RCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixpQkFBWSxHQUFaLFlBQVksQ0FB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QUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBQztZQUMvRyxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDO1lBQzVGLEVBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDO1lBQ3JGLEVBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBQztZQUN6RyxFQUFDLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxVQUFVLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBQztZQUNuSSxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBQztZQUMzRixFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDO1lBQ3RHLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxF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QyxPQUFPOztBQWl1QnRCOzs7R0FHRztBQUNILFNBQVMsdUJBQXVCLENBQUMsSUFBSTtJQUVuQyxJQUFJLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQzlELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRXRDLE9BQU8sVUFBVSxHQUFHLEtBQUssR0FBRyxXQUFXLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQztBQUM1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEluamVjdCwgaXNEZXZNb2RlLCBWaWV3Q2hpbGQsIEhvc3RCaW5kaW5nLCBUZW1wbGF0ZVJlZn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5cclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge2ZpbmFsaXplLCBtYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge05nYk1vZGFsLCBOZ2JNb2RhbFJlZn0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcblxyXG5pbXBvcnQge0RJQ1RJT05BUllfRU5EUE9JTlQsIERpY3Rpb25hcnlTZXJ2aWNlfSBmcm9tICdAaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS9kaWN0aW9uYXJ5LXNlcnZpY2UnO1xyXG5cclxuaW1wb3J0IHtcclxuICBDb2x1bW5BcGksXHJcbiAgR3JpZE9wdGlvbnMsXHJcbiAgR3JpZFJlYWR5RXZlbnQsXHJcbiAgR3JpZEFwaVxyXG59IGZyb20gXCJhZy1ncmlkLWNvbW11bml0eVwiO1xyXG5pbXBvcnQge1NlbGVjdFJlbmRlcmVyfSBmcm9tIFwiLi4vZ3JpZC1yZW5kZXJlcnMvc2VsZWN0LnJlbmRlcmVyXCI7XHJcbmltcG9ydCB7U2VsZWN0RWRpdG9yfSBmcm9tIFwiLi4vZ3JpZC1lZGl0b3JzL3NlbGVjdC5lZGl0b3JcIjtcclxuaW1wb3J0IHtOZXdSb3dDb21wb25lbnR9IGZyb20gXCIuL25ldy1yb3cuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7aXNOdWxsT3JVbmRlZmluZWR9IGZyb20gXCJ1dGlsXCI7XHJcbmltcG9ydCB7RGF0ZVJlbmRlcmVyfSBmcm9tIFwiLi4vZ3JpZC1yZW5kZXJlcnMvZGF0ZS5yZW5kZXJlclwiO1xyXG5pbXBvcnQge0FnR3JpZERhdGVDZWxsRWRpdG9yQ29tcG9uZW50fSBmcm9tIFwiLi4vZ3JpZC1lZGl0b3JzL2FnLWdyaWQtZGF0ZS1jZWxsLWVkaXRvci5jb21wb25lbnRcIjtcclxuXHJcbi8qKlxyXG4gKiBXaGVuIGEgZGljdGlvbmFyeSBpcyBzZWxlY3RlZCB0aGlzIGNvbXBvbmVudCBpcyBzaG93bi4gIFRoZXJlIGlzIGEgdG9wIGdyaWQgd2hpY2ggZm9yIGl0cyBkYXRhIHNob3dzIGFsbCB0aGUgY29sdW1uc1xyXG4gKiBmb3IgdGhlIGRpY3Rpb25hcnkuIEN1cnJlbnRseSwga2VlcCB0aGlzIGZvciByZWZlcmVuY2Ugb25seSBhbmQgaGF2ZSBub24tZWRpdGFibGUuXHJcbiAqIFRoZSBib3R0b20gZ3JpZCB3aWxsIHNob3cgdGhvc2UgY29sdW1ucyBhcyBhY3R1YWwgY29sdW1ucyBhbmQgaXRzIGRhdGEgYXJlIGFsbCB0aGUgZGljdGlvbmFyeSB2YWx1ZXMuICBSb3dzIGNhbiBiZVxyXG4gKiBhZGRlZC4gIEZvciBkZWxldGluZywgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGlkIGlzIG5vdCB1c2VkIGFueXdoZXJlLiAgRm9yIGVkaXRpbmcsIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBjb2RlIG9yIGFueXRoaW5nXHJcbiAqIGVsc2UgaXNuJ3QgYmVpbmcgcmVmZXJlbmNlZC5cclxuICpcclxuICogQHNpbmNlIDEuMC4wXHJcbiAqL1xyXG5AQ29tcG9uZW50KFxyXG4gIHtcclxuICAgIHNlbGVjdG9yOiBcImhjaS1kaWN0aW9uYXJ5LWVkaXRvci1kZXRhaWxcIixcclxuICAgIHRlbXBsYXRlOlxyXG4gICAgICBgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBoY2ktZGljdGlvbmFyeS1kZXRhaWwtYm9keVwiPlxyXG4gICAgICAgICAgPGhjaS1idXN5IFtidXN5U3ViamVjdHNdPVwibG9hZGluZ1N1YmplY3RzXCI+PC9oY2ktYnVzeT5cclxuXHJcbiAgICAgICAgICA8IS0tIERpY3Rpb25hcnkgVGl0bGUgQW5kIE1ldGFkYXRhIC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRpY3Rpb25hcnktaW5mby1zZWN0aW9uXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGljdGlvbmFyeS10aXRsZVwiPlxyXG4gICAgICAgICAgICAgIHt7ZGlzcGxheU5hbWV9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbWV0YWRhdGEtYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbk1vZGFsKG1ldGFEYXRhTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgVmlldyBNZXRhIERhdGFcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIERpY3Rpb25hcnkgRWRpdCBCdXR0b25zIC0tPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBbY2xhc3NdPVwiZGlzYWJsZURlbGV0ZT8gJ2RlYWN0aXZhdGVkLWNvbG9yJzogJ2FjdGl2ZS1jb2xvcidcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlRGVsZXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkFyZVlvdVN1cmVNb2RhbChhcmVZb3VTdXJlTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtbWludXNcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHN0eWxlPVwiY29sb3I6IHZhcigtLWJsdWV3YXJtLWRhcmtlc3QpOyBmbG9hdDogcmlnaHQ7IGZvbnQtc2l6ZTogMTVweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlQWRkUm93XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0FkZFJvdygpXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1c1wiPjwvaT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIERpY3Rpb25hcnkgRGlzcGxheSBHcmlkIC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICA8YWctZ3JpZC1hbmd1bGFyIGlkPVwiZGljdGlvbmFyeS1ncmlkLWRpc3BsYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICNkYXRhR3JpZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWctdGhlbWUtYmFsaGFtIGZ1bGwtaGVpZ2h0IGZ1bGwtd2lkdGggaGNpLWRpY3Rpb25hcnktZGlzcGxheS1ncmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93RGF0YV09XCJkaWN0aW9uYXJ5RW50cmllc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd1NlbGVjdGlvbl09XCInbXVsdGlwbGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2luZ2xlQ2xpY2tFZGl0XT1cIid0cnVlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2luYXRpb25dPVwiJ3RydWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnaW5hdGlvbkF1dG9QYWdlU2l6ZV09XCIndHJ1ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncmlkT3B0aW9uc109XCJncmlkT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNlbGxWYWx1ZUNoYW5nZWQpPVwidXBkYXRlRGljdGlvbmFyeSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgIDwvYWctZ3JpZC1hbmd1bGFyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBEaWN0aW9uYXJ5IE1ldGFkYXRhIFBvcHVwIC0tPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNtZXRhRGF0YU1vZGFsIGxldC1jbG9zZT1cImNsb3NlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDoxMDAwcHhcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICBNZXRhIERhdGEgZm9yIHt7Y2xhc3NOYW1lfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIG1vZGFsLWJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZCAjY2VkNGRhOyB3aWR0aDogMTAwJTtcIj5cclxuICAgICAgICAgICAgICAgIDxhZy1ncmlkLWFuZ3VsYXIgI21ldGFHcmlkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWctdGhlbWUtYmFsaGFtIGZ1bGwtd2lkdGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogMjUwcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdyaWRSZWFkeSk9XCJ0aGlzLm9uTWV0YUdyaWRSZWFkeSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyaWRPcHRpb25zXT1cInRoaXMubWV0YUdyaWRPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd1NlbGVjdGlvbl09XCInc2luZ2xlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmcmFtZXdvcmtDb21wb25lbnRzXT1cImZyYW1ld29ya0NvbXBvbmVudHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93RGF0YV09XCJkaWN0aW9uYXJ5Py5maWVsZHNcIj5cclxuICAgICAgICAgICAgICAgIDwvYWctZ3JpZC1hbmd1bGFyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiY2xvc2UoJ0Nsb3NlJylcIj5DbG9zZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgPCEtLSBEaWN0aW9uYXJ5IERlbGV0ZSBDb21maXJtYXRpb24gUG9wdXAgLS0+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2FyZVlvdVN1cmVNb2RhbCBsZXQtY2xvc2U9XCJjbG9zZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgQ29uZmlybWF0aW9uXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBkLWZsZXhcIj5cclxuICAgICAgICAgICAgICBBcmUgeW91IHN1cmU/XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIChjbGljayk9XCJjbG9zZSgnQ2FuY2VsJylcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1yZWRcIiAoY2xpY2spPVwiY2xvc2UoJ0RlbGV0ZScpXCI+RGVsZXRlPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgYCxcclxuICAgIHN0eWxlczogW1xyXG4gICAgICBgXHJcbiAgICAgICAgLmZ1bGwtaGVpZ2h0IHtcclxuICAgICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5mdWxsLXdpZHRoIHtcclxuICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmFnLXRoZW1lLWJhbGhhbSB7XHJcbiAgICAgICAgICBmb250LWZhbWlseTogXCJoY2ktZm9udFwiO1xyXG4gICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5hY3RpdmUtY29sb3Ige1xyXG4gICAgICAgICAgZmxvYXQ6IHJpZ2h0O1xyXG4gICAgICAgICAgZm9udC1zaXplOiAxNXB4O1xyXG4gICAgICAgICAgY29sb3I6IHZhcigtLWJsdWV3YXJtLWRhcmtlc3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmRlYWN0aXZhdGVkLWNvbG9yIHtcclxuICAgICAgICAgIGZsb2F0OiByaWdodDtcclxuICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS1ncmV5d2FybS1kYXJrZXN0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5kaWN0aW9uYXJ5LWluZm8tc2VjdGlvbiB7XHJcbiAgICAgICAgICBwYWRkaW5nLXRvcDogMTBweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5kaWN0aW9uYXJ5LXRpdGxlIHtcclxuICAgICAgICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xyXG4gICAgICAgICAgcGFkZGluZy1sZWZ0OiAxMHB4O1xyXG4gICAgICAgICAgcGFkZGluZy1yaWdodDogMTBweDtcclxuICAgICAgICAgIHBhZGRpbmctdG9wOiA1cHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubWV0YWRhdGEtYnV0dG9uIHtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS13aGl0ZS1saWdodGVzdCk7XHJcbiAgICAgICAgICBmbG9hdDogbGVmdDtcclxuICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIC5hZy1oZWFkZXItY2VsbCB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVld2FybXZpdmlkZmFkZS1saWdodGVzdCk7XHJcbiAgICAgICAgICBib3JkZXI6IGxpZ2h0Z3JheSBzb2xpZCB0aGluO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgLmFnLWNlbGwge1xyXG4gICAgICAgICAgYm9yZGVyLXJpZ2h0OiBsaWdodGdyYXkgc29saWQgdGhpbjtcclxuICAgICAgICAgIGJvcmRlci1sZWZ0OiBsaWdodGdyYXkgc29saWQgdGhpbjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIC5hZy1yb3cge1xyXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbTogMDtcclxuICAgICAgICAgIGJvcmRlci10b3A6IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCAuYWctcm93LWV2ZW4ge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUtbWVkaXVtKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5oY2ktZGljdGlvbmFyeS1kZXRhaWwtYm9keSB7XHJcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgwZGVnLCB2YXIoLS13aGl0ZS1saWdodGVzdCkgMzAlLCB2YXIoLS1ibHVld2FybXZpdmlkZmFkZS1saWdodGVyKSAxMDAlKSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmhjaS1kaWN0aW9uYXJ5LWRpc3BsYXktZ3JpZCB7XHJcbiAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiA1cHg7XHJcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDVweDtcclxuICAgICAgICAgIGJveC1zaGFkb3c6IHJnYmEoMCwgMCwgMCwgMC4zNSkgMHB4IDVweCAxNXB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICAgICAgKiBEaWN0aW9uYXJ5IFJvdyBIb3ZlciBDU1NcclxuICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCAuYWctcm93LWhvdmVyIHtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS1ncmV5LWRhcmtlc3QpICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVld2FybXZpdmlkZmFkZS1saWdodGVyKSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICAgICAgKiBEaWN0aW9uYXJ5IENlbGwgU2VsZWN0ZWQgQ1NTXHJcbiAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgLmFnLXJvdy1zZWxlY3RlZCAuYWctY2VsbCB7XHJcbiAgICAgICAgICBjb2xvcjogdmFyKC0td2hpdGUtbGlnaHRlc3QpICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCAuYWctcm93LXNlbGVjdGVkIC5hZy1jZWxsLW5vdC1pbmxpbmUtZWRpdGluZyB7XHJcbiAgICAgICAgICBjb2xvcjogdmFyKC0td2hpdGUtbGlnaHRlc3QpICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCAuYWctcm93LXNlbGVjdGVkIC5hZy1jZWxsLWlubGluZS1lZGl0aW5nIHtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS1ibGFjay1kYXJrZXN0KSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbiAgICAgICAgKiBEaWN0aW9uYXJ5IFJvdyBTZWxlY3RlZCBDU1NcclxuICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCAuYWctcm93LXNlbGVjdGVkIHtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS13aGl0ZS1kYXJrZXN0KSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZXdhcm12aXZpZC1saWdodGVyKSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuICAgICAgYFxyXG4gICAgXVxyXG4gIH1cclxuKVxyXG5leHBvcnQgY2xhc3MgRGljdGlvbmFyeUVkaXRvckRldGFpbENvbXBvbmVudCB7XHJcblxyXG4gIEBIb3N0QmluZGluZyhcImNsYXNzXCIpIGNsYXNzTGlzdDogc3RyaW5nID0gXCJvdXRsZXQtY29sdW1uIHktYXV0b1wiO1xyXG5cclxuICBwcml2YXRlIHNlY29uZGFyeURpY3Rpb25hcnlFbnRyaWVzOiBhbnk7XHJcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XHJcbiAgZGlzcGxheU5hbWU6IGFueTtcclxuICBkaWN0aW9uYXJ5OiBhbnk7XHJcbiAgZGljdGlvbmFyeUVudHJpZXM6IGFueVtdID0gW107XHJcbiAgZGF0YUNvbHVtbnM6IGFueVtdO1xyXG5cclxuICBpZENvbHVtbjogc3RyaW5nO1xyXG4gIHNlbGVjdGVkUm93czogYW55W10gPSBbXTtcclxuICBsb2FkaW5nU3ViamVjdHM6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPltdID0gW107XHJcbiAgaGFsZkxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByb2Nlc3NpbmdDYWxsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2FsbFF1ZXVlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBib3VuZE5ld1Jvd1Bvc3RDYWxsOiAoZGF0YTogYW55KSA9PiBPYnNlcnZhYmxlPGFueT47XHJcbiAgZ3JpZE9wdGlvbnM6IEdyaWRPcHRpb25zO1xyXG4gIG5ld1Jvd1N1YnNjcmlwdGlvbjogYW55O1xyXG4gIHByaXZhdGUgZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIG1ldGFHcmlkT3B0aW9ucyA9IHtcclxuICAgIHJvd1N0eWxlOiB7XHJcbiAgICAgIFwiZm9udC1mYW1pbHlcIjogXCJoY2ktZm9udFwiXHJcbiAgICB9LFxyXG4gICAgZW5hYmxlQ2VsbFRleHRTZWxlY3Rpb246IHRydWUsXHJcbiAgICBlbnN1cmVEb21PcmRlcjogdHJ1ZVxyXG4gIH07XHJcbiAgZnJhbWV3b3JrQ29tcG9uZW50czogYW55O1xyXG4gIHB1YmxpYyBncmlkQXBpTWV0YTogR3JpZEFwaTtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICBwcml2YXRlIGRpY3Rpb25hcnlTZXJ2aWNlOiBEaWN0aW9uYXJ5U2VydmljZSxcclxuICAgIEBJbmplY3QoRElDVElPTkFSWV9FTkRQT0lOVCkgcHJpdmF0ZSBEaWN0aW9uYXJ5RW5kcG9pbnQ6IHN0cmluZ1xyXG4gICkge1xyXG5cclxuICAgIHRoaXMuZ3JpZE9wdGlvbnMgPSA8R3JpZE9wdGlvbnM+e1xyXG4gICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgY29tcG9uZW50UGFyZW50OiB0aGlzXHJcbiAgICAgIH0sXHJcbiAgICAgIG9uR3JpZFJlYWR5OiBEaWN0aW9uYXJ5RWRpdG9yRGV0YWlsQ29tcG9uZW50Lm9uU2FtcGxlc0dyaWRSZWFkeSxcclxuICAgICAgb25HcmlkU2l6ZUNoYW5nZWQ6IERpY3Rpb25hcnlFZGl0b3JEZXRhaWxDb21wb25lbnQub25HcmlkU2l6ZUNoYW5nZWQsXHJcbiAgICAgIHN1cHByZXNzSG9yaXpvbnRhbFNjcm9sbDogZmFsc2UsXHJcbiAgICAgIHNlbGVjdGlvbk1vZGU6IFwibXVsdGlwbGVcIixcclxuICAgICAgc3RvcEVkaXRpbmdXaGVuR3JpZExvc2VzRm9jdXM6IHRydWUsXHJcbiAgICAgIGVuYWJsZVNvcnRpbmc6IHRydWUsXHJcbiAgICAgIGVuYWJsZUZpbHRlcjogdHJ1ZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJhc2VkIG9uIHRoZSByb3V0ZSBjbGFzcyBuYW1lLCBtYWtlIHRoZSBjYWxsIHRvIGZldGNoIHRoZSBkaWN0aW9uYXJ5IGRhdGEuICBTaW5jZSB0aGlzIGNvbXBvbmVudCBpcyByb3V0ZSBiYXNlZCxcclxuICAgKiB3aGVuIHRoZSBkaWN0aW9uYXJ5IGNsYXNzIGluIHRoZSByb3V0ZSBjaGFuZ2VzLCB0aGlzIGNvbXBvbmVudCBpcyByZWxvYWRlZC5cclxuICAgKi9cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuYm91bmROZXdSb3dQb3N0Q2FsbCA9IHRoaXMubmV3Um93UG9zdC5iaW5kKHRoaXMpO1xyXG5cclxuICAgIHRoaXMubG9hZGluZ1N1YmplY3RzLnB1c2gobmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSkpO1xyXG5cclxuICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShcclxuICAgICAgcGFyYW1zID0+IHtcclxuXHJcbiAgICAgICAgbGV0IGNsYXNzTmFtZTogc3RyaW5nID0gcGFyYW1zW1wiY2xhc3NOYW1lXCJdO1xyXG5cclxuICAgICAgICB0aGlzLmdldERpY3Rpb25hcnkoY2xhc3NOYW1lKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5zdWJzY3JpYmUoKHZhbHVlOiBib29sZWFuKSA9PiB7XHJcbiAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIC8vIEEgbmV3IGNhbGwgd2FzIG1hZGUgdG8gYmUgcHJvY2Vzc2VkLCBwcm9jZXNzIHRoZSBjYWxsXHJcbiAgICAgICAgdGhpcy5nZXREaWN0aW9uYXJ5QmVnaW4odGhpcy5jbGFzc05hbWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIEEgY2FsbCBjb21wbGV0ZWQgd2hpbGUgYW5vdGhlciBjYWxsIHdhcyBub3QgcXVldWVkLCBwcm9jZXNzaW5nIGNvbXBsZXRlXHJcbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nQ2FsbCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9wZW5Nb2RhbChtb2RhbDogVGVtcGxhdGVSZWY8YW55Pik6IHZvaWQge1xyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4obW9kYWwsIHt3aW5kb3dDbGFzczogXCJtb2RhbC14bFwifSkucmVzdWx0LnRoZW4oXHJcbiAgICAgIChyZXN1bHQpID0+IHtcclxuICAgICAgfSxcclxuICAgICAgKHJlYXNvbikgPT4ge1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG5cclxuICAgIHRoaXMuZ3JpZE9wdGlvbnMuYXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb2x1bW5EZWZNZXRhKCkgOiBhbnlbXSB7XHJcblxyXG4gICAgcmV0dXJuIFtcclxuICAgICAge2ZpZWxkOiBcIm5hbWVcIiwgaGVhZGVyTmFtZTogXCJOYW1lXCIsIHdpZHRoOiAxNzUsIHNvcnRhYmxlOiB0cnVlLCByZXNpemFibGU6IHRydWUsIGVkaXRhYmxlOiBmYWxzZX0sXHJcbiAgICAgIHtmaWVsZDogXCJkZXNjcmlwdGlvblwiLCBoZWFkZXJOYW1lOiBcIkRlc2NyaXB0aW9uXCIsIHdpZHRoOiAyNTAsIHNvcnRhYmxlOiB0cnVlLCByZXNpemFibGU6IHRydWUsIGVkaXRhYmxlOiBmYWxzZX0sXHJcbiAgICAgIHtmaWVsZDogXCJpZFwiLCBoZWFkZXJOYW1lOiBcIklkXCIsIHdpZHRoOiA2MCwgc29ydGFibGU6IHRydWUsIHJlc2l6YWJsZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlfSxcclxuICAgICAge2ZpZWxkOiBcInR5cGVcIiwgaGVhZGVyTmFtZTogXCJUeXBlXCIsIHNvcnRhYmxlOiB0cnVlLCByZXNpemFibGU6IHRydWUsIGVkaXRhYmxlOiBmYWxzZX0sXHJcbiAgICAgIHtmaWVsZDogXCJwcm90ZWN0aW9uVHlwZVwiLCBoZWFkZXJOYW1lOiBcIlByb3RlY3Rpb25UeXBlXCIsIHNvcnRhYmxlOiB0cnVlLCByZXNpemFibGU6IHRydWUsIGVkaXRhYmxlOiBmYWxzZX0sXHJcbiAgICAgIHtmaWVsZDogXCJmaWx0ZXJEaWN0aW9uYXJ5Q2xhc3NcIiwgaGVhZGVyTmFtZTogXCJGaWx0ZXJEaWN0aW9uYXJ5Q2xhc3NcIiwgd2lkdGg6IDE4MCwgc29ydGFibGU6IHRydWUsIHJlc2l6YWJsZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlfSxcclxuICAgICAge2ZpZWxkOiBcIm5vdE51bGxcIiwgaGVhZGVyTmFtZTogXCJOb3ROdWxsXCIsIHNvcnRhYmxlOiB0cnVlLCByZXNpemFibGU6IHRydWUsIGVkaXRhYmxlOiBmYWxzZX0sXHJcbiAgICAgIHtmaWVsZDogXCJpbnRlZ2VyXCIsIGhlYWRlck5hbWU6IFwiSW50ZWdlclwiLCB3aWR0aDogNzUsIHNvcnRhYmxlOiB0cnVlLCByZXNpemFibGU6IHRydWUsIGVkaXRhYmxlOiBmYWxzZX0sXHJcbiAgICAgIHtmaWVsZDogXCJtaW5cIiwgaGVhZGVyTmFtZTogXCJNaW5cIiwgd2lkdGg6IDYwLCBzb3J0YWJsZTogdHJ1ZSwgcmVzaXphYmxlOiB0cnVlLCBlZGl0YWJsZTogZmFsc2V9LFxyXG4gICAgICB7ZmllbGQ6IFwibWF4XCIsIGhlYWRlck5hbWU6IFwiTWF4XCIsIHdpZHRoOiA2MCwgc29ydGFibGU6IHRydWUsIHJlc2l6YWJsZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlfSxcclxuICAgICAge2ZpZWxkOiBcImZyYWN0aW9uXCIsIGhlYWRlck5hbWU6IFwiRnJhY3Rpb25cIiwgc29ydGFibGU6IHRydWUsIHJlc2l6YWJsZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlfSxcclxuICAgICAge2ZpZWxkOiBcImRpY3Rpb25hcnlUb29sdGlwXCIsIGhlYWRlck5hbWU6IFwiRGljdGlvbmFyeVRvb2x0aXBcIiwgd2lkdGg6IDIwMCwgc29ydGFibGU6IHRydWUsIHJlc2l6YWJsZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlfSxcclxuICAgICAge2ZpZWxkOiBcImRpY3Rpb25hcnlEaXNwbGF5XCIsIGhlYWRlck5hbWU6IFwiRGljdGlvbmFyeURpc3BsYXlcIiwgd2lkdGg6IDE3NSwgc29ydGFibGU6IHRydWUsIHJlc2l6YWJsZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlfSxcclxuICAgICAge2ZpZWxkOiBcImZpbHRlcmFibGVcIiwgaGVhZGVyTmFtZTogXCJGaWx0ZXJhYmxlXCIsIHNvcnRhYmxlOiB0cnVlLCByZXNpemFibGU6IHRydWUsIGVkaXRhYmxlOiBmYWxzZX0sXHJcbiAgICAgIHtmaWVsZDogXCJkaXNwbGF5TmFtZVwiLCBoZWFkZXJOYW1lOiBcIkRpc3BsYXlOYW1lXCIsIHdpZHRoOiAxNzUsIHNvcnRhYmxlOiB0cnVlLCByZXNpemFibGU6IHRydWUsIGVkaXRhYmxlOiBmYWxzZX0sXHJcbiAgICAgIHtmaWVsZDogXCJkaXNwbGF5T3JkZXJcIiwgaGVhZGVyTmFtZTogXCJEaXNwbGF5T3JkZXJcIiwgd2lkdGg6IDYwLCBzb3J0YWJsZTogdHJ1ZSwgcmVzaXphYmxlOiB0cnVlLCBlZGl0YWJsZTogZmFsc2V9LFxyXG4gICAgICB7ZmllbGQ6IFwiY2VsbFN0eWxlXCIsIGhlYWRlck5hbWU6IFwiQ2VsbFN0eWxlXCIsIHNvcnRhYmxlOiB0cnVlLCByZXNpemFibGU6IHRydWUsIGVkaXRhYmxlOiBmYWxzZX0sXHJcbiAgICBdOyAvLyB0aGUgd2lkdGhzIGZvciB0aGUgbGFzdCAyIGNvdWxkIGJlIHdyb25nLlxyXG5cclxuICB9XHJcblxyXG4gIG9uTWV0YUdyaWRSZWFkeShwYXJhbXMgOiBhbnkpIHtcclxuXHJcbiAgICB0aGlzLmdyaWRBcGlNZXRhID0gcGFyYW1zLmFwaTtcclxuICAgIHRoaXMuZ3JpZEFwaU1ldGEuc2V0Q29sdW1uRGVmcyh0aGlzLmNvbHVtbkRlZk1ldGEoKSk7XHJcbiAgICB0aGlzLmdyaWRBcGlNZXRhLnNldFJvd0RhdGEodGhpcy5kaWN0aW9uYXJ5Py5maWVsZHMpO1xyXG5cclxuICB9XHJcblxyXG4gIG9wZW5BcmVZb3VTdXJlTW9kYWwobW9kYWw6IFRlbXBsYXRlUmVmPGFueT4pOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKG1vZGFsKS5yZXN1bHQudGhlbihcclxuICAgICAgKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGlmIChyZXN1bHQgPT09IFwiRGVsZXRlXCIpIHtcclxuICAgICAgICAgIHRoaXMuZGVsZXRlRGljdGlvbmFyeUVudHJpZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIChyZWFzb24pID0+IHtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZSBpZiB3ZSBhcmUgbG9hZGluZyBzb21ldGhpbmcsIGFuZCB0aGVuIHdhaXQgdW50aWwgaXQgaXMgZG9uZSB0byAuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lXHJcbiAgICovXHJcbiAgZ2V0RGljdGlvbmFyeShjbGFzc05hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XHJcbiAgICBpZiAodGhpcy5wcm9jZXNzaW5nQ2FsbCA9PT0gZmFsc2UpIHtcclxuICAgICAgLy8gQ2FsbCBpcyBub3QgYmVpbmcgcHJvY2Vzc2VkLCBwcm9jZXNzIHRoaXMgY2FsbFxyXG4gICAgICB0aGlzLnByb2Nlc3NpbmdDYWxsID0gdHJ1ZTtcclxuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dCh0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEEgY2FsbCBpcyBhbHJlYWR5IGJlaW5nIHByb2Nlc3NlZCwgcXVldWUgYSByZWNhbGwgd2hlbiBpdCBpcyBjb21wbGV0ZVxyXG4gICAgICB0aGlzLmNhbGxRdWV1ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2ggdGhlIGRpY3Rpb25hcnkgbWV0YWRhdGEgYW5kIGRpY3Rpb25hcnkgZW50cmllcyBiYXNlZCB1cG9uIHRoZSBkaWN0aW9uYXJ5IGNsYXNzIG5hbWUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXREaWN0aW9uYXJ5QmVnaW4oY2xhc3NOYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuaGFsZkxvYWRlZCA9IGZhbHNlO1xyXG4gICAgLy8gV2hlbiBTZWxlY3RpbmcgQSBOZXcgRGljdGlvbmFyeSwgTmF2aWdhdGUgVG8gRmlyc3QgUGFnZVxyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbnMgJiYgdGhpcy5ncmlkT3B0aW9ucy5hcGkpIHtcclxuICAgICAgdGhpcy5ncmlkT3B0aW9ucy5hcGkucGFnaW5hdGlvbkdvVG9GaXJzdFBhZ2UoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGF0YUNvbHVtbnMgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgdGhpcy5kZXN0cm95Lm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5kaWN0aW9uYXJ5U2VydmljZS5nZXREaWN0aW9uYXJ5KGNsYXNzTmFtZSkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSlcclxuICAgICkuc3Vic2NyaWJlKChkaWN0aW9uYXJ5OiBPYmplY3QpID0+IHtcclxuICAgICAgICB0aGlzLnNldFVwRGljdGlvbmFyeUdyaWQoZGljdGlvbmFyeSk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5nZXREaWN0aW9uYXJ5RW50cmllcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGljdGlvbmFyeUVudHJpZXMoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5kaWN0aW9uYXJ5U2VydmljZS5nZXREaWN0aW9uYXJ5RW50cmllcyh0aGlzLmNsYXNzTmFtZSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95KSkuc3Vic2NyaWJlKFxyXG4gICAgICAoZGljdGlvbmFyeUVudHJpZXM6IE9iamVjdFtdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kaWN0aW9uYXJ5RW50cmllcyA9IGRpY3Rpb25hcnlFbnRyaWVzO1xyXG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuYXBpLnNldFJvd0RhdGEoZGljdGlvbmFyeUVudHJpZXMpO1xyXG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuYXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcclxuICAgICAgICBpZiAodGhpcy5oYWxmTG9hZGVkKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jYWxsUXVldWVkID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIC8vIEEgY2FsbCBjb21wbGV0ZWQgd2hpbGUgYW5vdGhlciBjYWxsIHdhcyBxdWV1ZWQgc28gbWFrZSB0aGF0IGNhbGwgbm93XHJcbiAgICAgICAgICAgIHRoaXMuY2FsbFF1ZXVlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmdldERpY3Rpb25hcnlCZWdpbih0aGlzLmNsYXNzTmFtZSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5oYWxmTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIGRpY3Rpb25hcnkgbWV0YWRhdGEuICBUaGlzIGlzIHVzZWQgdG8gYnVpbGQgdGhlIGNvbHVtbnMgZm9yIHRoZSBkaWN0aW9uYXJ5IGVudHJpZXMuICBUaGUgbmFtZXMsIHZhbGlkYXRpb24sXHJcbiAgICogYW5kIGZpbHRlciBjbGFzc2VzIGJ1aWxkIHRoZSBjb2x1bW4gZGVmaW5pdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBkaWN0aW9uYXJ5XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRVcERpY3Rpb25hcnlHcmlkKGRpY3Rpb25hcnk6IGFueSk6IHZvaWQge1xyXG5cclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiRGljdGlvbmFyeUVkaXRvckRldGFpbENvbXBvbmVudC5zZXREaWN0aW9uYXJ5XCIpO1xyXG4gICAgICBjb25zb2xlLmRlYnVnKGRpY3Rpb25hcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGljdGlvbmFyeSA9IGRpY3Rpb25hcnk7XHJcbiAgICB0aGlzLnNlY29uZGFyeURpY3Rpb25hcnlFbnRyaWVzID0gW107XHJcbiAgICBsZXQgZGljdGlvbmFyeUNsYXNzTmFtZXMgPSBbXTtcclxuXHJcbiAgICBmb3IgKGxldCBmaWVsZCBvZiBkaWN0aW9uYXJ5LmZpZWxkcykge1xyXG4gICAgICBpZiAoZmllbGQuZmlsdGVyRGljdGlvbmFyeUNsYXNzKSB7XHJcbiAgICAgICAgZGljdGlvbmFyeUNsYXNzTmFtZXMucHVzaChmaWVsZC5maWx0ZXJEaWN0aW9uYXJ5Q2xhc3MpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nZXRTZWNvbmRhcnlEaWN0aW9uYXJpZXMoZGljdGlvbmFyeUNsYXNzTmFtZXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZWNvbmRhcnlEaWN0aW9uYXJpZXMoZGljdGlvbmFyeU5hbWVzOiBzdHJpbmdbXSkge1xyXG4gICAgaWYgKGRpY3Rpb25hcnlOYW1lcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICB0aGlzLmZpbmlzaENvbHVtblNldHVwKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgZGljdGlvbmFyeU5hbWUgPSBkaWN0aW9uYXJ5TmFtZXMucG9wKCk7XHJcbiAgICAgIHRoaXMuZGljdGlvbmFyeVNlcnZpY2UuZ2V0RGljdGlvbmFyeURyb3Bkb3duRW50cmllcyhkaWN0aW9uYXJ5TmFtZSkucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95KVxyXG4gICAgICApLnN1YnNjcmliZShcclxuICAgICAgICAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWNvbmRhcnlEaWN0aW9uYXJ5RW50cmllcy5wdXNoKHtkaWN0aW9uYXJ5TmFtZTogZGljdGlvbmFyeU5hbWUsIGVudHJpZXM6IHJlc3BvbnNlfSk7XHJcbiAgICAgICAgICB0aGlzLmdldFNlY29uZGFyeURpY3Rpb25hcmllcyhkaWN0aW9uYXJ5TmFtZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluaXNoQ29sdW1uU2V0dXAoKSB7XHJcbiAgICB0aGlzLmRpc3BsYXlOYW1lID0gdGhpcy5kaWN0aW9uYXJ5LmRpc3BsYXlOYW1lO1xyXG5cclxuICAgIC8vIFRoaXMgZXN0YWJsaXNoZXMgdGhlIHJlYWRPbmx5IGZ1bmN0aW9uYWxpdHlcclxuICAgIGxldCBjb2xzOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIC8vIFByb2Nlc3MgQ29sdW1ucyBBbmQgQ3JlYXRlIENvbHVtbiBEZWZpbml0aW9uXHJcbiAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmRpY3Rpb25hcnkuZmllbGRzKSB7XHJcbiAgICAgIGlmIChmaWVsZC5pZCAmJiAoaXNOdWxsT3JVbmRlZmluZWQoZmllbGQuY29kZSkgfHwgZmllbGQuY29kZSA9PSBmYWxzZSkpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGNvbDogYW55O1xyXG5cclxuICAgICAgaWYgKGZpZWxkLmZpbHRlckRpY3Rpb25hcnlDbGFzcykge1xyXG4gICAgICAgIC8vIHRoaXMgaXMgYSBkcm9wZG93biBvZiBhbm90aGVyIGRpY3Rpb25hcnlcclxuICAgICAgICBsZXQgb3B0aW9ucyA9IHRoaXMuc2Vjb25kYXJ5RGljdGlvbmFyeUVudHJpZXMuZmluZChcclxuICAgICAgICAgIChhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGEuZGljdGlvbmFyeU5hbWUgPT09IGZpZWxkLmZpbHRlckRpY3Rpb25hcnlDbGFzcztcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb2wgPSB7XHJcbiAgICAgICAgICBmaWVsZDogZmllbGQubmFtZSxcclxuICAgICAgICAgIGhlYWRlck5hbWU6IGZpZWxkLmRpc3BsYXlOYW1lLFxyXG4gICAgICAgICAgZWRpdGFibGU6IHRoaXMuaXNFZGl0YWJsZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgY2VsbFJlbmRlcmVyRnJhbWV3b3JrOiBTZWxlY3RSZW5kZXJlcixcclxuICAgICAgICAgIGNlbGxFZGl0b3JGcmFtZXdvcms6IFNlbGVjdEVkaXRvcixcclxuICAgICAgICAgIHNlbGVjdE9wdGlvbnNEaXNwbGF5RmllbGQ6IFwiZGlzcGxheVwiLFxyXG4gICAgICAgICAgc2VsZWN0T3B0aW9uc1ZhbHVlRmllbGQ6IFwiaWRcIixcclxuICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgZmlsdGVyOiB0cnVlLFxyXG4gICAgICAgICAgZmlsdGVyVmFsdWVHZXR0ZXI6IHRoaXMuY29tYm9GaWx0ZXJWYWx1ZUdldHRlcixcclxuICAgICAgICAgIHNlbGVjdE9wdGlvbnM6IFtdLFxyXG4gICAgICAgICAgY29tcGFyYXRvcjogKHZhbHVlQSwgdmFsdWVCLCBub2RlQSwgbm9kZUIsIGlzSW52ZXJ0ZWQpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lbnRyaWVzKSB7XHJcbiAgICAgICAgICBjb2wuc2VsZWN0T3B0aW9ucyA9IG9wdGlvbnMuZW50cmllcy5zb3J0KFxyXG4gICAgICAgICAgICAob3B0aW9uQSwgb3B0aW9uQikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChvcHRpb25BICYmICFvcHRpb25CKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmIChvcHRpb25CICYmICFvcHRpb25BKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAoIW9wdGlvbkEgJiYgIW9wdGlvbkIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbkEuZGlzcGxheS50b0xvd2VyQ2FzZSgpID4gb3B0aW9uQi5kaXNwbGF5LnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG9wdGlvbkIuZGlzcGxheS50b0xvd2VyQ2FzZSgpID4gb3B0aW9uQS5kaXNwbGF5LnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBjb2wuY29tcGFyYXRvciA9ICh2YWx1ZUEsIHZhbHVlQiwgbm9kZUEsIG5vZGVCLCBpc0ludmVydGVkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5lbnRyaWVzKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh2YWx1ZUEgJiYgIXZhbHVlQikge1xyXG4gICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodmFsdWVCICYmICF2YWx1ZUEpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdmFsdWVBICYmICF2YWx1ZUIpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IG9wdGlvbkEgPSBvcHRpb25zLmVudHJpZXMuZmluZCgoZW50cnkpID0+IChcIlwiICsgZW50cnkuaWQgPT09IFwiXCIgKyB2YWx1ZUEpKTtcclxuICAgICAgICAgICAgbGV0IG9wdGlvbkIgPSBvcHRpb25zLmVudHJpZXMuZmluZCgoZW50cnkpID0+IChcIlwiICsgZW50cnkuaWQgPT09IFwiXCIgKyB2YWx1ZUIpKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25BICYmICFvcHRpb25CKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChvcHRpb25CICYmICFvcHRpb25BKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIW9wdGlvbkEgJiYgIW9wdGlvbkIpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbkEuZGlzcGxheS50b0xvd2VyQ2FzZSgpID4gb3B0aW9uQi5kaXNwbGF5LnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICgob3B0aW9uQi5kaXNwbGF5LnRvTG93ZXJDYXNlKCkgPiBvcHRpb25BLmRpc3BsYXkudG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb2wuY2VsbFN0eWxlID0gcGFyYW1zID0+IHtcclxuICAgICAgICAgIGxldCBjb2x1bW46IGFueSA9IHt9O1xyXG5cclxuICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHBhcmFtcy5jb250ZXh0LmNvbXBvbmVudFBhcmVudC5kaWN0aW9uYXJ5LmZpZWxkcykge1xyXG4gICAgICAgICAgICBpZiAocGFyYW1zLmNvbERlZi5maWVsZCA9PSBmaWVsZC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgY29sdW1uID0gZmllbGQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAocGFyYW1zLmRhdGEuZWRpdE9yTmV3ICYmIHBhcmFtcy5kYXRhLmVkaXRPck5ldyA9PSBcIm5ld1wiKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXJhbXMuY29udGV4dC5yZWFkT25seSB8fCBjb2x1bW4ucmVhZE9ubHkgfHxcclxuICAgICAgICAgICAgICBjb2x1bW4ucHJvdGVjdGlvblR5cGUgPT0gXCJSZWFkIE9ubHlcIikge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7Y29sb3I6IFwiIzhhOTQ5OVwifTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHBhcmFtcy5jb250ZXh0LnJlYWRPbmx5IHx8IGNvbHVtbi5yZWFkT25seSB8fFxyXG4gICAgICAgICAgICAgIGNvbHVtbi5wcm90ZWN0aW9uVHlwZSA9PSBcIlJlYWQgT25seVwiIHx8IGNvbHVtbi5jcmVhdGVPbmx5IHx8XHJcbiAgICAgICAgICAgICAgY29sdW1uLnByb3RlY3Rpb25UeXBlID09IFwiQ3JlYXRlIE9ubHlcIiB8fCBjb2x1bW4uY29kZSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7Y29sb3I6IFwiIzhhOTQ5OVwifTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbC5kaXNwbGF5T3JkZXIgPSBmaWVsZC5kaXNwbGF5T3JkZXI7XHJcbiAgICAgICAgY29sLmRpY3Rpb25hcnlEaXNwbGF5ID0gZmllbGQuZGljdGlvbmFyeURpc3BsYXk7XHJcbiAgICAgICAgY29sLmRpY3Rpb25hcnlUb29sdGlwID0gZmllbGQuZGljdGlvbmFyeVRvb2x0aXA7XHJcblxyXG4gICAgICAgIC8vIFNldCBkZWZhdWx0IGZpbHRlciBhcyBjb21wYXJlIGJ5IHRleHQvbnVtYmVyXHJcbiAgICAgICAgLy8gY29sLmZpbHRlclJlbmRlcmVyID0gQ29tcGFyZUZpbHRlclJlbmRlcmVyO1xyXG4gICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgJiYgZmllbGQudHlwZSA9PSBcIkRhdGVcIikge1xyXG4gICAgICAgIC8vZGF0ZSB2YWx1ZVxyXG4gICAgICAgIGNvbCA9IHtcclxuICAgICAgICAgIGZpZWxkOiBmaWVsZC5uYW1lLFxyXG4gICAgICAgICAgaGVhZGVyTmFtZTogZmllbGQuZGlzcGxheU5hbWUsXHJcbiAgICAgICAgICBjZWxsUmVuZGVyZXJGcmFtZXdvcms6IERhdGVSZW5kZXJlcixcclxuICAgICAgICAgIGNlbGxFZGl0b3JGcmFtZXdvcms6IEFnR3JpZERhdGVDZWxsRWRpdG9yQ29tcG9uZW50LFxyXG4gICAgICAgICAgZWRpdGFibGU6IHRoaXMuaXNFZGl0YWJsZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgc29ydGFibGU6IHRydWUsXHJcbiAgICAgICAgICByZXNpemFibGU6IHRydWUsXHJcbiAgICAgICAgICBmaWx0ZXI6IHRydWUsXHJcbiAgICAgICAgICBkaWN0aW9uYXJ5RGlzcGxheTogZmllbGQuZGljdGlvbmFyeURpc3BsYXlcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb2wuY29tcGFyYXRvciA9ICh2YWx1ZUEsIHZhbHVlQiwgbm9kZUEsIG5vZGVCLCBpc0ludmVydGVkKSA9PiB7XHJcbiAgICAgICAgICBsZXQgbnVtID0gdGhpcy5kYXRlQ29tcGFyYXRvcih2YWx1ZUEsIHZhbHVlQik7XHJcbiAgICAgICAgICByZXR1cm4gaXNJbnZlcnRlZCA/IC0xICogbnVtIDogbnVtOyAvL2Rvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcgd2l0aCBpbnZlcnRlZD9cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb2wuY2VsbFN0eWxlID0gcGFyYW1zID0+IHtcclxuICAgICAgICAgIHZhciBjb2x1bW46IGFueSA9IHt9O1xyXG4gICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgcGFyYW1zLmNvbnRleHQuY29tcG9uZW50UGFyZW50LmRpY3Rpb25hcnkuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXJhbXMuY29sRGVmLmZpZWxkID09IGZpZWxkLm5hbWUpIHtcclxuICAgICAgICAgICAgICBjb2x1bW4gPSBmaWVsZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChwYXJhbXMuZGF0YS5lZGl0T3JOZXcgJiYgcGFyYW1zLmRhdGEuZWRpdE9yTmV3ID09IFwibmV3XCIpIHtcclxuICAgICAgICAgICAgaWYgKHBhcmFtcy5jb250ZXh0LnJlYWRPbmx5IHx8IGNvbHVtbi5yZWFkT25seSB8fFxyXG4gICAgICAgICAgICAgIGNvbHVtbi5wcm90ZWN0aW9uVHlwZSA9PSBcIlJlYWQgT25seVwiKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtjb2xvcjogXCIjOGE5NDk5XCJ9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAocGFyYW1zLmNvbnRleHQucmVhZE9ubHkgfHwgY29sdW1uLnJlYWRPbmx5IHx8XHJcbiAgICAgICAgICAgICAgY29sdW1uLnByb3RlY3Rpb25UeXBlID09IFwiUmVhZCBPbmx5XCIgfHwgY29sdW1uLmNyZWF0ZU9ubHkgfHxcclxuICAgICAgICAgICAgICBjb2x1bW4ucHJvdGVjdGlvblR5cGUgPT0gXCJDcmVhdGUgT25seVwiIHx8IGNvbHVtbi5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtjb2xvcjogXCIjOGE5NDk5XCJ9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29sLmRpc3BsYXlPcmRlciA9IGZpZWxkLmRpc3BsYXlPcmRlcjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyB0aGlzIGlzIGEgc3RyaW5nIHZhbHVlXHJcbiAgICAgICAgY29sID0ge1xyXG4gICAgICAgICAgZmllbGQ6IGZpZWxkLm5hbWUsXHJcbiAgICAgICAgICBoZWFkZXJOYW1lOiBmaWVsZC5kaXNwbGF5TmFtZSxcclxuICAgICAgICAgIGVkaXRhYmxlOiB0aGlzLmlzRWRpdGFibGUuYmluZCh0aGlzKSxcclxuICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgZmlsdGVyOiB0cnVlLFxyXG4gICAgICAgICAgZGljdGlvbmFyeURpc3BsYXk6IGZpZWxkLmRpY3Rpb25hcnlEaXNwbGF5XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29sLmNvbXBhcmF0b3IgPSAodmFsdWVBLCB2YWx1ZUIsIG5vZGVBLCBub2RlQiwgaXNJbnZlcnRlZCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHZhbHVlQSAmJiAhdmFsdWVCKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh2YWx1ZUIgJiYgIXZhbHVlQSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCF2YWx1ZUEgJiYgIXZhbHVlQikge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodmFsdWVBLnRvTG93ZXJDYXNlKCkgPiB2YWx1ZUIudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoKHZhbHVlQi50b0xvd2VyQ2FzZSgpID4gdmFsdWVBLnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbC5jZWxsU3R5bGUgPSBwYXJhbXMgPT4ge1xyXG4gICAgICAgICAgdmFyIGNvbHVtbjogYW55ID0ge307XHJcbiAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiBwYXJhbXMuY29udGV4dC5jb21wb25lbnRQYXJlbnQuZGljdGlvbmFyeS5maWVsZHMpIHtcclxuICAgICAgICAgICAgaWYgKHBhcmFtcy5jb2xEZWYuZmllbGQgPT0gZmllbGQubmFtZSkge1xyXG4gICAgICAgICAgICAgIGNvbHVtbiA9IGZpZWxkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocGFyYW1zLmRhdGEuZWRpdE9yTmV3ICYmIHBhcmFtcy5kYXRhLmVkaXRPck5ldyA9PSBcIm5ld1wiKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXJhbXMuY29udGV4dC5yZWFkT25seSB8fCBjb2x1bW4ucmVhZE9ubHkgfHxcclxuICAgICAgICAgICAgICBjb2x1bW4ucHJvdGVjdGlvblR5cGUgPT0gXCJSZWFkIE9ubHlcIikge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7Y29sb3I6IFwiIzhhOTQ5OVwifTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHBhcmFtcy5jb250ZXh0LnJlYWRPbmx5IHx8IGNvbHVtbi5yZWFkT25seSB8fFxyXG4gICAgICAgICAgICAgIGNvbHVtbi5wcm90ZWN0aW9uVHlwZSA9PSBcIlJlYWQgT25seVwiIHx8IGNvbHVtbi5jcmVhdGVPbmx5IHx8XHJcbiAgICAgICAgICAgICAgY29sdW1uLnByb3RlY3Rpb25UeXBlID09IFwiQ3JlYXRlIE9ubHlcIiB8fCBjb2x1bW4uY29kZSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7Y29sb3I6IFwiIzhhOTQ5OVwifTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbC5kaXNwbGF5T3JkZXIgPSBmaWVsZC5kaXNwbGF5T3JkZXI7XHJcbiAgICAgICAgLy8gU2V0IGRlZmF1bHQgZmlsdGVyIGFzIGNvbXBhcmUgYnkgdGV4dC9udW1iZXJcclxuICAgICAgICAvLyBjb2wuZmlsdGVyUmVuZGVyZXIgPSBDb21wYXJlRmlsdGVyUmVuZGVyZXI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbHMucHVzaChjb2wpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE5vdyB3ZSBuZWVkIHRvIHNvcnQgdGhlIGNvbHVtbnNcclxuICAgIGlmICghdGhpcy5kaWN0aW9uYXJ5LmZpZWxkc1swXS5oYXNPd25Qcm9wZXJ0eShcImRpc3BsYXlPcmRlclwiKSkge1xyXG4gICAgICAvLyBkZWZhdWx0IGNhc2UsIG5vIGRpc3BsYXlPcmRlclxyXG4gICAgICBjb2xzID0gY29scy5zb3J0KFxyXG4gICAgICAgIChhLCBiKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWEuaGVhZGVyTmFtZSAmJiBiLmhlYWRlck5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKCFiLmhlYWRlck5hbWUgJiYgYS5oZWFkZXJOYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoYS5kaWN0aW9uYXJ5RGlzcGxheSA9PT0gdHJ1ZSAmJiBiLmRpY3Rpb25hcnlEaXNwbGF5ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGIuZGljdGlvbmFyeURpc3BsYXkgPT09IHRydWUgJiYgYS5kaWN0aW9uYXJ5RGlzcGxheSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGEuZGljdGlvbmFyeVRvb2x0aXAgPT09IHRydWUgJiYgYi5kaWN0aW9uYXJ5VG9vbHRpcCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChiLmRpY3Rpb25hcnlUb29sdGlwID09PSB0cnVlICYmIGEuZGljdGlvbmFyeVRvb2x0aXAgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIERpc3BsYXlPcmRlciBjYXNlXHJcbiAgICAgIC8vIEkgdGhpbmsgdGhpcyB3b3Jrcz8gQ2hlY2sgbGF0ZXJcclxuICAgICAgY29scyA9IGNvbHMuc29ydChcclxuICAgICAgICAoYSwgYikgPT4ge1xyXG4gICAgICAgICAgaWYgKCFhLmhlYWRlck5hbWUgJiYgYi5oZWFkZXJOYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICghYi5oZWFkZXJOYW1lICYmIGEuaGVhZGVyTmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gYS5kaXNwbGF5T3JkZXIgLSBiLmRpc3BsYXlPcmRlcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQWZ0ZXIgQ29sdW1ucyBIYXZlIEJlZW4gU29ydGVkXHJcbiAgICAvLyBEaWN0aW9uYXJ5IEdyaWQgV2lsbCBTb3J0IFRoZSBHcmlkIEFzY2VuZGluZyBPcmRlciBCeSBGaXJzdCBDb2x1bW5cclxuICAgIGlmKGNvbHMgICYmIGNvbHMubGVuZ3RoICE9IDApIHtcclxuICAgICAgY29sc1swXS5zb3J0ID0gXCJhc2NcIjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGFDb2x1bW5zID0gY29scztcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YUNvbHVtbnMpICYmIHRoaXMuZ3JpZE9wdGlvbnMgJiYgdGhpcy5ncmlkT3B0aW9ucy5hcGkpIHtcclxuICAgICAgdGhpcy5ncmlkT3B0aW9ucy5hcGkuc2V0Q29sdW1uRGVmcyh0aGlzLmRhdGFDb2x1bW5zKTtcclxuICAgICAgdGhpcy5ncmlkT3B0aW9ucy5hcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaGFsZkxvYWRlZCkge1xyXG4gICAgICBpZiAodGhpcy5jYWxsUXVldWVkID09PSB0cnVlKSB7XHJcbiAgICAgICAgLy8gQSBjYWxsIGNvbXBsZXRlZCB3aGlsZSBhbm90aGVyIGNhbGwgd2FzIHF1ZXVlZCBzbyBtYWtlIHRoYXQgY2FsbCBub3dcclxuICAgICAgICB0aGlzLmNhbGxRdWV1ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdldERpY3Rpb25hcnlCZWdpbih0aGlzLmNsYXNzTmFtZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dChmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGFsZkxvYWRlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0VkaXRhYmxlKHBhcmFtcyk6IGJvb2xlYW4ge1xyXG5cclxuICAgIGxldCBpc0VkaXRhYmxlOiBib29sZWFuO1xyXG5cclxuICAgIGxldCBjb2x1bW46IGFueSA9IHt9O1xyXG4gICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5kaWN0aW9uYXJ5LmZpZWxkcykge1xyXG4gICAgICBpZiAocGFyYW1zLmNvbERlZi5maWVsZCA9PSBmaWVsZC5uYW1lKSB7XHJcbiAgICAgICAgY29sdW1uID0gZmllbGQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyYW1zLmRhdGEuZWRpdE9yTmV3ICYmIHBhcmFtcy5kYXRhLmVkaXRPck5ldyA9PSBcIm5ld1wiKSB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwibmV3IGVkaXRhYmxlP1wiKTtcclxuICAgICAgaXNFZGl0YWJsZSA9ICEodGhpcy5kaWN0aW9uYXJ5LnJlYWRPbmx5IHx8IGNvbHVtbi5yZWFkT25seSB8fFxyXG4gICAgICAgIGNvbHVtbi5wcm90ZWN0aW9uVHlwZSA9PSBcIlJlYWQgT25seVwiKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiZWRpdCBlZGl0YWJsZT9cIik7XHJcbiAgICAgIGlzRWRpdGFibGUgPSAhKHRoaXMuZGljdGlvbmFyeS5yZWFkT25seSB8fCBjb2x1bW4ucmVhZE9ubHkgfHxcclxuICAgICAgICBjb2x1bW4ucHJvdGVjdGlvblR5cGUgPT0gXCJSZWFkIE9ubHlcIiB8fCBjb2x1bW4uY3JlYXRlT25seSB8fFxyXG4gICAgICAgIGNvbHVtbi5wcm90ZWN0aW9uVHlwZSA9PSBcIkNyZWF0ZSBPbmx5XCIgfHwgY29sdW1uLmNvZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc0VkaXRhYmxlO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlRGljdGlvbmFyeUVudHJpZXMoKTogdm9pZCB7XHJcblxyXG4gICAgbGV0IGRlbGV0ZVJvd3M6IGFueVtdID0gdGhpcy5ncmlkT3B0aW9ucy5hcGkuZ2V0U2VsZWN0ZWRSb3dzKCk7XHJcblxyXG4gICAgZm9yIChsZXQgZGVsZXRlSWQgb2YgdGhpcy5zZWxlY3RlZFJvd3MpIHtcclxuICAgICAgZm9yIChsZXQgZW50cnkgb2YgdGhpcy5kaWN0aW9uYXJ5RW50cmllcykge1xyXG4gICAgICAgIGlmIChlbnRyeVt0aGlzLmlkQ29sdW1uXSA9PT0gZGVsZXRlSWQpIHtcclxuICAgICAgICAgIGRlbGV0ZVJvd3MucHVzaChlbnRyeSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpY3Rpb25hcnlTZXJ2aWNlLmRlbGV0ZURpY3Rpb25hcnlFbnRyaWVzKHRoaXMuY2xhc3NOYW1lLCBkZWxldGVSb3dzKS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5nZXREaWN0aW9uYXJ5RW50cmllcygpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRGljdGlvbmFyeShldmVudDogYW55KTogdm9pZCB7XHJcblxyXG4gICAgLy8gSW1wb3J0YW50IHRvIG5vdGUgdGhpcyB3aWxsIG5vdCB1cGRhdGUgY2VsbHMgdG8gdGhlIGRlbW8gYnV0IHdpbGwgd2hlbiBpbXBvcnRlZCB0byBDT1JFIG9yIG90aGVyIGFwcGxpY2F0aW9ucy5cclxuICAgIHRoaXMuZGljdGlvbmFyeVNlcnZpY2UudXBkYXRlRGljdGlvbmFyeUVudHJpZXModGhpcy5jbGFzc05hbWUsIFtldmVudC5kYXRhXSkuc3Vic2NyaWJlKFxyXG4gICAgICAoZGF0YTogYW55W10pID0+IHtcclxuICAgICAgICB0aGlzLmdldERpY3Rpb25hcnlFbnRyaWVzKCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZEVudHJpZXMoKTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSB0aGlzLmdyaWRPcHRpb25zLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICB9XHJcblxyXG4gIG5ld1Jvd1Bvc3QoZGF0YTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5kaWN0aW9uYXJ5U2VydmljZS5hZGREaWN0aW9uYXJ5RW50cmllcyh0aGlzLmNsYXNzTmFtZSwgW2RhdGFdKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoXHJcbiAgICAgICAgICAoZGF0YTogT2JqZWN0W10pID0+IHtcclxuICAgICAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gPGFueT5kYXRhWzBdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBvblNhbXBsZXNHcmlkUmVhZHkoZXZlbnQ6IEdyaWRSZWFkeUV2ZW50KTogdm9pZCB7XHJcblxyXG4gICAgZXZlbnQuYXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgb25HcmlkU2l6ZUNoYW5nZWQoZXZlbnQ6IGFueSkge1xyXG5cclxuICAgIGlmIChldmVudCAmJiBldmVudC5hcGkpIHtcclxuICAgICAgZXZlbnQuYXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGlzYWJsZUFkZFJvdygpOiBib29sZWFuIHtcclxuXHJcbiAgICBpZiAoIXRoaXMuZGljdGlvbmFyeSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5kaWN0aW9uYXJ5LnJlYWRPbmx5ICYmIHRoaXMuZGljdGlvbmFyeS5yZWFkT25seSA9PT0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGlzYWJsZURlbGV0ZSgpOiBib29sZWFuIHtcclxuXHJcbiAgICBpZiAoIXRoaXMuZGljdGlvbmFyeSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kaWN0aW9uYXJ5LnJlYWRPbmx5ICYmIHRoaXMuZGljdGlvbmFyeS5yZWFkT25seSA9PT0gdHJ1ZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5ncmlkT3B0aW9ucyAmJiB0aGlzLmdyaWRPcHRpb25zLmFwaSAmJiB0aGlzLmdyaWRPcHRpb25zLmFwaS5nZXRTZWxlY3RlZFJvd3MoKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5ncmlkT3B0aW9ucy5hcGkuZ2V0U2VsZWN0ZWRSb3dzKCkubGVuZ3RoID09PSAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbWJvRmlsdGVyVmFsdWVHZXR0ZXIocGFyYW1zKTogYW55IHtcclxuXHJcbiAgICBsZXQgdmFsdWUgPSBwYXJhbXMuZGF0YVtwYXJhbXMuY29sRGVmLmZpZWxkXTtcclxuXHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgbGV0IG9wdGlvbiA9ICgocGFyYW1zLmNvbERlZiBhcyBhbnkpLnNlbGVjdE9wdGlvbnMgYXMgYW55W10pLmZpbmQoKGVudHJ5KSA9PiAoZW50cnlbcGFyYW1zLmNvbERlZi5zZWxlY3RPcHRpb25zVmFsdWVGaWVsZF0gPT09IHZhbHVlKSk7XHJcbiAgICAgIHJldHVybiBvcHRpb24gPyBvcHRpb25bcGFyYW1zLmNvbERlZi5zZWxlY3RPcHRpb25zRGlzcGxheUZpZWxkXSA6IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrQWRkUm93KCkge1xyXG5cclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihOZXdSb3dDb21wb25lbnQsXHJcbiAgICAgIHtcclxuICAgICAgICBzaXplOiBcImxnXCIsXHJcbiAgICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxyXG4gICAgICAgIGJhY2tkcm9wOiBcInN0YXRpY1wiLFxyXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmNvbERlZnMgPSB0aGlzLmRhdGFDb2x1bW5zO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGljdGlvbmFyeSA9IHRoaXMuZGljdGlvbmFyeTtcclxuXHJcbiAgICAvLyBpZiAoIXRoaXMubmV3Um93U3Vic2NyaXB0aW9uKSB7IC8vIHJlbW92ZWQgYmVjYXVzZSBpdCB3YXMgcHJldmVudGluZyBzYXZlIGFmdGVyIGNhbmNlbFxyXG4gICAgICAvLyB0ZWxsIG90aGVyIGFnLWdyaWQgdG8gYWRkIHJvdyB0byBpdFxyXG4gICAgICB0aGlzLm5ld1Jvd1N1YnNjcmlwdGlvbiA9IG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLm5ld1Jvd1N1YmplY3Quc3Vic2NyaWJlKFxyXG4gICAgICAgICh0aGVOZXdSb3c6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRpY3Rpb25hcnlFbnRyaWVzID0gdGhlTmV3Um93LmNvbmNhdCh0aGlzLmRpY3Rpb25hcnlFbnRyaWVzKTtcclxuICAgICAgICAgIHRoaXMuZ3JpZE9wdGlvbnMuYXBpLnNldFJvd0RhdGEodGhpcy5kaWN0aW9uYXJ5RW50cmllcyk7XHJcbiAgICAgICAgICB0aGlzLm5ld1Jvd1N1YnNjcmlwdGlvbiA9IG51bGw7XHJcblxyXG4gICAgICAgICAgLy8gSW1wb3J0YW50IHRvIG5vdGUgdGhpcyB3aWxsIG5vdCBhZGQgcm93cyB0byB0aGUgZGVtbyBidXQgd2lsbCB3aGVuIGltcG9ydGVkIHRvIENPUkUgb3Igb3RoZXIgYXBwbGljYXRpb25zLlxyXG4gICAgICAgICAgdGhpcy5uZXdSb3dQb3N0KHRoZU5ld1Jvd1swXSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXREaWN0aW9uYXJ5RW50cmllcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbXBhcmF0ZXIgVG8gQ29tcGFyZSAyIERhdGVzXHJcbiAgICogQHBhcmFtIGRhdGUxIERhdGUgMVxyXG4gICAqIEBwYXJhbSBkYXRlMiBEYXRlIDJcclxuICAgKi9cclxuICBkYXRlQ29tcGFyYXRvcihkYXRlMSwgZGF0ZTIpIHtcclxuXHJcbiAgICBsZXQgZGF0ZTFOdW1iZXIgPSBtb250aFRvQ29tcGFyYWJsZU51bWJlcihkYXRlMSk7XHJcbiAgICBsZXQgZGF0ZTJOdW1iZXIgPSBtb250aFRvQ29tcGFyYWJsZU51bWJlcihkYXRlMik7XHJcblxyXG4gICAgaWYgKGRhdGUxTnVtYmVyID09PSBudWxsICYmIGRhdGUyTnVtYmVyID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRlMU51bWJlciA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGUyTnVtYmVyID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkYXRlMU51bWJlciAtIGRhdGUyTnVtYmVyO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEV4dHJhY3RzIERhdGUgQW5kIFR1cm4gVG8gQSBOdW1lcmljYWwgVmFsdWUgRm9yIENvbXBhcmluZyBQdXJwb3Nlc1xyXG4gKiBAcGFyYW0gZGF0ZSBUaGUgZGF0ZSB0byBjb21wYXJhYmxlIG51bWJlclxyXG4gKi9cclxuZnVuY3Rpb24gbW9udGhUb0NvbXBhcmFibGVOdW1iZXIoZGF0ZSkge1xyXG5cclxuICBpZiAoZGF0ZSA9PT0gdW5kZWZpbmVkIHx8IGRhdGUgPT09IG51bGwgfHwgZGF0ZS5sZW5ndGggIT09IDEwKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGxldCB5ZWFyTnVtYmVyID0gZGF0ZS5zdWJzdHJpbmcoMCwgNCk7XHJcbiAgbGV0IG1vbnRoTnVtYmVyID0gZGF0ZS5zdWJzdHJpbmcoNSwgNyk7XHJcbiAgbGV0IGRheU51bWJlciA9IGRhdGUuc3Vic3RyaW5nKDgsIDEwKTtcclxuXHJcbiAgcmV0dXJuIHllYXJOdW1iZXIgKiAxMDAwMCArIG1vbnRoTnVtYmVyICogMTAwICsgZGF5TnVtYmVyO1xyXG59XHJcbiJdfQ==
|
|
817
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0YWlsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2RpY3Rpb25hcnktZWRpdG9yL3NyYy9jb21wb25lbnRzL2RldGFpbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFhLFdBQVcsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUNoRyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFDLGVBQWUsRUFBYyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFXLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUMsUUFBUSxFQUFjLE1BQU0sNEJBQTRCLENBQUM7QUFFakUsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGlCQUFpQixFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFRckcsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7Ozs7QUFFakc7Ozs7Ozs7O0dBUUc7QUFzTUgsTUFBTSxPQUFPLCtCQUErQjtJQWtDMUMsWUFDVSxLQUFxQixFQUNyQixZQUFzQixFQUN0QixpQkFBb0MsRUFDUCxrQkFBMEI7UUFIdkQsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsaUJBQVksR0FBWixZQUFZLENB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UUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUM7WUFDL0csRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBQztZQUM1RixFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBQztZQUNyRixFQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUM7WUFDekcsRUFBQyxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsVUFBVSxFQUFFLHVCQUF1QixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUM7WUFDbkksRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUM7WUFDM0YsRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBQztZQUN0RyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUks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QUMsT0FBTzs7QUFpdUJ0Qjs7O0dBR0c7QUFDSCxTQUFTLHVCQUF1QixDQUFDLElBQUk7SUFFbkMsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUM5RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUV0QyxPQUFPLFVBQVUsR0FBRyxLQUFLLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxTQUFTLENBQUM7QUFDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbmplY3QsIGlzRGV2TW9kZSwgVmlld0NoaWxkLCBIb3N0QmluZGluZywgVGVtcGxhdGVSZWZ9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuXHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtmaW5hbGl6ZSwgbWFwLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtOZ2JNb2RhbCwgTmdiTW9kYWxSZWZ9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xyXG5cclxuaW1wb3J0IHtESUNUSU9OQVJZX0VORFBPSU5ULCBEaWN0aW9uYXJ5U2VydmljZX0gZnJvbSAnQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvZGljdGlvbmFyeS1zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQ29sdW1uQXBpLFxyXG4gIEdyaWRPcHRpb25zLFxyXG4gIEdyaWRSZWFkeUV2ZW50LFxyXG4gIEdyaWRBcGlcclxufSBmcm9tIFwiYWctZ3JpZC1jb21tdW5pdHlcIjtcclxuaW1wb3J0IHtTZWxlY3RSZW5kZXJlcn0gZnJvbSBcIi4uL2dyaWQtcmVuZGVyZXJzL3NlbGVjdC5yZW5kZXJlclwiO1xyXG5pbXBvcnQge1NlbGVjdEVkaXRvcn0gZnJvbSBcIi4uL2dyaWQtZWRpdG9ycy9zZWxlY3QuZWRpdG9yXCI7XHJcbmltcG9ydCB7TmV3Um93Q29tcG9uZW50fSBmcm9tIFwiLi9uZXctcm93LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge2lzTnVsbE9yVW5kZWZpbmVkfSBmcm9tIFwidXRpbFwiO1xyXG5pbXBvcnQge0RhdGVSZW5kZXJlcn0gZnJvbSBcIi4uL2dyaWQtcmVuZGVyZXJzL2RhdGUucmVuZGVyZXJcIjtcclxuaW1wb3J0IHtBZ0dyaWREYXRlQ2VsbEVkaXRvckNvbXBvbmVudH0gZnJvbSBcIi4uL2dyaWQtZWRpdG9ycy9hZy1ncmlkLWRhdGUtY2VsbC1lZGl0b3IuY29tcG9uZW50XCI7XHJcblxyXG4vKipcclxuICogV2hlbiBhIGRpY3Rpb25hcnkgaXMgc2VsZWN0ZWQgdGhpcyBjb21wb25lbnQgaXMgc2hvd24uICBUaGVyZSBpcyBhIHRvcCBncmlkIHdoaWNoIGZvciBpdHMgZGF0YSBzaG93cyBhbGwgdGhlIGNvbHVtbnNcclxuICogZm9yIHRoZSBkaWN0aW9uYXJ5LiBDdXJyZW50bHksIGtlZXAgdGhpcyBmb3IgcmVmZXJlbmNlIG9ubHkgYW5kIGhhdmUgbm9uLWVkaXRhYmxlLlxyXG4gKiBUaGUgYm90dG9tIGdyaWQgd2lsbCBzaG93IHRob3NlIGNvbHVtbnMgYXMgYWN0dWFsIGNvbHVtbnMgYW5kIGl0cyBkYXRhIGFyZSBhbGwgdGhlIGRpY3Rpb25hcnkgdmFsdWVzLiAgUm93cyBjYW4gYmVcclxuICogYWRkZWQuICBGb3IgZGVsZXRpbmcsIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpZCBpcyBub3QgdXNlZCBhbnl3aGVyZS4gIEZvciBlZGl0aW5nLCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgY29kZSBvciBhbnl0aGluZ1xyXG4gKiBlbHNlIGlzbid0IGJlaW5nIHJlZmVyZW5jZWQuXHJcbiAqXHJcbiAqIEBzaW5jZSAxLjAuMFxyXG4gKi9cclxuQENvbXBvbmVudChcclxuICB7XHJcbiAgICBzZWxlY3RvcjogXCJoY2ktZGljdGlvbmFyeS1lZGl0b3ItZGV0YWlsXCIsXHJcbiAgICB0ZW1wbGF0ZTpcclxuICAgICAgYFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gaGNpLWRpY3Rpb25hcnktZGV0YWlsLWJvZHlcIj5cclxuICAgICAgICAgIDxoY2ktYnVzeSBbYnVzeVN1YmplY3RzXT1cImxvYWRpbmdTdWJqZWN0c1wiPjwvaGNpLWJ1c3k+XHJcblxyXG4gICAgICAgICAgPCEtLSBEaWN0aW9uYXJ5IFRpdGxlIEFuZCBNZXRhZGF0YSAtLT5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaWN0aW9uYXJ5LWluZm8tc2VjdGlvblwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpY3Rpb25hcnktdGl0bGVcIj5cclxuICAgICAgICAgICAgICB7e2Rpc3BsYXlOYW1lfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHJpUmlwcGxlRWZmZWN0RGljdCBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtZXRhZGF0YS1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuTW9kYWwobWV0YURhdGFNb2RhbClcIj5cclxuICAgICAgICAgICAgICBWaWV3IE1ldGEgRGF0YVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gRGljdGlvbmFyeSBFZGl0IEJ1dHRvbnMgLS0+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8YnV0dG9uIFtjbGFzc109XCJkaXNhYmxlRGVsZXRlPyAnZGVhY3RpdmF0ZWQtY29sb3InOiAnYWN0aXZlLWNvbG9yJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVEZWxldGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuQXJlWW91U3VyZU1vZGFsKGFyZVlvdVN1cmVNb2RhbClcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1taW51c1wiPjwvaT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9XCJjb2xvcjogdmFyKC0tYmx1ZXdhcm0tZGFya2VzdCk7IGZsb2F0OiByaWdodDsgZm9udC1zaXplOiAxNXB4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVBZGRSb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrQWRkUm93KClcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gRGljdGlvbmFyeSBEaXNwbGF5IEdyaWQgLS0+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgICAgIDxhZy1ncmlkLWFuZ3VsYXIgaWQ9XCJkaWN0aW9uYXJ5LWdyaWQtZGlzcGxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2RhdGFHcmlkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZy10aGVtZS1iYWxoYW0gZnVsbC1oZWlnaHQgZnVsbC13aWR0aCBoY2ktZGljdGlvbmFyeS1kaXNwbGF5LWdyaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dEYXRhXT1cImRpY3Rpb25hcnlFbnRyaWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93U2VsZWN0aW9uXT1cIidtdWx0aXBsZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaW5nbGVDbGlja0VkaXRdPVwiJ3RydWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFnaW5hdGlvbl09XCIndHJ1ZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYWdpbmF0aW9uQXV0b1BhZ2VTaXplXT1cIid0cnVlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyaWRPcHRpb25zXT1cImdyaWRPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2VsbFZhbHVlQ2hhbmdlZCk9XCJ1cGRhdGVEaWN0aW9uYXJ5KCRldmVudClcIj5cclxuICAgICAgICAgICAgPC9hZy1ncmlkLWFuZ3VsYXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIERpY3Rpb25hcnkgTWV0YWRhdGEgUG9wdXAgLS0+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI21ldGFEYXRhTW9kYWwgbGV0LWNsb3NlPVwiY2xvc2VcIj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOjEwMDBweFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIE1ldGEgRGF0YSBmb3Ige3tjbGFzc05hbWV9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gbW9kYWwtYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlcjogMXB4IHNvbGlkICNjZWQ0ZGE7IHdpZHRoOiAxMDAlO1wiPlxyXG4gICAgICAgICAgICAgICAgPGFnLWdyaWQtYW5ndWxhciAjbWV0YUdyaWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZy10aGVtZS1iYWxoYW0gZnVsbC13aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAyNTBweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3JpZFJlYWR5KT1cInRoaXMub25NZXRhR3JpZFJlYWR5KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JpZE9wdGlvbnNdPVwidGhpcy5tZXRhR3JpZE9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93U2VsZWN0aW9uXT1cIidzaW5nbGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZyYW1ld29ya0NvbXBvbmVudHNdPVwiZnJhbWV3b3JrQ29tcG9uZW50c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dEYXRhXT1cImRpY3Rpb25hcnk/LmZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgPC9hZy1ncmlkLWFuZ3VsYXI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiByaVJpcHBsZUVmZmVjdERpY3QgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiY2xvc2UoJ0Nsb3NlJylcIj5DbG9zZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgPCEtLSBEaWN0aW9uYXJ5IERlbGV0ZSBDb21maXJtYXRpb24gUG9wdXAgLS0+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2FyZVlvdVN1cmVNb2RhbCBsZXQtY2xvc2U9XCJjbG9zZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgQ29uZmlybWF0aW9uXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBkLWZsZXhcIj5cclxuICAgICAgICAgICAgICBBcmUgeW91IHN1cmU/XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiByaVJpcHBsZUVmZmVjdERpY3QgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiY2xvc2UoJ0NhbmNlbCcpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiByaVJpcHBsZUVmZmVjdERpY3QgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXJlZFwiIChjbGljayk9XCJjbG9zZSgnRGVsZXRlJylcIj5EZWxldGU8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICBgLFxyXG4gICAgc3R5bGVzOiBbXHJcbiAgICAgIGBcclxuICAgICAgICAuZnVsbC1oZWlnaHQge1xyXG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmZ1bGwtd2lkdGgge1xyXG4gICAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuYWctdGhlbWUtYmFsaGFtIHtcclxuICAgICAgICAgIGZvbnQtZmFtaWx5OiBcImhjaS1mb250XCI7XHJcbiAgICAgICAgICBmb250LXdlaWdodDogNTAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmFjdGl2ZS1jb2xvciB7XHJcbiAgICAgICAgICBmbG9hdDogcmlnaHQ7XHJcbiAgICAgICAgICBmb250LXNpemU6IDE1cHg7XHJcbiAgICAgICAgICBjb2xvcjogdmFyKC0tYmx1ZXdhcm0tZGFya2VzdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuZGVhY3RpdmF0ZWQtY29sb3Ige1xyXG4gICAgICAgICAgZmxvYXQ6IHJpZ2h0O1xyXG4gICAgICAgICAgZm9udC1zaXplOiAxNXB4O1xyXG4gICAgICAgICAgY29sb3I6IHZhcigtLWdyZXl3YXJtLWRhcmtlc3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmRpY3Rpb25hcnktaW5mby1zZWN0aW9uIHtcclxuICAgICAgICAgIHBhZGRpbmctdG9wOiAxMHB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmRpY3Rpb25hcnktdGl0bGUge1xyXG4gICAgICAgICAgZmxvYXQ6IGxlZnQ7XHJcbiAgICAgICAgICBmb250LXNpemU6IDE2cHg7XHJcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7XHJcbiAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xyXG4gICAgICAgICAgcGFkZGluZy10b3A6IDVweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5tZXRhZGF0YS1idXR0b24ge1xyXG4gICAgICAgICAgY29sb3I6IHZhcigtLXdoaXRlLWxpZ2h0ZXN0KTtcclxuICAgICAgICAgIGZsb2F0OiBsZWZ0O1xyXG4gICAgICAgICAgZm9udC1zaXplOiAxNXB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgLmFnLWhlYWRlci1jZWxsIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWV3YXJtdml2aWRmYWRlLWxpZ2h0ZXN0KTtcclxuICAgICAgICAgIGJvcmRlcjogbGlnaHRncmF5IHNvbGlkIHRoaW47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCAuYWctY2VsbCB7XHJcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IGxpZ2h0Z3JheSBzb2xpZCB0aGluO1xyXG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IGxpZ2h0Z3JheSBzb2xpZCB0aGluO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgLmFnLXJvdyB7XHJcbiAgICAgICAgICBib3JkZXItYm90dG9tOiAwO1xyXG4gICAgICAgICAgYm9yZGVyLXRvcDogMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIC5hZy1yb3ctZXZlbiB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZS1tZWRpdW0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmhjaS1kaWN0aW9uYXJ5LWRldGFpbC1ib2R5IHtcclxuICAgICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDBkZWcsIHZhcigtLXdoaXRlLWxpZ2h0ZXN0KSAzMCUsIHZhcigtLWJsdWV3YXJtdml2aWRmYWRlLWxpZ2h0ZXIpIDEwMCUpICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuaGNpLWRpY3Rpb25hcnktZGlzcGxheS1ncmlkIHtcclxuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDVweDtcclxuICAgICAgICAgIHBhZGRpbmctbGVmdDogNXB4O1xyXG4gICAgICAgICAgYm94LXNoYWRvdzogcmdiYSgwLCAwLCAwLCAwLjM1KSAwcHggNXB4IDE1cHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgICAgICAqIERpY3Rpb25hcnkgUm93IEhvdmVyIENTU1xyXG4gICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIC5hZy1yb3ctaG92ZXIge1xyXG4gICAgICAgICAgY29sb3I6IHZhcigtLWdyZXktZGFya2VzdCkgIWltcG9ydGFudDtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWV3YXJtdml2aWRmYWRlLWxpZ2h0ZXIpICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgICAgICAqIERpY3Rpb25hcnkgQ2VsbCBTZWxlY3RlZCBDU1NcclxuICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCAuYWctcm93LXNlbGVjdGVkIC5hZy1jZWxsIHtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS13aGl0ZS1saWdodGVzdCkgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIC5hZy1yb3ctc2VsZWN0ZWQgLmFnLWNlbGwtbm90LWlubGluZS1lZGl0aW5nIHtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS13aGl0ZS1saWdodGVzdCkgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIC5hZy1yb3ctc2VsZWN0ZWQgLmFnLWNlbGwtaW5saW5lLWVkaXRpbmcge1xyXG4gICAgICAgICAgY29sb3I6IHZhcigtLWJsYWNrLWRhcmtlc3QpICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuICAgICAgICAqIERpY3Rpb25hcnkgUm93IFNlbGVjdGVkIENTU1xyXG4gICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIC5hZy1yb3ctc2VsZWN0ZWQge1xyXG4gICAgICAgICAgY29sb3I6IHZhcigtLXdoaXRlLWRhcmtlc3QpICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVld2FybXZpdmlkLWxpZ2h0ZXIpICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICBgXHJcbiAgICBdXHJcbiAgfVxyXG4pXHJcbmV4cG9ydCBjbGFzcyBEaWN0aW9uYXJ5RWRpdG9yRGV0YWlsQ29tcG9uZW50IHtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKFwiY2xhc3NcIikgY2xhc3NMaXN0OiBzdHJpbmcgPSBcIm91dGxldC1jb2x1bW4geS1hdXRvXCI7XHJcblxyXG4gIHByaXZhdGUgc2Vjb25kYXJ5RGljdGlvbmFyeUVudHJpZXM6IGFueTtcclxuICBjbGFzc05hbWU6IHN0cmluZztcclxuICBkaXNwbGF5TmFtZTogYW55O1xyXG4gIGRpY3Rpb25hcnk6IGFueTtcclxuICBkaWN0aW9uYXJ5RW50cmllczogYW55W10gPSBbXTtcclxuICBkYXRhQ29sdW1uczogYW55W107XHJcblxyXG4gIGlkQ29sdW1uOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRSb3dzOiBhbnlbXSA9IFtdO1xyXG4gIGxvYWRpbmdTdWJqZWN0czogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+W10gPSBbXTtcclxuICBoYWxmTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJvY2Vzc2luZ0NhbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBjYWxsUXVldWVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGJvdW5kTmV3Um93UG9zdENhbGw6IChkYXRhOiBhbnkpID0+IE9ic2VydmFibGU8YW55PjtcclxuICBncmlkT3B0aW9uczogR3JpZE9wdGlvbnM7XHJcbiAgbmV3Um93U3Vic2NyaXB0aW9uOiBhbnk7XHJcbiAgcHJpdmF0ZSBkZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgbWV0YUdyaWRPcHRpb25zID0ge1xyXG4gICAgcm93U3R5bGU6IHtcclxuICAgICAgXCJmb250LWZhbWlseVwiOiBcImhjaS1mb250XCJcclxuICAgIH0sXHJcbiAgICBlbmFibGVDZWxsVGV4dFNlbGVjdGlvbjogdHJ1ZSxcclxuICAgIGVuc3VyZURvbU9yZGVyOiB0cnVlXHJcbiAgfTtcclxuICBmcmFtZXdvcmtDb21wb25lbnRzOiBhbnk7XHJcbiAgcHVibGljIGdyaWRBcGlNZXRhOiBHcmlkQXBpO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgZGljdGlvbmFyeVNlcnZpY2U6IERpY3Rpb25hcnlTZXJ2aWNlLFxyXG4gICAgQEluamVjdChESUNUSU9OQVJZX0VORFBPSU5UKSBwcml2YXRlIERpY3Rpb25hcnlFbmRwb2ludDogc3RyaW5nXHJcbiAgKSB7XHJcblxyXG4gICAgdGhpcy5ncmlkT3B0aW9ucyA9IDxHcmlkT3B0aW9ucz57XHJcbiAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICBjb21wb25lbnRQYXJlbnQ6IHRoaXNcclxuICAgICAgfSxcclxuICAgICAgb25HcmlkUmVhZHk6IERpY3Rpb25hcnlFZGl0b3JEZXRhaWxDb21wb25lbnQub25TYW1wbGVzR3JpZFJlYWR5LFxyXG4gICAgICBvbkdyaWRTaXplQ2hhbmdlZDogRGljdGlvbmFyeUVkaXRvckRldGFpbENvbXBvbmVudC5vbkdyaWRTaXplQ2hhbmdlZCxcclxuICAgICAgc3VwcHJlc3NIb3Jpem9udGFsU2Nyb2xsOiBmYWxzZSxcclxuICAgICAgc2VsZWN0aW9uTW9kZTogXCJtdWx0aXBsZVwiLFxyXG4gICAgICBzdG9wRWRpdGluZ1doZW5HcmlkTG9zZXNGb2N1czogdHJ1ZSxcclxuICAgICAgZW5hYmxlU29ydGluZzogdHJ1ZSxcclxuICAgICAgZW5hYmxlRmlsdGVyOiB0cnVlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQmFzZWQgb24gdGhlIHJvdXRlIGNsYXNzIG5hbWUsIG1ha2UgdGhlIGNhbGwgdG8gZmV0Y2ggdGhlIGRpY3Rpb25hcnkgZGF0YS4gIFNpbmNlIHRoaXMgY29tcG9uZW50IGlzIHJvdXRlIGJhc2VkLFxyXG4gICAqIHdoZW4gdGhlIGRpY3Rpb25hcnkgY2xhc3MgaW4gdGhlIHJvdXRlIGNoYW5nZXMsIHRoaXMgY29tcG9uZW50IGlzIHJlbG9hZGVkLlxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5ib3VuZE5ld1Jvd1Bvc3RDYWxsID0gdGhpcy5uZXdSb3dQb3N0LmJpbmQodGhpcyk7XHJcblxyXG4gICAgdGhpcy5sb2FkaW5nU3ViamVjdHMucHVzaChuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKSk7XHJcblxyXG4gICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKFxyXG4gICAgICBwYXJhbXMgPT4ge1xyXG5cclxuICAgICAgICBsZXQgY2xhc3NOYW1lOiBzdHJpbmcgPSBwYXJhbXNbXCJjbGFzc05hbWVcIl07XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0RGljdGlvbmFyeShjbGFzc05hbWUpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLnN1YnNjcmliZSgodmFsdWU6IGJvb2xlYW4pID0+IHtcclxuICAgICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgICAgLy8gQSBuZXcgY2FsbCB3YXMgbWFkZSB0byBiZSBwcm9jZXNzZWQsIHByb2Nlc3MgdGhlIGNhbGxcclxuICAgICAgICB0aGlzLmdldERpY3Rpb25hcnlCZWdpbih0aGlzLmNsYXNzTmFtZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gQSBjYWxsIGNvbXBsZXRlZCB3aGlsZSBhbm90aGVyIGNhbGwgd2FzIG5vdCBxdWV1ZWQsIHByb2Nlc3NpbmcgY29tcGxldGVcclxuICAgICAgICB0aGlzLnByb2Nlc3NpbmdDYWxsID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb3Blbk1vZGFsKG1vZGFsOiBUZW1wbGF0ZVJlZjxhbnk+KTogdm9pZCB7XHJcblxyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbihtb2RhbCwge3dpbmRvd0NsYXNzOiBcIm1vZGFsLXhsXCJ9KS5yZXN1bHQudGhlbihcclxuICAgICAgKHJlc3VsdCkgPT4ge1xyXG4gICAgICB9LFxyXG4gICAgICAocmVhc29uKSA9PiB7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcblxyXG4gICAgdGhpcy5ncmlkT3B0aW9ucy5hcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbHVtbkRlZk1ldGEoKSA6IGFueVtdIHtcclxuXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB7ZmllbGQ6IFwibmFtZVwiLCBoZWFkZXJOYW1lOiBcIk5hbWVcIiwgd2lkdGg6IDE3NSwgc29ydGFibGU6IHRydWUsIHJlc2l6YWJsZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlfSxcclxuICAgICAge2ZpZWxkOiBcImRlc2NyaXB0aW9uXCIsIGhlYWRlck5hbWU6IFwiRGVzY3JpcHRpb25cIiwgd2lkdGg6IDI1MCwgc29ydGFibGU6IHRydWUsIHJlc2l6YWJsZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlfSxcclxuICAgICAge2ZpZWxkOiBcImlkXCIsIGhlYWRlck5hbWU6IFwiSWRcIiwgd2lkdGg6IDYwLCBzb3J0YWJsZTogdHJ1ZSwgcmVzaXphYmxlOiB0cnVlLCBlZGl0YWJsZTogZmFsc2V9LFxyXG4gICAgICB7ZmllbGQ6IFwidHlwZVwiLCBoZWFkZXJOYW1lOiBcIlR5cGVcIiwgc29ydGFibGU6IHRydWUsIHJlc2l6YWJsZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlfSxcclxuICAgICAge2ZpZWxkOiBcInByb3RlY3Rpb25UeXBlXCIsIGhlYWRlck5hbWU6IFwiUHJvdGVjdGlvblR5cGVcIiwgc29ydGFibGU6IHRydWUsIHJlc2l6YWJsZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlfSxcclxuICAgICAge2ZpZWxkOiBcImZpbHRlckRpY3Rpb25hcnlDbGFzc1wiLCBoZWFkZXJOYW1lOiBcIkZpbHRlckRpY3Rpb25hcnlDbGFzc1wiLCB3aWR0aDogMTgwLCBzb3J0YWJsZTogdHJ1ZSwgcmVzaXphYmxlOiB0cnVlLCBlZGl0YWJsZTogZmFsc2V9LFxyXG4gICAgICB7ZmllbGQ6IFwibm90TnVsbFwiLCBoZWFkZXJOYW1lOiBcIk5vdE51bGxcIiwgc29ydGFibGU6IHRydWUsIHJlc2l6YWJsZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlfSxcclxuICAgICAge2ZpZWxkOiBcImludGVnZXJcIiwgaGVhZGVyTmFtZTogXCJJbnRlZ2VyXCIsIHdpZHRoOiA3NSwgc29ydGFibGU6IHRydWUsIHJlc2l6YWJsZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlfSxcclxuICAgICAge2ZpZWxkOiBcIm1pblwiLCBoZWFkZXJOYW1lOiBcIk1pblwiLCB3aWR0aDogNjAsIHNvcnRhYmxlOiB0cnVlLCByZXNpemFibGU6IHRydWUsIGVkaXRhYmxlOiBmYWxzZX0sXHJcbiAgICAgIHtmaWVsZDogXCJtYXhcIiwgaGVhZGVyTmFtZTogXCJNYXhcIiwgd2lkdGg6IDYwLCBzb3J0YWJsZTogdHJ1ZSwgcmVzaXphYmxlOiB0cnVlLCBlZGl0YWJsZTogZmFsc2V9LFxyXG4gICAgICB7ZmllbGQ6IFwiZnJhY3Rpb25cIiwgaGVhZGVyTmFtZTogXCJGcmFjdGlvblwiLCBzb3J0YWJsZTogdHJ1ZSwgcmVzaXphYmxlOiB0cnVlLCBlZGl0YWJsZTogZmFsc2V9LFxyXG4gICAgICB7ZmllbGQ6IFwiZGljdGlvbmFyeVRvb2x0aXBcIiwgaGVhZGVyTmFtZTogXCJEaWN0aW9uYXJ5VG9vbHRpcFwiLCB3aWR0aDogMjAwLCBzb3J0YWJsZTogdHJ1ZSwgcmVzaXphYmxlOiB0cnVlLCBlZGl0YWJsZTogZmFsc2V9LFxyXG4gICAgICB7ZmllbGQ6IFwiZGljdGlvbmFyeURpc3BsYXlcIiwgaGVhZGVyTmFtZTogXCJEaWN0aW9uYXJ5RGlzcGxheVwiLCB3aWR0aDogMTc1LCBzb3J0YWJsZTogdHJ1ZSwgcmVzaXphYmxlOiB0cnVlLCBlZGl0YWJsZTogZmFsc2V9LFxyXG4gICAgICB7ZmllbGQ6IFwiZmlsdGVyYWJsZVwiLCBoZWFkZXJOYW1lOiBcIkZpbHRlcmFibGVcIiwgc29ydGFibGU6IHRydWUsIHJlc2l6YWJsZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlfSxcclxuICAgICAge2ZpZWxkOiBcImRpc3BsYXlOYW1lXCIsIGhlYWRlck5hbWU6IFwiRGlzcGxheU5hbWVcIiwgd2lkdGg6IDE3NSwgc29ydGFibGU6IHRydWUsIHJlc2l6YWJsZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlfSxcclxuICAgICAge2ZpZWxkOiBcImRpc3BsYXlPcmRlclwiLCBoZWFkZXJOYW1lOiBcIkRpc3BsYXlPcmRlclwiLCB3aWR0aDogNjAsIHNvcnRhYmxlOiB0cnVlLCByZXNpemFibGU6IHRydWUsIGVkaXRhYmxlOiBmYWxzZX0sXHJcbiAgICAgIHtmaWVsZDogXCJjZWxsU3R5bGVcIiwgaGVhZGVyTmFtZTogXCJDZWxsU3R5bGVcIiwgc29ydGFibGU6IHRydWUsIHJlc2l6YWJsZTogdHJ1ZSwgZWRpdGFibGU6IGZhbHNlfSxcclxuICAgIF07IC8vIHRoZSB3aWR0aHMgZm9yIHRoZSBsYXN0IDIgY291bGQgYmUgd3JvbmcuXHJcblxyXG4gIH1cclxuXHJcbiAgb25NZXRhR3JpZFJlYWR5KHBhcmFtcyA6IGFueSkge1xyXG5cclxuICAgIHRoaXMuZ3JpZEFwaU1ldGEgPSBwYXJhbXMuYXBpO1xyXG4gICAgdGhpcy5ncmlkQXBpTWV0YS5zZXRDb2x1bW5EZWZzKHRoaXMuY29sdW1uRGVmTWV0YSgpKTtcclxuICAgIHRoaXMuZ3JpZEFwaU1ldGEuc2V0Um93RGF0YSh0aGlzLmRpY3Rpb25hcnk/LmZpZWxkcyk7XHJcblxyXG4gIH1cclxuXHJcbiAgb3BlbkFyZVlvdVN1cmVNb2RhbChtb2RhbDogVGVtcGxhdGVSZWY8YW55Pik6IHZvaWQge1xyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4obW9kYWwpLnJlc3VsdC50aGVuKFxyXG4gICAgICAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gXCJEZWxldGVcIikge1xyXG4gICAgICAgICAgdGhpcy5kZWxldGVEaWN0aW9uYXJ5RW50cmllcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKHJlYXNvbikgPT4ge1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lIGlmIHdlIGFyZSBsb2FkaW5nIHNvbWV0aGluZywgYW5kIHRoZW4gd2FpdCB1bnRpbCBpdCBpcyBkb25lIHRvIC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWVcclxuICAgKi9cclxuICBnZXREaWN0aW9uYXJ5KGNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcclxuICAgIGlmICh0aGlzLnByb2Nlc3NpbmdDYWxsID09PSBmYWxzZSkge1xyXG4gICAgICAvLyBDYWxsIGlzIG5vdCBiZWluZyBwcm9jZXNzZWQsIHByb2Nlc3MgdGhpcyBjYWxsXHJcbiAgICAgIHRoaXMucHJvY2Vzc2luZ0NhbGwgPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQSBjYWxsIGlzIGFscmVhZHkgYmVpbmcgcHJvY2Vzc2VkLCBxdWV1ZSBhIHJlY2FsbCB3aGVuIGl0IGlzIGNvbXBsZXRlXHJcbiAgICAgIHRoaXMuY2FsbFF1ZXVlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaCB0aGUgZGljdGlvbmFyeSBtZXRhZGF0YSBhbmQgZGljdGlvbmFyeSBlbnRyaWVzIGJhc2VkIHVwb24gdGhlIGRpY3Rpb25hcnkgY2xhc3MgbmFtZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWVcclxuICAgKi9cclxuICBwcml2YXRlIGdldERpY3Rpb25hcnlCZWdpbihjbGFzc05hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5oYWxmTG9hZGVkID0gZmFsc2U7XHJcbiAgICAvLyBXaGVuIFNlbGVjdGluZyBBIE5ldyBEaWN0aW9uYXJ5LCBOYXZpZ2F0ZSBUbyBGaXJzdCBQYWdlXHJcbiAgICBpZiAodGhpcy5ncmlkT3B0aW9ucyAmJiB0aGlzLmdyaWRPcHRpb25zLmFwaSkge1xyXG4gICAgICB0aGlzLmdyaWRPcHRpb25zLmFwaS5wYWdpbmF0aW9uR29Ub0ZpcnN0UGFnZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhQ29sdW1ucyA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICB0aGlzLmRlc3Ryb3kubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95LmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLmRpY3Rpb25hcnlTZXJ2aWNlLmdldERpY3Rpb25hcnkoY2xhc3NOYW1lKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95KVxyXG4gICAgKS5zdWJzY3JpYmUoKGRpY3Rpb25hcnk6IE9iamVjdCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0VXBEaWN0aW9uYXJ5R3JpZChkaWN0aW9uYXJ5KTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmdldERpY3Rpb25hcnlFbnRyaWVzKCk7XHJcbiAgfVxyXG5cclxuICBnZXREaWN0aW9uYXJ5RW50cmllcygpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLmRpY3Rpb25hcnlTZXJ2aWNlLmdldERpY3Rpb25hcnlFbnRyaWVzKHRoaXMuY2xhc3NOYW1lKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kpKS5zdWJzY3JpYmUoXHJcbiAgICAgIChkaWN0aW9uYXJ5RW50cmllczogT2JqZWN0W10pID0+IHtcclxuICAgICAgICB0aGlzLmRpY3Rpb25hcnlFbnRyaWVzID0gZGljdGlvbmFyeUVudHJpZXM7XHJcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5hcGkuc2V0Um93RGF0YShkaWN0aW9uYXJ5RW50cmllcyk7XHJcbiAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5hcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmhhbGZMb2FkZWQpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmNhbGxRdWV1ZWQgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgLy8gQSBjYWxsIGNvbXBsZXRlZCB3aGlsZSBhbm90aGVyIGNhbGwgd2FzIHF1ZXVlZCBzbyBtYWtlIHRoYXQgY2FsbCBub3dcclxuICAgICAgICAgICAgdGhpcy5jYWxsUXVldWVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RGljdGlvbmFyeUJlZ2luKHRoaXMuY2xhc3NOYW1lKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmhhbGZMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgZGljdGlvbmFyeSBtZXRhZGF0YS4gIFRoaXMgaXMgdXNlZCB0byBidWlsZCB0aGUgY29sdW1ucyBmb3IgdGhlIGRpY3Rpb25hcnkgZW50cmllcy4gIFRoZSBuYW1lcywgdmFsaWRhdGlvbixcclxuICAgKiBhbmQgZmlsdGVyIGNsYXNzZXMgYnVpbGQgdGhlIGNvbHVtbiBkZWZpbml0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGRpY3Rpb25hcnlcclxuICAgKi9cclxuICBwcml2YXRlIHNldFVwRGljdGlvbmFyeUdyaWQoZGljdGlvbmFyeTogYW55KTogdm9pZCB7XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJEaWN0aW9uYXJ5RWRpdG9yRGV0YWlsQ29tcG9uZW50LnNldERpY3Rpb25hcnlcIik7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoZGljdGlvbmFyeSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaWN0aW9uYXJ5ID0gZGljdGlvbmFyeTtcclxuICAgIHRoaXMuc2Vjb25kYXJ5RGljdGlvbmFyeUVudHJpZXMgPSBbXTtcclxuICAgIGxldCBkaWN0aW9uYXJ5Q2xhc3NOYW1lcyA9IFtdO1xyXG5cclxuICAgIGZvciAobGV0IGZpZWxkIG9mIGRpY3Rpb25hcnkuZmllbGRzKSB7XHJcbiAgICAgIGlmIChmaWVsZC5maWx0ZXJEaWN0aW9uYXJ5Q2xhc3MpIHtcclxuICAgICAgICBkaWN0aW9uYXJ5Q2xhc3NOYW1lcy5wdXNoKGZpZWxkLmZpbHRlckRpY3Rpb25hcnlDbGFzcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdldFNlY29uZGFyeURpY3Rpb25hcmllcyhkaWN0aW9uYXJ5Q2xhc3NOYW1lcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFNlY29uZGFyeURpY3Rpb25hcmllcyhkaWN0aW9uYXJ5TmFtZXM6IHN0cmluZ1tdKSB7XHJcbiAgICBpZiAoZGljdGlvbmFyeU5hbWVzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHRoaXMuZmluaXNoQ29sdW1uU2V0dXAoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBkaWN0aW9uYXJ5TmFtZSA9IGRpY3Rpb25hcnlOYW1lcy5wb3AoKTtcclxuICAgICAgdGhpcy5kaWN0aW9uYXJ5U2VydmljZS5nZXREaWN0aW9uYXJ5RHJvcGRvd25FbnRyaWVzKGRpY3Rpb25hcnlOYW1lKS5waXBlKFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kpXHJcbiAgICAgICkuc3Vic2NyaWJlKFxyXG4gICAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlY29uZGFyeURpY3Rpb25hcnlFbnRyaWVzLnB1c2goe2RpY3Rpb25hcnlOYW1lOiBkaWN0aW9uYXJ5TmFtZSwgZW50cmllczogcmVzcG9uc2V9KTtcclxuICAgICAgICAgIHRoaXMuZ2V0U2Vjb25kYXJ5RGljdGlvbmFyaWVzKGRpY3Rpb25hcnlOYW1lcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5pc2hDb2x1bW5TZXR1cCgpIHtcclxuICAgIHRoaXMuZGlzcGxheU5hbWUgPSB0aGlzLmRpY3Rpb25hcnkuZGlzcGxheU5hbWU7XHJcblxyXG4gICAgLy8gVGhpcyBlc3RhYmxpc2hlcyB0aGUgcmVhZE9ubHkgZnVuY3Rpb25hbGl0eVxyXG4gICAgbGV0IGNvbHM6IGFueVtdID0gW107XHJcblxyXG4gICAgLy8gUHJvY2VzcyBDb2x1bW5zIEFuZCBDcmVhdGUgQ29sdW1uIERlZmluaXRpb25cclxuICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZGljdGlvbmFyeS5maWVsZHMpIHtcclxuICAgICAgaWYgKGZpZWxkLmlkICYmIChpc051bGxPclVuZGVmaW5lZChmaWVsZC5jb2RlKSB8fCBmaWVsZC5jb2RlID09IGZhbHNlKSkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgY29sOiBhbnk7XHJcblxyXG4gICAgICBpZiAoZmllbGQuZmlsdGVyRGljdGlvbmFyeUNsYXNzKSB7XHJcbiAgICAgICAgLy8gdGhpcyBpcyBhIGRyb3Bkb3duIG9mIGFub3RoZXIgZGljdGlvbmFyeVxyXG4gICAgICAgIGxldCBvcHRpb25zID0gdGhpcy5zZWNvbmRhcnlEaWN0aW9uYXJ5RW50cmllcy5maW5kKFxyXG4gICAgICAgICAgKGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gYS5kaWN0aW9uYXJ5TmFtZSA9PT0gZmllbGQuZmlsdGVyRGljdGlvbmFyeUNsYXNzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbCA9IHtcclxuICAgICAgICAgIGZpZWxkOiBmaWVsZC5uYW1lLFxyXG4gICAgICAgICAgaGVhZGVyTmFtZTogZmllbGQuZGlzcGxheU5hbWUsXHJcbiAgICAgICAgICBlZGl0YWJsZTogdGhpcy5pc0VkaXRhYmxlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICBjZWxsUmVuZGVyZXJGcmFtZXdvcms6IFNlbGVjdFJlbmRlcmVyLFxyXG4gICAgICAgICAgY2VsbEVkaXRvckZyYW1ld29yazogU2VsZWN0RWRpdG9yLFxyXG4gICAgICAgICAgc2VsZWN0T3B0aW9uc0Rpc3BsYXlGaWVsZDogXCJkaXNwbGF5XCIsXHJcbiAgICAgICAgICBzZWxlY3RPcHRpb25zVmFsdWVGaWVsZDogXCJpZFwiLFxyXG4gICAgICAgICAgc29ydGFibGU6IHRydWUsXHJcbiAgICAgICAgICByZXNpemFibGU6IHRydWUsXHJcbiAgICAgICAgICBmaWx0ZXI6IHRydWUsXHJcbiAgICAgICAgICBmaWx0ZXJWYWx1ZUdldHRlcjogdGhpcy5jb21ib0ZpbHRlclZhbHVlR2V0dGVyLFxyXG4gICAgICAgICAgc2VsZWN0T3B0aW9uczogW10sXHJcbiAgICAgICAgICBjb21wYXJhdG9yOiAodmFsdWVBLCB2YWx1ZUIsIG5vZGVBLCBub2RlQiwgaXNJbnZlcnRlZCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVudHJpZXMpIHtcclxuICAgICAgICAgIGNvbC5zZWxlY3RPcHRpb25zID0gb3B0aW9ucy5lbnRyaWVzLnNvcnQoXHJcbiAgICAgICAgICAgIChvcHRpb25BLCBvcHRpb25CKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbkEgJiYgIW9wdGlvbkIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbkIgJiYgIW9wdGlvbkEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmICghb3B0aW9uQSAmJiAhb3B0aW9uQikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAob3B0aW9uQS5kaXNwbGF5LnRvTG93ZXJDYXNlKCkgPiBvcHRpb25CLmRpc3BsYXkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICgob3B0aW9uQi5kaXNwbGF5LnRvTG93ZXJDYXNlKCkgPiBvcHRpb25BLmRpc3BsYXkudG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGNvbC5jb21wYXJhdG9yID0gKHZhbHVlQSwgdmFsdWVCLCBub2RlQSwgbm9kZUIsIGlzSW52ZXJ0ZWQpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLmVudHJpZXMpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHZhbHVlQSAmJiAhdmFsdWVCKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh2YWx1ZUIgJiYgIXZhbHVlQSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCF2YWx1ZUEgJiYgIXZhbHVlQikge1xyXG4gICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgb3B0aW9uQSA9IG9wdGlvbnMuZW50cmllcy5maW5kKChlbnRyeSkgPT4gKFwiXCIgKyBlbnRyeS5pZCA9PT0gXCJcIiArIHZhbHVlQSkpO1xyXG4gICAgICAgICAgICBsZXQgb3B0aW9uQiA9IG9wdGlvbnMuZW50cmllcy5maW5kKChlbnRyeSkgPT4gKFwiXCIgKyBlbnRyeS5pZCA9PT0gXCJcIiArIHZhbHVlQikpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbkEgJiYgIW9wdGlvbkIpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG9wdGlvbkIgJiYgIW9wdGlvbkEpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghb3B0aW9uQSAmJiAhb3B0aW9uQikge1xyXG4gICAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAob3B0aW9uQS5kaXNwbGF5LnRvTG93ZXJDYXNlKCkgPiBvcHRpb25CLmRpc3BsYXkudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKChvcHRpb25CLmRpc3BsYXkudG9Mb3dlckNhc2UoKSA+IG9wdGlvbkEuZGlzcGxheS50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbC5jZWxsU3R5bGUgPSBwYXJhbXMgPT4ge1xyXG4gICAgICAgICAgbGV0IGNvbHVtbjogYW55ID0ge307XHJcblxyXG4gICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgcGFyYW1zLmNvbnRleHQuY29tcG9uZW50UGFyZW50LmRpY3Rpb25hcnkuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXJhbXMuY29sRGVmLmZpZWxkID09IGZpZWxkLm5hbWUpIHtcclxuICAgICAgICAgICAgICBjb2x1bW4gPSBmaWVsZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChwYXJhbXMuZGF0YS5lZGl0T3JOZXcgJiYgcGFyYW1zLmRhdGEuZWRpdE9yTmV3ID09IFwibmV3XCIpIHtcclxuICAgICAgICAgICAgaWYgKHBhcmFtcy5jb250ZXh0LnJlYWRPbmx5IHx8IGNvbHVtbi5yZWFkT25seSB8fFxyXG4gICAgICAgICAgICAgIGNvbHVtbi5wcm90ZWN0aW9uVHlwZSA9PSBcIlJlYWQgT25seVwiKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtjb2xvcjogXCIjOGE5NDk5XCJ9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAocGFyYW1zLmNvbnRleHQucmVhZE9ubHkgfHwgY29sdW1uLnJlYWRPbmx5IHx8XHJcbiAgICAgICAgICAgICAgY29sdW1uLnByb3RlY3Rpb25UeXBlID09IFwiUmVhZCBPbmx5XCIgfHwgY29sdW1uLmNyZWF0ZU9ubHkgfHxcclxuICAgICAgICAgICAgICBjb2x1bW4ucHJvdGVjdGlvblR5cGUgPT0gXCJDcmVhdGUgT25seVwiIHx8IGNvbHVtbi5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtjb2xvcjogXCIjOGE5NDk5XCJ9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29sLmRpc3BsYXlPcmRlciA9IGZpZWxkLmRpc3BsYXlPcmRlcjtcclxuICAgICAgICBjb2wuZGljdGlvbmFyeURpc3BsYXkgPSBmaWVsZC5kaWN0aW9uYXJ5RGlzcGxheTtcclxuICAgICAgICBjb2wuZGljdGlvbmFyeVRvb2x0aXAgPSBmaWVsZC5kaWN0aW9uYXJ5VG9vbHRpcDtcclxuXHJcbiAgICAgICAgLy8gU2V0IGRlZmF1bHQgZmlsdGVyIGFzIGNvbXBhcmUgYnkgdGV4dC9udW1iZXJcclxuICAgICAgICAvLyBjb2wuZmlsdGVyUmVuZGVyZXIgPSBDb21wYXJlRmlsdGVyUmVuZGVyZXI7XHJcbiAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSAmJiBmaWVsZC50eXBlID09IFwiRGF0ZVwiKSB7XHJcbiAgICAgICAgLy9kYXRlIHZhbHVlXHJcbiAgICAgICAgY29sID0ge1xyXG4gICAgICAgICAgZmllbGQ6IGZpZWxkLm5hbWUsXHJcbiAgICAgICAgICBoZWFkZXJOYW1lOiBmaWVsZC5kaXNwbGF5TmFtZSxcclxuICAgICAgICAgIGNlbGxSZW5kZXJlckZyYW1ld29yazogRGF0ZVJlbmRlcmVyLFxyXG4gICAgICAgICAgY2VsbEVkaXRvckZyYW1ld29yazogQWdHcmlkRGF0ZUNlbGxFZGl0b3JDb21wb25lbnQsXHJcbiAgICAgICAgICBlZGl0YWJsZTogdGhpcy5pc0VkaXRhYmxlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcclxuICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgIGZpbHRlcjogdHJ1ZSxcclxuICAgICAgICAgIGRpY3Rpb25hcnlEaXNwbGF5OiBmaWVsZC5kaWN0aW9uYXJ5RGlzcGxheVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbC5jb21wYXJhdG9yID0gKHZhbHVlQSwgdmFsdWVCLCBub2RlQSwgbm9kZUIsIGlzSW52ZXJ0ZWQpID0+IHtcclxuICAgICAgICAgIGxldCBudW0gPSB0aGlzLmRhdGVDb21wYXJhdG9yKHZhbHVlQSwgdmFsdWVCKTtcclxuICAgICAgICAgIHJldHVybiBpc0ludmVydGVkID8gLTEgKiBudW0gOiBudW07IC8vZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyB3aXRoIGludmVydGVkP1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbC5jZWxsU3R5bGUgPSBwYXJhbXMgPT4ge1xyXG4gICAgICAgICAgdmFyIGNvbHVtbjogYW55ID0ge307XHJcbiAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiBwYXJhbXMuY29udGV4dC5jb21wb25lbnRQYXJlbnQuZGljdGlvbmFyeS5maWVsZHMpIHtcclxuICAgICAgICAgICAgaWYgKHBhcmFtcy5jb2xEZWYuZmllbGQgPT0gZmllbGQubmFtZSkge1xyXG4gICAgICAgICAgICAgIGNvbHVtbiA9IGZpZWxkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHBhcmFtcy5kYXRhLmVkaXRPck5ldyAmJiBwYXJhbXMuZGF0YS5lZGl0T3JOZXcgPT0gXCJuZXdcIikge1xyXG4gICAgICAgICAgICBpZiAocGFyYW1zLmNvbnRleHQucmVhZE9ubHkgfHwgY29sdW1uLnJlYWRPbmx5IHx8XHJcbiAgICAgICAgICAgICAgY29sdW1uLnByb3RlY3Rpb25UeXBlID09IFwiUmVhZCBPbmx5XCIpIHtcclxuICAgICAgICAgICAgICByZXR1cm4ge2NvbG9yOiBcIiM4YTk0OTlcIn07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChwYXJhbXMuY29udGV4dC5yZWFkT25seSB8fCBjb2x1bW4ucmVhZE9ubHkgfHxcclxuICAgICAgICAgICAgICBjb2x1bW4ucHJvdGVjdGlvblR5cGUgPT0gXCJSZWFkIE9ubHlcIiB8fCBjb2x1bW4uY3JlYXRlT25seSB8fFxyXG4gICAgICAgICAgICAgIGNvbHVtbi5wcm90ZWN0aW9uVHlwZSA9PSBcIkNyZWF0ZSBPbmx5XCIgfHwgY29sdW1uLmNvZGUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4ge2NvbG9yOiBcIiM4YTk0OTlcIn07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb2wuZGlzcGxheU9yZGVyID0gZmllbGQuZGlzcGxheU9yZGVyO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIHRoaXMgaXMgYSBzdHJpbmcgdmFsdWVcclxuICAgICAgICBjb2wgPSB7XHJcbiAgICAgICAgICBmaWVsZDogZmllbGQubmFtZSxcclxuICAgICAgICAgIGhlYWRlck5hbWU6IGZpZWxkLmRpc3BsYXlOYW1lLFxyXG4gICAgICAgICAgZWRpdGFibGU6IHRoaXMuaXNFZGl0YWJsZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgc29ydGFibGU6IHRydWUsXHJcbiAgICAgICAgICByZXNpemFibGU6IHRydWUsXHJcbiAgICAgICAgICBmaWx0ZXI6IHRydWUsXHJcbiAgICAgICAgICBkaWN0aW9uYXJ5RGlzcGxheTogZmllbGQuZGljdGlvbmFyeURpc3BsYXlcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb2wuY29tcGFyYXRvciA9ICh2YWx1ZUEsIHZhbHVlQiwgbm9kZUEsIG5vZGVCLCBpc0ludmVydGVkKSA9PiB7XHJcbiAgICAgICAgICBpZiAodmFsdWVBICYmICF2YWx1ZUIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHZhbHVlQiAmJiAhdmFsdWVBKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoIXZhbHVlQSAmJiAhdmFsdWVCKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh2YWx1ZUEudG9Mb3dlckNhc2UoKSA+IHZhbHVlQi50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICgodmFsdWVCLnRvTG93ZXJDYXNlKCkgPiB2YWx1ZUEudG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29sLmNlbGxTdHlsZSA9IHBhcmFtcyA9PiB7XHJcbiAgICAgICAgICB2YXIgY29sdW1uOiBhbnkgPSB7fTtcclxuICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHBhcmFtcy5jb250ZXh0LmNvbXBvbmVudFBhcmVudC5kaWN0aW9uYXJ5LmZpZWxkcykge1xyXG4gICAgICAgICAgICBpZiAocGFyYW1zLmNvbERlZi5maWVsZCA9PSBmaWVsZC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgY29sdW1uID0gZmllbGQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChwYXJhbXMuZGF0YS5lZGl0T3JOZXcgJiYgcGFyYW1zLmRhdGEuZWRpdE9yTmV3ID09IFwibmV3XCIpIHtcclxuICAgICAgICAgICAgaWYgKHBhcmFtcy5jb250ZXh0LnJlYWRPbmx5IHx8IGNvbHVtbi5yZWFkT25seSB8fFxyXG4gICAgICAgICAgICAgIGNvbHVtbi5wcm90ZWN0aW9uVHlwZSA9PSBcIlJlYWQgT25seVwiKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtjb2xvcjogXCIjOGE5NDk5XCJ9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAocGFyYW1zLmNvbnRleHQucmVhZE9ubHkgfHwgY29sdW1uLnJlYWRPbmx5IHx8XHJcbiAgICAgICAgICAgICAgY29sdW1uLnByb3RlY3Rpb25UeXBlID09IFwiUmVhZCBPbmx5XCIgfHwgY29sdW1uLmNyZWF0ZU9ubHkgfHxcclxuICAgICAgICAgICAgICBjb2x1bW4ucHJvdGVjdGlvblR5cGUgPT0gXCJDcmVhdGUgT25seVwiIHx8IGNvbHVtbi5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtjb2xvcjogXCIjOGE5NDk5XCJ9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29sLmRpc3BsYXlPcmRlciA9IGZpZWxkLmRpc3BsYXlPcmRlcjtcclxuICAgICAgICAvLyBTZXQgZGVmYXVsdCBmaWx0ZXIgYXMgY29tcGFyZSBieSB0ZXh0L251bWJlclxyXG4gICAgICAgIC8vIGNvbC5maWx0ZXJSZW5kZXJlciA9IENvbXBhcmVGaWx0ZXJSZW5kZXJlcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29scy5wdXNoKGNvbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTm93IHdlIG5lZWQgdG8gc29ydCB0aGUgY29sdW1uc1xyXG4gICAgaWYgKCF0aGlzLmRpY3Rpb25hcnkuZmllbGRzWzBdLmhhc093blByb3BlcnR5KFwiZGlzcGxheU9yZGVyXCIpKSB7XHJcbiAgICAgIC8vIGRlZmF1bHQgY2FzZSwgbm8gZGlzcGxheU9yZGVyXHJcbiAgICAgIGNvbHMgPSBjb2xzLnNvcnQoXHJcbiAgICAgICAgKGEsIGIpID0+IHtcclxuICAgICAgICAgIGlmICghYS5oZWFkZXJOYW1lICYmIGIuaGVhZGVyTmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoIWIuaGVhZGVyTmFtZSAmJiBhLmhlYWRlck5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChhLmRpY3Rpb25hcnlEaXNwbGF5ID09PSB0cnVlICYmIGIuZGljdGlvbmFyeURpc3BsYXkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoYi5kaWN0aW9uYXJ5RGlzcGxheSA9PT0gdHJ1ZSAmJiBhLmRpY3Rpb25hcnlEaXNwbGF5ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoYS5kaWN0aW9uYXJ5VG9vbHRpcCA9PT0gdHJ1ZSAmJiBiLmRpY3Rpb25hcnlUb29sdGlwID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGIuZGljdGlvbmFyeVRvb2x0aXAgPT09IHRydWUgJiYgYS5kaWN0aW9uYXJ5VG9vbHRpcCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRGlzcGxheU9yZGVyIGNhc2VcclxuICAgICAgLy8gSSB0aGluayB0aGlzIHdvcmtzPyBDaGVjayBsYXRlclxyXG4gICAgICBjb2xzID0gY29scy5zb3J0KFxyXG4gICAgICAgIChhLCBiKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWEuaGVhZGVyTmFtZSAmJiBiLmhlYWRlck5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKCFiLmhlYWRlck5hbWUgJiYgYS5oZWFkZXJOYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhLmRpc3BsYXlPcmRlciAtIGIuZGlzcGxheU9yZGVyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBZnRlciBDb2x1bW5zIEhhdmUgQmVlbiBTb3J0ZWRcclxuICAgIC8vIERpY3Rpb25hcnkgR3JpZCBXaWxsIFNvcnQgVGhlIEdyaWQgQXNjZW5kaW5nIE9yZGVyIEJ5IEZpcnN0IENvbHVtblxyXG4gICAgaWYoY29scyAgJiYgY29scy5sZW5ndGggIT0gMCkge1xyXG4gICAgICBjb2xzWzBdLnNvcnQgPSBcImFzY1wiO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0YUNvbHVtbnMgPSBjb2xzO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5kYXRhQ29sdW1ucykgJiYgdGhpcy5ncmlkT3B0aW9ucyAmJiB0aGlzLmdyaWRPcHRpb25zLmFwaSkge1xyXG4gICAgICB0aGlzLmdyaWRPcHRpb25zLmFwaS5zZXRDb2x1bW5EZWZzKHRoaXMuZGF0YUNvbHVtbnMpO1xyXG4gICAgICB0aGlzLmdyaWRPcHRpb25zLmFwaS5zaXplQ29sdW1uc1RvRml0KCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5oYWxmTG9hZGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLmNhbGxRdWV1ZWQgPT09IHRydWUpIHtcclxuICAgICAgICAvLyBBIGNhbGwgY29tcGxldGVkIHdoaWxlIGFub3RoZXIgY2FsbCB3YXMgcXVldWVkIHNvIG1ha2UgdGhhdCBjYWxsIG5vd1xyXG4gICAgICAgIHRoaXMuY2FsbFF1ZXVlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2V0RGljdGlvbmFyeUJlZ2luKHRoaXMuY2xhc3NOYW1lKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5oYWxmTG9hZGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzRWRpdGFibGUocGFyYW1zKTogYm9vbGVhbiB7XHJcblxyXG4gICAgbGV0IGlzRWRpdGFibGU6IGJvb2xlYW47XHJcblxyXG4gICAgbGV0IGNvbHVtbjogYW55ID0ge307XHJcbiAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmRpY3Rpb25hcnkuZmllbGRzKSB7XHJcbiAgICAgIGlmIChwYXJhbXMuY29sRGVmLmZpZWxkID09IGZpZWxkLm5hbWUpIHtcclxuICAgICAgICBjb2x1bW4gPSBmaWVsZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChwYXJhbXMuZGF0YS5lZGl0T3JOZXcgJiYgcGFyYW1zLmRhdGEuZWRpdE9yTmV3ID09IFwibmV3XCIpIHtcclxuICAgICAgLy8gY29uc29sZS5sb2coXCJuZXcgZWRpdGFibGU/XCIpO1xyXG4gICAgICBpc0VkaXRhYmxlID0gISh0aGlzLmRpY3Rpb25hcnkucmVhZE9ubHkgfHwgY29sdW1uLnJlYWRPbmx5IHx8XHJcbiAgICAgICAgY29sdW1uLnByb3RlY3Rpb25UeXBlID09IFwiUmVhZCBPbmx5XCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gY29uc29sZS5sb2coXCJlZGl0IGVkaXRhYmxlP1wiKTtcclxuICAgICAgaXNFZGl0YWJsZSA9ICEodGhpcy5kaWN0aW9uYXJ5LnJlYWRPbmx5IHx8IGNvbHVtbi5yZWFkT25seSB8fFxyXG4gICAgICAgIGNvbHVtbi5wcm90ZWN0aW9uVHlwZSA9PSBcIlJlYWQgT25seVwiIHx8IGNvbHVtbi5jcmVhdGVPbmx5IHx8XHJcbiAgICAgICAgY29sdW1uLnByb3RlY3Rpb25UeXBlID09IFwiQ3JlYXRlIE9ubHlcIiB8fCBjb2x1bW4uY29kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGlzRWRpdGFibGU7XHJcbiAgfVxyXG5cclxuICBkZWxldGVEaWN0aW9uYXJ5RW50cmllcygpOiB2b2lkIHtcclxuXHJcbiAgICBsZXQgZGVsZXRlUm93czogYW55W10gPSB0aGlzLmdyaWRPcHRpb25zLmFwaS5nZXRTZWxlY3RlZFJvd3MoKTtcclxuXHJcbiAgICBmb3IgKGxldCBkZWxldGVJZCBvZiB0aGlzLnNlbGVjdGVkUm93cykge1xyXG4gICAgICBmb3IgKGxldCBlbnRyeSBvZiB0aGlzLmRpY3Rpb25hcnlFbnRyaWVzKSB7XHJcbiAgICAgICAgaWYgKGVudHJ5W3RoaXMuaWRDb2x1bW5dID09PSBkZWxldGVJZCkge1xyXG4gICAgICAgICAgZGVsZXRlUm93cy5wdXNoKGVudHJ5KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGljdGlvbmFyeVNlcnZpY2UuZGVsZXRlRGljdGlvbmFyeUVudHJpZXModGhpcy5jbGFzc05hbWUsIGRlbGV0ZVJvd3MpLnN1YnNjcmliZShcclxuICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmdldERpY3Rpb25hcnlFbnRyaWVzKCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEaWN0aW9uYXJ5KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuXHJcbiAgICAvLyBJbXBvcnRhbnQgdG8gbm90ZSB0aGlzIHdpbGwgbm90IHVwZGF0ZSBjZWxscyB0byB0aGUgZGVtbyBidXQgd2lsbCB3aGVuIGltcG9ydGVkIHRvIENPUkUgb3Igb3RoZXIgYXBwbGljYXRpb25zLlxyXG4gICAgdGhpcy5kaWN0aW9uYXJ5U2VydmljZS51cGRhdGVEaWN0aW9uYXJ5RW50cmllcyh0aGlzLmNsYXNzTmFtZSwgW2V2ZW50LmRhdGFdKS5zdWJzY3JpYmUoXHJcbiAgICAgIChkYXRhOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZ2V0RGljdGlvbmFyeUVudHJpZXMoKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGVkRW50cmllcygpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkUm93cyA9IHRoaXMuZ3JpZE9wdGlvbnMuYXBpLmdldFNlbGVjdGVkUm93cygpO1xyXG4gIH1cclxuXHJcbiAgbmV3Um93UG9zdChkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cclxuICAgIHJldHVybiB0aGlzLmRpY3Rpb25hcnlTZXJ2aWNlLmFkZERpY3Rpb25hcnlFbnRyaWVzKHRoaXMuY2xhc3NOYW1lLCBbZGF0YV0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcChcclxuICAgICAgICAgIChkYXRhOiBPYmplY3RbXSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiA8YW55PmRhdGFbMF07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIG9uU2FtcGxlc0dyaWRSZWFkeShldmVudDogR3JpZFJlYWR5RXZlbnQpOiB2b2lkIHtcclxuXHJcbiAgICBldmVudC5hcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBvbkdyaWRTaXplQ2hhbmdlZChldmVudDogYW55KSB7XHJcblxyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmFwaSkge1xyXG4gICAgICBldmVudC5hcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkaXNhYmxlQWRkUm93KCk6IGJvb2xlYW4ge1xyXG5cclxuICAgIGlmICghdGhpcy5kaWN0aW9uYXJ5KSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmRpY3Rpb25hcnkucmVhZE9ubHkgJiYgdGhpcy5kaWN0aW9uYXJ5LnJlYWRPbmx5ID09PSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkaXNhYmxlRGVsZXRlKCk6IGJvb2xlYW4ge1xyXG5cclxuICAgIGlmICghdGhpcy5kaWN0aW9uYXJ5KSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRpY3Rpb25hcnkucmVhZE9ubHkgJiYgdGhpcy5kaWN0aW9uYXJ5LnJlYWRPbmx5ID09PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmdyaWRPcHRpb25zICYmIHRoaXMuZ3JpZE9wdGlvbnMuYXBpICYmIHRoaXMuZ3JpZE9wdGlvbnMuYXBpLmdldFNlbGVjdGVkUm93cygpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdyaWRPcHRpb25zLmFwaS5nZXRTZWxlY3RlZFJvd3MoKS5sZW5ndGggPT09IDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tYm9GaWx0ZXJWYWx1ZUdldHRlcihwYXJhbXMpOiBhbnkge1xyXG5cclxuICAgIGxldCB2YWx1ZSA9IHBhcmFtcy5kYXRhW3BhcmFtcy5jb2xEZWYuZmllbGRdO1xyXG5cclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBsZXQgb3B0aW9uID0gKChwYXJhbXMuY29sRGVmIGFzIGFueSkuc2VsZWN0T3B0aW9ucyBhcyBhbnlbXSkuZmluZCgoZW50cnkpID0+IChlbnRyeVtwYXJhbXMuY29sRGVmLnNlbGVjdE9wdGlvbnNWYWx1ZUZpZWxkXSA9PT0gdmFsdWUpKTtcclxuICAgICAgcmV0dXJuIG9wdGlvbiA/IG9wdGlvbltwYXJhbXMuY29sRGVmLnNlbGVjdE9wdGlvbnNEaXNwbGF5RmllbGRdIDogXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gXCJcIjtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tBZGRSb3coKSB7XHJcblxyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE5ld1Jvd0NvbXBvbmVudCxcclxuICAgICAge1xyXG4gICAgICAgIHNpemU6IFwibGdcIixcclxuICAgICAgICBrZXlib2FyZDogZmFsc2UsXHJcbiAgICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCIsXHJcbiAgICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuY29sRGVmcyA9IHRoaXMuZGF0YUNvbHVtbnM7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kaWN0aW9uYXJ5ID0gdGhpcy5kaWN0aW9uYXJ5O1xyXG5cclxuICAgIC8vIGlmICghdGhpcy5uZXdSb3dTdWJzY3JpcHRpb24pIHsgLy8gcmVtb3ZlZCBiZWNhdXNlIGl0IHdhcyBwcmV2ZW50aW5nIHNhdmUgYWZ0ZXIgY2FuY2VsXHJcbiAgICAgIC8vIHRlbGwgb3RoZXIgYWctZ3JpZCB0byBhZGQgcm93IHRvIGl0XHJcbiAgICAgIHRoaXMubmV3Um93U3Vic2NyaXB0aW9uID0gbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UubmV3Um93U3ViamVjdC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRoZU5ld1JvdzogYW55W10pID0+IHtcclxuICAgICAgICAgIHRoaXMuZGljdGlvbmFyeUVudHJpZXMgPSB0aGVOZXdSb3cuY29uY2F0KHRoaXMuZGljdGlvbmFyeUVudHJpZXMpO1xyXG4gICAgICAgICAgdGhpcy5ncmlkT3B0aW9ucy5hcGkuc2V0Um93RGF0YSh0aGlzLmRpY3Rpb25hcnlFbnRyaWVzKTtcclxuICAgICAgICAgIHRoaXMubmV3Um93U3Vic2NyaXB0aW9uID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAvLyBJbXBvcnRhbnQgdG8gbm90ZSB0aGlzIHdpbGwgbm90IGFkZCByb3dzIHRvIHRoZSBkZW1vIGJ1dCB3aWxsIHdoZW4gaW1wb3J0ZWQgdG8gQ09SRSBvciBvdGhlciBhcHBsaWNhdGlvbnMuXHJcbiAgICAgICAgICB0aGlzLm5ld1Jvd1Bvc3QodGhlTmV3Um93WzBdKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmdldERpY3Rpb25hcnlFbnRyaWVzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcGFyYXRlciBUbyBDb21wYXJlIDIgRGF0ZXNcclxuICAgKiBAcGFyYW0gZGF0ZTEgRGF0ZSAxXHJcbiAgICogQHBhcmFtIGRhdGUyIERhdGUgMlxyXG4gICAqL1xyXG4gIGRhdGVDb21wYXJhdG9yKGRhdGUxLCBkYXRlMikge1xyXG5cclxuICAgIGxldCBkYXRlMU51bWJlciA9IG1vbnRoVG9Db21wYXJhYmxlTnVtYmVyKGRhdGUxKTtcclxuICAgIGxldCBkYXRlMk51bWJlciA9IG1vbnRoVG9Db21wYXJhYmxlTnVtYmVyKGRhdGUyKTtcclxuXHJcbiAgICBpZiAoZGF0ZTFOdW1iZXIgPT09IG51bGwgJiYgZGF0ZTJOdW1iZXIgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGUxTnVtYmVyID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiAtMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGF0ZTJOdW1iZXIgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGUxTnVtYmVyIC0gZGF0ZTJOdW1iZXI7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogRXh0cmFjdHMgRGF0ZSBBbmQgVHVybiBUbyBBIE51bWVyaWNhbCBWYWx1ZSBGb3IgQ29tcGFyaW5nIFB1cnBvc2VzXHJcbiAqIEBwYXJhbSBkYXRlIFRoZSBkYXRlIHRvIGNvbXBhcmFibGUgbnVtYmVyXHJcbiAqL1xyXG5mdW5jdGlvbiBtb250aFRvQ29tcGFyYWJsZU51bWJlcihkYXRlKSB7XHJcblxyXG4gIGlmIChkYXRlID09PSB1bmRlZmluZWQgfHwgZGF0ZSA9PT0gbnVsbCB8fCBkYXRlLmxlbmd0aCAhPT0gMTApIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgbGV0IHllYXJOdW1iZXIgPSBkYXRlLnN1YnN0cmluZygwLCA0KTtcclxuICBsZXQgbW9udGhOdW1iZXIgPSBkYXRlLnN1YnN0cmluZyg1LCA3KTtcclxuICBsZXQgZGF5TnVtYmVyID0gZGF0ZS5zdWJzdHJpbmcoOCwgMTApO1xyXG5cclxuICByZXR1cm4geWVhck51bWJlciAqIDEwMDAwICsgbW9udGhOdW1iZXIgKiAxMDAgKyBkYXlOdW1iZXI7XHJcbn1cclxuIl19
|