ngx-histaff-alpha 2.3.0 → 2.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/app/libraries/core-tree-grid/core-tree-grid/core-tree-grid.component.mjs +13 -6
- package/esm2022/lib/app/libraries/d3/core-statistic-widget/core-statistic-widget.component.mjs +8 -17
- package/esm2022/lib/app/root/menu/menu/menu.component.mjs +4 -4
- package/fesm2022/ngx-histaff-alpha.mjs +22 -24
- package/fesm2022/ngx-histaff-alpha.mjs.map +1 -1
- package/lib/app/libraries/core-tree-grid/core-tree-grid/core-tree-grid.component.d.ts +4 -3
- package/lib/app/root/menu/menu/menu.component.d.ts +1 -1
- package/package.json +1 -1
package/esm2022/lib/app/libraries/core-tree-grid/core-tree-grid/core-tree-grid.component.mjs
CHANGED
|
@@ -32,6 +32,9 @@ export class CoreTreeGridComponent extends CoreFormControlBaseComponent {
|
|
|
32
32
|
this.headerBorderSize = 1;
|
|
33
33
|
this.treeColumnWidth = 300;
|
|
34
34
|
this.treeNodeLevelPadding = 15;
|
|
35
|
+
// 1: disableTreeCreateUpdate = true && getFullListApi === undefined && crud === undefined
|
|
36
|
+
// This case is for view only, and using externant data, and this.data must become @Input()
|
|
37
|
+
this.data = [];
|
|
35
38
|
this.onRowDoubleClick = new EventEmitter();
|
|
36
39
|
this.onSubmitSuccess = new EventEmitter();
|
|
37
40
|
this.totalWidth = 500;
|
|
@@ -76,7 +79,7 @@ export class CoreTreeGridComponent extends CoreFormControlBaseComponent {
|
|
|
76
79
|
ngAfterViewInit() {
|
|
77
80
|
setTimeout(() => {
|
|
78
81
|
this.container.nativeElement.style.setProperty('--tree-container-width', this.treeColumnWidth + 'px');
|
|
79
|
-
let gridTotalWidth =
|
|
82
|
+
let gridTotalWidth = 0;
|
|
80
83
|
this.columns.filter(x => !!!x.hidden).map(m => gridTotalWidth += m.width);
|
|
81
84
|
this.container.nativeElement.style.setProperty('--grid-total-width', gridTotalWidth + 'px');
|
|
82
85
|
this.container.nativeElement.style.setProperty('--tree-node-level-padding', this.treeNodeLevelPadding + 'px');
|
|
@@ -161,7 +164,7 @@ export class CoreTreeGridComponent extends CoreFormControlBaseComponent {
|
|
|
161
164
|
}
|
|
162
165
|
onRowClick(context, event) {
|
|
163
166
|
event.stopImmediatePropagation();
|
|
164
|
-
if (event?.detail === 2 && !this.
|
|
167
|
+
if (event?.detail === 2 && !this.disableDoubleClick) {
|
|
165
168
|
this.onRowDoubleClick.emit(context);
|
|
166
169
|
}
|
|
167
170
|
}
|
|
@@ -342,7 +345,7 @@ export class CoreTreeGridComponent extends CoreFormControlBaseComponent {
|
|
|
342
345
|
this.subscriptions.map(x => x?.unsubscribe());
|
|
343
346
|
}
|
|
344
347
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreTreeGridComponent, deps: [{ token: i1.AppService }, { token: i2.RecursiveService }, { token: i3.MultiLanguageService }, { token: i4.DialogService }, { token: i5.CoreControlService }, { token: i6.CoreTableService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
345
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: CoreTreeGridComponent, isStandalone: true, selector: "core-tree-grid", inputs: { height: "height", columns: "columns", keyField: "keyField", titleField: "titleField", parentField: "parentField", headerHeight: "headerHeight", headerCellPadding: "headerCellPadding", headerBorderSize: "headerBorderSize", treeColumnWidth: "treeColumnWidth", treeNodeLevelPadding: "treeNodeLevelPadding", getFullListApi: "getFullListApi", crud: "crud", treeCreateUpdateDisabled: "treeCreateUpdateDisabled" }, outputs: { onRowDoubleClick: "onRowDoubleClick", onSubmitSuccess: "onSubmitSuccess" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-tree-grid-container\" [ngStyle]=\"{\r\n width: '100%',\r\n height: height + 'px',\r\n overflow: 'scroll'\r\n}\">\r\n\r\n @if (loading) {\r\n <div class=\"loading-surface\">\r\n <div class=\"loading-wrapper\">\r\n <app-threedots></app-threedots>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"tree-grid-header\" [ngStyle]=\"{\r\n width: totalWidth + 'px',\r\n whiteSpace: 'nowrap',\r\n display: 'flex',\r\n position: 'sticky'\r\n }\">\r\n <div class=\"tree-block-header\" [ngStyle]=\"{\r\n width: treeColumnWidth + treeNodeLevelPadding + 'px',\r\n height: headerHeight + 'px',\r\n border: headerBorderSize + 'px solid white',\r\n }\">\r\n <div class=\"header-cell-div\" [ngStyle]=\"{\r\n height: headerHeight + 'px',\r\n }\">\r\n {{ 'UI.CORE_TREE_GRID.TREE_BLOCK_HEADER' | translate: lang }}\r\n @if (!treeCreateUpdateDisabled) {\r\n <core-button-group-vns [shownItems]=\"headerToolItems\"\r\n (buttonClick)=\"onHeaderToolClick($event)\"></core-button-group-vns>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div [ngStyle]=\"{\r\n display: 'inline-block',\r\n height: headerHeight + 'px',\r\n whiteSpace: 'nowrap'\r\n }\">\r\n\r\n <div class=\"header-row-one\" [ngStyle]=\"{\r\n display: 'block',\r\n height: (!!headerGroups ? headerHeight/2 : headerHeight) + 'px',\r\n }\">\r\n @if (!!headerGroups) {\r\n @for (headerGroup of headerGroups; track $index) {\r\n <div class=\"header-group-cell-div\" [ngStyle]=\"{\r\n height: (!!headerGroups ? headerHeight/2 : headerHeight) + 'px',\r\n width: headerGroup.width + 'px',\r\n border: headerBorderSize + 'px solid white',\r\n }\">\r\n {{ headerGroup.key | translate: lang }}\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"header-row-two\" [ngStyle]=\"{\r\n display: 'block',\r\n height: (!!headerGroups ? headerHeight/2 : headerHeight) + 'px',\r\n }\">\r\n @for (column of columns; track $index) {\r\n <div [class.hidden]=\"column.hidden\" [ngStyle]=\"\r\n {\r\n display: 'inline-block',\r\n height: (!!headerGroups ? headerHeight/2 : headerHeight) + 'px',\r\n border: headerBorderSize + 'px solid white',\r\n width: !!column.width ? column.width + 'px' : 'unset',\r\n textAlign: !!column.align ? column.align.toLowerCase() : 'unset'\r\n }\r\n \">\r\n <div class=\"header-cell-div\" [ngStyle]=\"{\r\n height: (!!headerGroups ? headerHeight/2 : headerHeight) + 'px',\r\n }\">\r\n {{ column.caption | translate: lang }}\r\n </div>\r\n </div>\r\n }\r\n\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n\r\n <div #frontTreeContainer class=\"tree-grid-content front-container\" [class.edit-mode-activated]=\"editModeActivated\">\r\n @for (root of data; track $index) {\r\n @defer(on viewport(treeContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\" [ngStyle]=\"{\r\n paddingLeft: treeNodeLevelPadding + 'px'\r\n }\">\r\n <ng-container *ngTemplateOutlet=\"frontItem; context: { context: root }\"></ng-container>\r\n </ul>\r\n }\r\n }\r\n </div>\r\n\r\n <div #treeContainer class=\"tree-grid-content\" [class.edit-mode-activated]=\"editModeActivated\">\r\n @for (root of data; track $index) {\r\n @defer(on viewport(treeContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\" [ngStyle]=\"{\r\n paddingLeft: '0px'\r\n }\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n }\r\n }\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-children=\"context.tree$Children\" let-expanded=\"context.tree$Expanded\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-tier=\"context.tree$Tier\">\r\n\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\"\r\n (click)=\"onRowClick(context, $event)\">\r\n <span [class.span-edit-mode-activated]=\"!!editModeActivated && pendingContext.id===id\">\r\n\r\n <div class=\"tree-item\">\r\n <div class=\"tree-item-div\" [attr.data-tier]=\"tier\" [ngStyle]=\"{\r\n width: '0px',\r\n }\">\r\n </div>\r\n </div>\r\n <div class=\"tree-grid-row-wrapper\">\r\n <div class=\"tree-grid-row\">\r\n @if (!(!!editModeActivated && pendingContext?.id===id)) {\r\n @for (column of columns; track $index) {\r\n <div class=\"tree-grid-cell\" [class.hidden]=\"column.hidden\">\r\n <div class=\"cell-div\" [ngStyle]=\"\r\n {\r\n width: !!column.width ? column.width + 'px' : 'unset',\r\n overflow: 'hidden',\r\n textAlign: !!column.align ? column.align.toLowerCase() : 'unset'\r\n }\r\n \">\r\n {{ !!column.translate ? (context[column.field] | translate: lang | tableCell:\r\n column.pipe : lang) :\r\n context[column.field] | tableCell: column.pipe : lang}}\r\n </div>\r\n </div>\r\n }\r\n }\r\n\r\n @if (!!editModeActivated && pendingContext?.id===id) {\r\n <ng-container>\r\n @for (column of columns; track $index) {\r\n <div class=\"tree-grid-cell\" [class.hidden]=\"column.hidden\">\r\n <div class=\"cell-div\" [ngStyle]=\"\r\n {\r\n width: !!column.width ? column.width + 'px' : 'unset',\r\n display: 'table',\r\n overflowY: 'visible',\r\n textAlign: !!column.align ? column.align.toLowerCase() : 'unset'\r\n }\r\n \">\r\n @if (!column.control) {\r\n <ng-container>\r\n {{ !!column.translate ? (context[column.field] | translate: lang | tableCell:\r\n column.pipe : lang) :\r\n context[column.field] | tableCell: column.pipe : lang}}\r\n </ng-container>\r\n } @else {\r\n <ng-container>\r\n <core-control [form]=\"form\" [control]=\"column.control!\"\r\n [checkError$]=\"checkError$\"></core-control>\r\n </ng-container>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n </ng-container>\r\n\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n </span>\r\n @if (!!expanded && !!children.length) {\r\n <ul [class.collapsed]=\"!expanded\" [ngStyle]=\"{\r\n paddingLeft: '0px'\r\n }\">\r\n @for (child of children; track $index) {\r\n <ng-container>\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n </ng-container>\r\n }\r\n </ul>\r\n }\r\n\r\n </li>\r\n </ng-template>\r\n\r\n <ng-template #frontItem let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-children=\"context.tree$Children\" let-expanded=\"context.tree$Expanded\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-tier=\"context.tree$Tier\">\r\n\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\"\r\n (click)=\"onRowClick(context, $event)\">\r\n <span [class.span-edit-mode-activated]=\"!!editModeActivated && pendingContext.id===id\">\r\n\r\n <div class=\"tree-item\">\r\n <div class=\"tree-item-div\" [attr.data-tier]=\"tier\" [ngStyle]=\"{\r\n width: treeColumnWidth - tier * treeNodeLevelPadding + 'px',\r\n }\">\r\n @if (!treeCreateUpdateDisabled) {\r\n <div class=\"tree-item-tool\">\r\n <div class=\"tree-item-tool-wrapper\">\r\n <core-button-group-vns [shownItems]=\"toolItems\" [showCaption]=\"false\"\r\n (buttonClick)=\"onToolClick($event, context)\"></core-button-group-vns>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (!!children.length) {\r\n <i class=\"expand-toggler feather-chevron-down\" (click)=\"onExpandTogglerClick(context)\"></i>\r\n }\r\n <object (click)=\"onObjectClick(context, $event)\">\r\n {{ title }}\r\n </object>\r\n </div>\r\n </div>\r\n\r\n </span>\r\n @if (!!expanded && !!children.length) {\r\n <ul [class.collapsed]=\"!expanded\" [ngStyle]=\"{\r\n paddingLeft: treeNodeLevelPadding + 'px'\r\n }\">\r\n @for (child of children; track $index) {\r\n <ng-container>\r\n <ng-container *ngTemplateOutlet=\"frontItem; context: { context: child }\"></ng-container>\r\n </ng-container>\r\n }\r\n </ul>\r\n }\r\n\r\n </li>\r\n </ng-template>\r\n\r\n</div>", styles: [".core-tree-grid-container{--tree-container-width: 300px;--grid-total-width: 500px;--square-color: darkgray;--square-size: 20px;--max-tier: 1;--row-height: 50px;--edit-mode-row-height: 120px;--edit-mode-row-bg: #dff6dd;--border-size: 5px;--header-height: 100px;--header-cell-padding: 5px;--content-cell-padding: 5px;--header-border-size: 1px;--tree-node-level-padding: 15px;white-space:nowrap;font-size:var(--typo-basic-font-size)}.core-tree-grid-container [data-tier=\"1\"]{--tier: 1;--translate-x: calc(var(--tree-node-level-padding) * -1)}.core-tree-grid-container [data-tier=\"2\"]{--tier: 2;--translate-x: calc(var(--tree-node-level-padding) * -2)}.core-tree-grid-container [data-tier=\"3\"]{--tier: 3;--translate-x: calc(var(--tree-node-level-padding) * -3)}.core-tree-grid-container [data-tier=\"4\"]{--tier: 4;--translate-x: calc(var(--tree-node-level-padding) * -4)}.core-tree-grid-container [data-tier=\"5\"]{--tier: 5;--translate-x: calc(var(--tree-node-level-padding) * -5)}.core-tree-grid-container [data-tier=\"6\"]{--tier: 6;--translate-x: calc(var(--tree-node-level-padding) * -6)}.core-tree-grid-container [data-tier=\"7\"]{--tier: 7;--translate-x: calc(var(--tree-node-level-padding) * -7)}.core-tree-grid-container [data-tier=\"8\"]{--tier: 8;--translate-x: calc(var(--tree-node-level-padding) * -8)}.core-tree-grid-container [data-tier=\"9\"]{--tier: 9;--translate-x: calc(var(--tree-node-level-padding) * -9)}.core-tree-grid-container [data-tier=\"10\"]{--tier: 10;--translate-x: calc(var(--tree-node-level-padding) * -10)}.core-tree-grid-container [data-tier=\"11\"]{--tier: 11;--translate-x: calc(var(--tree-node-level-padding) * -11)}.core-tree-grid-container [data-tier=\"12\"]{--tier: 12;--translate-x: calc(var(--tree-node-level-padding) * -12)}.core-tree-grid-container [data-tier=\"13\"]{--tier: 13;--translate-x: calc(var(--tree-node-level-padding) * -13)}.core-tree-grid-container [data-tier=\"14\"]{--tier: 14;--translate-x: calc(var(--tree-node-level-padding) * -14)}.core-tree-grid-container [data-tier=\"15\"]{--tier: 15;--translate-x: calc(var(--tree-node-level-padding) * -15)}.core-tree-grid-container [data-tier=\"16\"]{--tier: 16;--translate-x: calc(var(--tree-node-level-padding) * -16)}.core-tree-grid-container [data-tier=\"17\"]{--tier: 17;--translate-x: calc(var(--tree-node-level-padding) * -17)}.core-tree-grid-container [data-tier=\"18\"]{--tier: 18;--translate-x: calc(var(--tree-node-level-padding) * -18)}.core-tree-grid-container [data-tier=\"19\"]{--tier: 19;--translate-x: calc(var(--tree-node-level-padding) * -19)}.core-tree-grid-container [data-tier=\"20\"]{--tier: 20;--translate-x: calc(var(--tree-node-level-padding) * -20)}.core-tree-grid-container [data-tier=\"21\"]{--tier: 21;--translate-x: calc(var(--tree-node-level-padding) * -21)}.core-tree-grid-container [data-tier=\"22\"]{--tier: 22;--translate-x: calc(var(--tree-node-level-padding) * -22)}.core-tree-grid-container [data-tier=\"23\"]{--tier: 23;--translate-x: calc(var(--tree-node-level-padding) * -23)}.core-tree-grid-container [data-tier=\"24\"]{--tier: 24;--translate-x: calc(var(--tree-node-level-padding)) * -24 }.core-tree-grid-container *{box-sizing:border-box!important}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.core-tree-grid-container .loading-surface{width:calc(100vw - var(--size-left-bar-current-width));height:100vh;position:fixed;top:0;left:var(--size-left-bar-current-width);background-color:#ffffff80;z-index:555}.core-tree-grid-container .loading-surface .loading-wrapper{width:calc(100vw - var(--size-left-bar-current-width));height:100vh;display:flex;align-items:center;justify-content:center}.core-tree-grid-container .tree-grid-content{margin-top:var(--header-cell-padding);background-color:#fff;display:inline-block;position:relative}.core-tree-grid-container .front-container{background-color:#fff;display:inline-block;position:sticky!important;left:0;z-index:2}.core-tree-grid-container .tree-grid-content.edit-mode-activated ul>li>span:not(.span-edit-mode-activated):hover .tree-item-tool{display:none}.core-tree-grid-container .tree-grid-content.edit-mode-activated ul>li>span.span-edit-mode-activated{background-color:var(--edit-mode-row-bg)}.core-tree-grid-container .tree-grid-content.edit-mode-activated ul>li>span.span-edit-mode-activated *:not(.expand-toggler,object){background-color:var(--edit-mode-row-bg)}.core-tree-grid-container .tree-grid-header{top:0;left:0;z-index:3;white-space:nowrap;height:var(--header-height);background-color:var(--color-bg-main)}.core-tree-grid-container .tree-grid-header>*{box-sizing:border-box;display:inline-block}.core-tree-grid-container .tree-grid-header .hidden{display:none}.core-tree-grid-container .tree-grid-header .tree-block-header{position:sticky;top:0;left:0;z-index:5;height:var(--header-height);background-color:var(--color-bg-main)}.core-tree-grid-container .tree-grid-header .header-group-cell-div,.core-tree-grid-container .tree-grid-header .header-cell-div{width:100%;display:inline-flex;align-items:center;overflow:hidden;text-overflow:ellipsis}.core-tree-grid-container .tree-grid-header .header-group-cell-div,.core-tree-grid-container .tree-grid-header .header-cell-div{justify-content:center}.core-tree-grid-container ul{display:table;table-layout:fixed;margin-bottom:0;animation:fade-in 1s ease-out}.core-tree-grid-container ul.collapsed:not(.root){display:none}.core-tree-grid-container li{display:block;position:relative;white-space:nowrap}.core-tree-grid-container li>span{position:relative;display:table-row}.core-tree-grid-container li>span .tree-item-tool{position:absolute;top:0;right:0;z-index:7;height:var(--row-height);display:none}.core-tree-grid-container li>span .tree-item-tool .tree-item-tool-wrapper{display:flex;align-items:center;justify-content:flex-end;height:var(--row-height)}.core-tree-grid-container li>span .tree-item{vertical-align:top;display:table-cell}.core-tree-grid-container li>span .tree-item .tree-item-div{display:flex;align-items:center;justify-content:flex-start;position:relative;height:var(--row-height)}.core-tree-grid-container li>span .tree-item .tree-item-div>i{color:var(--square-color);cursor:pointer;font-size:var(--square-size);width:var(--square-size);height:var(--square-size)}.core-tree-grid-container li>span .tree-item .tree-item-div>.expand-toggler{position:absolute;z-index:6;transform:translate(-100%) rotate(0);transition:.5s ease-out}.core-tree-grid-container li>span .tree-item .tree-item-div object{display:table-cell;cursor:pointer}.core-tree-grid-container li>span:hover .tree-item-tool{display:flex;align-items:center;justify-content:flex-end}.core-tree-grid-container li>span:hover:after{content:\"\";display:block;height:var(--row-height);position:absolute;width:calc(var(--grid-total-width) + 1000px);background-color:#d3d3d3;opacity:.2;z-index:5;top:0;left:-1000px}.core-tree-grid-container li>span .tree-grid-row-wrapper{display:table-cell;position:relative}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row{display:inline-flex;background-color:#fff}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row .tree-grid-cell{display:table-cell;height:var(--row-height)}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row .tree-grid-cell .cell-div{cursor:pointer;overflow-x:hidden;overflow-y:visible;padding:var(--content-cell-padding);display:flex;align-items:center;height:var(--row-height)}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row .tree-grid-cell.hidden{display:none}.core-tree-grid-container li>span.span-edit-mode-activated{height:var(--edit-mode-row-height)}.core-tree-grid-container li>span.span-edit-mode-activated:hover:after{display:none}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item-tool{height:var(--edit-mode-row-height);display:flex}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item-tool .tree-item-tool-wrapper{height:var(--edit-mode-row-height)}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item-tool .tree-item-tool-wrapper i{width:24px;height:24px}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item .tree-item-div{height:var(--edit-mode-row-height)}.core-tree-grid-container li>span.span-edit-mode-activated .tree-grid-row-wrapper .tree-grid-cell{height:var(--edit-mode-row-height)!important}.core-tree-grid-container li>span.span-edit-mode-activated .tree-grid-row-wrapper .tree-grid-cell .cell-div{height:var(--edit-mode-row-height)!important}.core-tree-grid-container li.collapsed .tree-item-div .expand-toggler{transform:translate(-100%) rotate(-90deg)!important;transition:.5s ease-out!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: CoreControlComponent, selector: "core-control", inputs: ["control", "form", "checkError$", "rangeLimit"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: TableCellPipe, name: "tableCell" }, { kind: "component", type: CoreButtonGroupVnsComponent, selector: "core-button-group-vns", inputs: ["height", "instanceNumber", "forHeader", "shownItems", "showCaption"], outputs: ["buttonClick"] }, { kind: "component", type: ThreedotsComponent, selector: "app-threedots" }] }); }
|
|
348
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: CoreTreeGridComponent, isStandalone: true, selector: "core-tree-grid", inputs: { height: "height", columns: "columns", keyField: "keyField", titleField: "titleField", parentField: "parentField", headerHeight: "headerHeight", headerCellPadding: "headerCellPadding", headerBorderSize: "headerBorderSize", treeColumnWidth: "treeColumnWidth", treeNodeLevelPadding: "treeNodeLevelPadding", getFullListApi: "getFullListApi", crud: "crud", disableTreeCreateUpdate: "disableTreeCreateUpdate", data: "data", disableDoubleClick: "disableDoubleClick" }, outputs: { onRowDoubleClick: "onRowDoubleClick", onSubmitSuccess: "onSubmitSuccess" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-tree-grid-container\" [ngStyle]=\"{\r\n width: '100%',\r\n height: height + 'px',\r\n overflow: 'scroll'\r\n}\">\r\n\r\n @if (loading) {\r\n <div class=\"loading-surface\">\r\n <div class=\"loading-wrapper\">\r\n <app-threedots></app-threedots>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"tree-grid-header\" [ngStyle]=\"{\r\n width: totalWidth + 'px',\r\n whiteSpace: 'nowrap',\r\n display: 'flex',\r\n position: 'sticky'\r\n }\">\r\n <div class=\"tree-block-header\" [ngStyle]=\"{\r\n width: treeColumnWidth + 'px',\r\n height: headerHeight + 'px',\r\n border: headerBorderSize + 'px solid white',\r\n }\">\r\n <div class=\"header-cell-div\" [ngStyle]=\"{\r\n height: headerHeight + 'px',\r\n }\">\r\n {{ 'UI.CORE_TREE_GRID.TREE_BLOCK_HEADER' | translate: lang }}\r\n @if (!disableTreeCreateUpdate) {\r\n <core-button-group-vns [shownItems]=\"headerToolItems\"\r\n (buttonClick)=\"onHeaderToolClick($event)\"></core-button-group-vns>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div [ngStyle]=\"{\r\n display: 'inline-block',\r\n height: headerHeight + 'px',\r\n whiteSpace: 'nowrap'\r\n }\">\r\n\r\n <div class=\"header-row-one\" [ngStyle]=\"{\r\n display: 'block',\r\n height: (!!headerGroups ? headerHeight/2 : headerHeight) + 'px',\r\n }\">\r\n @if (!!headerGroups) {\r\n @for (headerGroup of headerGroups; track $index) {\r\n <div class=\"header-group-cell-div\" [ngStyle]=\"{\r\n height: (!!headerGroups ? headerHeight/2 : headerHeight) + 'px',\r\n width: headerGroup.width + 'px',\r\n border: headerBorderSize + 'px solid white',\r\n }\">\r\n {{ headerGroup.key | translate: lang }}\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"header-row-two\" [ngStyle]=\"{\r\n display: 'block',\r\n height: (!!headerGroups ? headerHeight/2 : headerHeight) + 'px',\r\n }\">\r\n @for (column of columns; track $index) {\r\n <div [class.hidden]=\"column.hidden\" [ngStyle]=\"\r\n {\r\n display: 'inline-block',\r\n height: (!!headerGroups ? headerHeight/2 : headerHeight) + 'px',\r\n border: headerBorderSize + 'px solid white',\r\n width: !!column.width ? column.width + 'px' : 'unset',\r\n textAlign: !!column.align ? column.align.toLowerCase() : 'unset'\r\n }\r\n \">\r\n <div class=\"header-cell-div\" [ngStyle]=\"{\r\n height: (!!headerGroups ? headerHeight/2 : headerHeight) + 'px',\r\n }\">\r\n {{ column.caption | translate: lang }}\r\n </div>\r\n </div>\r\n }\r\n\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n\r\n <div #frontTreeContainer class=\"tree-grid-content front-container\" [class.edit-mode-activated]=\"editModeActivated\">\r\n @for (root of data; track $index) {\r\n @defer(on viewport(treeContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\" [ngStyle]=\"{\r\n paddingLeft: treeNodeLevelPadding + 'px'\r\n }\">\r\n <ng-container *ngTemplateOutlet=\"frontItem; context: { context: root }\"></ng-container>\r\n </ul>\r\n }\r\n }\r\n </div>\r\n\r\n <div #treeContainer class=\"tree-grid-content\" [class.edit-mode-activated]=\"editModeActivated\">\r\n @for (root of data; track $index) {\r\n @defer(on viewport(treeContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\" [ngStyle]=\"{\r\n paddingLeft: '0px'\r\n }\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n }\r\n }\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-children=\"context.tree$Children\" let-expanded=\"context.tree$Expanded\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-tier=\"context.tree$Tier\">\r\n\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\" (click)=\"onRowClick(context, $event)\">\r\n <span [class.span-edit-mode-activated]=\"!!editModeActivated && pendingContext.id===id\">\r\n\r\n <div class=\"tree-item\">\r\n <div class=\"tree-item-div\" [attr.data-tier]=\"tier\" [ngStyle]=\"{\r\n width: '0px',\r\n }\">\r\n </div>\r\n </div>\r\n <div class=\"tree-grid-row-wrapper\">\r\n <div class=\"tree-grid-row\">\r\n @if (!(!!editModeActivated && pendingContext?.id===id && !disableTreeCreateUpdate)) {\r\n @for (column of columns; track $index) {\r\n <div class=\"tree-grid-cell\" [class.hidden]=\"column.hidden\">\r\n <div class=\"cell-div\" [ngStyle]=\"\r\n {\r\n width: !!column.width ? column.width + 'px' : 'unset',\r\n overflow: 'hidden',\r\n textAlign: !!column.align ? column.align.toLowerCase() : 'unset'\r\n }\r\n \">\r\n {{ !!column.translate ? (context[column.field] | translate: lang | tableCell:\r\n column.pipe : lang) :\r\n context[column.field] | tableCell: column.pipe : lang}}\r\n </div>\r\n </div>\r\n }\r\n } @else {\r\n <ng-container>\r\n @for (column of columns; track $index) {\r\n <div class=\"tree-grid-cell\" [class.hidden]=\"column.hidden\">\r\n <div class=\"cell-div\" [ngStyle]=\"\r\n {\r\n width: !!column.width ? column.width + 'px' : 'unset',\r\n display: 'table',\r\n overflowY: 'visible',\r\n textAlign: !!column.align ? column.align.toLowerCase() : 'unset'\r\n }\r\n \">\r\n @if (!column.control) {\r\n <ng-container>\r\n {{ !!column.translate ? (context[column.field] | translate: lang | tableCell:\r\n column.pipe : lang) :\r\n context[column.field] | tableCell: column.pipe : lang}}\r\n </ng-container>\r\n } @else {\r\n <ng-container>\r\n <core-control [form]=\"form\" [control]=\"column.control!\"\r\n [checkError$]=\"checkError$\"></core-control>\r\n </ng-container>\r\n }\r\n \r\n </div>\r\n </div>\r\n }\r\n </ng-container>\r\n }\r\n </div>\r\n </div>\r\n\r\n </span>\r\n @if (!!expanded && !!children.length) {\r\n <ul [class.collapsed]=\"!expanded\" [ngStyle]=\"{\r\n paddingLeft: '0px'\r\n }\">\r\n @for (child of children; track $index) {\r\n <ng-container>\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n </ng-container>\r\n }\r\n </ul>\r\n }\r\n\r\n </li>\r\n </ng-template>\r\n\r\n <ng-template #frontItem let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-children=\"context.tree$Children\" let-expanded=\"context.tree$Expanded\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-tier=\"context.tree$Tier\">\r\n\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\" [attr.data-tier]=\"tier\"\r\n (click)=\"onRowClick(context, $event)\">\r\n <span class=\"front-span\" [class.span-edit-mode-activated]=\"!!editModeActivated && pendingContext.id===id\">\r\n <div class=\"tree-item\">\r\n <div class=\"tree-item-div\" [attr.data-tier]=\"tier\" [ngStyle]=\"{\r\n width: treeColumnWidth - tier * treeNodeLevelPadding + 'px',\r\n }\">\r\n @if (!disableTreeCreateUpdate) {\r\n <div class=\"tree-item-tool\">\r\n <div class=\"tree-item-tool-wrapper\">\r\n <core-button-group-vns [shownItems]=\"toolItems\" [showCaption]=\"false\"\r\n (buttonClick)=\"onToolClick($event, context)\"></core-button-group-vns>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (!!children.length) {\r\n <i class=\"expand-toggler feather-chevron-down\" (click)=\"onExpandTogglerClick(context)\"></i>\r\n } @else {\r\n <i class=\"expand-toggler\" style=\"display: none;\"></i>\r\n }\r\n <object (click)=\"onObjectClick(context, $event)\">\r\n {{ title }}\r\n </object>\r\n </div>\r\n </div>\r\n\r\n </span>\r\n @if (!!expanded && !!children.length) {\r\n <ul [class.collapsed]=\"!expanded\" [ngStyle]=\"{\r\n paddingLeft: treeNodeLevelPadding + 'px'\r\n }\">\r\n @for (child of children; track $index) {\r\n <ng-container>\r\n <ng-container *ngTemplateOutlet=\"frontItem; context: { context: child }\"></ng-container>\r\n </ng-container>\r\n }\r\n </ul>\r\n }\r\n\r\n </li>\r\n </ng-template>\r\n\r\n</div>", styles: [".core-tree-grid-container{--tree-container-width: 300px;--grid-total-width: 500px;--square-color: darkgray;--square-size: 20px;--max-tier: 1;--row-height: 50px;--edit-mode-row-height: 120px;--edit-mode-row-bg: #dff6dd;--border-size: 5px;--header-height: 100px;--header-cell-padding: 5px;--content-cell-padding: 5px;--header-border-size: 1px;--tree-node-level-padding: 15px;white-space:nowrap;font-size:var(--typo-basic-font-size)}.core-tree-grid-container [data-tier=\"1\"]{--tier: 1}.core-tree-grid-container [data-tier=\"2\"]{--tier: 2}.core-tree-grid-container [data-tier=\"3\"]{--tier: 3}.core-tree-grid-container [data-tier=\"4\"]{--tier: 4}.core-tree-grid-container [data-tier=\"5\"]{--tier: 5}.core-tree-grid-container [data-tier=\"6\"]{--tier: 6}.core-tree-grid-container [data-tier=\"7\"]{--tier: 7}.core-tree-grid-container [data-tier=\"8\"]{--tier: 8}.core-tree-grid-container [data-tier=\"9\"]{--tier: 9}.core-tree-grid-container [data-tier=\"10\"]{--tier: 10}.core-tree-grid-container [data-tier=\"11\"]{--tier: 11}.core-tree-grid-container [data-tier=\"12\"]{--tier: 12}.core-tree-grid-container [data-tier=\"13\"]{--tier: 13}.core-tree-grid-container [data-tier=\"14\"]{--tier: 14}.core-tree-grid-container [data-tier=\"15\"]{--tier: 15}.core-tree-grid-container [data-tier=\"16\"]{--tier: 16}.core-tree-grid-container [data-tier=\"17\"]{--tier: 17}.core-tree-grid-container [data-tier=\"18\"]{--tier: 18}.core-tree-grid-container [data-tier=\"19\"]{--tier: 19}.core-tree-grid-container [data-tier=\"20\"]{--tier: 20}.core-tree-grid-container [data-tier=\"21\"]{--tier: 21}.core-tree-grid-container [data-tier=\"22\"]{--tier: 22}.core-tree-grid-container [data-tier=\"23\"]{--tier: 23}.core-tree-grid-container [data-tier=\"24\"]{--tier: 24}.core-tree-grid-container *{box-sizing:border-box!important}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.core-tree-grid-container .loading-surface{width:calc(100vw - var(--size-left-bar-current-width));height:100vh;position:fixed;top:0;left:var(--size-left-bar-current-width);background-color:#ffffff80;z-index:555}.core-tree-grid-container .loading-surface .loading-wrapper{width:calc(100vw - var(--size-left-bar-current-width));height:100vh;display:flex;align-items:center;justify-content:center}.core-tree-grid-container .tree-grid-content{margin-top:var(--header-cell-padding);background-color:#fff;display:inline-block;position:relative}.core-tree-grid-container .front-container{background-color:#fff;display:inline-block;position:sticky!important;left:0;z-index:2}.core-tree-grid-container .tree-grid-content.edit-mode-activated ul>li>span:not(.span-edit-mode-activated):hover .tree-item-tool{display:none}.core-tree-grid-container .tree-grid-content.edit-mode-activated ul>li>span.span-edit-mode-activated{background-color:var(--edit-mode-row-bg)}.core-tree-grid-container .tree-grid-content.edit-mode-activated ul>li>span.span-edit-mode-activated *:not(.expand-toggler,object){background-color:var(--edit-mode-row-bg)}.core-tree-grid-container .tree-grid-header{top:0;left:0;z-index:3;white-space:nowrap;height:var(--header-height);background-color:var(--color-bg-main)}.core-tree-grid-container .tree-grid-header>*{box-sizing:border-box;display:inline-block}.core-tree-grid-container .tree-grid-header .hidden{display:none}.core-tree-grid-container .tree-grid-header .tree-block-header{position:sticky;top:0;left:0;z-index:5;height:var(--header-height);background-color:var(--color-bg-main)}.core-tree-grid-container .tree-grid-header .header-group-cell-div,.core-tree-grid-container .tree-grid-header .header-cell-div{width:100%;display:inline-flex;align-items:center;overflow:hidden;text-overflow:ellipsis}.core-tree-grid-container .tree-grid-header .header-group-cell-div,.core-tree-grid-container .tree-grid-header .header-cell-div{justify-content:center}.core-tree-grid-container ul{display:table;table-layout:fixed;margin-bottom:0;animation:fade-in 1s ease-out}.core-tree-grid-container ul.collapsed:not(.root){display:none}.core-tree-grid-container li{display:block;position:relative;white-space:nowrap}.core-tree-grid-container li>span{position:relative;display:table-row}.core-tree-grid-container li>span .tree-item-tool{position:absolute;top:0;right:0;z-index:7;height:var(--row-height);display:none}.core-tree-grid-container li>span .tree-item-tool .tree-item-tool-wrapper{display:flex;align-items:center;justify-content:flex-end;height:var(--row-height)}.core-tree-grid-container li>span .tree-item{vertical-align:top;display:table-cell}.core-tree-grid-container li>span .tree-item .tree-item-div{display:flex;align-items:center;justify-content:flex-start;position:relative;height:var(--row-height)}.core-tree-grid-container li>span .tree-item .tree-item-div>i{color:var(--square-color);cursor:pointer;font-size:var(--square-size);width:var(--square-size);height:var(--square-size)}.core-tree-grid-container li>span .tree-item .tree-item-div>.expand-toggler{position:absolute;z-index:6;transform:translate(-100%) rotate(0);transition:.5s ease-out}.core-tree-grid-container li>span .tree-item .tree-item-div object{display:table-cell;cursor:pointer}.core-tree-grid-container li>span:hover .tree-item-tool{display:flex;align-items:center;justify-content:flex-end}.core-tree-grid-container li>span:hover:after{content:\"\";display:block;height:var(--row-height);position:absolute;width:calc(var(--tree-container-width) + var(--grid-total-width));background-color:#d3d3d3;opacity:.2;z-index:5;top:0;left:calc(var(--tree-container-width) * -1)}.core-tree-grid-container li>span .tree-grid-row-wrapper{display:table-cell;position:relative}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row{display:inline-flex;background-color:#fff}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row .tree-grid-cell{display:table-cell;height:var(--row-height)}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row .tree-grid-cell .cell-div{cursor:pointer;overflow-x:hidden;overflow-y:visible;padding:var(--content-cell-padding);display:flex;align-items:center;height:var(--row-height)}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row .tree-grid-cell.hidden{display:none}.core-tree-grid-container li>span.front-span:hover:after{width:calc(var(--tree-container-width) + var(--grid-total-width));left:calc(var(--tree-node-level-padding) * var(--tier) * -1)}.core-tree-grid-container li>span.span-edit-mode-activated{height:var(--edit-mode-row-height)}.core-tree-grid-container li>span.span-edit-mode-activated:hover:after{display:none}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item-tool{height:var(--edit-mode-row-height);display:flex}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item-tool .tree-item-tool-wrapper{height:var(--edit-mode-row-height)}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item-tool .tree-item-tool-wrapper i{width:24px;height:24px}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item .tree-item-div{height:var(--edit-mode-row-height)}.core-tree-grid-container li>span.span-edit-mode-activated .tree-grid-row-wrapper .tree-grid-cell{height:var(--edit-mode-row-height)!important}.core-tree-grid-container li>span.span-edit-mode-activated .tree-grid-row-wrapper .tree-grid-cell .cell-div{height:var(--edit-mode-row-height)!important}.core-tree-grid-container li.collapsed .tree-item-div .expand-toggler{transform:translate(-100%) rotate(-90deg)!important;transition:.5s ease-out!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: CoreControlComponent, selector: "core-control", inputs: ["control", "form", "checkError$", "rangeLimit"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: TableCellPipe, name: "tableCell" }, { kind: "component", type: CoreButtonGroupVnsComponent, selector: "core-button-group-vns", inputs: ["height", "instanceNumber", "forHeader", "shownItems", "showCaption"], outputs: ["buttonClick"] }, { kind: "component", type: ThreedotsComponent, selector: "app-threedots" }] }); }
|
|
346
349
|
}
|
|
347
350
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreTreeGridComponent, decorators: [{
|
|
348
351
|
type: Component,
|
|
@@ -354,7 +357,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
354
357
|
TableCellPipe,
|
|
355
358
|
CoreButtonGroupVnsComponent,
|
|
356
359
|
ThreedotsComponent,
|
|
357
|
-
], template: "<div #container class=\"core-tree-grid-container\" [ngStyle]=\"{\r\n width: '100%',\r\n height: height + 'px',\r\n overflow: 'scroll'\r\n}\">\r\n\r\n @if (loading) {\r\n <div class=\"loading-surface\">\r\n <div class=\"loading-wrapper\">\r\n <app-threedots></app-threedots>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"tree-grid-header\" [ngStyle]=\"{\r\n width: totalWidth + 'px',\r\n whiteSpace: 'nowrap',\r\n display: 'flex',\r\n position: 'sticky'\r\n }\">\r\n <div class=\"tree-block-header\" [ngStyle]=\"{\r\n width: treeColumnWidth + treeNodeLevelPadding + 'px',\r\n height: headerHeight + 'px',\r\n border: headerBorderSize + 'px solid white',\r\n }\">\r\n <div class=\"header-cell-div\" [ngStyle]=\"{\r\n height: headerHeight + 'px',\r\n }\">\r\n {{ 'UI.CORE_TREE_GRID.TREE_BLOCK_HEADER' | translate: lang }}\r\n @if (!treeCreateUpdateDisabled) {\r\n <core-button-group-vns [shownItems]=\"headerToolItems\"\r\n (buttonClick)=\"onHeaderToolClick($event)\"></core-button-group-vns>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div [ngStyle]=\"{\r\n display: 'inline-block',\r\n height: headerHeight + 'px',\r\n whiteSpace: 'nowrap'\r\n }\">\r\n\r\n <div class=\"header-row-one\" [ngStyle]=\"{\r\n display: 'block',\r\n height: (!!headerGroups ? headerHeight/2 : headerHeight) + 'px',\r\n }\">\r\n @if (!!headerGroups) {\r\n @for (headerGroup of headerGroups; track $index) {\r\n <div class=\"header-group-cell-div\" [ngStyle]=\"{\r\n height: (!!headerGroups ? headerHeight/2 : headerHeight) + 'px',\r\n width: headerGroup.width + 'px',\r\n border: headerBorderSize + 'px solid white',\r\n }\">\r\n {{ headerGroup.key | translate: lang }}\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"header-row-two\" [ngStyle]=\"{\r\n display: 'block',\r\n height: (!!headerGroups ? headerHeight/2 : headerHeight) + 'px',\r\n }\">\r\n @for (column of columns; track $index) {\r\n <div [class.hidden]=\"column.hidden\" [ngStyle]=\"\r\n {\r\n display: 'inline-block',\r\n height: (!!headerGroups ? headerHeight/2 : headerHeight) + 'px',\r\n border: headerBorderSize + 'px solid white',\r\n width: !!column.width ? column.width + 'px' : 'unset',\r\n textAlign: !!column.align ? column.align.toLowerCase() : 'unset'\r\n }\r\n \">\r\n <div class=\"header-cell-div\" [ngStyle]=\"{\r\n height: (!!headerGroups ? headerHeight/2 : headerHeight) + 'px',\r\n }\">\r\n {{ column.caption | translate: lang }}\r\n </div>\r\n </div>\r\n }\r\n\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n\r\n <div #frontTreeContainer class=\"tree-grid-content front-container\" [class.edit-mode-activated]=\"editModeActivated\">\r\n @for (root of data; track $index) {\r\n @defer(on viewport(treeContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\" [ngStyle]=\"{\r\n paddingLeft: treeNodeLevelPadding + 'px'\r\n }\">\r\n <ng-container *ngTemplateOutlet=\"frontItem; context: { context: root }\"></ng-container>\r\n </ul>\r\n }\r\n }\r\n </div>\r\n\r\n <div #treeContainer class=\"tree-grid-content\" [class.edit-mode-activated]=\"editModeActivated\">\r\n @for (root of data; track $index) {\r\n @defer(on viewport(treeContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\" [ngStyle]=\"{\r\n paddingLeft: '0px'\r\n }\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n }\r\n }\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-children=\"context.tree$Children\" let-expanded=\"context.tree$Expanded\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-tier=\"context.tree$Tier\">\r\n\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\"\r\n (click)=\"onRowClick(context, $event)\">\r\n <span [class.span-edit-mode-activated]=\"!!editModeActivated && pendingContext.id===id\">\r\n\r\n <div class=\"tree-item\">\r\n <div class=\"tree-item-div\" [attr.data-tier]=\"tier\" [ngStyle]=\"{\r\n width: '0px',\r\n }\">\r\n </div>\r\n </div>\r\n <div class=\"tree-grid-row-wrapper\">\r\n <div class=\"tree-grid-row\">\r\n @if (!(!!editModeActivated && pendingContext?.id===id)) {\r\n @for (column of columns; track $index) {\r\n <div class=\"tree-grid-cell\" [class.hidden]=\"column.hidden\">\r\n <div class=\"cell-div\" [ngStyle]=\"\r\n {\r\n width: !!column.width ? column.width + 'px' : 'unset',\r\n overflow: 'hidden',\r\n textAlign: !!column.align ? column.align.toLowerCase() : 'unset'\r\n }\r\n \">\r\n {{ !!column.translate ? (context[column.field] | translate: lang | tableCell:\r\n column.pipe : lang) :\r\n context[column.field] | tableCell: column.pipe : lang}}\r\n </div>\r\n </div>\r\n }\r\n }\r\n\r\n @if (!!editModeActivated && pendingContext?.id===id) {\r\n <ng-container>\r\n @for (column of columns; track $index) {\r\n <div class=\"tree-grid-cell\" [class.hidden]=\"column.hidden\">\r\n <div class=\"cell-div\" [ngStyle]=\"\r\n {\r\n width: !!column.width ? column.width + 'px' : 'unset',\r\n display: 'table',\r\n overflowY: 'visible',\r\n textAlign: !!column.align ? column.align.toLowerCase() : 'unset'\r\n }\r\n \">\r\n @if (!column.control) {\r\n <ng-container>\r\n {{ !!column.translate ? (context[column.field] | translate: lang | tableCell:\r\n column.pipe : lang) :\r\n context[column.field] | tableCell: column.pipe : lang}}\r\n </ng-container>\r\n } @else {\r\n <ng-container>\r\n <core-control [form]=\"form\" [control]=\"column.control!\"\r\n [checkError$]=\"checkError$\"></core-control>\r\n </ng-container>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n </ng-container>\r\n\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n </span>\r\n @if (!!expanded && !!children.length) {\r\n <ul [class.collapsed]=\"!expanded\" [ngStyle]=\"{\r\n paddingLeft: '0px'\r\n }\">\r\n @for (child of children; track $index) {\r\n <ng-container>\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n </ng-container>\r\n }\r\n </ul>\r\n }\r\n\r\n </li>\r\n </ng-template>\r\n\r\n <ng-template #frontItem let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-children=\"context.tree$Children\" let-expanded=\"context.tree$Expanded\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-tier=\"context.tree$Tier\">\r\n\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\"\r\n (click)=\"onRowClick(context, $event)\">\r\n <span [class.span-edit-mode-activated]=\"!!editModeActivated && pendingContext.id===id\">\r\n\r\n <div class=\"tree-item\">\r\n <div class=\"tree-item-div\" [attr.data-tier]=\"tier\" [ngStyle]=\"{\r\n width: treeColumnWidth - tier * treeNodeLevelPadding + 'px',\r\n }\">\r\n @if (!treeCreateUpdateDisabled) {\r\n <div class=\"tree-item-tool\">\r\n <div class=\"tree-item-tool-wrapper\">\r\n <core-button-group-vns [shownItems]=\"toolItems\" [showCaption]=\"false\"\r\n (buttonClick)=\"onToolClick($event, context)\"></core-button-group-vns>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (!!children.length) {\r\n <i class=\"expand-toggler feather-chevron-down\" (click)=\"onExpandTogglerClick(context)\"></i>\r\n }\r\n <object (click)=\"onObjectClick(context, $event)\">\r\n {{ title }}\r\n </object>\r\n </div>\r\n </div>\r\n\r\n </span>\r\n @if (!!expanded && !!children.length) {\r\n <ul [class.collapsed]=\"!expanded\" [ngStyle]=\"{\r\n paddingLeft: treeNodeLevelPadding + 'px'\r\n }\">\r\n @for (child of children; track $index) {\r\n <ng-container>\r\n <ng-container *ngTemplateOutlet=\"frontItem; context: { context: child }\"></ng-container>\r\n </ng-container>\r\n }\r\n </ul>\r\n }\r\n\r\n </li>\r\n </ng-template>\r\n\r\n</div>", styles: [".core-tree-grid-container{--tree-container-width: 300px;--grid-total-width: 500px;--square-color: darkgray;--square-size: 20px;--max-tier: 1;--row-height: 50px;--edit-mode-row-height: 120px;--edit-mode-row-bg: #dff6dd;--border-size: 5px;--header-height: 100px;--header-cell-padding: 5px;--content-cell-padding: 5px;--header-border-size: 1px;--tree-node-level-padding: 15px;white-space:nowrap;font-size:var(--typo-basic-font-size)}.core-tree-grid-container [data-tier=\"1\"]{--tier: 1;--translate-x: calc(var(--tree-node-level-padding) * -1)}.core-tree-grid-container [data-tier=\"2\"]{--tier: 2;--translate-x: calc(var(--tree-node-level-padding) * -2)}.core-tree-grid-container [data-tier=\"3\"]{--tier: 3;--translate-x: calc(var(--tree-node-level-padding) * -3)}.core-tree-grid-container [data-tier=\"4\"]{--tier: 4;--translate-x: calc(var(--tree-node-level-padding) * -4)}.core-tree-grid-container [data-tier=\"5\"]{--tier: 5;--translate-x: calc(var(--tree-node-level-padding) * -5)}.core-tree-grid-container [data-tier=\"6\"]{--tier: 6;--translate-x: calc(var(--tree-node-level-padding) * -6)}.core-tree-grid-container [data-tier=\"7\"]{--tier: 7;--translate-x: calc(var(--tree-node-level-padding) * -7)}.core-tree-grid-container [data-tier=\"8\"]{--tier: 8;--translate-x: calc(var(--tree-node-level-padding) * -8)}.core-tree-grid-container [data-tier=\"9\"]{--tier: 9;--translate-x: calc(var(--tree-node-level-padding) * -9)}.core-tree-grid-container [data-tier=\"10\"]{--tier: 10;--translate-x: calc(var(--tree-node-level-padding) * -10)}.core-tree-grid-container [data-tier=\"11\"]{--tier: 11;--translate-x: calc(var(--tree-node-level-padding) * -11)}.core-tree-grid-container [data-tier=\"12\"]{--tier: 12;--translate-x: calc(var(--tree-node-level-padding) * -12)}.core-tree-grid-container [data-tier=\"13\"]{--tier: 13;--translate-x: calc(var(--tree-node-level-padding) * -13)}.core-tree-grid-container [data-tier=\"14\"]{--tier: 14;--translate-x: calc(var(--tree-node-level-padding) * -14)}.core-tree-grid-container [data-tier=\"15\"]{--tier: 15;--translate-x: calc(var(--tree-node-level-padding) * -15)}.core-tree-grid-container [data-tier=\"16\"]{--tier: 16;--translate-x: calc(var(--tree-node-level-padding) * -16)}.core-tree-grid-container [data-tier=\"17\"]{--tier: 17;--translate-x: calc(var(--tree-node-level-padding) * -17)}.core-tree-grid-container [data-tier=\"18\"]{--tier: 18;--translate-x: calc(var(--tree-node-level-padding) * -18)}.core-tree-grid-container [data-tier=\"19\"]{--tier: 19;--translate-x: calc(var(--tree-node-level-padding) * -19)}.core-tree-grid-container [data-tier=\"20\"]{--tier: 20;--translate-x: calc(var(--tree-node-level-padding) * -20)}.core-tree-grid-container [data-tier=\"21\"]{--tier: 21;--translate-x: calc(var(--tree-node-level-padding) * -21)}.core-tree-grid-container [data-tier=\"22\"]{--tier: 22;--translate-x: calc(var(--tree-node-level-padding) * -22)}.core-tree-grid-container [data-tier=\"23\"]{--tier: 23;--translate-x: calc(var(--tree-node-level-padding) * -23)}.core-tree-grid-container [data-tier=\"24\"]{--tier: 24;--translate-x: calc(var(--tree-node-level-padding)) * -24 }.core-tree-grid-container *{box-sizing:border-box!important}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.core-tree-grid-container .loading-surface{width:calc(100vw - var(--size-left-bar-current-width));height:100vh;position:fixed;top:0;left:var(--size-left-bar-current-width);background-color:#ffffff80;z-index:555}.core-tree-grid-container .loading-surface .loading-wrapper{width:calc(100vw - var(--size-left-bar-current-width));height:100vh;display:flex;align-items:center;justify-content:center}.core-tree-grid-container .tree-grid-content{margin-top:var(--header-cell-padding);background-color:#fff;display:inline-block;position:relative}.core-tree-grid-container .front-container{background-color:#fff;display:inline-block;position:sticky!important;left:0;z-index:2}.core-tree-grid-container .tree-grid-content.edit-mode-activated ul>li>span:not(.span-edit-mode-activated):hover .tree-item-tool{display:none}.core-tree-grid-container .tree-grid-content.edit-mode-activated ul>li>span.span-edit-mode-activated{background-color:var(--edit-mode-row-bg)}.core-tree-grid-container .tree-grid-content.edit-mode-activated ul>li>span.span-edit-mode-activated *:not(.expand-toggler,object){background-color:var(--edit-mode-row-bg)}.core-tree-grid-container .tree-grid-header{top:0;left:0;z-index:3;white-space:nowrap;height:var(--header-height);background-color:var(--color-bg-main)}.core-tree-grid-container .tree-grid-header>*{box-sizing:border-box;display:inline-block}.core-tree-grid-container .tree-grid-header .hidden{display:none}.core-tree-grid-container .tree-grid-header .tree-block-header{position:sticky;top:0;left:0;z-index:5;height:var(--header-height);background-color:var(--color-bg-main)}.core-tree-grid-container .tree-grid-header .header-group-cell-div,.core-tree-grid-container .tree-grid-header .header-cell-div{width:100%;display:inline-flex;align-items:center;overflow:hidden;text-overflow:ellipsis}.core-tree-grid-container .tree-grid-header .header-group-cell-div,.core-tree-grid-container .tree-grid-header .header-cell-div{justify-content:center}.core-tree-grid-container ul{display:table;table-layout:fixed;margin-bottom:0;animation:fade-in 1s ease-out}.core-tree-grid-container ul.collapsed:not(.root){display:none}.core-tree-grid-container li{display:block;position:relative;white-space:nowrap}.core-tree-grid-container li>span{position:relative;display:table-row}.core-tree-grid-container li>span .tree-item-tool{position:absolute;top:0;right:0;z-index:7;height:var(--row-height);display:none}.core-tree-grid-container li>span .tree-item-tool .tree-item-tool-wrapper{display:flex;align-items:center;justify-content:flex-end;height:var(--row-height)}.core-tree-grid-container li>span .tree-item{vertical-align:top;display:table-cell}.core-tree-grid-container li>span .tree-item .tree-item-div{display:flex;align-items:center;justify-content:flex-start;position:relative;height:var(--row-height)}.core-tree-grid-container li>span .tree-item .tree-item-div>i{color:var(--square-color);cursor:pointer;font-size:var(--square-size);width:var(--square-size);height:var(--square-size)}.core-tree-grid-container li>span .tree-item .tree-item-div>.expand-toggler{position:absolute;z-index:6;transform:translate(-100%) rotate(0);transition:.5s ease-out}.core-tree-grid-container li>span .tree-item .tree-item-div object{display:table-cell;cursor:pointer}.core-tree-grid-container li>span:hover .tree-item-tool{display:flex;align-items:center;justify-content:flex-end}.core-tree-grid-container li>span:hover:after{content:\"\";display:block;height:var(--row-height);position:absolute;width:calc(var(--grid-total-width) + 1000px);background-color:#d3d3d3;opacity:.2;z-index:5;top:0;left:-1000px}.core-tree-grid-container li>span .tree-grid-row-wrapper{display:table-cell;position:relative}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row{display:inline-flex;background-color:#fff}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row .tree-grid-cell{display:table-cell;height:var(--row-height)}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row .tree-grid-cell .cell-div{cursor:pointer;overflow-x:hidden;overflow-y:visible;padding:var(--content-cell-padding);display:flex;align-items:center;height:var(--row-height)}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row .tree-grid-cell.hidden{display:none}.core-tree-grid-container li>span.span-edit-mode-activated{height:var(--edit-mode-row-height)}.core-tree-grid-container li>span.span-edit-mode-activated:hover:after{display:none}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item-tool{height:var(--edit-mode-row-height);display:flex}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item-tool .tree-item-tool-wrapper{height:var(--edit-mode-row-height)}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item-tool .tree-item-tool-wrapper i{width:24px;height:24px}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item .tree-item-div{height:var(--edit-mode-row-height)}.core-tree-grid-container li>span.span-edit-mode-activated .tree-grid-row-wrapper .tree-grid-cell{height:var(--edit-mode-row-height)!important}.core-tree-grid-container li>span.span-edit-mode-activated .tree-grid-row-wrapper .tree-grid-cell .cell-div{height:var(--edit-mode-row-height)!important}.core-tree-grid-container li.collapsed .tree-item-div .expand-toggler{transform:translate(-100%) rotate(-90deg)!important;transition:.5s ease-out!important}\n"] }]
|
|
360
|
+
], template: "<div #container class=\"core-tree-grid-container\" [ngStyle]=\"{\r\n width: '100%',\r\n height: height + 'px',\r\n overflow: 'scroll'\r\n}\">\r\n\r\n @if (loading) {\r\n <div class=\"loading-surface\">\r\n <div class=\"loading-wrapper\">\r\n <app-threedots></app-threedots>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"tree-grid-header\" [ngStyle]=\"{\r\n width: totalWidth + 'px',\r\n whiteSpace: 'nowrap',\r\n display: 'flex',\r\n position: 'sticky'\r\n }\">\r\n <div class=\"tree-block-header\" [ngStyle]=\"{\r\n width: treeColumnWidth + 'px',\r\n height: headerHeight + 'px',\r\n border: headerBorderSize + 'px solid white',\r\n }\">\r\n <div class=\"header-cell-div\" [ngStyle]=\"{\r\n height: headerHeight + 'px',\r\n }\">\r\n {{ 'UI.CORE_TREE_GRID.TREE_BLOCK_HEADER' | translate: lang }}\r\n @if (!disableTreeCreateUpdate) {\r\n <core-button-group-vns [shownItems]=\"headerToolItems\"\r\n (buttonClick)=\"onHeaderToolClick($event)\"></core-button-group-vns>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div [ngStyle]=\"{\r\n display: 'inline-block',\r\n height: headerHeight + 'px',\r\n whiteSpace: 'nowrap'\r\n }\">\r\n\r\n <div class=\"header-row-one\" [ngStyle]=\"{\r\n display: 'block',\r\n height: (!!headerGroups ? headerHeight/2 : headerHeight) + 'px',\r\n }\">\r\n @if (!!headerGroups) {\r\n @for (headerGroup of headerGroups; track $index) {\r\n <div class=\"header-group-cell-div\" [ngStyle]=\"{\r\n height: (!!headerGroups ? headerHeight/2 : headerHeight) + 'px',\r\n width: headerGroup.width + 'px',\r\n border: headerBorderSize + 'px solid white',\r\n }\">\r\n {{ headerGroup.key | translate: lang }}\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"header-row-two\" [ngStyle]=\"{\r\n display: 'block',\r\n height: (!!headerGroups ? headerHeight/2 : headerHeight) + 'px',\r\n }\">\r\n @for (column of columns; track $index) {\r\n <div [class.hidden]=\"column.hidden\" [ngStyle]=\"\r\n {\r\n display: 'inline-block',\r\n height: (!!headerGroups ? headerHeight/2 : headerHeight) + 'px',\r\n border: headerBorderSize + 'px solid white',\r\n width: !!column.width ? column.width + 'px' : 'unset',\r\n textAlign: !!column.align ? column.align.toLowerCase() : 'unset'\r\n }\r\n \">\r\n <div class=\"header-cell-div\" [ngStyle]=\"{\r\n height: (!!headerGroups ? headerHeight/2 : headerHeight) + 'px',\r\n }\">\r\n {{ column.caption | translate: lang }}\r\n </div>\r\n </div>\r\n }\r\n\r\n\r\n </div>\r\n\r\n\r\n </div>\r\n\r\n\r\n\r\n </div>\r\n\r\n <div #frontTreeContainer class=\"tree-grid-content front-container\" [class.edit-mode-activated]=\"editModeActivated\">\r\n @for (root of data; track $index) {\r\n @defer(on viewport(treeContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\" [ngStyle]=\"{\r\n paddingLeft: treeNodeLevelPadding + 'px'\r\n }\">\r\n <ng-container *ngTemplateOutlet=\"frontItem; context: { context: root }\"></ng-container>\r\n </ul>\r\n }\r\n }\r\n </div>\r\n\r\n <div #treeContainer class=\"tree-grid-content\" [class.edit-mode-activated]=\"editModeActivated\">\r\n @for (root of data; track $index) {\r\n @defer(on viewport(treeContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\" [ngStyle]=\"{\r\n paddingLeft: '0px'\r\n }\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n }\r\n }\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-children=\"context.tree$Children\" let-expanded=\"context.tree$Expanded\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-tier=\"context.tree$Tier\">\r\n\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\" (click)=\"onRowClick(context, $event)\">\r\n <span [class.span-edit-mode-activated]=\"!!editModeActivated && pendingContext.id===id\">\r\n\r\n <div class=\"tree-item\">\r\n <div class=\"tree-item-div\" [attr.data-tier]=\"tier\" [ngStyle]=\"{\r\n width: '0px',\r\n }\">\r\n </div>\r\n </div>\r\n <div class=\"tree-grid-row-wrapper\">\r\n <div class=\"tree-grid-row\">\r\n @if (!(!!editModeActivated && pendingContext?.id===id && !disableTreeCreateUpdate)) {\r\n @for (column of columns; track $index) {\r\n <div class=\"tree-grid-cell\" [class.hidden]=\"column.hidden\">\r\n <div class=\"cell-div\" [ngStyle]=\"\r\n {\r\n width: !!column.width ? column.width + 'px' : 'unset',\r\n overflow: 'hidden',\r\n textAlign: !!column.align ? column.align.toLowerCase() : 'unset'\r\n }\r\n \">\r\n {{ !!column.translate ? (context[column.field] | translate: lang | tableCell:\r\n column.pipe : lang) :\r\n context[column.field] | tableCell: column.pipe : lang}}\r\n </div>\r\n </div>\r\n }\r\n } @else {\r\n <ng-container>\r\n @for (column of columns; track $index) {\r\n <div class=\"tree-grid-cell\" [class.hidden]=\"column.hidden\">\r\n <div class=\"cell-div\" [ngStyle]=\"\r\n {\r\n width: !!column.width ? column.width + 'px' : 'unset',\r\n display: 'table',\r\n overflowY: 'visible',\r\n textAlign: !!column.align ? column.align.toLowerCase() : 'unset'\r\n }\r\n \">\r\n @if (!column.control) {\r\n <ng-container>\r\n {{ !!column.translate ? (context[column.field] | translate: lang | tableCell:\r\n column.pipe : lang) :\r\n context[column.field] | tableCell: column.pipe : lang}}\r\n </ng-container>\r\n } @else {\r\n <ng-container>\r\n <core-control [form]=\"form\" [control]=\"column.control!\"\r\n [checkError$]=\"checkError$\"></core-control>\r\n </ng-container>\r\n }\r\n \r\n </div>\r\n </div>\r\n }\r\n </ng-container>\r\n }\r\n </div>\r\n </div>\r\n\r\n </span>\r\n @if (!!expanded && !!children.length) {\r\n <ul [class.collapsed]=\"!expanded\" [ngStyle]=\"{\r\n paddingLeft: '0px'\r\n }\">\r\n @for (child of children; track $index) {\r\n <ng-container>\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n </ng-container>\r\n }\r\n </ul>\r\n }\r\n\r\n </li>\r\n </ng-template>\r\n\r\n <ng-template #frontItem let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-children=\"context.tree$Children\" let-expanded=\"context.tree$Expanded\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-tier=\"context.tree$Tier\">\r\n\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\" [attr.data-tier]=\"tier\"\r\n (click)=\"onRowClick(context, $event)\">\r\n <span class=\"front-span\" [class.span-edit-mode-activated]=\"!!editModeActivated && pendingContext.id===id\">\r\n <div class=\"tree-item\">\r\n <div class=\"tree-item-div\" [attr.data-tier]=\"tier\" [ngStyle]=\"{\r\n width: treeColumnWidth - tier * treeNodeLevelPadding + 'px',\r\n }\">\r\n @if (!disableTreeCreateUpdate) {\r\n <div class=\"tree-item-tool\">\r\n <div class=\"tree-item-tool-wrapper\">\r\n <core-button-group-vns [shownItems]=\"toolItems\" [showCaption]=\"false\"\r\n (buttonClick)=\"onToolClick($event, context)\"></core-button-group-vns>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (!!children.length) {\r\n <i class=\"expand-toggler feather-chevron-down\" (click)=\"onExpandTogglerClick(context)\"></i>\r\n } @else {\r\n <i class=\"expand-toggler\" style=\"display: none;\"></i>\r\n }\r\n <object (click)=\"onObjectClick(context, $event)\">\r\n {{ title }}\r\n </object>\r\n </div>\r\n </div>\r\n\r\n </span>\r\n @if (!!expanded && !!children.length) {\r\n <ul [class.collapsed]=\"!expanded\" [ngStyle]=\"{\r\n paddingLeft: treeNodeLevelPadding + 'px'\r\n }\">\r\n @for (child of children; track $index) {\r\n <ng-container>\r\n <ng-container *ngTemplateOutlet=\"frontItem; context: { context: child }\"></ng-container>\r\n </ng-container>\r\n }\r\n </ul>\r\n }\r\n\r\n </li>\r\n </ng-template>\r\n\r\n</div>", styles: [".core-tree-grid-container{--tree-container-width: 300px;--grid-total-width: 500px;--square-color: darkgray;--square-size: 20px;--max-tier: 1;--row-height: 50px;--edit-mode-row-height: 120px;--edit-mode-row-bg: #dff6dd;--border-size: 5px;--header-height: 100px;--header-cell-padding: 5px;--content-cell-padding: 5px;--header-border-size: 1px;--tree-node-level-padding: 15px;white-space:nowrap;font-size:var(--typo-basic-font-size)}.core-tree-grid-container [data-tier=\"1\"]{--tier: 1}.core-tree-grid-container [data-tier=\"2\"]{--tier: 2}.core-tree-grid-container [data-tier=\"3\"]{--tier: 3}.core-tree-grid-container [data-tier=\"4\"]{--tier: 4}.core-tree-grid-container [data-tier=\"5\"]{--tier: 5}.core-tree-grid-container [data-tier=\"6\"]{--tier: 6}.core-tree-grid-container [data-tier=\"7\"]{--tier: 7}.core-tree-grid-container [data-tier=\"8\"]{--tier: 8}.core-tree-grid-container [data-tier=\"9\"]{--tier: 9}.core-tree-grid-container [data-tier=\"10\"]{--tier: 10}.core-tree-grid-container [data-tier=\"11\"]{--tier: 11}.core-tree-grid-container [data-tier=\"12\"]{--tier: 12}.core-tree-grid-container [data-tier=\"13\"]{--tier: 13}.core-tree-grid-container [data-tier=\"14\"]{--tier: 14}.core-tree-grid-container [data-tier=\"15\"]{--tier: 15}.core-tree-grid-container [data-tier=\"16\"]{--tier: 16}.core-tree-grid-container [data-tier=\"17\"]{--tier: 17}.core-tree-grid-container [data-tier=\"18\"]{--tier: 18}.core-tree-grid-container [data-tier=\"19\"]{--tier: 19}.core-tree-grid-container [data-tier=\"20\"]{--tier: 20}.core-tree-grid-container [data-tier=\"21\"]{--tier: 21}.core-tree-grid-container [data-tier=\"22\"]{--tier: 22}.core-tree-grid-container [data-tier=\"23\"]{--tier: 23}.core-tree-grid-container [data-tier=\"24\"]{--tier: 24}.core-tree-grid-container *{box-sizing:border-box!important}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.core-tree-grid-container .loading-surface{width:calc(100vw - var(--size-left-bar-current-width));height:100vh;position:fixed;top:0;left:var(--size-left-bar-current-width);background-color:#ffffff80;z-index:555}.core-tree-grid-container .loading-surface .loading-wrapper{width:calc(100vw - var(--size-left-bar-current-width));height:100vh;display:flex;align-items:center;justify-content:center}.core-tree-grid-container .tree-grid-content{margin-top:var(--header-cell-padding);background-color:#fff;display:inline-block;position:relative}.core-tree-grid-container .front-container{background-color:#fff;display:inline-block;position:sticky!important;left:0;z-index:2}.core-tree-grid-container .tree-grid-content.edit-mode-activated ul>li>span:not(.span-edit-mode-activated):hover .tree-item-tool{display:none}.core-tree-grid-container .tree-grid-content.edit-mode-activated ul>li>span.span-edit-mode-activated{background-color:var(--edit-mode-row-bg)}.core-tree-grid-container .tree-grid-content.edit-mode-activated ul>li>span.span-edit-mode-activated *:not(.expand-toggler,object){background-color:var(--edit-mode-row-bg)}.core-tree-grid-container .tree-grid-header{top:0;left:0;z-index:3;white-space:nowrap;height:var(--header-height);background-color:var(--color-bg-main)}.core-tree-grid-container .tree-grid-header>*{box-sizing:border-box;display:inline-block}.core-tree-grid-container .tree-grid-header .hidden{display:none}.core-tree-grid-container .tree-grid-header .tree-block-header{position:sticky;top:0;left:0;z-index:5;height:var(--header-height);background-color:var(--color-bg-main)}.core-tree-grid-container .tree-grid-header .header-group-cell-div,.core-tree-grid-container .tree-grid-header .header-cell-div{width:100%;display:inline-flex;align-items:center;overflow:hidden;text-overflow:ellipsis}.core-tree-grid-container .tree-grid-header .header-group-cell-div,.core-tree-grid-container .tree-grid-header .header-cell-div{justify-content:center}.core-tree-grid-container ul{display:table;table-layout:fixed;margin-bottom:0;animation:fade-in 1s ease-out}.core-tree-grid-container ul.collapsed:not(.root){display:none}.core-tree-grid-container li{display:block;position:relative;white-space:nowrap}.core-tree-grid-container li>span{position:relative;display:table-row}.core-tree-grid-container li>span .tree-item-tool{position:absolute;top:0;right:0;z-index:7;height:var(--row-height);display:none}.core-tree-grid-container li>span .tree-item-tool .tree-item-tool-wrapper{display:flex;align-items:center;justify-content:flex-end;height:var(--row-height)}.core-tree-grid-container li>span .tree-item{vertical-align:top;display:table-cell}.core-tree-grid-container li>span .tree-item .tree-item-div{display:flex;align-items:center;justify-content:flex-start;position:relative;height:var(--row-height)}.core-tree-grid-container li>span .tree-item .tree-item-div>i{color:var(--square-color);cursor:pointer;font-size:var(--square-size);width:var(--square-size);height:var(--square-size)}.core-tree-grid-container li>span .tree-item .tree-item-div>.expand-toggler{position:absolute;z-index:6;transform:translate(-100%) rotate(0);transition:.5s ease-out}.core-tree-grid-container li>span .tree-item .tree-item-div object{display:table-cell;cursor:pointer}.core-tree-grid-container li>span:hover .tree-item-tool{display:flex;align-items:center;justify-content:flex-end}.core-tree-grid-container li>span:hover:after{content:\"\";display:block;height:var(--row-height);position:absolute;width:calc(var(--tree-container-width) + var(--grid-total-width));background-color:#d3d3d3;opacity:.2;z-index:5;top:0;left:calc(var(--tree-container-width) * -1)}.core-tree-grid-container li>span .tree-grid-row-wrapper{display:table-cell;position:relative}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row{display:inline-flex;background-color:#fff}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row .tree-grid-cell{display:table-cell;height:var(--row-height)}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row .tree-grid-cell .cell-div{cursor:pointer;overflow-x:hidden;overflow-y:visible;padding:var(--content-cell-padding);display:flex;align-items:center;height:var(--row-height)}.core-tree-grid-container li>span .tree-grid-row-wrapper .tree-grid-row .tree-grid-cell.hidden{display:none}.core-tree-grid-container li>span.front-span:hover:after{width:calc(var(--tree-container-width) + var(--grid-total-width));left:calc(var(--tree-node-level-padding) * var(--tier) * -1)}.core-tree-grid-container li>span.span-edit-mode-activated{height:var(--edit-mode-row-height)}.core-tree-grid-container li>span.span-edit-mode-activated:hover:after{display:none}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item-tool{height:var(--edit-mode-row-height);display:flex}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item-tool .tree-item-tool-wrapper{height:var(--edit-mode-row-height)}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item-tool .tree-item-tool-wrapper i{width:24px;height:24px}.core-tree-grid-container li>span.span-edit-mode-activated .tree-item .tree-item-div{height:var(--edit-mode-row-height)}.core-tree-grid-container li>span.span-edit-mode-activated .tree-grid-row-wrapper .tree-grid-cell{height:var(--edit-mode-row-height)!important}.core-tree-grid-container li>span.span-edit-mode-activated .tree-grid-row-wrapper .tree-grid-cell .cell-div{height:var(--edit-mode-row-height)!important}.core-tree-grid-container li.collapsed .tree-item-div .expand-toggler{transform:translate(-100%) rotate(-90deg)!important;transition:.5s ease-out!important}\n"] }]
|
|
358
361
|
}], ctorParameters: () => [{ type: i1.AppService }, { type: i2.RecursiveService }, { type: i3.MultiLanguageService }, { type: i4.DialogService }, { type: i5.CoreControlService }, { type: i6.CoreTableService }], propDecorators: { height: [{
|
|
359
362
|
type: Input,
|
|
360
363
|
args: [{ required: true }]
|
|
@@ -385,7 +388,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
385
388
|
type: Input
|
|
386
389
|
}], crud: [{
|
|
387
390
|
type: Input
|
|
388
|
-
}],
|
|
391
|
+
}], disableTreeCreateUpdate: [{
|
|
392
|
+
type: Input
|
|
393
|
+
}], data: [{
|
|
394
|
+
type: Input
|
|
395
|
+
}], disableDoubleClick: [{
|
|
389
396
|
type: Input
|
|
390
397
|
}], onRowDoubleClick: [{
|
|
391
398
|
type: Output
|
|
@@ -395,4 +402,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
395
402
|
type: ViewChild,
|
|
396
403
|
args: ['container']
|
|
397
404
|
}] } });
|
|
398
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS10cmVlLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtdHJlZS1ncmlkL2NvcmUtdHJlZS1ncmlkL2NvcmUtdHJlZS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXRyZWUtZ3JpZC9jb3JlLXRyZWUtZ3JpZC9jb3JlLXRyZWUtZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhJLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBUTdHLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc3RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQztBQUVoSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRCxPQUFPLEVBQWEsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzlGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG1GQUFtRixD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QUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDaEIsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFFRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBRUksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBRWlCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGFwaSB9IGZyb20gXCJhbHBoYS1nbG9iYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLWZvcm0tY29udHJvbC1iYXNlL2NvcmUtZm9ybS1jb250cm9sLWJhc2UuY29tcG9uZW50JztcclxuXHJcbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcHAuc2VydmljZSc7XHJcbmltcG9ydCB7IElFdmVyeVRyZWVTdGF0dXMsIFJlY3Vyc2l2ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWN1cnNpdmUuc2VydmljZSc7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVDb250cm9sU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUtZm9ybS9jb3JlLWNvbnRyb2wuc2VydmljZSc7XHJcblxyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZmlsdGVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IElGb3JtYXRlZFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9JRm9ybWF0ZWRSZXNwb25zZSc7XHJcblxyXG5pbXBvcnQgeyBsaW5lcl90b19uZXN0ZWRfYXJyYXlfc2NyaXB0IH0gZnJvbSAnLi4vLi4vLi4vLi4vYXNzZXRzL2pzL3Jlc2N1c2l2ZV93ayc7XHJcbmltcG9ydCB7IEVudW1Db3JlQnV0dG9uVk5TQ29kZSB9IGZyb20gJy4uLy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvRW51bUNvcmVCdXR0b25WTlNDb2RlJztcclxuaW1wb3J0IHsgSUNvcmVCdXR0b25WTlMgfSBmcm9tICcuLi8uLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zL0lDb3JlQnV0dG9uVk5TJztcclxuaW1wb3J0IHsgRW51bVRyYW5zbGF0ZUtleSB9IGZyb20gXCJhbHBoYS1nbG9iYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IElDb3JlVHJlZUdyaWRDb2x1bW5JdGVtIH0gZnJvbSAnLi4vY29yZS10cmVlLWdyaWQtaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSUNvcmVQYWdlRWRpdENSVUQgfSBmcm9tICcuLi8uLi9jb3JlLXBhZ2UtZWRpdC9JQ29yZVBhZ2VFZGl0Q1JVRCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9hcHAtcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xyXG5pbXBvcnQgeyBDb3JlQ29udHJvbENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtY29udHJvbC9jb3JlLWNvbnRyb2wvY29yZS1jb250cm9sLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVCdXR0b25Hcm91cFZuc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRocmVlZG90c0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RocmVlZG90cy90aHJlZWRvdHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFibGVDZWxsUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3RhYmxlLWNlbGwucGlwZSc7XHJcbmltcG9ydCB7IENvcmVUYWJsZVNlcnZpY2UsIElDb3JlQ29sdW1uc0hlYWRlckdyb3VwVHJhbnNmb3JtZWQsIElIZWFkZXJHcm91cEl0ZW0gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb3JlLXRhYmxlLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLXRyZWUtZ3JpZCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgQ29yZUNvbnRyb2xDb21wb25lbnQsXHJcbiAgICBUcmFuc2xhdGVQaXBlLFxyXG4gICAgVGFibGVDZWxsUGlwZSxcclxuICAgIENvcmVCdXR0b25Hcm91cFZuc0NvbXBvbmVudCxcclxuICAgIFRocmVlZG90c0NvbXBvbmVudCxcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3JlLXRyZWUtZ3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29yZS10cmVlLWdyaWQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29yZVRyZWVHcmlkQ29tcG9uZW50IGV4dGVuZHMgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgaGVpZ2h0ITogbnVtYmVyO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGNvbHVtbnMhOiBJQ29yZVRyZWVHcmlkQ29sdW1uSXRlbVtdO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGtleUZpZWxkITogc3RyaW5nO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHRpdGxlRmllbGQhOiBzdHJpbmc7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcGFyZW50RmllbGQhOiBzdHJpbmc7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgaGVhZGVySGVpZ2h0ITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGhlYWRlckNlbGxQYWRkaW5nOiBudW1iZXIgPSA1O1xyXG4gIEBJbnB1dCgpIGhlYWRlckJvcmRlclNpemU6IG51bWJlciA9IDE7XHJcbiAgQElucHV0KCkgdHJlZUNvbHVtbldpZHRoOiBudW1iZXIgPSAzMDA7XHJcbiAgQElucHV0KCkgdHJlZU5vZGVMZXZlbFBhZGRpbmc6IG51bWJlciA9IDE1O1xyXG5cclxuICBASW5wdXQoKSBnZXRGdWxsTGlzdEFwaSE6IGFwaTtcclxuICBASW5wdXQoKSBjcnVkITogSUNvcmVQYWdlRWRpdENSVUQ7XHJcblxyXG4gIEBJbnB1dCgpIHRyZWVDcmVhdGVVcGRhdGVEaXNhYmxlZCE6IGJvb2xlYW47XHJcblxyXG4gIEBPdXRwdXQoKSBvblJvd0RvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpXHJcbiAgQE91dHB1dCgpIG9uU3VibWl0U3VjY2VzcyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxyXG5cclxuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG5cclxuICBsYW5nITogc3RyaW5nO1xyXG5cclxuICBoZWFkZXJHcm91cHMhOiBJSGVhZGVyR3JvdXBJdGVtW10gfCB1bmRlZmluZWQ7XHJcblxyXG4gIGRpYWxvZ0luc3RhbmNlTnVtYmVyITogbnVtYmVyO1xyXG4gIHRvdGFsV2lkdGg6IG51bWJlciA9IDUwMDtcclxuXHJcbiAgbG9hZGluZyE6IGJvb2xlYW47XHJcbiAgbGluZWFySXRlbXMhOiBhbnlbXTtcclxuICBkYXRhITogYW55W107XHJcbiAgbWF4VGllciE6IG51bWJlcjtcclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIHBlbmRpbmdQYXJlbnRDb250ZXh0OiBhbnk7XHJcbiAgcGVuZGluZ0NvbnRleHQ6IGFueTtcclxuICBwZW5kaW5nQWN0aW9uITogRW51bUNvcmVCdXR0b25WTlNDb2RlO1xyXG5cclxuICBlZGl0TW9kZUFjdGl2YXRlZCE6IGJvb2xlYW47XHJcbiAgY2hlY2tFcnJvciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgZm9ybSE6IEZvcm1Hcm91cDtcclxuICB0cmFuc2Zvcm1lZCE6IElDb3JlQ29sdW1uc0hlYWRlckdyb3VwVHJhbnNmb3JtZWQ7XHJcblxyXG4gIHN0YXR1czogSUV2ZXJ5VHJlZVN0YXR1cyA9IHtcclxuICAgIHNlbGVjdGVkS2V5OiB1bmRlZmluZWQsXHJcbiAgICBhY3RpdmVLZXlzOiBbXSxcclxuICAgIGV4cGFuZGVkS2V5czogW10sXHJcbiAgfTtcclxuXHJcbiAgdG9vbEl0ZW1zOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGVbXSA9IFtcclxuICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQ1JFQVRFLFxyXG4gICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9FRElULFxyXG4gICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEVcclxuICBdXHJcblxyXG4gIGhlYWRlclRvb2xJdGVtczogRW51bUNvcmVCdXR0b25WTlNDb2RlW10gPSBbXHJcbiAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NSRUFURSxcclxuICBdXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhcHBTZXJ2aWNlOiBBcHBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWN1cnNpdmVTZXJ2aWNlOiBSZWN1cnNpdmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtbHM6IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlQ29udHJvbFNlcnZpY2U6IENvcmVDb250cm9sU2VydmljZSxcclxuICAgIHByaXZhdGUgY29yZVRhYmxlU2VydmljZTogQ29yZVRhYmxlU2VydmljZSxcclxuICApIHtcclxuICAgIHN1cGVyKClcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5mb3JtID0gdGhpcy5jb3JlQ29udHJvbFNlcnZpY2UudG9Db3JlVHJlZUdyaWRJblJvd0Zvcm1Hcm91cCh0aGlzLmNvbHVtbnMpXHJcbiAgICBsZXQgbmV3VG90YWxXaWR0aCA9IHRoaXMudHJlZUNvbHVtbldpZHRoO1xyXG4gICAgdGhpcy5jb2x1bW5zLm1hcCh4ID0+IG5ld1RvdGFsV2lkdGggKz0geC53aWR0aCEpO1xyXG4gICAgdGhpcy50b3RhbFdpZHRoID0gbmV3VG90YWxXaWR0aDtcclxuXHJcbiAgICB0aGlzLnRyYW5zZm9ybWVkID0gdGhpcy5jb3JlVGFibGVTZXJ2aWNlLnRyYW5zZm9ybVdpdGhIZWFkZXJHcm91cCh0aGlzLmNvbHVtbnMpO1xyXG4gICAgaWYgKHRoaXMudHJhbnNmb3JtZWQuaXNWYWxpZCkge1xyXG4gICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLnRyYW5zZm9ybWVkLmNvbHVtbnM7XHJcbiAgICAgIHRoaXMuaGVhZGVyR3JvdXBzID0gdGhpcy50cmFuc2Zvcm1lZC5oZWFkZXJHcm91cHM7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWxvYWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5hcHBTZXJ2aWNlLmdldCh0aGlzLmdldEZ1bGxMaXN0QXBpKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5saW5lYXJJdGVtcyA9IGJvZHkuaW5uZXJCb2R5O1xyXG4gICAgICAgICAgICB0aGlzLmJ1aWxkVHJlZURhdGEoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10cmVlLWNvbnRhaW5lci13aWR0aCcsIHRoaXMudHJlZUNvbHVtbldpZHRoICsgJ3B4JylcclxuICAgICAgbGV0IGdyaWRUb3RhbFdpZHRoID0gMTU7IC8vIGRlZmF1bHQgcGFkZGluZ1xyXG4gICAgICB0aGlzLmNvbHVtbnMuZmlsdGVyKHggPT4gISEheC5oaWRkZW4pLm1hcChtID0+IGdyaWRUb3RhbFdpZHRoICs9IG0ud2lkdGghKTtcclxuICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1ncmlkLXRvdGFsLXdpZHRoJywgZ3JpZFRvdGFsV2lkdGggKyAncHgnKTtcclxuICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10cmVlLW5vZGUtbGV2ZWwtcGFkZGluZycsIHRoaXMudHJlZU5vZGVMZXZlbFBhZGRpbmcgKyAncHgnKTtcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSh4ID0+IHRoaXMubGFuZyA9IHgpXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHRoaXMucmVsb2FkKClcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCAvLyBvdXRlci1wdXNoXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbmZpcm1lZCQucGlwZShcclxuICAgICAgICAgIGZpbHRlcihpID0+ICEhIXRoaXMuZGlhbG9nU2VydmljZS5idXN5ICYmICEhaT8uY29uZmlybWVkICYmIGkuaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuZGlhbG9nSW5zdGFuY2VOdW1iZXIpXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnJlc2V0U2VydmljZSgpO1xyXG4gICAgICAgICAgaWYgKHRoaXMucGVuZGluZ0FjdGlvbiA9PT0gRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goIC8vIG1pZGRlbS1wdXNoXHJcbiAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QodGhpcy5jcnVkLmQhLCB7IGlkOiB0aGlzLnBlbmRpbmdDb250ZXh0LmlkIH0pLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCAvLyBpbm5lci1wdXNoXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UuZ2V0KHRoaXMuZ2V0RnVsbExpc3RBcGkpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lYXJJdGVtcyA9IGJvZHkuaW5uZXJCb2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblN1Ym1pdFN1Y2Nlc3MuZW1pdCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRUcmVlRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBidWlsZFRyZWVEYXRhKCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgY2xvbmVDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmxpbmVhckl0ZW1zKSlcclxuXHJcbiAgICBpZiAodHlwZW9mIFdvcmtlciAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgLy8gQ3JlYXRlIGEgbmV3XHJcblxyXG4gICAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKGxpbmVyX3RvX25lc3RlZF9hcnJheV9zY3JpcHQpXHJcbiAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoeyBkYXRhIH0pID0+IHtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YS5saXN0O1xyXG4gICAgICAgIHRoaXMubWF4VGllciA9IGRhdGEubWF4VGllclxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tbWF4LXRpZXInLCB0aGlzLm1heFRpZXIpKVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgbGlzdDogY2xvbmVDb3B5LFxyXG4gICAgICAgIGtleUZpZWxkOiB0aGlzLmtleUZpZWxkLFxyXG4gICAgICAgIHRpdGxlRmllbGQ6IHRoaXMudGl0bGVGaWVsZCxcclxuICAgICAgICBwYXJlbnRGaWVsZDogdGhpcy5wYXJlbnRGaWVsZCxcclxuICAgICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFdlYiB3b3JrZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnQuXHJcbiAgICAgIC8vIFlvdSBzaG91bGQgYWRkIGEgZmFsbGJhY2sgc28gdGhhdCB5b3VyIHByb2dyYW0gc3RpbGwgZXhlY3V0ZXMgY29ycmVjdGx5LlxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLnJlY3Vyc2l2ZVNlcnZpY2UubGluZXJBcnJheVRvTmVzdGVkQXJyYXkoY2xvbmVDb3B5LCB0aGlzLmtleUZpZWxkLCB0aGlzLnRpdGxlRmllbGQsIHRoaXMucGFyZW50RmllbGQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMuc3RhdHVzKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShvYmogPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBvYmoubGlzdDtcclxuICAgICAgICAgICAgdGhpcy5tYXhUaWVyID0gb2JqLm1heFRpZXJcclxuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1tYXgtdGllcicsIHRoaXMubWF4VGllcikpXHJcblxyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRXhwYW5kVG9nZ2xlckNsaWNrKGNvbnRleHQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29udGV4dC50cmVlJEV4cGFuZGVkID0gISEhY29udGV4dC50cmVlJEV4cGFuZGVkXHJcblxyXG4gICAgLy8gdXBkYXRlIHN0YXR1c1xyXG4gICAgaWYgKCEhY29udGV4dC50cmVlJEV4cGFuZGVkKSB7XHJcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuc3RhdHVzLmV4cGFuZGVkS2V5cy5maWx0ZXIoeCA9PiB4ID09PSBjb250ZXh0LnRyZWUkS2V5LnRvU3RyaW5nKCkpO1xyXG4gICAgICBpZiAoZmlsdGVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuc3RhdHVzLmV4cGFuZGVkS2V5cy5wdXNoKGNvbnRleHQudHJlZSRLZXkudG9TdHJpbmcoKSlcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5zdGF0dXMuZXhwYW5kZWRLZXlzLmZpbHRlcih4ID0+IHggIT09IGNvbnRleHQudHJlZSRLZXkudG9TdHJpbmcoKSk7XHJcbiAgICAgIHRoaXMuc3RhdHVzLmV4cGFuZGVkS2V5cyA9IGZpbHRlcjtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBvbk9iamVjdENsaWNrKGNvbnRleHQ6IGFueSwgZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgb25Sb3dDbGljayhjb250ZXh0OiBhbnksIGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgaWYgKGV2ZW50Py5kZXRhaWwgPT09IDIgJiYgIXRoaXMudHJlZUNyZWF0ZVVwZGF0ZURpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMub25Sb3dEb3VibGVDbGljay5lbWl0KGNvbnRleHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25IZWFkZXJUb29sQ2xpY2soZXZlbnQ6IElDb3JlQnV0dG9uVk5TKTogdm9pZCB7XHJcbiAgICAvLyBwcmVwYXJlIGEgYmxhbmsgcm93XHJcbiAgICBjb25zdCBibGFua1JvdzogYW55ID0ge307XHJcbiAgICB0aGlzLmNvbHVtbnMubWFwKHggPT4ge1xyXG4gICAgICBibGFua1Jvd1t4LmZpZWxkXSA9IG51bGw7XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiAhIXguY29udHJvbCkubWFwKHggPT4ge1xyXG4gICAgICBibGFua1Jvd1t4LmNvbnRyb2w/LmZpZWxkIV0gPSBudWxsO1xyXG4gICAgfSlcclxuICAgIGJsYW5rUm93WydpZCddID0gMDtcclxuICAgIGJsYW5rUm93Wyd0cmVlJEtleSddID0gMDtcclxuICAgIGJsYW5rUm93W3RoaXMudGl0bGVGaWVsZF0gPSAnJztcclxuICAgIGJsYW5rUm93Wyd0cmVlJFRpdGxlJ10gPSAnJztcclxuICAgIGJsYW5rUm93W3RoaXMua2V5RmllbGRdID0gMDtcclxuICAgIGJsYW5rUm93W3RoaXMucGFyZW50RmllbGRdID0gbnVsbDtcclxuICAgIGJsYW5rUm93Wyd0cmVlJFBhcmVudCddID0gbnVsbDtcclxuICAgIGJsYW5rUm93Wyd0cmVlJFRpZXInXSA9IDE7XHJcbiAgICBibGFua1Jvd1sndHJlZSRDaGlsZHJlbiddID0gW107XHJcblxyXG4gICAgLy8gcHVzaCB0aGUgYmxhbmtSb3cgdG8gdGhlIGN1cnJlbnQgZGF0YVxyXG4gICAgdGhpcy5kYXRhLnVuc2hpZnQoYmxhbmtSb3cpO1xyXG5cclxuICAgIHRoaXMucGVuZGluZ0NvbnRleHQgPSBibGFua1JvdztcclxuXHJcbiAgICAvLyBhY3RpdmF0ZSBlZGl0TW9kZSAoY3JlYXRlKVxyXG4gICAgdGhpcy5lZGl0TW9kZUFjdGl2YXRlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy50b29sSXRlbXMgPSBbXHJcbiAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfU0FWRSxcclxuICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DQU5DRUxcclxuICAgIF1cclxuICB9XHJcblxyXG4gIG9uVG9vbENsaWNrKGV2ZW50OiBJQ29yZUJ1dHRvblZOUywgY29udGV4dDogYW55KTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1NBVkU6XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgdGhpcy5jaGVja0Vycm9yJC5uZXh0KHRydWUpO1xyXG4gICAgICAgIGlmICghISF0aGlzLmZvcm0udmFsaWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGFwaTogYXBpO1xyXG5cclxuICAgICAgICBpZiAoISFOdW1iZXIodGhpcy5mb3JtLmdldCgnaWQnKT8udmFsdWUpKSB7XHJcbiAgICAgICAgICBhcGkgPSB0aGlzLmNydWQudSFcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYXBpID0gdGhpcy5jcnVkLmMhXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCAvLyBtaWRkZW0tcHVzaFxyXG4gICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QoYXBpLCB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCggLy8gaW5uZXItcHVzaFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UuZ2V0KHRoaXMuZ2V0RnVsbExpc3RBcGkpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmVhckl0ZW1zID0gYm9keS5pbm5lckJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRUcmVlRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRNb2RlQWN0aXZhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbEl0ZW1zID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQ1JFQVRFLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DQU5DRUw6XHJcbiAgICAgICAgdGhpcy5lZGl0TW9kZUFjdGl2YXRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMudG9vbEl0ZW1zID0gW1xyXG4gICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DUkVBVEUsXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0VESVQsXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdDb250ZXh0LmlkID09PSAwKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nQ29udGV4dC50cmVlJFBhcmVudCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdEYXRhID0gdGhpcy5kYXRhLmZpbHRlcih4ID0+IHguaWQgIT09IDApO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBuZXdEYXRhO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5wZW5kaW5nUGFyZW50Q29udGV4dC50cmVlJENoaWxkcmVuLmZpbHRlcigoY2hpbGQ6IGFueSkgPT4gY2hpbGQuaWQgIT09IHRoaXMucGVuZGluZ0NvbnRleHQuaWQpO1xyXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdQYXJlbnRDb250ZXh0LnRyZWUkQ2hpbGRyZW4gPSBmaWx0ZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NSRUFURTpcclxuICAgICAgICAvLyBwcmVwYXJlIGEgYmxhbmsgcm93XHJcbiAgICAgICAgY29uc3QgYmxhbmtSb3c6IGFueSA9IHt9O1xyXG4gICAgICAgIHRoaXMuY29sdW1ucy5tYXAoeCA9PiB7XHJcbiAgICAgICAgICBibGFua1Jvd1t4LmZpZWxkXSA9IG51bGw7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZpbHRlcih4ID0+ICEheC5jb250cm9sKS5tYXAoeCA9PiB7XHJcbiAgICAgICAgICBibGFua1Jvd1t4LmNvbnRyb2w/LmZpZWxkIV0gPSBudWxsO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgYmxhbmtSb3dbJ2lkJ10gPSAwO1xyXG4gICAgICAgIGJsYW5rUm93Wyd0cmVlJEtleSddID0gMDtcclxuICAgICAgICBibGFua1Jvd1t0aGlzLnRpdGxlRmllbGRdID0gJyc7XHJcbiAgICAgICAgYmxhbmtSb3dbJ3RyZWUkVGl0bGUnXSA9ICcnO1xyXG4gICAgICAgIGJsYW5rUm93W3RoaXMua2V5RmllbGRdID0gMDtcclxuICAgICAgICBibGFua1Jvd1t0aGlzLnBhcmVudEZpZWxkXSA9IGNvbnRleHQuaWQ7XHJcbiAgICAgICAgYmxhbmtSb3dbJ3RyZWUkUGFyZW50J10gPSBjb250ZXh0LmlkO1xyXG4gICAgICAgIGJsYW5rUm93Wyd0cmVlJFRpZXInXSA9IGNvbnRleHQudHJlZSRUaWVyICsgMTtcclxuICAgICAgICBibGFua1Jvd1sndHJlZSRDaGlsZHJlbiddID0gW107XHJcblxyXG4gICAgICAgIC8vIHB1c2ggdGhlIGJsYW5rUm93IHRvIHRoZSBjdXJyZW50IGRhdGEgYXQgdGhlIGJlZ2luaW5nXHJcbiAgICAgICAgY29udGV4dC50cmVlJENoaWxkcmVuLnVuc2hpZnQoYmxhbmtSb3cpO1xyXG5cclxuICAgICAgICAvLyBtYWtlIHN1cmUgdG8gZXhwYW5kXHJcbiAgICAgICAgY29udGV4dC50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gc2F2ZSBleHBhbmQgbW9kZSB0byBzdGF0ZVxyXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuc3RhdHVzLmV4cGFuZGVkS2V5cy5maWx0ZXIoeCA9PiB4ID09PSBjb250ZXh0LnRyZWUkS2V5LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGlmIChmaWx0ZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXR1cy5leHBhbmRlZEtleXMucHVzaChjb250ZXh0LnRyZWUkS2V5LnRvU3RyaW5nKCkpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzYXZlIHBhcmVudCBjb250ZXh0XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nUGFyZW50Q29udGV4dCA9IGNvbnRleHRcclxuXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nQ29udGV4dCA9IGJsYW5rUm93O1xyXG5cclxuICAgICAgICBjb25zdCBuZXdGb3JtRGF0YTogYW55ID0ge31cclxuICAgICAgICBuZXdGb3JtRGF0YVt0aGlzLnBhcmVudEZpZWxkXSA9IGJsYW5rUm93W3RoaXMucGFyZW50RmllbGRdXHJcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUobmV3Rm9ybURhdGEpXHJcblxyXG4gICAgICAgIC8vIGFjdGl2YXRlIGVkaXRNb2RlIChjcmVhdGUpXHJcbiAgICAgICAgdGhpcy5lZGl0TW9kZUFjdGl2YXRlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbEl0ZW1zID0gW1xyXG4gICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9TQVZFLFxyXG4gICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DQU5DRUxcclxuICAgICAgICBdXHJcblxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0VESVQ6XHJcbiAgICAgICAgdGhpcy5lZGl0TW9kZUFjdGl2YXRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nQ29udGV4dCA9IGNvbnRleHQ7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goIC8vIG1pZGRlbS1wdXNoXHJcbiAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UuZ2V0KHRoaXMuY3J1ZC5yISArIFwiP2lkPVwiICsgY29udGV4dC5pZCkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShib2R5LmlubmVyQm9keSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgdGhpcy50b29sSXRlbXMgPSBbXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1NBVkUsXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NBTkNFTFxyXG4gICAgICAgIF1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEU6XHJcbiAgICAgICAgaWYgKGNvbnRleHQudHJlZSRIYXNDaGlsZHJlbikge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRpdGxlJC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9JTkZPKVxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJvZHkkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX1RSRUVfR1JJRF9DQU5OT1RfREVMRVRFX05PREVfSEFOVklOR19DSElMRFJFTilcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q2FuY2VsT25seSQubmV4dCh0cnVlKTtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5va0J1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5ZRVMpXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2FuY2VsQnV0dG9uVGV4dCQubmV4dChFbnVtVHJhbnNsYXRlS2V5LkNBTkNFTClcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q29uZmlybURpYWxvZyQubmV4dCh0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRpdGxlJC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9DT05GSVJNQVRJT04pXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYm9keSQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfRElBTE9HX1NFUlZJQ0VfQVJFX1lPVV9TVVJFX1RPX0RFTEVURSlcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5pbmZvcm1hdGlvbkxpbmVzJC5uZXh0KFtjb250ZXh0LnRyZWUkVGl0bGVdKVxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDYW5jZWxPbmx5JC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMucGVuZGluZ0NvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9uID0gRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEU7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub2tCdXR0b25UZXh0JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuWUVTKVxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNhbmNlbEJ1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5DQU5DRUwpXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0NvbmZpcm1EaWFsb2ckLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLm1hcCh4ID0+IHg/LnVuc3Vic2NyaWJlKCkpXHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJjb3JlLXRyZWUtZ3JpZC1jb250YWluZXJcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgaGVpZ2h0OiBoZWlnaHQgKyAncHgnLFxyXG4gICAgb3ZlcmZsb3c6ICdzY3JvbGwnXHJcbn1cIj5cclxuXHJcbiAgICBAaWYgKGxvYWRpbmcpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXN1cmZhY2VcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgIDxhcHAtdGhyZWVkb3RzPjwvYXBwLXRocmVlZG90cz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWdyaWQtaGVhZGVyXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgIHdpZHRoOiB0b3RhbFdpZHRoICsgJ3B4JyxcclxuICAgICAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcclxuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgcG9zaXRpb246ICdzdGlja3knXHJcbiAgICB9XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtYmxvY2staGVhZGVyXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICB3aWR0aDogdHJlZUNvbHVtbldpZHRoICsgdHJlZU5vZGVMZXZlbFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGhlYWRlckhlaWdodCArICdweCcsXHJcbiAgICAgICAgICAgIGJvcmRlcjogaGVhZGVyQm9yZGVyU2l6ZSArICdweCBzb2xpZCB3aGl0ZScsXHJcbiAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWNlbGwtZGl2XCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWFkZXJIZWlnaHQgKyAncHgnLFxyXG4gICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnVUkuQ09SRV9UUkVFX0dSSUQuVFJFRV9CTE9DS19IRUFERVInIHwgdHJhbnNsYXRlOiBsYW5nIH19XHJcbiAgICAgICAgICAgICAgICBAaWYgKCF0cmVlQ3JlYXRlVXBkYXRlRGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgIDxjb3JlLWJ1dHRvbi1ncm91cC12bnMgW3Nob3duSXRlbXNdPVwiaGVhZGVyVG9vbEl0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2spPVwib25IZWFkZXJUb29sQ2xpY2soJGV2ZW50KVwiPjwvY29yZS1idXR0b24tZ3JvdXAtdm5zPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGhlYWRlckhlaWdodCArICdweCcsXHJcbiAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnXHJcbiAgICAgICAgfVwiPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1yb3ctb25lXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogKCEhaGVhZGVyR3JvdXBzID8gaGVhZGVySGVpZ2h0LzIgOiBoZWFkZXJIZWlnaHQpICsgJ3B4JyxcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgQGlmICghIWhlYWRlckdyb3Vwcykge1xyXG4gICAgICAgICAgICAgICAgQGZvciAoaGVhZGVyR3JvdXAgb2YgaGVhZGVyR3JvdXBzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItZ3JvdXAtY2VsbC1kaXZcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogKCEhaGVhZGVyR3JvdXBzID8gaGVhZGVySGVpZ2h0LzIgOiBoZWFkZXJIZWlnaHQpICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGhlYWRlckdyb3VwLndpZHRoICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBoZWFkZXJCb3JkZXJTaXplICsgJ3B4IHNvbGlkIHdoaXRlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGhlYWRlckdyb3VwLmtleSB8IHRyYW5zbGF0ZTogbGFuZyB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1yb3ctdHdvXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogKCEhaGVhZGVyR3JvdXBzID8gaGVhZGVySGVpZ2h0LzIgOiBoZWFkZXJIZWlnaHQpICsgJ3B4JyxcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgPGRpdiBbY2xhc3MuaGlkZGVuXT1cImNvbHVtbi5oaWRkZW5cIiBbbmdTdHlsZV09XCJcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICghIWhlYWRlckdyb3VwcyA/IGhlYWRlckhlaWdodC8yIDogaGVhZGVySGVpZ2h0KSArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBoZWFkZXJCb3JkZXJTaXplICsgJ3B4IHNvbGlkIHdoaXRlJyxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogISFjb2x1bW4ud2lkdGggPyBjb2x1bW4ud2lkdGggKyAncHgnIDogJ3Vuc2V0JyxcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICEhY29sdW1uLmFsaWduID8gY29sdW1uLmFsaWduLnRvTG93ZXJDYXNlKCkgOiAndW5zZXQnXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWNlbGwtZGl2XCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICghIWhlYWRlckdyb3VwcyA/IGhlYWRlckhlaWdodC8yIDogaGVhZGVySGVpZ2h0KSArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjb2x1bW4uY2FwdGlvbiB8IHRyYW5zbGF0ZTogbGFuZyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgI2Zyb250VHJlZUNvbnRhaW5lciBjbGFzcz1cInRyZWUtZ3JpZC1jb250ZW50IGZyb250LWNvbnRhaW5lclwiIFtjbGFzcy5lZGl0LW1vZGUtYWN0aXZhdGVkXT1cImVkaXRNb2RlQWN0aXZhdGVkXCI+XHJcbiAgICAgICAgQGZvciAocm9vdCBvZiBkYXRhOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICBAZGVmZXIob24gdmlld3BvcnQodHJlZUNvbnRhaW5lcikpIHtcclxuICAgICAgICA8dWwgY2xhc3M9XCJyb290XCIgW2NsYXNzLmNvbGxhcHNlZF09XCIhISFyb290LnRyZWUkRXhwYW5kZWRcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiB0cmVlTm9kZUxldmVsUGFkZGluZyArICdweCdcclxuICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmcm9udEl0ZW07IGNvbnRleHQ6IHsgY29udGV4dDogcm9vdCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAjdHJlZUNvbnRhaW5lciBjbGFzcz1cInRyZWUtZ3JpZC1jb250ZW50XCIgW2NsYXNzLmVkaXQtbW9kZS1hY3RpdmF0ZWRdPVwiZWRpdE1vZGVBY3RpdmF0ZWRcIj5cclxuICAgICAgICBAZm9yIChyb290IG9mIGRhdGE7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgIEBkZWZlcihvbiB2aWV3cG9ydCh0cmVlQ29udGFpbmVyKSkge1xyXG4gICAgICAgIDx1bCBjbGFzcz1cInJvb3RcIiBbY2xhc3MuY29sbGFwc2VkXT1cIiEhIXJvb3QudHJlZSRFeHBhbmRlZFwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgcGFkZGluZ0xlZnQ6ICcwcHgnXHJcbiAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbTsgY29udGV4dDogeyBjb250ZXh0OiByb290IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2l0ZW0gbGV0LWNvbnRleHQ9XCJjb250ZXh0XCIgbGV0LWlkPVwiY29udGV4dC5pZFwiIGxldC10aXRsZT1cImNvbnRleHQudHJlZSRUaXRsZVwiXHJcbiAgICAgICAgbGV0LWhpZ2hsaWdodGVkPVwiY29udGV4dC50cmVlJEhpZ2hsaWdodGVkXCIgbGV0LWhhc0NoaWxkcmVuPVwiY29udGV4dC50cmVlJEhhc0NoaWxkcmVuXCJcclxuICAgICAgICBsZXQtY2hpbGRyZW49XCJjb250ZXh0LnRyZWUkQ2hpbGRyZW5cIiBsZXQtZXhwYW5kZWQ9XCJjb250ZXh0LnRyZWUkRXhwYW5kZWRcIiBsZXQtYWN0aXZlPVwiY29udGV4dC50cmVlJEFjdGl2ZVwiXHJcbiAgICAgICAgbGV0LWNoZWNrZWQ9XCJjb250ZXh0LnRyZWUkQ2hlY2tlZFwiIGxldC10aWVyPVwiY29udGV4dC50cmVlJFRpZXJcIj5cclxuXHJcbiAgICAgICAgPGxpIFtjbGFzcy5oYXMtY2hpbGRyZW5dPVwiISFoYXNDaGlsZHJlblwiIFtjbGFzcy5jb2xsYXBzZWRdPVwiISFoYXNDaGlsZHJlbiAmJiAhISFleHBhbmRlZFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKGNvbnRleHQsICRldmVudClcIj5cclxuICAgICAgICAgICAgPHNwYW4gW2NsYXNzLnNwYW4tZWRpdC1tb2RlLWFjdGl2YXRlZF09XCIhIWVkaXRNb2RlQWN0aXZhdGVkICYmIHBlbmRpbmdDb250ZXh0LmlkPT09aWRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtaXRlbS1kaXZcIiBbYXR0ci5kYXRhLXRpZXJdPVwidGllclwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcwcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWdyaWQtcm93LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1ncmlkLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCEoISFlZGl0TW9kZUFjdGl2YXRlZCAmJiBwZW5kaW5nQ29udGV4dD8uaWQ9PT1pZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1ncmlkLWNlbGxcIiBbY2xhc3MuaGlkZGVuXT1cImNvbHVtbi5oaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsLWRpdlwiIFtuZ1N0eWxlXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogISFjb2x1bW4ud2lkdGggPyBjb2x1bW4ud2lkdGggKyAncHgnIDogJ3Vuc2V0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogISFjb2x1bW4uYWxpZ24gPyBjb2x1bW4uYWxpZ24udG9Mb3dlckNhc2UoKSA6ICd1bnNldCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICEhY29sdW1uLnRyYW5zbGF0ZSA/IChjb250ZXh0W2NvbHVtbi5maWVsZF0gfCB0cmFuc2xhdGU6IGxhbmcgfCB0YWJsZUNlbGw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLnBpcGUgOiBsYW5nKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dFtjb2x1bW4uZmllbGRdIHwgdGFibGVDZWxsOiBjb2x1bW4ucGlwZSA6IGxhbmd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoISFlZGl0TW9kZUFjdGl2YXRlZCAmJiBwZW5kaW5nQ29udGV4dD8uaWQ9PT1pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtZ3JpZC1jZWxsXCIgW2NsYXNzLmhpZGRlbl09XCJjb2x1bW4uaGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNlbGwtZGl2XCIgW25nU3R5bGVdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAhIWNvbHVtbi53aWR0aCA/IGNvbHVtbi53aWR0aCArICdweCcgOiAndW5zZXQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ3RhYmxlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93WTogJ3Zpc2libGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAhIWNvbHVtbi5hbGlnbiA/IGNvbHVtbi5hbGlnbi50b0xvd2VyQ2FzZSgpIDogJ3Vuc2V0J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWNvbHVtbi5jb250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAhIWNvbHVtbi50cmFuc2xhdGUgPyAoY29udGV4dFtjb2x1bW4uZmllbGRdIHwgdHJhbnNsYXRlOiBsYW5nIHwgdGFibGVDZWxsOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLnBpcGUgOiBsYW5nKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0W2NvbHVtbi5maWVsZF0gfCB0YWJsZUNlbGw6IGNvbHVtbi5waXBlIDogbGFuZ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb3JlLWNvbnRyb2wgW2Zvcm1dPVwiZm9ybVwiIFtjb250cm9sXT1cImNvbHVtbi5jb250cm9sIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrRXJyb3IkXT1cImNoZWNrRXJyb3IkXCI+PC9jb3JlLWNvbnRyb2w+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICBAaWYgKCEhZXhwYW5kZWQgJiYgISFjaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgPHVsIFtjbGFzcy5jb2xsYXBzZWRdPVwiIWV4cGFuZGVkXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6ICcwcHgnXHJcbiAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGNoaWxkIG9mIGNoaWxkcmVuOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW07IGNvbnRleHQ6IHsgY29udGV4dDogY2hpbGQgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICNmcm9udEl0ZW0gbGV0LWNvbnRleHQ9XCJjb250ZXh0XCIgbGV0LWlkPVwiY29udGV4dC5pZFwiIGxldC10aXRsZT1cImNvbnRleHQudHJlZSRUaXRsZVwiXHJcbiAgICAgICAgbGV0LWhpZ2hsaWdodGVkPVwiY29udGV4dC50cmVlJEhpZ2hsaWdodGVkXCIgbGV0LWhhc0NoaWxkcmVuPVwiY29udGV4dC50cmVlJEhhc0NoaWxkcmVuXCJcclxuICAgICAgICBsZXQtY2hpbGRyZW49XCJjb250ZXh0LnRyZWUkQ2hpbGRyZW5cIiBsZXQtZXhwYW5kZWQ9XCJjb250ZXh0LnRyZWUkRXhwYW5kZWRcIiBsZXQtYWN0aXZlPVwiY29udGV4dC50cmVlJEFjdGl2ZVwiXHJcbiAgICAgICAgbGV0LWNoZWNrZWQ9XCJjb250ZXh0LnRyZWUkQ2hlY2tlZFwiIGxldC10aWVyPVwiY29udGV4dC50cmVlJFRpZXJcIj5cclxuXHJcbiAgICAgICAgPGxpIFtjbGFzcy5oYXMtY2hpbGRyZW5dPVwiISFoYXNDaGlsZHJlblwiIFtjbGFzcy5jb2xsYXBzZWRdPVwiISFoYXNDaGlsZHJlbiAmJiAhISFleHBhbmRlZFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKGNvbnRleHQsICRldmVudClcIj5cclxuICAgICAgICAgICAgPHNwYW4gW2NsYXNzLnNwYW4tZWRpdC1tb2RlLWFjdGl2YXRlZF09XCIhIWVkaXRNb2RlQWN0aXZhdGVkICYmIHBlbmRpbmdDb250ZXh0LmlkPT09aWRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtaXRlbS1kaXZcIiBbYXR0ci5kYXRhLXRpZXJdPVwidGllclwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogdHJlZUNvbHVtbldpZHRoIC0gdGllciAqIHRyZWVOb2RlTGV2ZWxQYWRkaW5nICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIXRyZWVDcmVhdGVVcGRhdGVEaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1pdGVtLXRvb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWl0ZW0tdG9vbC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvcmUtYnV0dG9uLWdyb3VwLXZucyBbc2hvd25JdGVtc109XCJ0b29sSXRlbXNcIiBbc2hvd0NhcHRpb25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2spPVwib25Ub29sQ2xpY2soJGV2ZW50LCBjb250ZXh0KVwiPjwvY29yZS1idXR0b24tZ3JvdXAtdm5zPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCEhY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZXhwYW5kLXRvZ2dsZXIgZmVhdGhlci1jaGV2cm9uLWRvd25cIiAoY2xpY2spPVwib25FeHBhbmRUb2dnbGVyQ2xpY2soY29udGV4dClcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9iamVjdCAoY2xpY2spPVwib25PYmplY3RDbGljayhjb250ZXh0LCAkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0aXRsZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L29iamVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICBAaWYgKCEhZXhwYW5kZWQgJiYgISFjaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgPHVsIFtjbGFzcy5jb2xsYXBzZWRdPVwiIWV4cGFuZGVkXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICBwYWRkaW5nTGVmdDogdHJlZU5vZGVMZXZlbFBhZGRpbmcgKyAncHgnXHJcbiAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgQGZvciAoY2hpbGQgb2YgY2hpbGRyZW47IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZnJvbnRJdGVtOyBjb250ZXh0OiB7IGNvbnRleHQ6IGNoaWxkIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIDwvbGk+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuPC9kaXY+Il19
|
|
405
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS10cmVlLWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtdHJlZS1ncmlkL2NvcmUtdHJlZS1ncmlkL2NvcmUtdHJlZS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXRyZWUtZ3JpZC9jb3JlLXRyZWUtZ3JpZC9jb3JlLXRyZWUtZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhJLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBUTdHLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc3RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQztBQUVoSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRCxPQUFPLEVBQWEsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzlGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG1GQUFtRixD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RUFBRSxJQUFJLEVBQUU7Z0JBQ0UsWUFBWTtzQkFBdEMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2hCLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBTUcsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFFRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBRWlCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGFwaSB9IGZyb20gXCJhbHBoYS1nbG9iYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLWZvcm0tY29udHJvbC1iYXNlL2NvcmUtZm9ybS1jb250cm9sLWJhc2UuY29tcG9uZW50JztcclxuXHJcbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcHAuc2VydmljZSc7XHJcbmltcG9ydCB7IElFdmVyeVRyZWVTdGF0dXMsIFJlY3Vyc2l2ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWN1cnNpdmUuc2VydmljZSc7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVDb250cm9sU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUtZm9ybS9jb3JlLWNvbnRyb2wuc2VydmljZSc7XHJcblxyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZmlsdGVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IElGb3JtYXRlZFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9JRm9ybWF0ZWRSZXNwb25zZSc7XHJcblxyXG5pbXBvcnQgeyBsaW5lcl90b19uZXN0ZWRfYXJyYXlfc2NyaXB0IH0gZnJvbSAnLi4vLi4vLi4vLi4vYXNzZXRzL2pzL3Jlc2N1c2l2ZV93ayc7XHJcbmltcG9ydCB7IEVudW1Db3JlQnV0dG9uVk5TQ29kZSB9IGZyb20gJy4uLy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvRW51bUNvcmVCdXR0b25WTlNDb2RlJztcclxuaW1wb3J0IHsgSUNvcmVCdXR0b25WTlMgfSBmcm9tICcuLi8uLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zL0lDb3JlQnV0dG9uVk5TJztcclxuaW1wb3J0IHsgRW51bVRyYW5zbGF0ZUtleSB9IGZyb20gXCJhbHBoYS1nbG9iYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IElDb3JlVHJlZUdyaWRDb2x1bW5JdGVtIH0gZnJvbSAnLi4vY29yZS10cmVlLWdyaWQtaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSUNvcmVQYWdlRWRpdENSVUQgfSBmcm9tICcuLi8uLi9jb3JlLXBhZ2UtZWRpdC9JQ29yZVBhZ2VFZGl0Q1JVRCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9hcHAtcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xyXG5pbXBvcnQgeyBDb3JlQ29udHJvbENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtY29udHJvbC9jb3JlLWNvbnRyb2wvY29yZS1jb250cm9sLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVCdXR0b25Hcm91cFZuc0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRocmVlZG90c0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RocmVlZG90cy90aHJlZWRvdHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFibGVDZWxsUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3RhYmxlLWNlbGwucGlwZSc7XHJcbmltcG9ydCB7IENvcmVUYWJsZVNlcnZpY2UsIElDb3JlQ29sdW1uc0hlYWRlckdyb3VwVHJhbnNmb3JtZWQsIElIZWFkZXJHcm91cEl0ZW0gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb3JlLXRhYmxlLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLXRyZWUtZ3JpZCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgQ29yZUNvbnRyb2xDb21wb25lbnQsXHJcbiAgICBUcmFuc2xhdGVQaXBlLFxyXG4gICAgVGFibGVDZWxsUGlwZSxcclxuICAgIENvcmVCdXR0b25Hcm91cFZuc0NvbXBvbmVudCxcclxuICAgIFRocmVlZG90c0NvbXBvbmVudCxcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3JlLXRyZWUtZ3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29yZS10cmVlLWdyaWQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29yZVRyZWVHcmlkQ29tcG9uZW50IGV4dGVuZHMgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgaGVpZ2h0ITogbnVtYmVyO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGNvbHVtbnMhOiBJQ29yZVRyZWVHcmlkQ29sdW1uSXRlbVtdO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGtleUZpZWxkITogc3RyaW5nO1xyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHRpdGxlRmllbGQhOiBzdHJpbmc7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcGFyZW50RmllbGQhOiBzdHJpbmc7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgaGVhZGVySGVpZ2h0ITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGhlYWRlckNlbGxQYWRkaW5nOiBudW1iZXIgPSA1O1xyXG4gIEBJbnB1dCgpIGhlYWRlckJvcmRlclNpemU6IG51bWJlciA9IDE7XHJcbiAgQElucHV0KCkgdHJlZUNvbHVtbldpZHRoOiBudW1iZXIgPSAzMDA7XHJcbiAgQElucHV0KCkgdHJlZU5vZGVMZXZlbFBhZGRpbmc6IG51bWJlciA9IDE1O1xyXG5cclxuICAvLyBXZSBoYXZlIDIgY2FzZXMgb2YgZGF0YSBiaW5kaW5nOlxyXG5cclxuICAvLyAxOiBkaXNhYmxlVHJlZUNyZWF0ZVVwZGF0ZSA9IHVuZGVmaW5lZCAmJiBnZXRGdWxsTGlzdEFwaSAhPT0gdW5kZWZpbmVkICYmIGNydWQgIT09IHVuZGVmaW5lZFxyXG4gIC8vIFRoaXMgY2FzZSBpcyBmb3IgY3JlYXRlL3VwZGF0ZSB0cmVlIGl0c2VsZlxyXG4gIEBJbnB1dCgpIGdldEZ1bGxMaXN0QXBpITogYXBpO1xyXG4gIEBJbnB1dCgpIGNydWQhOiBJQ29yZVBhZ2VFZGl0Q1JVRDtcclxuICBASW5wdXQoKSBkaXNhYmxlVHJlZUNyZWF0ZVVwZGF0ZSE6IGJvb2xlYW47XHJcblxyXG4gIC8vIDE6IGRpc2FibGVUcmVlQ3JlYXRlVXBkYXRlID0gdHJ1ZSAmJiBnZXRGdWxsTGlzdEFwaSA9PT0gdW5kZWZpbmVkICYmIGNydWQgPT09IHVuZGVmaW5lZFxyXG4gIC8vIFRoaXMgY2FzZSBpcyBmb3IgdmlldyBvbmx5LCBhbmQgdXNpbmcgZXh0ZXJuYW50IGRhdGEsIGFuZCB0aGlzLmRhdGEgbXVzdCBiZWNvbWUgQElucHV0KClcclxuICBASW5wdXQoKSBkYXRhOiBhbnlbXSA9IFtdO1xyXG4gIFxyXG4gIEBJbnB1dCgpIGRpc2FibGVEb3VibGVDbGljayE6IGJvb2xlYW47XHJcblxyXG4gIEBPdXRwdXQoKSBvblJvd0RvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpXHJcbiAgQE91dHB1dCgpIG9uU3VibWl0U3VjY2VzcyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxyXG5cclxuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG5cclxuICBsYW5nITogc3RyaW5nO1xyXG5cclxuICBoZWFkZXJHcm91cHMhOiBJSGVhZGVyR3JvdXBJdGVtW10gfCB1bmRlZmluZWQ7XHJcblxyXG4gIGRpYWxvZ0luc3RhbmNlTnVtYmVyITogbnVtYmVyO1xyXG4gIHRvdGFsV2lkdGg6IG51bWJlciA9IDUwMDtcclxuXHJcbiAgbG9hZGluZyE6IGJvb2xlYW47XHJcbiAgbGluZWFySXRlbXMhOiBhbnlbXTtcclxuICBtYXhUaWVyITogbnVtYmVyO1xyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgcGVuZGluZ1BhcmVudENvbnRleHQ6IGFueTtcclxuICBwZW5kaW5nQ29udGV4dDogYW55O1xyXG4gIHBlbmRpbmdBY3Rpb24hOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGU7XHJcblxyXG4gIGVkaXRNb2RlQWN0aXZhdGVkITogYm9vbGVhbjtcclxuICBjaGVja0Vycm9yJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBmb3JtITogRm9ybUdyb3VwO1xyXG4gIHRyYW5zZm9ybWVkITogSUNvcmVDb2x1bW5zSGVhZGVyR3JvdXBUcmFuc2Zvcm1lZDtcclxuXHJcbiAgc3RhdHVzOiBJRXZlcnlUcmVlU3RhdHVzID0ge1xyXG4gICAgc2VsZWN0ZWRLZXk6IHVuZGVmaW5lZCxcclxuICAgIGFjdGl2ZUtleXM6IFtdLFxyXG4gICAgZXhwYW5kZWRLZXlzOiBbXSxcclxuICB9O1xyXG5cclxuICB0b29sSXRlbXM6IEVudW1Db3JlQnV0dG9uVk5TQ29kZVtdID0gW1xyXG4gICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DUkVBVEUsXHJcbiAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0VESVQsXHJcbiAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURVxyXG4gIF1cclxuXHJcbiAgaGVhZGVyVG9vbEl0ZW1zOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGVbXSA9IFtcclxuICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQ1JFQVRFLFxyXG4gIF1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFwcFNlcnZpY2U6IEFwcFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlY3Vyc2l2ZVNlcnZpY2U6IFJlY3Vyc2l2ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvcmVDb250cm9sU2VydmljZTogQ29yZUNvbnRyb2xTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlVGFibGVTZXJ2aWNlOiBDb3JlVGFibGVTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgc3VwZXIoKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmNvcmVDb250cm9sU2VydmljZS50b0NvcmVUcmVlR3JpZEluUm93Rm9ybUdyb3VwKHRoaXMuY29sdW1ucylcclxuICAgIGxldCBuZXdUb3RhbFdpZHRoID0gdGhpcy50cmVlQ29sdW1uV2lkdGg7XHJcbiAgICB0aGlzLmNvbHVtbnMubWFwKHggPT4gbmV3VG90YWxXaWR0aCArPSB4LndpZHRoISk7XHJcbiAgICB0aGlzLnRvdGFsV2lkdGggPSBuZXdUb3RhbFdpZHRoO1xyXG5cclxuICAgIHRoaXMudHJhbnNmb3JtZWQgPSB0aGlzLmNvcmVUYWJsZVNlcnZpY2UudHJhbnNmb3JtV2l0aEhlYWRlckdyb3VwKHRoaXMuY29sdW1ucyk7XHJcbiAgICBpZiAodGhpcy50cmFuc2Zvcm1lZC5pc1ZhbGlkKSB7XHJcbiAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMudHJhbnNmb3JtZWQuY29sdW1ucztcclxuICAgICAgdGhpcy5oZWFkZXJHcm91cHMgPSB0aGlzLnRyYW5zZm9ybWVkLmhlYWRlckdyb3VwcztcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbG9hZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmFwcFNlcnZpY2UuZ2V0KHRoaXMuZ2V0RnVsbExpc3RBcGkpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVhckl0ZW1zID0gYm9keS5pbm5lckJvZHk7XHJcbiAgICAgICAgICAgIHRoaXMuYnVpbGRUcmVlRGF0YSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIClcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRyZWUtY29udGFpbmVyLXdpZHRoJywgdGhpcy50cmVlQ29sdW1uV2lkdGggKyAncHgnKVxyXG4gICAgICBsZXQgZ3JpZFRvdGFsV2lkdGggPSAwO1xyXG4gICAgICB0aGlzLmNvbHVtbnMuZmlsdGVyKHggPT4gISEheC5oaWRkZW4pLm1hcChtID0+IGdyaWRUb3RhbFdpZHRoICs9IG0ud2lkdGghKTtcclxuICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1ncmlkLXRvdGFsLXdpZHRoJywgZ3JpZFRvdGFsV2lkdGggKyAncHgnKTtcclxuICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10cmVlLW5vZGUtbGV2ZWwtcGFkZGluZycsIHRoaXMudHJlZU5vZGVMZXZlbFBhZGRpbmcgKyAncHgnKTtcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSh4ID0+IHRoaXMubGFuZyA9IHgpXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHRoaXMucmVsb2FkKClcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCAvLyBvdXRlci1wdXNoXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbmZpcm1lZCQucGlwZShcclxuICAgICAgICAgIGZpbHRlcihpID0+ICEhIXRoaXMuZGlhbG9nU2VydmljZS5idXN5ICYmICEhaT8uY29uZmlybWVkICYmIGkuaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuZGlhbG9nSW5zdGFuY2VOdW1iZXIpXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnJlc2V0U2VydmljZSgpO1xyXG4gICAgICAgICAgaWYgKHRoaXMucGVuZGluZ0FjdGlvbiA9PT0gRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goIC8vIG1pZGRlbS1wdXNoXHJcbiAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QodGhpcy5jcnVkLmQhLCB7IGlkOiB0aGlzLnBlbmRpbmdDb250ZXh0LmlkIH0pLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCAvLyBpbm5lci1wdXNoXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UuZ2V0KHRoaXMuZ2V0RnVsbExpc3RBcGkpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lYXJJdGVtcyA9IGJvZHkuaW5uZXJCb2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblN1Ym1pdFN1Y2Nlc3MuZW1pdCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRUcmVlRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBidWlsZFRyZWVEYXRhKCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgY2xvbmVDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmxpbmVhckl0ZW1zKSlcclxuXHJcbiAgICBpZiAodHlwZW9mIFdvcmtlciAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgLy8gQ3JlYXRlIGEgbmV3XHJcblxyXG4gICAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKGxpbmVyX3RvX25lc3RlZF9hcnJheV9zY3JpcHQpXHJcbiAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoeyBkYXRhIH0pID0+IHtcclxuXHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YS5saXN0O1xyXG4gICAgICAgIHRoaXMubWF4VGllciA9IGRhdGEubWF4VGllclxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tbWF4LXRpZXInLCB0aGlzLm1heFRpZXIpKVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgbGlzdDogY2xvbmVDb3B5LFxyXG4gICAgICAgIGtleUZpZWxkOiB0aGlzLmtleUZpZWxkLFxyXG4gICAgICAgIHRpdGxlRmllbGQ6IHRoaXMudGl0bGVGaWVsZCxcclxuICAgICAgICBwYXJlbnRGaWVsZDogdGhpcy5wYXJlbnRGaWVsZCxcclxuICAgICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFdlYiB3b3JrZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnQuXHJcbiAgICAgIC8vIFlvdSBzaG91bGQgYWRkIGEgZmFsbGJhY2sgc28gdGhhdCB5b3VyIHByb2dyYW0gc3RpbGwgZXhlY3V0ZXMgY29ycmVjdGx5LlxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLnJlY3Vyc2l2ZVNlcnZpY2UubGluZXJBcnJheVRvTmVzdGVkQXJyYXkoY2xvbmVDb3B5LCB0aGlzLmtleUZpZWxkLCB0aGlzLnRpdGxlRmllbGQsIHRoaXMucGFyZW50RmllbGQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMuc3RhdHVzKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShvYmogPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBvYmoubGlzdDtcclxuICAgICAgICAgICAgdGhpcy5tYXhUaWVyID0gb2JqLm1heFRpZXJcclxuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1tYXgtdGllcicsIHRoaXMubWF4VGllcikpXHJcblxyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRXhwYW5kVG9nZ2xlckNsaWNrKGNvbnRleHQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29udGV4dC50cmVlJEV4cGFuZGVkID0gISEhY29udGV4dC50cmVlJEV4cGFuZGVkXHJcblxyXG4gICAgLy8gdXBkYXRlIHN0YXR1c1xyXG4gICAgaWYgKCEhY29udGV4dC50cmVlJEV4cGFuZGVkKSB7XHJcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuc3RhdHVzLmV4cGFuZGVkS2V5cy5maWx0ZXIoeCA9PiB4ID09PSBjb250ZXh0LnRyZWUkS2V5LnRvU3RyaW5nKCkpO1xyXG4gICAgICBpZiAoZmlsdGVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuc3RhdHVzLmV4cGFuZGVkS2V5cy5wdXNoKGNvbnRleHQudHJlZSRLZXkudG9TdHJpbmcoKSlcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5zdGF0dXMuZXhwYW5kZWRLZXlzLmZpbHRlcih4ID0+IHggIT09IGNvbnRleHQudHJlZSRLZXkudG9TdHJpbmcoKSk7XHJcbiAgICAgIHRoaXMuc3RhdHVzLmV4cGFuZGVkS2V5cyA9IGZpbHRlcjtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBvbk9iamVjdENsaWNrKGNvbnRleHQ6IGFueSwgZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgb25Sb3dDbGljayhjb250ZXh0OiBhbnksIGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgaWYgKGV2ZW50Py5kZXRhaWwgPT09IDIgJiYgIXRoaXMuZGlzYWJsZURvdWJsZUNsaWNrKSB7XHJcbiAgICAgIHRoaXMub25Sb3dEb3VibGVDbGljay5lbWl0KGNvbnRleHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25IZWFkZXJUb29sQ2xpY2soZXZlbnQ6IElDb3JlQnV0dG9uVk5TKTogdm9pZCB7XHJcbiAgICAvLyBwcmVwYXJlIGEgYmxhbmsgcm93XHJcbiAgICBjb25zdCBibGFua1JvdzogYW55ID0ge307XHJcbiAgICB0aGlzLmNvbHVtbnMubWFwKHggPT4ge1xyXG4gICAgICBibGFua1Jvd1t4LmZpZWxkXSA9IG51bGw7XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiAhIXguY29udHJvbCkubWFwKHggPT4ge1xyXG4gICAgICBibGFua1Jvd1t4LmNvbnRyb2w/LmZpZWxkIV0gPSBudWxsO1xyXG4gICAgfSlcclxuICAgIGJsYW5rUm93WydpZCddID0gMDtcclxuICAgIGJsYW5rUm93Wyd0cmVlJEtleSddID0gMDtcclxuICAgIGJsYW5rUm93W3RoaXMudGl0bGVGaWVsZF0gPSAnJztcclxuICAgIGJsYW5rUm93Wyd0cmVlJFRpdGxlJ10gPSAnJztcclxuICAgIGJsYW5rUm93W3RoaXMua2V5RmllbGRdID0gMDtcclxuICAgIGJsYW5rUm93W3RoaXMucGFyZW50RmllbGRdID0gbnVsbDtcclxuICAgIGJsYW5rUm93Wyd0cmVlJFBhcmVudCddID0gbnVsbDtcclxuICAgIGJsYW5rUm93Wyd0cmVlJFRpZXInXSA9IDE7XHJcbiAgICBibGFua1Jvd1sndHJlZSRDaGlsZHJlbiddID0gW107XHJcblxyXG4gICAgLy8gcHVzaCB0aGUgYmxhbmtSb3cgdG8gdGhlIGN1cnJlbnQgZGF0YVxyXG4gICAgdGhpcy5kYXRhLnVuc2hpZnQoYmxhbmtSb3cpO1xyXG5cclxuICAgIHRoaXMucGVuZGluZ0NvbnRleHQgPSBibGFua1JvdztcclxuXHJcbiAgICAvLyBhY3RpdmF0ZSBlZGl0TW9kZSAoY3JlYXRlKVxyXG4gICAgdGhpcy5lZGl0TW9kZUFjdGl2YXRlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy50b29sSXRlbXMgPSBbXHJcbiAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfU0FWRSxcclxuICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DQU5DRUxcclxuICAgIF1cclxuICB9XHJcblxyXG4gIG9uVG9vbENsaWNrKGV2ZW50OiBJQ29yZUJ1dHRvblZOUywgY29udGV4dDogYW55KTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1NBVkU6XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgdGhpcy5jaGVja0Vycm9yJC5uZXh0KHRydWUpO1xyXG4gICAgICAgIGlmICghISF0aGlzLmZvcm0udmFsaWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGFwaTogYXBpO1xyXG5cclxuICAgICAgICBpZiAoISFOdW1iZXIodGhpcy5mb3JtLmdldCgnaWQnKT8udmFsdWUpKSB7XHJcbiAgICAgICAgICBhcGkgPSB0aGlzLmNydWQudSFcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYXBpID0gdGhpcy5jcnVkLmMhXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCAvLyBtaWRkZW0tcHVzaFxyXG4gICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QoYXBpLCB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCggLy8gaW5uZXItcHVzaFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UuZ2V0KHRoaXMuZ2V0RnVsbExpc3RBcGkpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmVhckl0ZW1zID0gYm9keS5pbm5lckJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRUcmVlRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRNb2RlQWN0aXZhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbEl0ZW1zID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQ1JFQVRFLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DQU5DRUw6XHJcbiAgICAgICAgdGhpcy5lZGl0TW9kZUFjdGl2YXRlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMudG9vbEl0ZW1zID0gW1xyXG4gICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DUkVBVEUsXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0VESVQsXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBlbmRpbmdDb250ZXh0LmlkID09PSAwKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nQ29udGV4dC50cmVlJFBhcmVudCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdEYXRhID0gdGhpcy5kYXRhLmZpbHRlcih4ID0+IHguaWQgIT09IDApO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBuZXdEYXRhO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5wZW5kaW5nUGFyZW50Q29udGV4dC50cmVlJENoaWxkcmVuLmZpbHRlcigoY2hpbGQ6IGFueSkgPT4gY2hpbGQuaWQgIT09IHRoaXMucGVuZGluZ0NvbnRleHQuaWQpO1xyXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdQYXJlbnRDb250ZXh0LnRyZWUkQ2hpbGRyZW4gPSBmaWx0ZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NSRUFURTpcclxuICAgICAgICAvLyBwcmVwYXJlIGEgYmxhbmsgcm93XHJcbiAgICAgICAgY29uc3QgYmxhbmtSb3c6IGFueSA9IHt9O1xyXG4gICAgICAgIHRoaXMuY29sdW1ucy5tYXAoeCA9PiB7XHJcbiAgICAgICAgICBibGFua1Jvd1t4LmZpZWxkXSA9IG51bGw7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLmZpbHRlcih4ID0+ICEheC5jb250cm9sKS5tYXAoeCA9PiB7XHJcbiAgICAgICAgICBibGFua1Jvd1t4LmNvbnRyb2w/LmZpZWxkIV0gPSBudWxsO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgYmxhbmtSb3dbJ2lkJ10gPSAwO1xyXG4gICAgICAgIGJsYW5rUm93Wyd0cmVlJEtleSddID0gMDtcclxuICAgICAgICBibGFua1Jvd1t0aGlzLnRpdGxlRmllbGRdID0gJyc7XHJcbiAgICAgICAgYmxhbmtSb3dbJ3RyZWUkVGl0bGUnXSA9ICcnO1xyXG4gICAgICAgIGJsYW5rUm93W3RoaXMua2V5RmllbGRdID0gMDtcclxuICAgICAgICBibGFua1Jvd1t0aGlzLnBhcmVudEZpZWxkXSA9IGNvbnRleHQuaWQ7XHJcbiAgICAgICAgYmxhbmtSb3dbJ3RyZWUkUGFyZW50J10gPSBjb250ZXh0LmlkO1xyXG4gICAgICAgIGJsYW5rUm93Wyd0cmVlJFRpZXInXSA9IGNvbnRleHQudHJlZSRUaWVyICsgMTtcclxuICAgICAgICBibGFua1Jvd1sndHJlZSRDaGlsZHJlbiddID0gW107XHJcblxyXG4gICAgICAgIC8vIHB1c2ggdGhlIGJsYW5rUm93IHRvIHRoZSBjdXJyZW50IGRhdGEgYXQgdGhlIGJlZ2luaW5nXHJcbiAgICAgICAgY29udGV4dC50cmVlJENoaWxkcmVuLnVuc2hpZnQoYmxhbmtSb3cpO1xyXG5cclxuICAgICAgICAvLyBtYWtlIHN1cmUgdG8gZXhwYW5kXHJcbiAgICAgICAgY29udGV4dC50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gc2F2ZSBleHBhbmQgbW9kZSB0byBzdGF0ZVxyXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuc3RhdHVzLmV4cGFuZGVkS2V5cy5maWx0ZXIoeCA9PiB4ID09PSBjb250ZXh0LnRyZWUkS2V5LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGlmIChmaWx0ZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXR1cy5leHBhbmRlZEtleXMucHVzaChjb250ZXh0LnRyZWUkS2V5LnRvU3RyaW5nKCkpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzYXZlIHBhcmVudCBjb250ZXh0XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nUGFyZW50Q29udGV4dCA9IGNvbnRleHRcclxuXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nQ29udGV4dCA9IGJsYW5rUm93O1xyXG5cclxuICAgICAgICBjb25zdCBuZXdGb3JtRGF0YTogYW55ID0ge31cclxuICAgICAgICBuZXdGb3JtRGF0YVt0aGlzLnBhcmVudEZpZWxkXSA9IGJsYW5rUm93W3RoaXMucGFyZW50RmllbGRdXHJcbiAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUobmV3Rm9ybURhdGEpXHJcblxyXG4gICAgICAgIC8vIGFjdGl2YXRlIGVkaXRNb2RlIChjcmVhdGUpXHJcbiAgICAgICAgdGhpcy5lZGl0TW9kZUFjdGl2YXRlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMudG9vbEl0ZW1zID0gW1xyXG4gICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9TQVZFLFxyXG4gICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DQU5DRUxcclxuICAgICAgICBdXHJcblxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0VESVQ6XHJcbiAgICAgICAgdGhpcy5lZGl0TW9kZUFjdGl2YXRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nQ29udGV4dCA9IGNvbnRleHQ7XHJcblxyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goIC8vIG1pZGRlbS1wdXNoXHJcbiAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UuZ2V0KHRoaXMuY3J1ZC5yISArIFwiP2lkPVwiICsgY29udGV4dC5pZCkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShib2R5LmlubmVyQm9keSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgdGhpcy50b29sSXRlbXMgPSBbXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1NBVkUsXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NBTkNFTFxyXG4gICAgICAgIF1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEU6XHJcbiAgICAgICAgaWYgKGNvbnRleHQudHJlZSRIYXNDaGlsZHJlbikge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRpdGxlJC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9JTkZPKVxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJvZHkkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX1RSRUVfR1JJRF9DQU5OT1RfREVMRVRFX05PREVfSEFOVklOR19DSElMRFJFTilcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q2FuY2VsT25seSQubmV4dCh0cnVlKTtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5va0J1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5ZRVMpXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2FuY2VsQnV0dG9uVGV4dCQubmV4dChFbnVtVHJhbnNsYXRlS2V5LkNBTkNFTClcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q29uZmlybURpYWxvZyQubmV4dCh0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRpdGxlJC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9DT05GSVJNQVRJT04pXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYm9keSQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfRElBTE9HX1NFUlZJQ0VfQVJFX1lPVV9TVVJFX1RPX0RFTEVURSlcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5pbmZvcm1hdGlvbkxpbmVzJC5uZXh0KFtjb250ZXh0LnRyZWUkVGl0bGVdKVxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDYW5jZWxPbmx5JC5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMucGVuZGluZ0NvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9uID0gRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEU7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub2tCdXR0b25UZXh0JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuWUVTKVxyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNhbmNlbEJ1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5DQU5DRUwpXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0NvbmZpcm1EaWFsb2ckLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLm1hcCh4ID0+IHg/LnVuc3Vic2NyaWJlKCkpXHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJjb3JlLXRyZWUtZ3JpZC1jb250YWluZXJcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgaGVpZ2h0OiBoZWlnaHQgKyAncHgnLFxyXG4gICAgb3ZlcmZsb3c6ICdzY3JvbGwnXHJcbn1cIj5cclxuXHJcbiAgICBAaWYgKGxvYWRpbmcpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXN1cmZhY2VcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgIDxhcHAtdGhyZWVkb3RzPjwvYXBwLXRocmVlZG90cz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWdyaWQtaGVhZGVyXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgIHdpZHRoOiB0b3RhbFdpZHRoICsgJ3B4JyxcclxuICAgICAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcclxuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgcG9zaXRpb246ICdzdGlja3knXHJcbiAgICB9XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtYmxvY2staGVhZGVyXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICB3aWR0aDogdHJlZUNvbHVtbldpZHRoICsgJ3B4JyxcclxuICAgICAgICAgICAgaGVpZ2h0OiBoZWFkZXJIZWlnaHQgKyAncHgnLFxyXG4gICAgICAgICAgICBib3JkZXI6IGhlYWRlckJvcmRlclNpemUgKyAncHggc29saWQgd2hpdGUnLFxyXG4gICAgICAgIH1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1jZWxsLWRpdlwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgIGhlaWdodDogaGVhZGVySGVpZ2h0ICsgJ3B4JyxcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAge3sgJ1VJLkNPUkVfVFJFRV9HUklELlRSRUVfQkxPQ0tfSEVBREVSJyB8IHRyYW5zbGF0ZTogbGFuZyB9fVxyXG4gICAgICAgICAgICAgICAgQGlmICghZGlzYWJsZVRyZWVDcmVhdGVVcGRhdGUpIHtcclxuICAgICAgICAgICAgICAgIDxjb3JlLWJ1dHRvbi1ncm91cC12bnMgW3Nob3duSXRlbXNdPVwiaGVhZGVyVG9vbEl0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2spPVwib25IZWFkZXJUb29sQ2xpY2soJGV2ZW50KVwiPjwvY29yZS1idXR0b24tZ3JvdXAtdm5zPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGhlYWRlckhlaWdodCArICdweCcsXHJcbiAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnXHJcbiAgICAgICAgfVwiPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1yb3ctb25lXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogKCEhaGVhZGVyR3JvdXBzID8gaGVhZGVySGVpZ2h0LzIgOiBoZWFkZXJIZWlnaHQpICsgJ3B4JyxcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgQGlmICghIWhlYWRlckdyb3Vwcykge1xyXG4gICAgICAgICAgICAgICAgQGZvciAoaGVhZGVyR3JvdXAgb2YgaGVhZGVyR3JvdXBzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItZ3JvdXAtY2VsbC1kaXZcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogKCEhaGVhZGVyR3JvdXBzID8gaGVhZGVySGVpZ2h0LzIgOiBoZWFkZXJIZWlnaHQpICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGhlYWRlckdyb3VwLndpZHRoICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBoZWFkZXJCb3JkZXJTaXplICsgJ3B4IHNvbGlkIHdoaXRlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGhlYWRlckdyb3VwLmtleSB8IHRyYW5zbGF0ZTogbGFuZyB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1yb3ctdHdvXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogKCEhaGVhZGVyR3JvdXBzID8gaGVhZGVySGVpZ2h0LzIgOiBoZWFkZXJIZWlnaHQpICsgJ3B4JyxcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgPGRpdiBbY2xhc3MuaGlkZGVuXT1cImNvbHVtbi5oaWRkZW5cIiBbbmdTdHlsZV09XCJcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICghIWhlYWRlckdyb3VwcyA/IGhlYWRlckhlaWdodC8yIDogaGVhZGVySGVpZ2h0KSArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBoZWFkZXJCb3JkZXJTaXplICsgJ3B4IHNvbGlkIHdoaXRlJyxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogISFjb2x1bW4ud2lkdGggPyBjb2x1bW4ud2lkdGggKyAncHgnIDogJ3Vuc2V0JyxcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICEhY29sdW1uLmFsaWduID8gY29sdW1uLmFsaWduLnRvTG93ZXJDYXNlKCkgOiAndW5zZXQnXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWNlbGwtZGl2XCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICghIWhlYWRlckdyb3VwcyA/IGhlYWRlckhlaWdodC8yIDogaGVhZGVySGVpZ2h0KSArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBjb2x1bW4uY2FwdGlvbiB8IHRyYW5zbGF0ZTogbGFuZyB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgI2Zyb250VHJlZUNvbnRhaW5lciBjbGFzcz1cInRyZWUtZ3JpZC1jb250ZW50IGZyb250LWNvbnRhaW5lclwiIFtjbGFzcy5lZGl0LW1vZGUtYWN0aXZhdGVkXT1cImVkaXRNb2RlQWN0aXZhdGVkXCI+XHJcbiAgICAgICAgQGZvciAocm9vdCBvZiBkYXRhOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICBAZGVmZXIob24gdmlld3BvcnQodHJlZUNvbnRhaW5lcikpIHtcclxuICAgICAgICA8dWwgY2xhc3M9XCJyb290XCIgW2NsYXNzLmNvbGxhcHNlZF09XCIhISFyb290LnRyZWUkRXhwYW5kZWRcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiB0cmVlTm9kZUxldmVsUGFkZGluZyArICdweCdcclxuICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmcm9udEl0ZW07IGNvbnRleHQ6IHsgY29udGV4dDogcm9vdCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC91bD5cclxuICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAjdHJlZUNvbnRhaW5lciBjbGFzcz1cInRyZWUtZ3JpZC1jb250ZW50XCIgW2NsYXNzLmVkaXQtbW9kZS1hY3RpdmF0ZWRdPVwiZWRpdE1vZGVBY3RpdmF0ZWRcIj5cclxuICAgICAgICBAZm9yIChyb290IG9mIGRhdGE7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgIEBkZWZlcihvbiB2aWV3cG9ydCh0cmVlQ29udGFpbmVyKSkge1xyXG4gICAgICAgIDx1bCBjbGFzcz1cInJvb3RcIiBbY2xhc3MuY29sbGFwc2VkXT1cIiEhIXJvb3QudHJlZSRFeHBhbmRlZFwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgcGFkZGluZ0xlZnQ6ICcwcHgnXHJcbiAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbTsgY29udGV4dDogeyBjb250ZXh0OiByb290IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3VsPlxyXG4gICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2l0ZW0gbGV0LWNvbnRleHQ9XCJjb250ZXh0XCIgbGV0LWlkPVwiY29udGV4dC5pZFwiIGxldC10aXRsZT1cImNvbnRleHQudHJlZSRUaXRsZVwiXHJcbiAgICAgICAgbGV0LWhpZ2hsaWdodGVkPVwiY29udGV4dC50cmVlJEhpZ2hsaWdodGVkXCIgbGV0LWhhc0NoaWxkcmVuPVwiY29udGV4dC50cmVlJEhhc0NoaWxkcmVuXCJcclxuICAgICAgICBsZXQtY2hpbGRyZW49XCJjb250ZXh0LnRyZWUkQ2hpbGRyZW5cIiBsZXQtZXhwYW5kZWQ9XCJjb250ZXh0LnRyZWUkRXhwYW5kZWRcIiBsZXQtYWN0aXZlPVwiY29udGV4dC50cmVlJEFjdGl2ZVwiXHJcbiAgICAgICAgbGV0LWNoZWNrZWQ9XCJjb250ZXh0LnRyZWUkQ2hlY2tlZFwiIGxldC10aWVyPVwiY29udGV4dC50cmVlJFRpZXJcIj5cclxuXHJcbiAgICAgICAgPGxpIFtjbGFzcy5oYXMtY2hpbGRyZW5dPVwiISFoYXNDaGlsZHJlblwiIFtjbGFzcy5jb2xsYXBzZWRdPVwiISFoYXNDaGlsZHJlbiAmJiAhISFleHBhbmRlZFwiIChjbGljayk9XCJvblJvd0NsaWNrKGNvbnRleHQsICRldmVudClcIj5cclxuICAgICAgICAgICAgPHNwYW4gW2NsYXNzLnNwYW4tZWRpdC1tb2RlLWFjdGl2YXRlZF09XCIhIWVkaXRNb2RlQWN0aXZhdGVkICYmIHBlbmRpbmdDb250ZXh0LmlkPT09aWRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtaXRlbS1kaXZcIiBbYXR0ci5kYXRhLXRpZXJdPVwidGllclwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcwcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWdyaWQtcm93LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1ncmlkLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCEoISFlZGl0TW9kZUFjdGl2YXRlZCAmJiBwZW5kaW5nQ29udGV4dD8uaWQ9PT1pZCAmJiAhZGlzYWJsZVRyZWVDcmVhdGVVcGRhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtZ3JpZC1jZWxsXCIgW2NsYXNzLmhpZGRlbl09XCJjb2x1bW4uaGlkZGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VsbC1kaXZcIiBbbmdTdHlsZV09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICEhY29sdW1uLndpZHRoID8gY29sdW1uLndpZHRoICsgJ3B4JyA6ICd1bnNldCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICEhY29sdW1uLmFsaWduID8gY29sdW1uLmFsaWduLnRvTG93ZXJDYXNlKCkgOiAndW5zZXQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAhIWNvbHVtbi50cmFuc2xhdGUgPyAoY29udGV4dFtjb2x1bW4uZmllbGRdIHwgdHJhbnNsYXRlOiBsYW5nIHwgdGFibGVDZWxsOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5waXBlIDogbGFuZykgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbY29sdW1uLmZpZWxkXSB8IHRhYmxlQ2VsbDogY29sdW1uLnBpcGUgOiBsYW5nfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWdyaWQtY2VsbFwiIFtjbGFzcy5oaWRkZW5dPVwiY29sdW1uLmhpZGRlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2VsbC1kaXZcIiBbbmdTdHlsZV09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogISFjb2x1bW4ud2lkdGggPyBjb2x1bW4ud2lkdGggKyAncHgnIDogJ3Vuc2V0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAndGFibGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93WTogJ3Zpc2libGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogISFjb2x1bW4uYWxpZ24gPyBjb2x1bW4uYWxpZ24udG9Mb3dlckNhc2UoKSA6ICd1bnNldCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFjb2x1bW4uY29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAhIWNvbHVtbi50cmFuc2xhdGUgPyAoY29udGV4dFtjb2x1bW4uZmllbGRdIHwgdHJhbnNsYXRlOiBsYW5nIHwgdGFibGVDZWxsOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5waXBlIDogbGFuZykgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbY29sdW1uLmZpZWxkXSB8IHRhYmxlQ2VsbDogY29sdW1uLnBpcGUgOiBsYW5nfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb3JlLWNvbnRyb2wgW2Zvcm1dPVwiZm9ybVwiIFtjb250cm9sXT1cImNvbHVtbi5jb250cm9sIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja0Vycm9yJF09XCJjaGVja0Vycm9yJFwiPjwvY29yZS1jb250cm9sPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICBAaWYgKCEhZXhwYW5kZWQgJiYgISFjaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgPHVsIFtjbGFzcy5jb2xsYXBzZWRdPVwiIWV4cGFuZGVkXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6ICcwcHgnXHJcbiAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgIEBmb3IgKGNoaWxkIG9mIGNoaWxkcmVuOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW07IGNvbnRleHQ6IHsgY29udGV4dDogY2hpbGQgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlICNmcm9udEl0ZW0gbGV0LWNvbnRleHQ9XCJjb250ZXh0XCIgbGV0LWlkPVwiY29udGV4dC5pZFwiIGxldC10aXRsZT1cImNvbnRleHQudHJlZSRUaXRsZVwiXHJcbiAgICAgICAgbGV0LWhpZ2hsaWdodGVkPVwiY29udGV4dC50cmVlJEhpZ2hsaWdodGVkXCIgbGV0LWhhc0NoaWxkcmVuPVwiY29udGV4dC50cmVlJEhhc0NoaWxkcmVuXCJcclxuICAgICAgICBsZXQtY2hpbGRyZW49XCJjb250ZXh0LnRyZWUkQ2hpbGRyZW5cIiBsZXQtZXhwYW5kZWQ9XCJjb250ZXh0LnRyZWUkRXhwYW5kZWRcIiBsZXQtYWN0aXZlPVwiY29udGV4dC50cmVlJEFjdGl2ZVwiXHJcbiAgICAgICAgbGV0LWNoZWNrZWQ9XCJjb250ZXh0LnRyZWUkQ2hlY2tlZFwiIGxldC10aWVyPVwiY29udGV4dC50cmVlJFRpZXJcIj5cclxuXHJcbiAgICAgICAgPGxpIFtjbGFzcy5oYXMtY2hpbGRyZW5dPVwiISFoYXNDaGlsZHJlblwiIFtjbGFzcy5jb2xsYXBzZWRdPVwiISFoYXNDaGlsZHJlbiAmJiAhISFleHBhbmRlZFwiIFthdHRyLmRhdGEtdGllcl09XCJ0aWVyXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soY29udGV4dCwgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZyb250LXNwYW5cIiBbY2xhc3Muc3Bhbi1lZGl0LW1vZGUtYWN0aXZhdGVkXT1cIiEhZWRpdE1vZGVBY3RpdmF0ZWQgJiYgcGVuZGluZ0NvbnRleHQuaWQ9PT1pZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyZWUtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWl0ZW0tZGl2XCIgW2F0dHIuZGF0YS10aWVyXT1cInRpZXJcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHRyZWVDb2x1bW5XaWR0aCAtIHRpZXIgKiB0cmVlTm9kZUxldmVsUGFkZGluZyArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFkaXNhYmxlVHJlZUNyZWF0ZVVwZGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJlZS1pdGVtLXRvb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0cmVlLWl0ZW0tdG9vbC13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvcmUtYnV0dG9uLWdyb3VwLXZucyBbc2hvd25JdGVtc109XCJ0b29sSXRlbXNcIiBbc2hvd0NhcHRpb25dPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2spPVwib25Ub29sQ2xpY2soJGV2ZW50LCBjb250ZXh0KVwiPjwvY29yZS1idXR0b24tZ3JvdXAtdm5zPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCEhY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZXhwYW5kLXRvZ2dsZXIgZmVhdGhlci1jaGV2cm9uLWRvd25cIiAoY2xpY2spPVwib25FeHBhbmRUb2dnbGVyQ2xpY2soY29udGV4dClcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImV4cGFuZC10b2dnbGVyXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b2JqZWN0IChjbGljayk9XCJvbk9iamVjdENsaWNrKGNvbnRleHQsICRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRpdGxlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvb2JqZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIEBpZiAoISFleHBhbmRlZCAmJiAhIWNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgICA8dWwgW2NsYXNzLmNvbGxhcHNlZF09XCIhZXhwYW5kZWRcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiB0cmVlTm9kZUxldmVsUGFkZGluZyArICdweCdcclxuICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChjaGlsZCBvZiBjaGlsZHJlbjsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmcm9udEl0ZW07IGNvbnRleHQ6IHsgY29udGV4dDogY2hpbGQgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG48L2Rpdj4iXX0=
|