ontimize-web-ngx 15.0.3 → 15.0.4

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.
Files changed (30) hide show
  1. package/esm2020/lib/components/app-sidenav/menu-group/o-app-sidenav-menu-group.component.mjs +3 -3
  2. package/esm2020/lib/components/app-sidenav/menu-item/o-app-sidenav-menu-item.component.mjs +3 -3
  3. package/esm2020/lib/components/app-sidenav/o-app-sidenav.component.mjs +2 -2
  4. package/esm2020/lib/components/form/o-form.component.mjs +2 -2
  5. package/esm2020/lib/components/grid/o-grid.component.mjs +2 -11
  6. package/esm2020/lib/components/input/date-range/o-daterange-picker.component.mjs +6 -5
  7. package/esm2020/lib/components/list/o-list.component.mjs +2 -11
  8. package/esm2020/lib/components/o-service-base-component.class.mjs +2 -2
  9. package/esm2020/lib/components/table/extensions/header/table-column-resizer/o-table-column-resizer.component.mjs +18 -10
  10. package/esm2020/lib/components/table/o-table.component.mjs +2 -1
  11. package/esm2020/lib/components/tree/o-tree.component.mjs +18 -13
  12. package/esm2020/lib/interfaces/app-menu.interface.mjs +1 -1
  13. package/esm2020/lib/layouts/card-menu-layout/o-card-menu-layout.component.mjs +32 -16
  14. package/esm2020/lib/services/ontimize-export-data-base-provider.service.mjs +34 -2
  15. package/fesm2015/ontimize-web-ngx.mjs +337 -296
  16. package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
  17. package/fesm2020/ontimize-web-ngx.mjs +337 -296
  18. package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
  19. package/lib/components/grid/o-grid.component.d.ts +1 -4
  20. package/lib/components/input/date-range/o-daterange-picker.component.d.ts +1 -0
  21. package/lib/components/list/o-list.component.d.ts +1 -4
  22. package/lib/components/table/extensions/header/table-column-resizer/o-table-column-resizer.component.d.ts +3 -3
  23. package/lib/components/tree/o-tree.component.d.ts +2 -0
  24. package/lib/interfaces/app-menu.interface.d.ts +1 -0
  25. package/lib/layouts/card-menu-layout/o-card-menu-layout.component.d.ts +10 -2
  26. package/lib/services/ontimize-export-data-base-provider.service.d.ts +1 -0
  27. package/ontimize.scss +35 -34
  28. package/package.json +1 -1
  29. package/theme.scss +34 -2
  30. package/theming/ontimize-style.scss +18 -7
@@ -17,15 +17,16 @@ import * as i0 from "@angular/core";
17
17
  import * as i1 from "@angular/common";
18
18
  import * as i2 from "../input/search-input/o-search-input.component";
19
19
  import * as i3 from "@angular/flex-layout/flex";
20
- import * as i4 from "@angular/material/button";
21
- import * as i5 from "@angular/material/checkbox";
22
- import * as i6 from "@angular/material/icon";
23
- import * as i7 from "@angular/material/menu";
24
- import * as i8 from "@angular/material/progress-bar";
25
- import * as i9 from "@angular/material/tree";
26
- import * as i10 from "./header/tree-menu/o-tree-menu.component";
27
- import * as i11 from "../../pipes/o-translate.pipe";
28
- import * as i12 from "../form/o-form.component";
20
+ import * as i4 from "@angular/flex-layout/extended";
21
+ import * as i5 from "@angular/material/button";
22
+ import * as i6 from "@angular/material/checkbox";
23
+ import * as i7 from "@angular/material/icon";
24
+ import * as i8 from "@angular/material/menu";
25
+ import * as i9 from "@angular/material/progress-bar";
26
+ import * as i10 from "@angular/material/tree";
27
+ import * as i11 from "./header/tree-menu/o-tree-menu.component";
28
+ import * as i12 from "../../pipes/o-translate.pipe";
29
+ import * as i13 from "../form/o-form.component";
29
30
  export const DEFAULT_INPUTS_O_TREE = [
30
31
  'oattr: attr',
31
32
  'service',
@@ -216,6 +217,7 @@ export class OTreeComponent extends AbstractOServiceComponent {
216
217
  event.stopPropagation();
217
218
  event.preventDefault();
218
219
  this.onNodeClick.emit(node);
220
+ this.selectedNode = node;
219
221
  if (this.detailMode !== Codes.DETAIL_MODE_NONE && !this.isRootNode(node)) {
220
222
  this.navigateToViewDetail(node);
221
223
  }
@@ -472,9 +474,12 @@ export class OTreeComponent extends AbstractOServiceComponent {
472
474
  }
473
475
  }
474
476
  }
477
+ isSelectedNode(node) {
478
+ return this.selectedNode == node;
479
+ }
475
480
  }
476
481
  OTreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OTreeComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: forwardRef(() => OFormComponent), optional: true }], target: i0.ɵɵFactoryTarget.Component });
477
- OTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OTreeComponent, selector: "o-tree", inputs: { oattr: ["attr", "oattr"], service: "service", entity: "entity", columns: "columns", keys: "keys", parentKeys: ["parent-keys", "parentKeys"], queryMethod: ["query-method", "queryMethod"], insertButton: ["insert-button", "insertButton"], refreshButton: ["refresh-button", "refreshButton"], deleteButton: ["delete-button", "deleteButton"], visibleColumns: ["visible-columns", "visibleColumns"], selectAllCheckbox: ["select-all-checkbox", "selectAllCheckbox"], separator: "separator", parentColumn: ["parent-column", "parentColumn"], sortColumn: ["sort-column", "sortColumn"], selectAllCheckboxVisible: ["select-all-checkbox-visible", "selectAllCheckboxVisible"], filterCaseSensitive: ["filter-case-sensitive", "filterCaseSensitive"], quickFilter: ["quick-filter", "quickFilter"], quickFilterPlaceholder: ["quick-filter-placeholder", "quickFilterPlaceholder"], quickFilterColumns: ["quick-filter-columns", "quickFilterColumns"], detailMode: ["detail-mode", "detailMode"], detailFormRoute: ["detail-form-route", "detailFormRoute"], showButtonsText: ["show-buttons-text", "showButtonsText"], rootTitle: ["root-title", "rootTitle"], recursive: "recursive", route: "route" }, outputs: { onNodeSelected: "onNodeSelected", onNodeExpanded: "onNodeExpanded", onNodeCollapsed: "onNodeCollapsed", onLoadNextLevel: "onLoadNextLevel", onDataLoaded: "onDataLoaded", onNodeClick: "onNodeClick" }, host: { properties: { "class.o-tree": "true" } }, providers: [OTreeDao], queries: [{ propertyName: "leafNodeTemplate", first: true, predicate: ["leafNodeTemplate"], descendants: true, read: TemplateRef }, { propertyName: "parentNodeTemplate", first: true, predicate: ["parentNodeTemplate"], descendants: true, read: TemplateRef }, { propertyName: "nodeTemplate", first: true, predicate: ["nodeTemplate"], descendants: true, read: TemplateRef }, { propertyName: "treeNode", first: true, predicate: i0.forwardRef(function () { return OTreeNodeComponent; }) }], usesInheritance: true, ngImport: i0, template: "<div fxLayout=\"column\" fxFlex>\n\n <div *ngIf=\"hasControls()\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\n\n <div class=\"buttons\">\n <ng-container *ngIf=\"showButtonsText;else showButtonsWithoutText\">\n\n <button *ngIf=\"insertButton\" type=\"button\" mat-stroked-button aria-label=\"Insert\" (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n <span>{{ 'INSERT' | oTranslate }}</span>\n </button>\n\n <button *ngIf=\"refreshButton\" type=\"button\" mat-stroked-button aria-label=\"Refresh\" (click)=\"reloadData()\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n <span>{{ 'REFRESH' | oTranslate }}</span>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" mat-stroked-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n <span>{{ 'DELETE' | oTranslate }}</span>\n </button>\n\n </ng-container>\n\n <ng-template #showButtonsWithoutText>\n <button *ngIf=\"insertButton\" type=\"button\" mat-icon-button aria-label=\"Insert\" (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <button *ngIf=\"refreshButton\" type=\"button\" mat-icon-button aria-label=\"Refresh\" (click)=\"reloadData()\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" mat-icon-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n </button>\n </ng-template>\n\n <ng-content select=\"[o-tree-button]\"></ng-content>\n </div>\n <div fxFlex>\n <span fxLayoutAlign=\"center center\" class=\"title\">{{ title | oTranslate }}</span>\n </div>\n <o-search-input *ngIf=\"quickFilter\" [filter-case-sensitive]=\"filterCaseSensitive\" [show-case-sensitive-checkbox]=\"showCaseSensitiveCheckbox()\"\n [columns]=\"quickFilterColumns\" [placeholder]=\"quickFilterPlaceholder\" appearance=\"outline\" float-label=\"never\" show-menu=\"no\">\n </o-search-input>\n <button type=\"button\" *ngIf=\"showTreeMenuButton\" mat-icon-button class=\"o-tree-menu-button\" [matMenuTriggerFor]=\"treeMenu.matMenu\"\n (click)=\"$event.stopPropagation()\">\n <mat-icon svgIcon=\"ontimize:more_vert\"></mat-icon>\n </button>\n <o-tree-menu #treeMenu [select-all-checkbox]=\"selectAllCheckbox\" [select-all-checkbox-visible]=\"selectAllCheckboxVisible\"\n (onSelectCheckboxChange)=\"onSelectCheckboxChange($event)\"></o-tree-menu>\n\n </div>\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n\n <!-- This is the tree node template for leaf nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node\" (click)=\"leafNodeClicked($event,node)\" matTreeNodeToggle matTreeNodePadding>\n <!-- use a disabled button to provide padding for tree leaf -->\n <button mat-icon-button disabled></button>\n\n <ng-container *ngIf=\"selectAllCheckboxVisible; else simpleLeafNodeTpl\">\n <div class=\"node-wrapper\">\n <mat-checkbox *ngIf=\"selectAllCheckboxVisible; else simpleLeafNodeTpl\" [checked]=\"checklistSelection.isSelected(node)\"\n (click)=\"checkboxClicked($event)\" (change)=\"todoLeafItemSelectionToggle(node)\">\n </mat-checkbox>\n <ng-container [ngTemplateOutlet]=\"leafNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </div>\n </ng-container>\n <ng-template #simpleLeafNodeTpl>\n <ng-container [ngTemplateOutlet]=\"leafNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </ng-template>\n\n </mat-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" (click)=\"parentNodeClicked($event, node)\" matTreeNodePadding>\n <button mat-icon-button [attr.aria-label]=\"'toggle ' + node.label\" matTreeNodeToggle (click)=\"onClickToggleButton($event, node)\">\n <mat-icon class=\"mat-icon-rtl-mirror\">\n {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}\n </mat-icon>\n </button>\n\n <ng-container *ngIf=\"selectAllCheckboxVisible; else simpleParentNodeTpl\">\n <div class=\"node-wrapper\">\n <mat-checkbox *ngIf=\"selectAllCheckboxVisible; else simpleParentNodeTpl\" (click)=\"checkboxClicked($event)\"\n (change)=\"todoItemSelectionToggle(node)\" [checked]=\"descendantsAllSelected(node)\" [indeterminate]=\"descendantsPartiallySelected(node)\">\n </mat-checkbox>\n <ng-container [ngTemplateOutlet]=\"parentNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </div>\n </ng-container>\n\n <ng-template #simpleParentNodeTpl>\n <ng-container [ngTemplateOutlet]=\"parentNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </ng-template>\n </mat-tree-node>\n </mat-tree>\n</div>\n\n<ng-template let-node #leafNodeFulltemplate>\n <ng-container *ngIf=\"leafNodeTemplate; else defaultLeafNodeTpl\" [ngTemplateOutlet]=\"leafNodeTemplate\"\n [ngTemplateOutletContext]=\"{$implicit:node.data}\">\n </ng-container>\n\n <ng-template #defaultLeafNodeTpl>\n {{node.label}}\n </ng-template>\n</ng-template>\n\n<ng-template let-node #parentNodeFulltemplate>\n <ng-container *ngIf=\"parentNodeTemplate; else defaultParentNodeTpl\" [ngTemplateOutlet]=\"parentNodeTemplate\"\n [ngTemplateOutletContext]=\"{$implicit:node.data}\">\n </ng-container>\n\n <ng-template #defaultParentNodeTpl>\n <span>{{node.label}}</span>\n <mat-progress-bar *ngIf=\"node.isLoading\" mode=\"indeterminate\" fxFlex></mat-progress-bar>\n </ng-template>\n</ng-template>\n", styles: [".o-tree .mat-mdc-progress-bar{margin-left:30px}.o-tree .node-wrapper{align-items:center}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.OSearchInputComponent, selector: "o-search-input", inputs: ["placeholder", "label", "width", "float-label", "appearance", "columns", "filter-case-sensitive", "show-case-sensitive-checkbox", "show-menu"], outputs: ["onSearch"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i8.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: i9.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i9.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i9.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i9.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i9.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "component", type: i10.OTreeMenuComponent, selector: "o-tree-menu", inputs: ["select-all-checkbox", "select-all-checkbox-visible"], outputs: ["onSelectCheckboxChange"] }, { kind: "pipe", type: i11.OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None });
482
+ OTreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OTreeComponent, selector: "o-tree", inputs: { oattr: ["attr", "oattr"], service: "service", entity: "entity", columns: "columns", keys: "keys", parentKeys: ["parent-keys", "parentKeys"], queryMethod: ["query-method", "queryMethod"], insertButton: ["insert-button", "insertButton"], refreshButton: ["refresh-button", "refreshButton"], deleteButton: ["delete-button", "deleteButton"], visibleColumns: ["visible-columns", "visibleColumns"], selectAllCheckbox: ["select-all-checkbox", "selectAllCheckbox"], separator: "separator", parentColumn: ["parent-column", "parentColumn"], sortColumn: ["sort-column", "sortColumn"], selectAllCheckboxVisible: ["select-all-checkbox-visible", "selectAllCheckboxVisible"], filterCaseSensitive: ["filter-case-sensitive", "filterCaseSensitive"], quickFilter: ["quick-filter", "quickFilter"], quickFilterPlaceholder: ["quick-filter-placeholder", "quickFilterPlaceholder"], quickFilterColumns: ["quick-filter-columns", "quickFilterColumns"], detailMode: ["detail-mode", "detailMode"], detailFormRoute: ["detail-form-route", "detailFormRoute"], showButtonsText: ["show-buttons-text", "showButtonsText"], rootTitle: ["root-title", "rootTitle"], recursive: "recursive", route: "route" }, outputs: { onNodeSelected: "onNodeSelected", onNodeExpanded: "onNodeExpanded", onNodeCollapsed: "onNodeCollapsed", onLoadNextLevel: "onLoadNextLevel", onDataLoaded: "onDataLoaded", onNodeClick: "onNodeClick" }, host: { properties: { "class.o-tree": "true" } }, providers: [OTreeDao], queries: [{ propertyName: "leafNodeTemplate", first: true, predicate: ["leafNodeTemplate"], descendants: true, read: TemplateRef }, { propertyName: "parentNodeTemplate", first: true, predicate: ["parentNodeTemplate"], descendants: true, read: TemplateRef }, { propertyName: "nodeTemplate", first: true, predicate: ["nodeTemplate"], descendants: true, read: TemplateRef }, { propertyName: "treeNode", first: true, predicate: i0.forwardRef(function () { return OTreeNodeComponent; }) }], usesInheritance: true, ngImport: i0, template: "<div fxLayout=\"column\" fxFlex>\n\n <div *ngIf=\"hasControls()\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\n\n <div class=\"buttons\">\n <ng-container *ngIf=\"showButtonsText;else showButtonsWithoutText\">\n\n <button *ngIf=\"insertButton\" type=\"button\" mat-stroked-button aria-label=\"Insert\" (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n <span>{{ 'INSERT' | oTranslate }}</span>\n </button>\n\n <button *ngIf=\"refreshButton\" type=\"button\" mat-stroked-button aria-label=\"Refresh\" (click)=\"reloadData()\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n <span>{{ 'REFRESH' | oTranslate }}</span>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" mat-stroked-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n <span>{{ 'DELETE' | oTranslate }}</span>\n </button>\n\n </ng-container>\n\n <ng-template #showButtonsWithoutText>\n <button *ngIf=\"insertButton\" type=\"button\" mat-icon-button aria-label=\"Insert\" (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <button *ngIf=\"refreshButton\" type=\"button\" mat-icon-button aria-label=\"Refresh\" (click)=\"reloadData()\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" mat-icon-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n </button>\n </ng-template>\n\n <ng-content select=\"[o-tree-button]\"></ng-content>\n </div>\n <div fxFlex>\n <span fxLayoutAlign=\"center center\" class=\"title\">{{ title | oTranslate }}</span>\n </div>\n <o-search-input *ngIf=\"quickFilter\" [filter-case-sensitive]=\"filterCaseSensitive\" [show-case-sensitive-checkbox]=\"showCaseSensitiveCheckbox()\"\n [columns]=\"quickFilterColumns\" [placeholder]=\"quickFilterPlaceholder\" appearance=\"outline\" float-label=\"never\" show-menu=\"no\">\n </o-search-input>\n <button type=\"button\" *ngIf=\"showTreeMenuButton\" mat-icon-button class=\"o-tree-menu-button\" [matMenuTriggerFor]=\"treeMenu.matMenu\"\n (click)=\"$event.stopPropagation()\">\n <mat-icon svgIcon=\"ontimize:more_vert\"></mat-icon>\n </button>\n <o-tree-menu #treeMenu [select-all-checkbox]=\"selectAllCheckbox\" [select-all-checkbox-visible]=\"selectAllCheckboxVisible\"\n (onSelectCheckboxChange)=\"onSelectCheckboxChange($event)\"></o-tree-menu>\n\n </div>\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n\n <!-- This is the tree node template for leaf nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node\" (click)=\"leafNodeClicked($event, node)\" matTreeNodeToggle matTreeNodePadding\n [ngClass]=\"{'selected-node': isSelectedNode(node)}\">\n <!-- use a disabled button to provide padding for tree leaf -->\n <button mat-icon-button disabled></button>\n\n <ng-container *ngIf=\"selectAllCheckboxVisible; else simpleLeafNodeTpl\">\n <div class=\"node-wrapper\">\n <mat-checkbox *ngIf=\"selectAllCheckboxVisible; else simpleLeafNodeTpl\" [checked]=\"checklistSelection.isSelected(node)\"\n (click)=\"checkboxClicked($event)\" (change)=\"todoLeafItemSelectionToggle(node)\">\n </mat-checkbox>\n <ng-container [ngTemplateOutlet]=\"leafNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </div>\n </ng-container>\n <ng-template #simpleLeafNodeTpl>\n <ng-container [ngTemplateOutlet]=\"leafNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </ng-template>\n\n </mat-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" (click)=\"parentNodeClicked($event, node)\" matTreeNodePadding\n [ngClass]=\"{'selected-node': isSelectedNode(node)}\">\n <button mat-icon-button [attr.aria-label]=\"'toggle ' + node.label\" matTreeNodeToggle (click)=\"onClickToggleButton($event, node)\">\n <mat-icon class=\"mat-icon-rtl-mirror\">\n {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}\n </mat-icon>\n </button>\n\n <ng-container *ngIf=\"selectAllCheckboxVisible; else simpleParentNodeTpl\">\n <div class=\"node-wrapper\">\n <mat-checkbox *ngIf=\"selectAllCheckboxVisible; else simpleParentNodeTpl\" (click)=\"checkboxClicked($event)\"\n (change)=\"todoItemSelectionToggle(node)\" [checked]=\"descendantsAllSelected(node)\" [indeterminate]=\"descendantsPartiallySelected(node)\">\n </mat-checkbox>\n <ng-container [ngTemplateOutlet]=\"parentNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </div>\n </ng-container>\n\n <ng-template #simpleParentNodeTpl>\n <ng-container [ngTemplateOutlet]=\"parentNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </ng-template>\n </mat-tree-node>\n </mat-tree>\n</div>\n\n<ng-template let-node #leafNodeFulltemplate>\n <ng-container *ngIf=\"leafNodeTemplate; else defaultLeafNodeTpl\" [ngTemplateOutlet]=\"leafNodeTemplate\"\n [ngTemplateOutletContext]=\"{$implicit:node.data}\">\n </ng-container>\n\n <ng-template #defaultLeafNodeTpl>\n {{node.label}}\n </ng-template>\n</ng-template>\n\n<ng-template let-node #parentNodeFulltemplate>\n <ng-container *ngIf=\"parentNodeTemplate; else defaultParentNodeTpl\" [ngTemplateOutlet]=\"parentNodeTemplate\"\n [ngTemplateOutletContext]=\"{$implicit:node.data}\">\n </ng-container>\n\n <ng-template #defaultParentNodeTpl>\n <span>{{node.label}}</span>\n <mat-progress-bar *ngIf=\"node.isLoading\" mode=\"indeterminate\" fxFlex></mat-progress-bar>\n </ng-template>\n</ng-template>\n", styles: [".o-tree .mat-mdc-progress-bar{margin-left:30px}.o-tree .node-wrapper{align-items:center}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.OSearchInputComponent, selector: "o-search-input", inputs: ["placeholder", "label", "width", "float-label", "appearance", "columns", "filter-case-sensitive", "show-case-sensitive-checkbox", "show-menu"], outputs: ["onSearch"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i4.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i9.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: i10.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i10.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i10.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i10.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i10.MatTreeNode, selector: "mat-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "component", type: i11.OTreeMenuComponent, selector: "o-tree-menu", inputs: ["select-all-checkbox", "select-all-checkbox-visible"], outputs: ["onSelectCheckboxChange"] }, { kind: "pipe", type: i12.OTranslatePipe, name: "oTranslate" }], encapsulation: i0.ViewEncapsulation.None });
478
483
  __decorate([
479
484
  BooleanInputConverter(),
480
485
  __metadata("design:type", Boolean)
@@ -503,8 +508,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
503
508
  type: Component,
504
509
  args: [{ selector: 'o-tree', inputs: DEFAULT_INPUTS_O_TREE, outputs: DEFAULT_OUTPUTS_O_TREE, encapsulation: ViewEncapsulation.None, host: {
505
510
  '[class.o-tree]': 'true'
506
- }, providers: [OTreeDao], template: "<div fxLayout=\"column\" fxFlex>\n\n <div *ngIf=\"hasControls()\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\n\n <div class=\"buttons\">\n <ng-container *ngIf=\"showButtonsText;else showButtonsWithoutText\">\n\n <button *ngIf=\"insertButton\" type=\"button\" mat-stroked-button aria-label=\"Insert\" (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n <span>{{ 'INSERT' | oTranslate }}</span>\n </button>\n\n <button *ngIf=\"refreshButton\" type=\"button\" mat-stroked-button aria-label=\"Refresh\" (click)=\"reloadData()\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n <span>{{ 'REFRESH' | oTranslate }}</span>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" mat-stroked-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n <span>{{ 'DELETE' | oTranslate }}</span>\n </button>\n\n </ng-container>\n\n <ng-template #showButtonsWithoutText>\n <button *ngIf=\"insertButton\" type=\"button\" mat-icon-button aria-label=\"Insert\" (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <button *ngIf=\"refreshButton\" type=\"button\" mat-icon-button aria-label=\"Refresh\" (click)=\"reloadData()\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" mat-icon-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n </button>\n </ng-template>\n\n <ng-content select=\"[o-tree-button]\"></ng-content>\n </div>\n <div fxFlex>\n <span fxLayoutAlign=\"center center\" class=\"title\">{{ title | oTranslate }}</span>\n </div>\n <o-search-input *ngIf=\"quickFilter\" [filter-case-sensitive]=\"filterCaseSensitive\" [show-case-sensitive-checkbox]=\"showCaseSensitiveCheckbox()\"\n [columns]=\"quickFilterColumns\" [placeholder]=\"quickFilterPlaceholder\" appearance=\"outline\" float-label=\"never\" show-menu=\"no\">\n </o-search-input>\n <button type=\"button\" *ngIf=\"showTreeMenuButton\" mat-icon-button class=\"o-tree-menu-button\" [matMenuTriggerFor]=\"treeMenu.matMenu\"\n (click)=\"$event.stopPropagation()\">\n <mat-icon svgIcon=\"ontimize:more_vert\"></mat-icon>\n </button>\n <o-tree-menu #treeMenu [select-all-checkbox]=\"selectAllCheckbox\" [select-all-checkbox-visible]=\"selectAllCheckboxVisible\"\n (onSelectCheckboxChange)=\"onSelectCheckboxChange($event)\"></o-tree-menu>\n\n </div>\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n\n <!-- This is the tree node template for leaf nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node\" (click)=\"leafNodeClicked($event,node)\" matTreeNodeToggle matTreeNodePadding>\n <!-- use a disabled button to provide padding for tree leaf -->\n <button mat-icon-button disabled></button>\n\n <ng-container *ngIf=\"selectAllCheckboxVisible; else simpleLeafNodeTpl\">\n <div class=\"node-wrapper\">\n <mat-checkbox *ngIf=\"selectAllCheckboxVisible; else simpleLeafNodeTpl\" [checked]=\"checklistSelection.isSelected(node)\"\n (click)=\"checkboxClicked($event)\" (change)=\"todoLeafItemSelectionToggle(node)\">\n </mat-checkbox>\n <ng-container [ngTemplateOutlet]=\"leafNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </div>\n </ng-container>\n <ng-template #simpleLeafNodeTpl>\n <ng-container [ngTemplateOutlet]=\"leafNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </ng-template>\n\n </mat-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" (click)=\"parentNodeClicked($event, node)\" matTreeNodePadding>\n <button mat-icon-button [attr.aria-label]=\"'toggle ' + node.label\" matTreeNodeToggle (click)=\"onClickToggleButton($event, node)\">\n <mat-icon class=\"mat-icon-rtl-mirror\">\n {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}\n </mat-icon>\n </button>\n\n <ng-container *ngIf=\"selectAllCheckboxVisible; else simpleParentNodeTpl\">\n <div class=\"node-wrapper\">\n <mat-checkbox *ngIf=\"selectAllCheckboxVisible; else simpleParentNodeTpl\" (click)=\"checkboxClicked($event)\"\n (change)=\"todoItemSelectionToggle(node)\" [checked]=\"descendantsAllSelected(node)\" [indeterminate]=\"descendantsPartiallySelected(node)\">\n </mat-checkbox>\n <ng-container [ngTemplateOutlet]=\"parentNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </div>\n </ng-container>\n\n <ng-template #simpleParentNodeTpl>\n <ng-container [ngTemplateOutlet]=\"parentNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </ng-template>\n </mat-tree-node>\n </mat-tree>\n</div>\n\n<ng-template let-node #leafNodeFulltemplate>\n <ng-container *ngIf=\"leafNodeTemplate; else defaultLeafNodeTpl\" [ngTemplateOutlet]=\"leafNodeTemplate\"\n [ngTemplateOutletContext]=\"{$implicit:node.data}\">\n </ng-container>\n\n <ng-template #defaultLeafNodeTpl>\n {{node.label}}\n </ng-template>\n</ng-template>\n\n<ng-template let-node #parentNodeFulltemplate>\n <ng-container *ngIf=\"parentNodeTemplate; else defaultParentNodeTpl\" [ngTemplateOutlet]=\"parentNodeTemplate\"\n [ngTemplateOutletContext]=\"{$implicit:node.data}\">\n </ng-container>\n\n <ng-template #defaultParentNodeTpl>\n <span>{{node.label}}</span>\n <mat-progress-bar *ngIf=\"node.isLoading\" mode=\"indeterminate\" fxFlex></mat-progress-bar>\n </ng-template>\n</ng-template>\n", styles: [".o-tree .mat-mdc-progress-bar{margin-left:30px}.o-tree .node-wrapper{align-items:center}\n"] }]
507
- }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ElementRef }, { type: i12.OFormComponent, decorators: [{
511
+ }, providers: [OTreeDao], template: "<div fxLayout=\"column\" fxFlex>\n\n <div *ngIf=\"hasControls()\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\n\n <div class=\"buttons\">\n <ng-container *ngIf=\"showButtonsText;else showButtonsWithoutText\">\n\n <button *ngIf=\"insertButton\" type=\"button\" mat-stroked-button aria-label=\"Insert\" (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n <span>{{ 'INSERT' | oTranslate }}</span>\n </button>\n\n <button *ngIf=\"refreshButton\" type=\"button\" mat-stroked-button aria-label=\"Refresh\" (click)=\"reloadData()\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n <span>{{ 'REFRESH' | oTranslate }}</span>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" mat-stroked-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n <span>{{ 'DELETE' | oTranslate }}</span>\n </button>\n\n </ng-container>\n\n <ng-template #showButtonsWithoutText>\n <button *ngIf=\"insertButton\" type=\"button\" mat-icon-button aria-label=\"Insert\" (click)=\"add($event)\">\n <mat-icon svgIcon=\"ontimize:add\"></mat-icon>\n </button>\n\n <button *ngIf=\"refreshButton\" type=\"button\" mat-icon-button aria-label=\"Refresh\" (click)=\"reloadData()\">\n <mat-icon svgIcon=\"ontimize:autorenew\"></mat-icon>\n </button>\n\n <button *ngIf=\"deleteButton\" type=\"button\" mat-icon-button aria-label=\"Delete\" [disabled]=\"!enabledDeleteButton\"\n [class.disabled]=\"!enabledDeleteButton\">\n <mat-icon svgIcon=\"ontimize:delete\"></mat-icon>\n </button>\n </ng-template>\n\n <ng-content select=\"[o-tree-button]\"></ng-content>\n </div>\n <div fxFlex>\n <span fxLayoutAlign=\"center center\" class=\"title\">{{ title | oTranslate }}</span>\n </div>\n <o-search-input *ngIf=\"quickFilter\" [filter-case-sensitive]=\"filterCaseSensitive\" [show-case-sensitive-checkbox]=\"showCaseSensitiveCheckbox()\"\n [columns]=\"quickFilterColumns\" [placeholder]=\"quickFilterPlaceholder\" appearance=\"outline\" float-label=\"never\" show-menu=\"no\">\n </o-search-input>\n <button type=\"button\" *ngIf=\"showTreeMenuButton\" mat-icon-button class=\"o-tree-menu-button\" [matMenuTriggerFor]=\"treeMenu.matMenu\"\n (click)=\"$event.stopPropagation()\">\n <mat-icon svgIcon=\"ontimize:more_vert\"></mat-icon>\n </button>\n <o-tree-menu #treeMenu [select-all-checkbox]=\"selectAllCheckbox\" [select-all-checkbox-visible]=\"selectAllCheckboxVisible\"\n (onSelectCheckboxChange)=\"onSelectCheckboxChange($event)\"></o-tree-menu>\n\n </div>\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n\n <!-- This is the tree node template for leaf nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node\" (click)=\"leafNodeClicked($event, node)\" matTreeNodeToggle matTreeNodePadding\n [ngClass]=\"{'selected-node': isSelectedNode(node)}\">\n <!-- use a disabled button to provide padding for tree leaf -->\n <button mat-icon-button disabled></button>\n\n <ng-container *ngIf=\"selectAllCheckboxVisible; else simpleLeafNodeTpl\">\n <div class=\"node-wrapper\">\n <mat-checkbox *ngIf=\"selectAllCheckboxVisible; else simpleLeafNodeTpl\" [checked]=\"checklistSelection.isSelected(node)\"\n (click)=\"checkboxClicked($event)\" (change)=\"todoLeafItemSelectionToggle(node)\">\n </mat-checkbox>\n <ng-container [ngTemplateOutlet]=\"leafNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </div>\n </ng-container>\n <ng-template #simpleLeafNodeTpl>\n <ng-container [ngTemplateOutlet]=\"leafNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </ng-template>\n\n </mat-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" (click)=\"parentNodeClicked($event, node)\" matTreeNodePadding\n [ngClass]=\"{'selected-node': isSelectedNode(node)}\">\n <button mat-icon-button [attr.aria-label]=\"'toggle ' + node.label\" matTreeNodeToggle (click)=\"onClickToggleButton($event, node)\">\n <mat-icon class=\"mat-icon-rtl-mirror\">\n {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}\n </mat-icon>\n </button>\n\n <ng-container *ngIf=\"selectAllCheckboxVisible; else simpleParentNodeTpl\">\n <div class=\"node-wrapper\">\n <mat-checkbox *ngIf=\"selectAllCheckboxVisible; else simpleParentNodeTpl\" (click)=\"checkboxClicked($event)\"\n (change)=\"todoItemSelectionToggle(node)\" [checked]=\"descendantsAllSelected(node)\" [indeterminate]=\"descendantsPartiallySelected(node)\">\n </mat-checkbox>\n <ng-container [ngTemplateOutlet]=\"parentNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </div>\n </ng-container>\n\n <ng-template #simpleParentNodeTpl>\n <ng-container [ngTemplateOutlet]=\"parentNodeFulltemplate\" [ngTemplateOutletContext]=\"{$implicit:node}\">\n </ng-container>\n </ng-template>\n </mat-tree-node>\n </mat-tree>\n</div>\n\n<ng-template let-node #leafNodeFulltemplate>\n <ng-container *ngIf=\"leafNodeTemplate; else defaultLeafNodeTpl\" [ngTemplateOutlet]=\"leafNodeTemplate\"\n [ngTemplateOutletContext]=\"{$implicit:node.data}\">\n </ng-container>\n\n <ng-template #defaultLeafNodeTpl>\n {{node.label}}\n </ng-template>\n</ng-template>\n\n<ng-template let-node #parentNodeFulltemplate>\n <ng-container *ngIf=\"parentNodeTemplate; else defaultParentNodeTpl\" [ngTemplateOutlet]=\"parentNodeTemplate\"\n [ngTemplateOutletContext]=\"{$implicit:node.data}\">\n </ng-container>\n\n <ng-template #defaultParentNodeTpl>\n <span>{{node.label}}</span>\n <mat-progress-bar *ngIf=\"node.isLoading\" mode=\"indeterminate\" fxFlex></mat-progress-bar>\n </ng-template>\n</ng-template>\n", styles: [".o-tree .mat-mdc-progress-bar{margin-left:30px}.o-tree .node-wrapper{align-items:center}\n"] }]
512
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ElementRef }, { type: i13.OFormComponent, decorators: [{
508
513
  type: Optional
509
514
  }, {
510
515
  type: Inject,
@@ -522,4 +527,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
522
527
  type: ContentChild,
523
528
  args: [forwardRef(() => OTreeNodeComponent), { descendants: false }]
524
529
  }] } });
525
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUvby10cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUvby10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBR1IsUUFBUSxFQUNSLFdBQVcsRUFDWCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFjLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHekUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBZXJFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHO0lBRW5DLGFBQWE7SUFHYixTQUFTO0lBR1QsUUFBUTtJQUdSLFNBQVM7SUFHVCxNQUFNO0lBR04seUJBQXlCO0lBR3pCLDJCQUEyQjtJQUczQiw2QkFBNkI7SUFHN0IsK0JBQStCO0lBRy9CLDZCQUE2QjtJQUc3QixpQ0FBaUM7SUFDakMsd0NBQXdDO0lBQ3hDLFdBQVc7SUFDWCw2QkFBNkI7SUFDN0IseUJBQXlCO0lBRXpCLHVEQUF1RDtJQUV2RCw0Q0FBNEM7SUFFNUMsMkJBQTJCO0lBRTNCLGtEQUFrRDtJQUVsRCwwQ0FBMEM7SUFFMUMseUJBQXlCO0lBRXpCLG9DQUFvQztJQUVwQyxvQ0FBb0M7SUFDcEMsdUJBQXVCO0lBQ3ZCLFdBQVc7SUFDWCxPQUFPO0NBQ1IsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBY2hKLE1BQU0sT0FBTyxjQUFlLFNBQVEseUJBQXFEO0lBY3ZGLG1CQUFtQixDQUFDLElBQW1CO1FBQ3JDLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDdEQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQ3ZCO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzdFLElBQUksUUFBUSxHQUFrQjtvQkFDNUIsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2lCQUNwTixDQUFDO2dCQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzdDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNuQjtpQkFBTTtnQkFDTCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzNDO1NBQ0Y7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3RGO0lBQ0gsQ0FBQztJQUVELHdCQUF3QixDQUFDLElBQW1CO1FBQzFDLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDdEQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1NBQ3ZCO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbEM7SUFFSCxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsaUJBQXNCLEVBQUU7UUFDekMsSUFBSSxNQUFNLEdBQUcsY0FBYyxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtZQUNyRCxNQUFNLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvRSxNQUFNLGlCQUFpQixHQUFHLHFCQUFxQixDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN6RixNQUFNLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakksTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNaLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLFVBQVUsQ0FBQztTQUNsRTtRQUNELE9BQU8sS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFzREQsSUFDSSxZQUFZLENBQUMsS0FBdUI7UUFDdEMsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7WUFDOUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztTQUNqQztJQUNILENBQUM7SUFTRCxJQUFJLGtCQUFrQjtRQUNwQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDekMsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUNELFlBQ1MsUUFBa0IsRUFDekIsS0FBaUIsRUFDcUMsSUFBb0I7UUFFMUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFKdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQTFIM0IsYUFBUSxHQUFHLENBQUMsSUFBbUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUUvQyxpQkFBWSxHQUFHLENBQUMsSUFBbUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUV4RCxnQkFBVyxHQUFHLENBQUMsSUFBbUIsRUFBTyxFQUFFO1lBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDbEIsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDNUM7aUJBQU07Z0JBQ0wsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdkM7UUFDSCxDQUFDLENBQUE7UUF3Q0QsYUFBUSxHQUFHLENBQUMsQ0FBUyxFQUFFLFNBQXdCLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7UUFFekUsaUJBQVksR0FBRyxDQUFDLENBQVMsRUFBRSxTQUF3QixFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQU0vRSxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUU5QixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUU5QixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUdqQyxjQUFTLEdBQVcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1FBSTNDLDZCQUF3QixHQUFZLEtBQUssQ0FBQztRQUUxQyxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFFbkMsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUVqQixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUN4Qyx1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFHM0IsaUJBQVksR0FBb0IsRUFBRSxDQUFDO1FBQ25DLGVBQVUsR0FBb0IsRUFBRSxDQUFDO1FBQ2pDLGNBQVMsR0FBVSxFQUFFLENBQUM7UUFDdEIsdUJBQWtCLEdBQUcsSUFBSSxjQUFjLENBQWdCLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFeEcsbUJBQWMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN2RCxtQkFBYyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZELG9CQUFlLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDeEQsb0JBQWUsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN4RCxnQkFBVyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXpELGNBQVMsR0FBb0IsRUFBRSxDQUFDO1FBdUJ0Qix3QkFBbUIsR0FBYSxFQUFFLENBQUM7UUFDdEMsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQ2xDLGlCQUFZLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUF5VTFELGdCQUFXLEdBQUcsQ0FBQyxJQUFTLEVBQUUsS0FBYSxFQUFFLFVBQWdCLEVBQUUsRUFBRTtZQUUzRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDckcsTUFBTSxRQUFRLEdBQ2Q7Z0JBQ0UsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztnQkFDdEMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUMvQixPQUFPLEVBQUUsS0FBSztnQkFDZCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUztnQkFDdkYsTUFBTSxFQUFFLElBQUk7Z0JBQ1osV0FBVyxFQUFFLEtBQUs7Z0JBQ2xCLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSzthQUNwQixDQUFDO1lBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUduRCxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEUsT0FBTyxRQUFRLENBQUM7UUFHbEIsQ0FBQyxDQUFBO1FBblZDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUE7SUFFNUMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQzlCLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUM3RCxDQUNGLENBQUM7SUFDSixDQUFDO0lBR00sVUFBVTtRQUNmLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVTLGFBQWE7UUFFckIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3BDO2FBQU07WUFDTCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFFZCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN4QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDcEM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRTtZQUM1QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztTQUMvQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxTQUE2QjtJQUU5QyxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVk7UUFDMUIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBWSxFQUFFLElBQW1CO1FBQy9DLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFZLEVBQUUsSUFBbUI7UUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVTLFdBQVcsQ0FBQyxJQUFtQixFQUFFLEtBQVk7UUFDckQsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUt4RSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQW1CO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN4RCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBWSxFQUFFLElBQUk7UUFDcEMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEM7YUFBTTtZQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUlELFVBQVUsQ0FBQyxJQUFtQixFQUFFLE1BQWU7UUFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUM3QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQzthQUNwRDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDOUM7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUM5QztJQUVILENBQUM7SUFFTyxlQUFlLENBQUMsUUFBYSxFQUFFLElBQW1CLEVBQUUsTUFBZTtRQUN6RSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBb0IsRUFBRSxFQUFFO1lBQzFDLElBQUksSUFBSSxDQUFDO1lBQ1QsSUFBSSxHQUFHLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQ3RCLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN6RCxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDN0M7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNQLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRTtnQkFDOUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2pDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzlDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDcEI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUVMLENBQUM7SUFHRCwyQkFBMkIsQ0FBQyxJQUFtQjtRQUM3QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUdELHVCQUF1QixDQUFDLElBQW1CO1FBQ3pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDdEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUM7WUFDaEQsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQztRQUdyRCxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBR3RDLENBQUM7SUFJRCxzQkFBc0IsQ0FBQyxJQUFtQjtRQUN4QyxJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDNUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBRW5CLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQy9ELGVBQWUsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDNUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FDMUMsQ0FBQztnQkFDRixlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hHLE9BQU8sZUFBZSxDQUFDO2FBQ3hCO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqRDtTQUVGO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakQ7SUFFSCxDQUFDO0lBR0QsNEJBQTRCLENBQUMsSUFBbUI7UUFFOUMsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ25CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMxQixNQUFNLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ2xDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQzFDLENBQUM7YUFDSDtTQUNGO1FBQ0QsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFdEQsQ0FBQztJQUdTLGNBQWM7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQWdCLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3pGO0lBQ0gsQ0FBQztJQUdTLGFBQWE7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzlFO0lBRUgsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFtQixFQUFFLEtBQWEsRUFBRSxJQUFxQjtRQUN0RSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzlCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUM5QixJQUFJLENBQUMsWUFBWSxFQUFFO29CQUVqQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUE7b0JBQ2pDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUNyRDtxQkFBTTtvQkFFTCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDckQ7YUFDRjtpQkFBTTtnQkFDTCxPQUFPLElBQUksQ0FBQzthQUNiO1NBQ0Y7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWMsRUFBRSxRQUFrQjtRQUUzQyxJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLEtBQUssRUFBRTtZQUNULEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO2dCQUNqRCxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDaEYsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUNuQzthQUNGO1lBQUEsQ0FBQztZQUVGLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNkLE9BQU8sS0FBSyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtnQkFDdEMsSUFBSSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25DLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUN2RSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDbkMsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDO2lCQUNoQztnQkFDRCxLQUFLLEVBQUUsQ0FBQzthQUNUO1lBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7U0FDekM7YUFBTTtZQUNMLGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDckM7UUFJRCxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksU0FBUyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDakUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3RDO0lBRUgsQ0FBQztJQUtELG9CQUFvQixDQUFDLFFBQXlCO1FBQzVDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFELElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUE7YUFDdkM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFNRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FDN0IsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUMvQyxDQUFDO1lBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUMxQixDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FDNUYsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFFdEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxRQUF1QixDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDbEMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ1gsUUFBUSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDL0ksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ25DO2FBQU07WUFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDbEY7SUFFSCxDQUFDO0lBMEJELHNCQUFzQixDQUFDLE9BQWdCO1FBQ3JDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxPQUFPLENBQUM7SUFDMUMsQ0FBQztJQUVTLElBQUksQ0FBQyxLQUFzQjtRQUNuQyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFO1lBQzNCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQy9ELENBQUM7WUFDRixLQUFLO2lCQUNGLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN6RCxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3hFO0lBQ0gsQ0FBQztJQUVTLFdBQVcsQ0FBQyxJQUFTO1FBQzdCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQjthQUM1QixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2FBQy9ELEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBR1MsMEJBQTBCLENBQ2xDLElBQVMsRUFDVCxXQUFtQjtRQUVuQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNuRCxNQUFNLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FDMUIsSUFBSSxDQUFDLHNCQUFzQixDQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUNsRCxDQUNGLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQy9DLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQzFFLENBQUM7SUFDSixDQUFDO0lBRU0sR0FBRyxDQUFDLENBQVM7UUFDbEIsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFUyxTQUFTLENBQUMsSUFBUyxFQUFFLFVBQWU7UUFFNUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDM0IsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNqRSxFQUFFLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQztTQUNyQjtRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFHTSxjQUFjLENBQUMsSUFBbUI7UUFDdkMsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDL0UsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUN6QjtRQUNELE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRixJQUFJLE1BQU0sQ0FBQTtRQUNWLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixNQUFNLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQztZQUMxQixNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1NBQ3pEO2FBQU07WUFDTCxNQUFNLEdBQUcsWUFBWSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN0RjtRQUVELElBQUksY0FBYyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTFELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBZ0MsQ0FBQztJQUM3RixDQUFDO0lBRVMsb0JBQW9CLENBQUMsSUFBbUI7UUFDaEQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM5QixJQUFJLEtBQUssR0FBRyxTQUFTLENBQUM7WUFFdEIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUMzQixJQUFJLFVBQVUsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN4RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNyRCxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEVBQUU7b0JBQ3ZELFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdkQ7YUFDRjtZQUNELEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUUvQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3pCLE1BQU0sTUFBTSxHQUFHO29CQUNiLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUTtpQkFDMUIsQ0FBQztnQkFDRixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQ3ZDO1NBQ0Y7SUFDSCxDQUFDOzs0R0F6akJVLGNBQWMsb0VBOEhILFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUM7Z0dBOUgzQyxjQUFjLGc4Q0FGZCxDQUFDLFFBQVEsQ0FBQyx1SEFpR3FCLFdBQVcsbUhBR1QsV0FBVyx1R0FNakIsV0FBVywyRkFRbEIsa0JBQWtCLHdEQ3JPbkQsb2dNQTZIQTtBRG1ERTtJQUFDLHFCQUFxQixFQUFFOztxREFDTTtBQUM5QjtJQUFDLHFCQUFxQixFQUFFOztvREFDTTtBQUM5QjtJQUFDLHFCQUFxQixFQUFFOzt1REFDUztBQU1qQztJQUFDLHFCQUFxQixFQUFFOztnRUFDa0I7QUFDMUM7SUFBQyxxQkFBcUIsRUFBRTs7eURBQ1c7QUFDbkM7SUFBQyxxQkFBcUIsRUFBRTs7aURBQ0c7NEZBM0VoQixjQUFjO2tCQVoxQixTQUFTOytCQUNFLFFBQVEsVUFHVixxQkFBcUIsV0FDcEIsc0JBQXNCLGlCQUNoQixpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNKLGdCQUFnQixFQUFFLE1BQU07cUJBQ3pCLGFBQ1UsQ0FBQyxRQUFRLENBQUM7OzBCQWdJbEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDOzRDQWxFdEQsYUFBYSxNQUViLFlBQVksTUFFWixlQUFlLE1BT2Ysd0JBQXdCLE1BRXhCLGlCQUFpQixNQUVqQixTQUFTLE1BcUJULGdCQUFnQjtzQkFEZixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUl0RSxrQkFBa0I7c0JBRGpCLFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBT3BFLFlBQVk7c0JBRGYsWUFBWTt1QkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBU2xFLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBGbGF0VHJlZUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbmplY3QsXG4gIEluamVjdG9yLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQm9vbGVhbklucHV0Q29udmVydGVyIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9pbnB1dC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgU2VydmljZVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zZXJ2aWNlLXJlc3BvbnNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPVHJlZUNvbXBvbmVudFN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXRlL28tdHJlZS1jb21wb25lbnQtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uLy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgRmlsdGVyRXhwcmVzc2lvblV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbC9maWx0ZXItZXhwcmVzc2lvbi51dGlscyc7XG5pbXBvcnQgeyBTZXJ2aWNlVXRpbHMgfSBmcm9tICcuLi8uLi91dGlsL3NlcnZpY2UudXRpbHMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uLy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0vby1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBYnN0cmFjdE9TZXJ2aWNlQ29tcG9uZW50IH0gZnJvbSAnLi4vby1zZXJ2aWNlLWNvbXBvbmVudC5jbGFzcyc7XG5pbXBvcnQgeyBPVHJlZURhbyB9IGZyb20gJy4vby10cmVlLWRhby5zZXJ2aWNlJztcbmltcG9ydCB7IE9UcmVlRGF0YVNvdXJjZSB9IGZyb20gJy4vby10cmVlLmRhdGFzb3VyY2UnO1xuaW1wb3J0IHsgT1RyZWVOb2RlQ29tcG9uZW50IH0gZnJvbSAnLi90cmVlLW5vZGUvdHJlZS1ub2RlLmNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIE9UcmVlRmxhdE5vZGUgPSB7XG4gIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gIGxhYmVsOiBzdHJpbmc7XG4gIGxldmVsOiBudW1iZXIsXG4gIHJvb3ROb2RlPzogYm9vbGVhbixcbiAgZXhwYW5kYWJsZTogYm9vbGVhbixcbiAgdHJlZU5vZGU/OiBPVHJlZU5vZGVDb21wb25lbnQsXG4gIGRhdGE6IGFueTtcbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgcm91dGU/OiBzdHJpbmdcblxufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19UUkVFID0gW1xuICAvLyBhdHRyIFtzdHJpbmddOiBsaXN0IGlkZW50aWZpZXIuIEl0IGlzIG1hbmRhdG9yeSBpZiBkYXRhIGFyZSBwcm92aWRlZCB0aHJvdWdoIHRoZSBkYXRhIGF0dHJpYnV0ZS4gRGVmYXVsdDogZW50aXR5IChpZiBzZXQpLlxuICAnb2F0dHI6IGF0dHInLFxuXG4gIC8vIHNlcnZpY2UgW3N0cmluZ106IEpFRSBzZXJ2aWNlIHBhdGguIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnc2VydmljZScsXG5cbiAgLy8gZW50aXR5IFtzdHJpbmddOiBlbnRpdHkgb2YgdGhlIHNlcnZpY2UuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnZW50aXR5JyxcblxuICAvLyBjb2x1bW5zIFtzdHJpbmddOiBjb2x1bW5zIG9mIHRoZSBlbnRpdHksIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnY29sdW1ucycsXG5cbiAgLy8ga2V5cyBbc3RyaW5nXTogZW50aXR5IGtleXMsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAna2V5cycsXG5cbiAgLy8gcGFyZW50LWtleXMgW3N0cmluZ106IHBhcmVudCBrZXlzIHRvIGZpbHRlciwgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdwYXJlbnRLZXlzOiBwYXJlbnQta2V5cycsXG5cbiAgLy8gcXVlcnktbWV0aG9kIFtzdHJpbmddOiBuYW1lIG9mIHRoZSBzZXJ2aWNlIG1ldGhvZCB0byBwZXJmb3JtIHF1ZXJpZXMuIERlZmF1bHQ6IHF1ZXJ5LlxuICAncXVlcnlNZXRob2Q6IHF1ZXJ5LW1ldGhvZCcsXG5cbiAgLy8gaW5zZXJ0LWJ1dHRvbiBbbm98eWVzXTogc2hvdyBpbnNlcnQgYnV0dG9uLiBEZWZhdWx0OiB5ZXMuXG4gICdpbnNlcnRCdXR0b246IGluc2VydC1idXR0b24nLFxuXG4gIC8vIHJlZnJlc2gtYnV0dG9uIFtub3x5ZXNdOiBzaG93IHJlZnJlc2ggYnV0dG9uLiBEZWZhdWx0OiB5ZXMuXG4gICdyZWZyZXNoQnV0dG9uOiByZWZyZXNoLWJ1dHRvbicsXG5cbiAgLy8gZGVsZXRlLWJ1dHRvbiBbbm98eWVzXTogc2hvdyBkZWxldGUgYnV0dG9uIHdoZW4gdXNlciBzZWxlY3QgaXRlbXMuIERlZmF1bHQ6IHllcy5cbiAgJ2RlbGV0ZUJ1dHRvbjogZGVsZXRlLWJ1dHRvbicsXG5cbiAgLy8gRU5EIE9GIERFRkFVTFRfSU5QVVRTX09fU0VSVklDRV9DT01QT05FTlRcbiAgJ3Zpc2libGVDb2x1bW5zOiB2aXNpYmxlLWNvbHVtbnMnLFxuICAnc2VsZWN0QWxsQ2hlY2tib3g6IHNlbGVjdC1hbGwtY2hlY2tib3gnLFxuICAnc2VwYXJhdG9yJyxcbiAgJ3BhcmVudENvbHVtbjogcGFyZW50LWNvbHVtbicsXG4gICdzb3J0Q29sdW1uOiBzb3J0LWNvbHVtbicsXG4gIC8vIHNlbGVjdC1hbGwtY2hlY2tib3gtdmlzaWJsZSBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHNlbGVjdGlvbiBjaGVjayBib3hlcy5EZWZhdWx0OiBuby5cbiAgJ3NlbGVjdEFsbENoZWNrYm94VmlzaWJsZTogc2VsZWN0LWFsbC1jaGVja2JveC12aXNpYmxlJyxcbiAgLy8gZmlsdGVyIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHdoZXRoZXIgZmlsdGVyIGlzIGNhc2Ugc2Vuc2l0aXZlLiBEZWZhdWx0OiBuby5cbiAgJ2ZpbHRlckNhc2VTZW5zaXRpdmU6IGZpbHRlci1jYXNlLXNlbnNpdGl2ZScsXG4gIC8vIHF1aWNrLWZpbHRlciBbbm98eWVzXTogc2hvdyBxdWljayBmaWx0ZXIuIERlZmF1bHQ6IHllcy5cbiAgJ3F1aWNrRmlsdGVyOiBxdWljay1maWx0ZXInLFxuICAvLyBxdWljay1maWx0ZXItcGxhY2Vob2xkZXI6IHF1aWNrIGZpbHRlciBwbGFjZWhvbGRlclxuICAncXVpY2tGaWx0ZXJQbGFjZWhvbGRlcjogcXVpY2stZmlsdGVyLXBsYWNlaG9sZGVyJyxcbiAgLy8gcXVpY2stZmlsdGVyLWNvbHVtbnMgW3N0cmluZ106IGNvbHVtbnMgb2YgdGhlIGZpbHRlciwgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdxdWlja0ZpbHRlckNvbHVtbnM6IHF1aWNrLWZpbHRlci1jb2x1bW5zJyxcbiAgLy8gZGV0YWlsLW1vZGUgW25vbmV8Y2xpY2t8ZG91YmxlY2xpY2tdOiB3YXkgdG8gb3BlbiB0aGUgZGV0YWlsIGZvcm0gb2YgYSByb3cuIERlZmF1bHQ6ICdjbGljaycuXG4gICdkZXRhaWxNb2RlOiBkZXRhaWwtbW9kZScsXG4gIC8vIGRldGFpbC1mb3JtLXJvdXRlIFtzdHJpbmddOiByb3V0ZSBvZiBkZXRhaWwgZm9ybS4gRGVmYXVsdDogJ2RldGFpbCcuXG4gICdkZXRhaWxGb3JtUm91dGU6IGRldGFpbC1mb3JtLXJvdXRlJyxcbiAgLy8gc2hvdy1idXR0b25zLXRleHQgW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyB0ZXh0IG9mIGhlYWRlciBidXR0b25zLiBEZWZhdWx0OiB5ZXMuXG4gICdzaG93QnV0dG9uc1RleHQ6IHNob3ctYnV0dG9ucy10ZXh0JyxcbiAgJ3Jvb3RUaXRsZTogcm9vdC10aXRsZScsXG4gICdyZWN1cnNpdmUnLFxuICAncm91dGUnXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRQVVRTX09fVFJFRSA9IFsnb25Ob2RlU2VsZWN0ZWQnLCAnb25Ob2RlRXhwYW5kZWQnLCAnb25Ob2RlQ29sbGFwc2VkJywgJ29uTG9hZE5leHRMZXZlbCcsICdvbkRhdGFMb2FkZWQnLCAnb25Ob2RlQ2xpY2snXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnby10cmVlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL28tdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL28tdHJlZS5jb21wb25lbnQuc2NzcyddLFxuICBpbnB1dHM6IERFRkFVTFRfSU5QVVRTX09fVFJFRSxcbiAgb3V0cHV0czogREVGQVVMVF9PVVRQVVRTX09fVFJFRSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3Muby10cmVlXSc6ICd0cnVlJ1xuICB9LFxuICBwcm92aWRlcnM6IFtPVHJlZURhb11cbn0pXG5leHBvcnQgY2xhc3MgT1RyZWVDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdE9TZXJ2aWNlQ29tcG9uZW50PE9UcmVlQ29tcG9uZW50U3RhdGVTZXJ2aWNlPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcblxuICBnZXRMZXZlbCA9IChub2RlOiBPVHJlZUZsYXROb2RlKSA9PiBub2RlLmxldmVsO1xuXG4gIGlzRXhwYW5kYWJsZSA9IChub2RlOiBPVHJlZUZsYXROb2RlKSA9PiBub2RlLmV4cGFuZGFibGU7XG5cbiAgZ2V0Q2hpbGRyZW4gPSAobm9kZTogT1RyZWVGbGF0Tm9kZSk6IGFueSA9PiB7XG4gICAgaWYgKHRoaXMucmVjdXJzaXZlKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZWN1cnNpdmVDaGlsZHJlbk5vZGUobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFRyZWVOb2RlQ2hpbGRyZW4obm9kZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VHJlZU5vZGVDaGlsZHJlbihub2RlOiBPVHJlZUZsYXROb2RlKTogYW55IHtcbiAgICBpZiAobm9kZS5sZXZlbCA9PT0gMCAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLnJvb3RUaXRsZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3ROb2RlcztcbiAgICB9IGVsc2UgaWYgKG5vZGUudHJlZU5vZGUpIHtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChub2RlLnRyZWVOb2RlLnJvb3RUaXRsZSkgJiYgIVV0aWwuaXNEZWZpbmVkKG5vZGUucm9vdE5vZGUpKSB7XG4gICAgICAgIGxldCByb290Tm9kZTogT1RyZWVGbGF0Tm9kZSA9IHtcbiAgICAgICAgICBpZDogdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoICsgMSwgcm9vdE5vZGU6IHRydWUsIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KG5vZGUudHJlZU5vZGUucm9vdFRpdGxlKSwgbGV2ZWw6IG5vZGUubGV2ZWwgKyAxLCBleHBhbmRhYmxlOiB0cnVlLCBkYXRhOiBub2RlLmRhdGEsIGlzTG9hZGluZzogZmFsc2UsIHRyZWVOb2RlOiBub2RlLnRyZWVOb2RlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGFvVHJlZS5mbGF0Tm9kZU1hcC5zZXQocm9vdE5vZGUsIG5vZGUpO1xuICAgICAgICByZXR1cm4gW3Jvb3ROb2RlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBub2RlLnRyZWVOb2RlLmNoaWxkUXVlcnlEYXRhKG5vZGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlTm9kZXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtW3RoaXMucGFyZW50S2V5c10gPT09IG5vZGVbdGhpcy5rZXlzXSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmVjdXJzaXZlQ2hpbGRyZW5Ob2RlKG5vZGU6IE9UcmVlRmxhdE5vZGUpOiBhbnkge1xuICAgIGlmIChub2RlLmxldmVsID09PSAwICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMucm9vdFRpdGxlKSkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdE5vZGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGlsZFF1ZXJ5RGF0YShub2RlKTtcbiAgICB9XG5cbiAgfVxuICBnZXRDb21wb25lbnRGaWx0ZXIoZXhpc3RpbmdGaWx0ZXI6IGFueSA9IHt9KTogYW55IHtcbiAgICBsZXQgZmlsdGVyID0gZXhpc3RpbmdGaWx0ZXI7XG4gICAgaWYgKHRoaXMucmVjdXJzaXZlICYmIHRoaXMucGFyZW50Q29sdW1uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHBhcmVudEl0ZW1FeHByID0gRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkRXhwcmVzc2lvbkZyb21PYmplY3QoZmlsdGVyKTtcbiAgICAgIGNvbnN0IHBhcmVudE5vdE51bGxFeHByID0gRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkRXhwcmVzc2lvbklzTnVsbCh0aGlzLnBhcmVudENvbHVtbik7XG4gICAgICBjb25zdCBmaWx0ZXJFeHByID0gRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkQ29tcGxleEV4cHJlc3Npb24ocGFyZW50SXRlbUV4cHIsIHBhcmVudE5vdE51bGxFeHByLCBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuT1BfQU5EKTtcbiAgICAgIGZpbHRlciA9IHt9O1xuICAgICAgZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5GSUxURVJfRVhQUkVTU0lPTl9LRVldID0gZmlsdGVyRXhwcjtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmdldENvbXBvbmVudEZpbHRlcihmaWx0ZXIpO1xuICB9XG5cbiAgaGFzQ2hpbGQgPSAoXzogbnVtYmVyLCBfbm9kZURhdGE6IE9UcmVlRmxhdE5vZGUpID0+IF9ub2RlRGF0YS5leHBhbmRhYmxlO1xuXG4gIGhhc05vQ29udGVudCA9IChfOiBudW1iZXIsIF9ub2RlRGF0YTogT1RyZWVGbGF0Tm9kZSkgPT4gX25vZGVEYXRhLmxhYmVsID09PSAnJztcblxuXG4gIGRhdGFTb3VyY2U6IE9UcmVlRGF0YVNvdXJjZTtcblxuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcmVmcmVzaEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBkZWxldGVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dCdXR0b25zVGV4dDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHZpc2libGVDb2x1bW5zOiBzdHJpbmc7XG4gIHNlcGFyYXRvcjogc3RyaW5nID0gQ29kZXMuSFlQSEVOX1NFUEFSQVRPUjtcbiAgcGFyZW50Q29sdW1uOiBzdHJpbmc7XG4gIHNvcnRDb2x1bW46IHN0cmluZztcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNlbGVjdEFsbENoZWNrYm94VmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2VsZWN0QWxsQ2hlY2tib3g6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHJlY3Vyc2l2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBfcXVpY2tGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcGFnaW5hdGlvbkNvbnRyb2xzID0gZmFsc2U7XG4gIHF1aWNrRmlsdGVyQ29sdW1uczogc3RyaW5nO1xuXG4gIGNoaWxkcmVOb2RlczogT1RyZWVGbGF0Tm9kZVtdID0gW107XG4gIG5vZGVzQXJyYXk6IE9UcmVlRmxhdE5vZGVbXSA9IFtdO1xuICBhbmNlc3RvcnM6IGFueVtdID0gW107XG4gIGNoZWNrbGlzdFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxPVHJlZUZsYXROb2RlPih0cnVlLCBbXSwgdHJ1ZSwgKHNtMSwgc20yKSA9PiBzbTEuaWQgPT09IHNtMi5pZCk7XG5cbiAgb25Ob2RlU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBvbk5vZGVFeHBhbmRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIG9uTm9kZUNvbGxhcHNlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIG9uTG9hZE5leHRMZXZlbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIG9uTm9kZUNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICByb290VGl0bGU6IHN0cmluZztcbiAgcm9vdE5vZGVzOiBPVHJlZUZsYXROb2RlW10gPSBbXTtcbiAgZGFvVHJlZTogT1RyZWVEYW87XG5cbiAgQENvbnRlbnRDaGlsZCgnbGVhZk5vZGVUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogZmFsc2UgfSlcbiAgbGVhZk5vZGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkKCdwYXJlbnROb2RlVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IGZhbHNlIH0pXG4gIHBhcmVudE5vZGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICB0cmVlRmxhdHRlbmVyOiBhbnk7XG4gIHRyZWVDb250cm9sOiBGbGF0VHJlZUNvbnRyb2w8T1RyZWVGbGF0Tm9kZSwgT1RyZWVGbGF0Tm9kZT47XG5cbiAgQENvbnRlbnRDaGlsZCgnbm9kZVRlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiBmYWxzZSB9KVxuICBzZXQgbm9kZVRlbXBsYXRlKHZhbHVlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIHRoaXMubGVhZk5vZGVUZW1wbGF0ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5wYXJlbnROb2RlVGVtcGxhdGUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBAQ29udGVudENoaWxkKGZvcndhcmRSZWYoKCkgPT4gT1RyZWVOb2RlQ29tcG9uZW50KSwgeyBkZXNjZW5kYW50czogZmFsc2UgfSlcbiAgdHJlZU5vZGUhOiBPVHJlZU5vZGVDb21wb25lbnQ7XG5cbiAgcHJvdGVjdGVkIHZpc2libGVDb2x1bW5zQXJyYXk6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBlbmFibGVkRGVsZXRlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHVibGljIHJvdXRlOiBzdHJpbmc7XG4gIGdldCBzaG93VHJlZU1lbnVCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3RhdGljT3B0ID0gdGhpcy5zZWxlY3RBbGxDaGVja2JveDtcbiAgICByZXR1cm4gc3RhdGljT3B0O1xuICB9XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChmb3J3YXJkUmVmKCgpID0+IE9Gb3JtQ29tcG9uZW50KSkgZm9ybTogT0Zvcm1Db21wb25lbnRcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IsIGVsUmVmLCBmb3JtKTtcbiAgICB0aGlzLmRhb1RyZWUgPSB0aGlzLmluamVjdG9yLmdldChPVHJlZURhbylcblxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXRUcmVlQ29udHJvbCgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVBhcmFtcygpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5zZWxlY3Rpb24uY2hhbmdlZC5zdWJzY3JpYmUoXG4gICAgICAgICgpID0+ICh0aGlzLmVuYWJsZWREZWxldGVCdXR0b24gPSAhdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSgpKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuXG4gIHB1YmxpYyBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICB0aGlzLmluaXRpYWxpemVEYW8oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbml0aWFsaXplRGFvKCkge1xuXG4gICAgaWYgKHRoaXMuc3RhdGljRGF0YSkge1xuICAgICAgdGhpcy5xdWVyeU9uQmluZCA9IGZhbHNlO1xuICAgICAgdGhpcy5xdWVyeU9uSW5pdCA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXREYXRhQXJyYXkodGhpcy5zdGF0aWNEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maWd1cmVTZXJ2aWNlKCk7XG4gICAgfVxuICB9XG5cbiAgaW5pdGlhbGl6ZVBhcmFtcygpOiB2b2lkIHtcbiAgICAvLyBJZiB2aXNpYmxlLWNvbHVtbnMgaXMgbm90IHByZXNlbnQgdGhlbiB2aXNpYmxlLWNvbHVtbnMgaXMgYWxsIGNvbHVtbnNcbiAgICBpZiAoIXRoaXMudmlzaWJsZUNvbHVtbnMpIHtcbiAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gICAgfVxuXG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLnF1aWNrRmlsdGVyQ29sdW1ucykpIHtcbiAgICAgIHRoaXMucXVpY2tGaWx0ZXJDb2x1bW5zID0gdGhpcy52aXNpYmxlQ29sdW1ucztcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1uc0FycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMudmlzaWJsZUNvbHVtbnMsIHRydWUpO1xuICAgIHRoaXMucXVpY2tGaWx0ZXJDb2xBcnJheSA9IFV0aWwucGFyc2VBcnJheSh0aGlzLnF1aWNrRmlsdGVyQ29sdW1ucywgdHJ1ZSk7XG4gICAgdGhpcy5zZXREYXRhc291cmNlKCk7XG4gICAgdGhpcy5hZnRlclZpZXdJbml0KCk7XG4gICAgaWYgKHRoaXMucXVlcnlPbkluaXQpIHtcbiAgICAgIHRoaXMucXVlcnlEYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95KCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHJlZ2lzdGVyVHJlZU5vZGUob1RyZWVOb2RlOiBPVHJlZU5vZGVDb21wb25lbnQpIHtcbiAgICAvLyB0aGlzLmRhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKClcbiAgfVxuXG4gIGNoZWNrYm94Q2xpY2tlZChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIGxlYWZOb2RlQ2xpY2tlZChldmVudDogRXZlbnQsIG5vZGU6IE9UcmVlRmxhdE5vZGUpOiB2b2lkIHtcbiAgICB0aGlzLm5vZGVDbGlja2VkKG5vZGUsIGV2ZW50KTtcbiAgfVxuXG4gIHBhcmVudE5vZGVDbGlja2VkKGV2ZW50OiBFdmVudCwgbm9kZTogT1RyZWVGbGF0Tm9kZSk6IHZvaWQge1xuICAgIHRoaXMubm9kZUNsaWNrZWQobm9kZSwgZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG5vZGVDbGlja2VkKG5vZGU6IE9UcmVlRmxhdE5vZGUsIGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5vbk5vZGVDbGljay5lbWl0KG5vZGUpO1xuICAgIGlmICh0aGlzLmRldGFpbE1vZGUgIT09IENvZGVzLkRFVEFJTF9NT0RFX05PTkUgJiYgIXRoaXMuaXNSb290Tm9kZShub2RlKSkge1xuICAgICAgLypcbiAgICAgIFNlIHBvZHJpYSBtZWpvcmFyIGxsYW1hbmRvIHRoaXMudmlld0RldGFpbChub2RlLmRhdGEpO1xuICAgICAgc2kgYWxtYWNlbmFtb3MgZWwgbm9kbywgYWN0dWFsbWVudGUgc2UgZXN0YSBhbG1hY2VuYW5kbyBzaSBleGlzdGUgdW4gdHJlZS1ub2RlIGhpam9cbiAgICAgICovXG4gICAgICB0aGlzLm5hdmlnYXRlVG9WaWV3RGV0YWlsKG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGlzUm9vdE5vZGUobm9kZTogT1RyZWVGbGF0Tm9kZSkge1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZChub2RlLnJvb3ROb2RlKSAmJiBub2RlLnJvb3ROb2RlO1xuICB9XG5cbiAgb25DbGlja1RvZ2dsZUJ1dHRvbihldmVudDogRXZlbnQsIG5vZGUpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpKSB7XG4gICAgICB0aGlzLm9uTm9kZUV4cGFuZGVkLmVtaXQobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25Ob2RlQ29sbGFwc2VkLmVtaXQobm9kZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAqIFRvZ2dsZSB0aGUgbm9kZSwgcmVtb3ZlIGZyb20gZGlzcGxheSBsaXN0XG4gICovXG4gIHRvZ2dsZU5vZGUobm9kZTogT1RyZWVGbGF0Tm9kZSwgZXhwYW5kOiBib29sZWFuKSB7XG4gICAgbm9kZS5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIGlmIChleHBhbmQgJiYgbm9kZS5leHBhbmRhYmxlKSB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0Q2hpbGRyZW4obm9kZSk7XG4gICAgICBpZiAoVXRpbC5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UudXBkYXRlVHJlZShub2RlLCBjaGlsZHJlbiwgZXhwYW5kKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlQXN5bmNUcmVlKGNoaWxkcmVuLCBub2RlLCBleHBhbmQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UudXBkYXRlVHJlZShub2RlLCBbXSwgZXhwYW5kKTtcbiAgICB9XG5cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQXN5bmNUcmVlKGNoaWxkcmVuOiBhbnksIG5vZGU6IE9UcmVlRmxhdE5vZGUsIGV4cGFuZDogYm9vbGVhbikge1xuICAgIGNoaWxkcmVuLnN1YnNjcmliZSgocmVzOiBTZXJ2aWNlUmVzcG9uc2UpID0+IHtcbiAgICAgIGxldCBkYXRhO1xuICAgICAgaWYgKHJlcy5pc1N1Y2Nlc3NmdWwoKSkge1xuICAgICAgICBjb25zdCBhcnJEYXRhID0gKHJlcy5kYXRhICE9PSB1bmRlZmluZWQpID8gcmVzLmRhdGEgOiBbXTtcbiAgICAgICAgZGF0YSA9IFV0aWwuaXNBcnJheShhcnJEYXRhKSA/IGFyckRhdGEgOiBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGF0YVNvdXJjZS51cGRhdGVUcmVlKG5vZGUsIGRhdGEsIGV4cGFuZCk7XG4gICAgfSwgZXJyID0+IHtcbiAgICAgIG5vZGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5xdWVyeUZhbGxiYWNrRnVuY3Rpb24pKSB7XG4gICAgICAgIHRoaXMucXVlcnlGYWxsYmFja0Z1bmN0aW9uKGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9FcnJvckRpYWxvZ01hbmFnZXIub3BlbkVycm9yRGlhbG9nKGVycik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgLyoqIFRvZ2dsZSBhIGxlYWYgdG8tZG8gaXRlbSBzZWxlY3Rpb24uIENoZWNrIGFsbCB0aGUgcGFyZW50cyB0byBzZWUgaWYgdGhleSBjaGFuZ2VkICovXG4gIHRvZG9MZWFmSXRlbVNlbGVjdGlvblRvZ2dsZShub2RlOiBPVHJlZUZsYXROb2RlKTogdm9pZCB7XG4gICAgdGhpcy50b2RvSXRlbVNlbGVjdGlvblRvZ2dsZShub2RlKTtcbiAgfVxuXG4gIC8qKiBUb2dnbGUgdGhlIHRvLWRvIGl0ZW0gc2VsZWN0aW9uLiBTZWxlY3QvZGVzZWxlY3QgYWxsIHRoZSBkZXNjZW5kYW50cyBub2RlICovXG4gIHRvZG9JdGVtU2VsZWN0aW9uVG9nZ2xlKG5vZGU6IE9UcmVlRmxhdE5vZGUpOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi50b2dnbGUobm9kZSk7XG5cbiAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSk7XG4gICAgdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKVxuICAgICAgPyB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3QoLi4uZGVzY2VuZGFudHMpXG4gICAgICA6IHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLmRlc2NlbmRhbnRzKTtcblxuICAgIC8vIEZvcmNlIHVwZGF0ZSBmb3IgdGhlIHBhcmVudFxuICAgIGRlc2NlbmRhbnRzLmV2ZXJ5KChjaGlsZCkgPT4gdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChjaGlsZCkpO1xuICAgIHRoaXMub25Ob2RlU2VsZWN0ZWQuZW1pdChub2RlLmRhdGEpO1xuXG5cbiAgfVxuXG5cbiAgLyoqIFdoZXRoZXIgYWxsIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgbm9kZSBhcmUgc2VsZWN0ZWQuICovXG4gIGRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZTogT1RyZWVGbGF0Tm9kZSk6IGJvb2xlYW4ge1xuICAgIGxldCBkZXNjQWxsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSk7XG4gICAgaWYgKG5vZGUuZXhwYW5kYWJsZSkge1xuXG4gICAgICBpZiAodGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpICYmIGRlc2NlbmRhbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGVzY0FsbFNlbGVjdGVkID0gZGVzY2VuZGFudHMuZXZlcnkoKGNoaWxkKSA9PlxuICAgICAgICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoY2hpbGQpXG4gICAgICAgICk7XG4gICAgICAgIGRlc2NBbGxTZWxlY3RlZCA/IHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdChub2RlKSA6IHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmRlc2VsZWN0KG5vZGUpO1xuICAgICAgICByZXR1cm4gZGVzY0FsbFNlbGVjdGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSk7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSk7XG4gICAgfVxuXG4gIH1cblxuICAvKiogV2hldGhlciBwYXJ0IG9mIHRoZSBkZXNjZW5kYW50cyBhcmUgc2VsZWN0ZWQgKi9cbiAgZGVzY2VuZGFudHNQYXJ0aWFsbHlTZWxlY3RlZChub2RlOiBPVHJlZUZsYXROb2RlKTogYm9vbGVhbiB7XG5cbiAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpO1xuICAgIGlmIChub2RlLmV4cGFuZGFibGUpIHtcbiAgICAgIGlmIChkZXNjZW5kYW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdCA9IGRlc2NlbmRhbnRzLnNvbWUoKGNoaWxkKSA9PlxuICAgICAgICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoY2hpbGQpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQgJiYgIXRoaXMuZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlKTtcblxuICB9XG5cblxuICBwcm90ZWN0ZWQgc2V0VHJlZUNvbnRyb2woKSB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLnRyZWVDb250cm9sKSkge1xuICAgICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8T1RyZWVGbGF0Tm9kZT4odGhpcy5nZXRMZXZlbCwgdGhpcy5pc0V4cGFuZGFibGUpO1xuICAgIH1cbiAgfVxuICAvKiogKi9cblxuICBwcm90ZWN0ZWQgc2V0RGF0YXNvdXJjZSgpIHtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBPVHJlZURhdGFTb3VyY2UodGhpcywgdGhpcy50cmVlQ29udHJvbCwgdGhpcy5pbmplY3Rvcik7XG4gICAgfVxuXG4gIH1cblxuICBnZXRQYXJlbnROb2Rlcyhub2RlOiBPVHJlZUZsYXROb2RlLCBpbmRleDogbnVtYmVyLCB0cmVlOiBPVHJlZUZsYXROb2RlW10pOiBPVHJlZUZsYXROb2RlW10ge1xuICAgIGxldCBwYXJlbnROb2RlID0gdGhpcy5kYW9UcmVlLmZsYXROb2RlTWFwLmdldChub2RlKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQocGFyZW50Tm9kZSkpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nTm9kZSA9IHRyZWUuZmluZEluZGV4KHggPT4geFsnaWQnXSA9PT0gcGFyZW50Tm9kZVsnaWQnXSkgPiAtMTtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChwYXJlbnROb2RlKSkge1xuICAgICAgICBpZiAoIWV4aXN0aW5nTm9kZSkge1xuICAgICAgICAgIC8vaWYgbm90IGV4aXN0IG5vZGUgaW4gdHJlZSB0aGVuLCBhZGQgcGFyZW50IGJlZm9yZSBub2RlXG4gICAgICAgICAgdHJlZS5zcGxpY2UoaW5kZXgsIDAsIHBhcmVudE5vZGUpXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFyZW50Tm9kZXMocGFyZW50Tm9kZSwgaW5kZXgsIHRyZWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vaWYgbm90IGV4aXN0IG5vZGUgaW4gdHJlZSB0aGVuLCBhZGQgcGFyZW50IGJlZm9yZSBub2RlXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFyZW50Tm9kZXMocGFyZW50Tm9kZSwgaW5kZXgsIHRyZWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJlZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRyZWU7XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyRGF0YSh2YWx1ZT86IHN0cmluZywgbG9hZE1vcmU/OiBib29sZWFuKTogdm9pZCB7XG5cbiAgICBsZXQgZmlsdGVyZWRUcmVlRGF0YSA9IFtdO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgZm9yIChsZXQgW25lc3RlZE5vZGVdIG9mIHRoaXMuZGFvVHJlZS5mbGF0Tm9kZU1hcCkge1xuICAgICAgICBpZiAobmVzdGVkTm9kZS5sYWJlbC50b0xvY2FsZUxvd2VyQ2FzZSgpLmluZGV4T2YodmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSkgPiAtMSkge1xuICAgICAgICAgIGZpbHRlcmVkVHJlZURhdGEucHVzaChuZXN0ZWROb2RlKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgIHdoaWxlIChpbmRleCA8IGZpbHRlcmVkVHJlZURhdGEubGVuZ3RoKSB7XG4gICAgICAgIGxldCBub2RlID0gZmlsdGVyZWRUcmVlRGF0YVtpbmRleF07XG4gICAgICAgIGNvbnN0IHBhcmVudE5vZGVzID0gdGhpcy5nZXRQYXJlbnROb2Rlcyhub2RlLCBpbmRleCwgZmlsdGVyZWRUcmVlRGF0YSk7XG4gICAgICAgIGlmICghVXRpbC5pc0FycmF5RW1wdHkocGFyZW50Tm9kZXMpKSB7XG4gICAgICAgICAgZmlsdGVyZWRUcmVlRGF0YSA9IHBhcmVudE5vZGVzO1xuICAgICAgICB9XG4gICAgICAgIGluZGV4Kys7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGZpbHRlcmVkVHJlZURhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbHRlcmVkVHJlZURhdGEgPSB0aGlzLmRhdGFSZXNwb25zZUFycmF5O1xuICAgICAgdGhpcy5zZXREYXRhQXJyYXkoZmlsdGVyZWRUcmVlRGF0YSk7XG4gICAgfVxuXG5cbiAgICAvLyBOb3RpZnkgdGhlIGNoYW5nZS5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGxldCByb290Tm9kZXMgPSBmaWx0ZXJlZFRyZWVEYXRhLmZpbHRlcihub2RlID0+IG5vZGUubGV2ZWwgPT0gMCk7XG4gICAgICB0aGlzLmV4cGFuZE5vZGVzV2l0aE5vZGVzKHJvb3ROb2Rlcyk7XG4gICAgfVxuXG4gIH1cbiAgLyoqXG4gICAqIEV4cGFuZHMgbm9kZXMgd2l0aCBub2Rlc1xuICAgKiBAcGFyYW0gdHJlZURhdGFcbiAgICovXG4gIGV4cGFuZE5vZGVzV2l0aE5vZGVzKHRyZWVEYXRhOiBPVHJlZUZsYXROb2RlW10pIHtcbiAgICB0cmVlRGF0YS5maWx0ZXIobm9kZSA9PiBub2RlLmV4cGFuZGFibGUpLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSk7XG4gICAgICBpZiAoZGVzY2VuZGFudHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChub2RlKTtcbiAgICAgICAgdGhpcy5leHBhbmROb2Rlc1dpdGhOb2RlcyhkZXNjZW5kYW50cylcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgICogR2V0cyBkYXRhIHRyZWVcbiAgICAqIEByZXR1cm5zXG4gICAgKi9cbiAgZ2V0RGF0YUFycmF5KCkge1xuICAgIHJldHVybiB0aGlzLmRhb1RyZWUuZGF0YTtcbiAgfVxuXG4gIHNldERhdGFBcnJheShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmRhb1RyZWUuZmxhdE5vZGVNYXAuY2xlYXIoKTtcbiAgICB0aGlzLmRhb1RyZWUuc2V0RGF0YUFycmF5KGRhdGEpO1xuICAgIGlmICh0aGlzLnJlY3Vyc2l2ZSkge1xuICAgICAgdGhpcy5jaGlsZHJlTm9kZXMgPSBkYXRhLmZpbHRlcihcbiAgICAgICAgKGl0ZW06IGFueSkgPT4gaXRlbVt0aGlzLnBhcmVudENvbHVtbl0gIT0gbnVsbFxuICAgICAgKTtcbiAgICAgIHRoaXMucm9vdE5vZGVzID0gZGF0YS5maWx0ZXIoXG4gICAgICAgIChpdGVtOiBhbnkpID0+ICFVdGlsLmlzRGVmaW5lZChpdGVtW3RoaXMucGFyZW50Q29sdW1uXSkgfHwgaXRlbVt0aGlzLnBhcmVudENvbHVtbl0gPT09IG51bGxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5yb290Tm9kZXMgPSBkYXRhO1xuXG4gICAgbGV0IGxldmVsID0gMDtcbiAgICBsZXQgcm9vdE5vZGU6IE9UcmVlRmxhdE5vZGU7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMucm9vdFRpdGxlKSkge1xuICAgICAgbGV2ZWwgPSArMTtcbiAgICAgIHJvb3ROb2RlID0geyBpZDogMCwgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQodGhpcy5yb290VGl0bGUpLCByb290Tm9kZTogdHJ1ZSwgbGV2ZWw6IDAsIGV4cGFuZGFibGU6IHRydWUsIGRhdGE6IHt9LCBpc0xvYWRpbmc6IGZhbHNlIH07XG4gICAgICB0aGlzLmRhb1RyZWUuZmxhdE5vZGVNYXAuc2V0KHJvb3ROb2RlLCBudWxsKTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gW3Jvb3ROb2RlXTtcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKHJvb3ROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLnJvb3ROb2Rlcy5tYXAobm9kZSA9PiB0aGlzLnRyYW5zZm9ybWVyKG5vZGUsIGxldmVsKSk7XG4gICAgfVxuXG4gIH1cblxuICB0cmFuc2Zvcm1lciA9IChub2RlOiBhbnksIGxldmVsOiBudW1iZXIsIHBhcmVudE5vZGU/OiBhbnkpID0+IHtcblxuICAgIGNvbnN0IG5vZGVDaGlsZHJlbiA9IHRoaXMuY2hpbGRyZU5vZGVzLmZpbHRlcigoaXRlbSkgPT4gaXRlbVt0aGlzLnBhcmVudENvbHVtbl0gPT09IG5vZGVbdGhpcy5rZXlzXSk7XG4gICAgY29uc3QgZmxhdE5vZGU6IE9UcmVlRmxhdE5vZGUgPVxuICAgIHtcbiAgICAgICdpZCc6IHRoaXMuZ2V0Tm9kZUlkKG5vZGUsIHBhcmVudE5vZGUpLFxuICAgICAgJ2xhYmVsJzogdGhpcy5nZXRJdGVtVGV4dChub2RlKSxcbiAgICAgICdsZXZlbCc6IGxldmVsLFxuICAgICAgdHJlZU5vZGU6IHRoaXMudHJlZU5vZGUsXG4gICAgICAnZXhwYW5kYWJsZSc6IFV0aWwuaXNEZWZpbmVkKHRoaXMudHJlZU5vZGUpIHx8ICEhbm9kZUNoaWxkcmVuPy5sZW5ndGggfHwgdGhpcy5yZWN1cnNpdmUsXG4gICAgICAnZGF0YSc6IG5vZGUsXG4gICAgICAnaXNMb2FkaW5nJzogZmFsc2UsXG4gICAgICAncm91dGUnOiB0aGlzLnJvdXRlXG4gICAgfTtcblxuICAgIHRoaXMuZGFvVHJlZS5mbGF0Tm9kZU1hcC5zZXQoZmxhdE5vZGUsIHBhcmVudE5vZGUpO1xuXG4gICAgLy9yZWN1cnNpdmVcbiAgICBub2RlQ2hpbGRyZW4uZm9yRWFjaChub2RlID0+IHRoaXMudHJhbnNmb3JtZXIobm9kZSwgbGV2ZWwgKyAxKSk7XG4gICAgcmV0dXJuIGZsYXROb2RlO1xuXG5cbiAgfVxuXG4gIG9uU2VsZWN0Q2hlY2tib3hDaGFuZ2UodmlzaWJsZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlID0gdmlzaWJsZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzb3J0KGFycmF5OiBPVHJlZUZsYXROb2RlW10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zb3J0Q29sdW1uICE9IG51bGwpIHtcbiAgICAgIGFycmF5LnNvcnQoKGEsIGIpID0+XG4gICAgICAgIGEuZGF0YVt0aGlzLnNvcnRDb2x1bW5dLmxvY2FsZUNvbXBhcmUoYi5kYXRhW3RoaXMuc29ydENvbHVtbl0pXG4gICAgICApO1xuICAgICAgYXJyYXlcbiAgICAgICAgLmZpbHRlcigobm9kZSkgPT4gISF0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpKVxuICAgICAgICAuZm9yRWFjaCgobm9kZSkgPT4gdGhpcy5zb3J0KHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSkpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SXRlbVRleHQoaXRlbTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQ29sdW1uc0FycmF5XG4gICAgICAuZmlsdGVyKChjb2wpID0+IGl0ZW1bY29sXSAhPSBudWxsICYmIGAke2l0ZW1bY29sXX1gLmxlbmd0aCA+IDApXG4gICAgICAubWFwKChjb2wpID0+IGl0ZW1bY29sXSlcbiAgICAgIC5qb2luKHRoaXMuc2VwYXJhdG9yKTtcbiAgfVxuXG4gIGdldEl0ZW1LZXkoaXRlbTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5rZXlzQXJyYXkubWFwKChjb2wpID0+IGl0ZW1bY29sXSkuam9pbignOycpO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgZmlsdGVyQnlRdWlja0ZpbHRlckNvbHVtbnMoXG4gICAgaXRlbTogYW55LFxuICAgIHF1aWNrZmlsdGVyOiBzdHJpbmdcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2FzZVNlbnNpdGl2ZSA9IHRoaXMuaXNGaWx0ZXJDYXNlU2Vuc2l0aXZlKCk7XG4gICAgY29uc3QgcmVnRXhwU3RyID0gbmV3IFJlZ0V4cChcbiAgICAgIFV0aWwuZXNjYXBlU3BlY2lhbENoYXJhY3RlcihcbiAgICAgICAgVXRpbC5ub3JtYWxpemVTdHJpbmcocXVpY2tmaWx0ZXIsICFjYXNlU2Vuc2l0aXZlKVxuICAgICAgKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVpY2tGaWx0ZXJDb2x1bW5zKCkuc29tZSgoY29sKSA9PlxuICAgICAgcmVnRXhwU3RyLnRlc3QoVXRpbC5ub3JtYWxpemVTdHJpbmcoaXRlbS5kYXRhW2NvbF0gKyAnJywgIWNhc2VTZW5zaXRpdmUpKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYWRkKGU/OiBFdmVudCk6IHZvaWQge1xuICAgIHN1cGVyLmluc2VydERldGFpbCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldE5vZGVJZChpdGVtOiBhbnksIHBhcmVudE5vZGU6IGFueSkge1xuICAgIC8qKiByZXZpc2FybG86aWd1YWwgY29uIGlkIGluY3JlbWVudGFsIGVyYSBtYXMgZmFjaWwgZSBpZ3VhbCBkZSBlZmljaWVudGUgKi9cbiAgICBsZXQgaWQgPSAnJztcbiAgICB0aGlzLmtleXNBcnJheS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZCArPSBpdGVtW2tleV07XG4gICAgfSk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMucGFyZW50S2V5cykgJiYgVXRpbC5pc0RlZmluZWQocGFyZW50Tm9kZSkpIHtcbiAgICAgIGlkICs9IHBhcmVudE5vZGUuaWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMua2V5cyArICc6JyArIGlkO1xuICB9XG5cblxuICBwdWJsaWMgY2hpbGRRdWVyeURhdGEobm9kZTogT1RyZWVGbGF0Tm9kZSk6IE9ic2VydmFibGU8U2VydmljZVJlc3BvbnNlPiB8IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHF1ZXJ5TWV0aG9kTmFtZSA9IHRoaXMucXVlcnlNZXRob2Q7XG4gICAgaWYgKCF0aGlzLmRhdGFTZXJ2aWNlIHx8ICEocXVlcnlNZXRob2ROYW1lIGluIHRoaXMuZGF0YVNlcnZpY2UpIHx8ICF0aGlzLmVudGl0eSkge1xuICAgICAgcmV0dXJuIG9mKHsgZGF0YTogW10gfSk7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudEl0ZW0gPSBTZXJ2aWNlVXRpbHMuZ2V0UGFyZW50S2V5c0Zyb21Gb3JtKHRoaXMuX3BLZXlzRXF1aXYsIHRoaXMuZm9ybSk7XG4gICAgbGV0IGZpbHRlclxuICAgIGlmICh0aGlzLnJlY3Vyc2l2ZSkge1xuICAgICAgZmlsdGVyID0gcGFyZW50SXRlbSA/PyB7fTtcbiAgICAgIGZpbHRlclt0aGlzLnBhcmVudENvbHVtbl0gPSBub2RlLmRhdGFbdGhpcy5rZXlzQXJyYXlbMF1dXG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbHRlciA9IFNlcnZpY2VVdGlscy5nZXRGaWx0ZXJVc2luZ1BhcmVudEtleXMobm9kZS5kYXRhLCBub2RlLnRyZWVOb2RlLl9wS2V5c0VxdWl2KTtcbiAgICB9XG5cbiAgICBsZXQgcXVlcnlBcmd1bWVudHMgPSBbZmlsdGVyLCB0aGlzLmNvbEFycmF5LCB0aGlzLmVudGl0eV07XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZVtxdWVyeU1ldGhvZE5hbWVdKC4uLnF1ZXJ5QXJndW1lbnRzKSBhcyBPYnNlcnZhYmxlPFNlcnZpY2VSZXNwb25zZT47XG4gIH1cblxuICBwcm90ZWN0ZWQgbmF2aWdhdGVUb1ZpZXdEZXRhaWwobm9kZTogT1RyZWVGbGF0Tm9kZSkge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChub2RlLnJvdXRlKSkge1xuICAgICAgbGV0IHJvdXRlID0gdW5kZWZpbmVkO1xuXG4gICAgICBsZXQgbm9kZVJvdXRlID0gbm9kZS5yb3V0ZTtcbiAgICAgIGxldCByb3V0ZUFycmF5ID0gbm9kZVJvdXRlLnNwbGl0KENvZGVzLlJPVVRFX1NFUEFSQVRPUik7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcm91dGVBcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAocm91dGVBcnJheVtpXS5zdGFydHNXaXRoKENvZGVzLlJPVVRFX1ZBUklBQkxFX0NIQVIpKSB7XG4gICAgICAgICAgcm91dGVBcnJheVtpXSA9IG5vZGUuZGF0YVtyb3V0ZUFycmF5W2ldLnN1YnN0cmluZygxKV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJvdXRlID0gcm91dGVBcnJheS5qb2luKENvZGVzLlJPVVRFX1NFUEFSQVRPUik7XG5cbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChyb3V0ZSkpIHtcbiAgICAgICAgY29uc3QgZXh0cmFzID0ge1xuICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0Um91dGVcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3JvdXRlXSwgZXh0cmFzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeEZsZXg+XG5cbiAgPGRpdiAqbmdJZj1cImhhc0NvbnRyb2xzKClcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cblxuICAgIDxkaXYgY2xhc3M9XCJidXR0b25zXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0J1dHRvbnNUZXh0O2Vsc2Ugc2hvd0J1dHRvbnNXaXRob3V0VGV4dFwiPlxuXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJpbnNlcnRCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgbWF0LXN0cm9rZWQtYnV0dG9uIGFyaWEtbGFiZWw9XCJJbnNlcnRcIiAoY2xpY2spPVwiYWRkKCRldmVudClcIj5cbiAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm9udGltaXplOmFkZFwiPjwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgJ0lOU0VSVCcgfCBvVHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwicmVmcmVzaEJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBtYXQtc3Ryb2tlZC1idXR0b24gYXJpYS1sYWJlbD1cIlJlZnJlc2hcIiAoY2xpY2spPVwicmVsb2FkRGF0YSgpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTphdXRvcmVuZXdcIj48L21hdC1pY29uPlxuICAgICAgICAgIDxzcGFuPnt7ICdSRUZSRVNIJyB8IG9UcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJkZWxldGVCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgbWF0LXN0cm9rZWQtYnV0dG9uIGFyaWEtbGFiZWw9XCJEZWxldGVcIiBbZGlzYWJsZWRdPVwiIWVuYWJsZWREZWxldGVCdXR0b25cIlxuICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhZW5hYmxlZERlbGV0ZUJ1dHRvblwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6ZGVsZXRlXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyAnREVMRVRFJyB8IG9UcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLXRlbXBsYXRlICNzaG93QnV0dG9uc1dpdGhvdXRUZXh0PlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaW5zZXJ0QnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiSW5zZXJ0XCIgKGNsaWNrKT1cImFkZCgkZXZlbnQpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTphZGRcIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwicmVmcmVzaEJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlJlZnJlc2hcIiAoY2xpY2spPVwicmVsb2FkRGF0YSgpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTphdXRvcmVuZXdcIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZGVsZXRlQnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiRGVsZXRlXCIgW2Rpc2FibGVkXT1cIiFlbmFibGVkRGVsZXRlQnV0dG9uXCJcbiAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiIWVuYWJsZWREZWxldGVCdXR0b25cIj5cbiAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm9udGltaXplOmRlbGV0ZVwiPjwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW28tdHJlZS1idXR0b25dXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgZnhGbGV4PlxuICAgICAgPHNwYW4gZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cInRpdGxlXCI+e3sgdGl0bGUgfCBvVHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxvLXNlYXJjaC1pbnB1dCAqbmdJZj1cInF1aWNrRmlsdGVyXCIgW2ZpbHRlci1jYXNlLXNlbnNpdGl2ZV09XCJmaWx0ZXJDYXNlU2Vuc2l0aXZlXCIgW3Nob3ctY2FzZS1zZW5zaXRpdmUtY2hlY2tib3hdPVwic2hvd0Nhc2VTZW5zaXRpdmVDaGVja2JveCgpXCJcbiAgICAgIFtjb2x1bW5zXT1cInF1aWNrRmlsdGVyQ29sdW1uc1wiIFtwbGFjZWhvbGRlcl09XCJxdWlja0ZpbHRlclBsYWNlaG9sZGVyXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBmbG9hdC1sYWJlbD1cIm5ldmVyXCIgc2hvdy1tZW51PVwibm9cIj5cbiAgICA8L28tc2VhcmNoLWlucHV0PlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwic2hvd1RyZWVNZW51QnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIGNsYXNzPVwiby10cmVlLW1lbnUtYnV0dG9uXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cInRyZWVNZW51Lm1hdE1lbnVcIlxuICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTptb3JlX3ZlcnRcIj48L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICAgIDxvLXRyZWUtbWVudSAjdHJlZU1lbnUgW3NlbGVjdC1hbGwtY2hlY2tib3hdPVwic2VsZWN0QWxsQ2hlY2tib3hcIiBbc2VsZWN0LWFsbC1jaGVja2JveC12aXNpYmxlXT1cInNlbGVjdEFsbENoZWNrYm94VmlzaWJsZVwiXG4gICAgICAob25TZWxlY3RDaGVja2JveENoYW5nZSk9XCJvblNlbGVjdENoZWNrYm94Q2hhbmdlKCRldmVudClcIj48L28tdHJlZS1tZW51PlxuXG4gIDwvZGl2PlxuXG4gIDxtYXQtdHJlZSBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgW3RyZWVDb250cm9sXT1cInRyZWVDb250cm9sXCI+XG5cbiAgICA8IS0tIFRoaXMgaXMgdGhlIHRyZWUgbm9kZSB0ZW1wbGF0ZSBmb3IgbGVhZiBub2RlcyAtLT5cbiAgICA8bWF0LXRyZWUtbm9kZSAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZVwiIChjbGljayk9XCJsZWFmTm9kZUNsaWNrZWQoJGV2ZW50LG5vZGUpXCIgbWF0VHJlZU5vZGVUb2dnbGUgbWF0VHJlZU5vZGVQYWRkaW5nPlxuICAgICAgPCEtLSB1c2UgYSBkaXNhYmxlZCBidXR0b24gdG8gcHJvdmlkZSBwYWRkaW5nIGZvciB0cmVlIGxlYWYgLS0+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlZD48L2J1dHRvbj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdEFsbENoZWNrYm94VmlzaWJsZTsgZWxzZSBzaW1wbGVMZWFmTm9kZVRwbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibm9kZS13cmFwcGVyXCI+XG4gICAgICAgICAgPG1hdC1jaGVja2JveCAqbmdJZj1cInNlbGVjdEFsbENoZWNrYm94VmlzaWJsZTsgZWxzZSBzaW1wbGVMZWFmTm9kZVRwbFwiIFtjaGVja2VkXT1cImNoZWNrbGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjaGVja2JveENsaWNrZWQoJGV2ZW50KVwiIChjaGFuZ2UpPVwidG9kb0xlYWZJdGVtU2VsZWN0aW9uVG9nZ2xlKG5vZGUpXCI+XG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJsZWFmTm9kZUZ1bGx0ZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0Om5vZGV9XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI3NpbXBsZUxlYWZOb2RlVHBsPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxlYWZOb2RlRnVsbHRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6bm9kZX1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPC9tYXQtdHJlZS1ub2RlPlxuICAgIDwhLS0gVGhpcyBpcyB0aGUgdHJlZSBub2RlIHRlbXBsYXRlIGZvciBleHBhbmRhYmxlIG5vZGVzIC0tPlxuICAgIDxtYXQtdHJlZS1ub2RlICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlOyB3aGVuOiBoYXNDaGlsZFwiIChjbGljayk9XCJwYXJlbnROb2RlQ2xpY2tlZCgkZXZlbnQsIG5vZGUpXCIgbWF0VHJlZU5vZGVQYWRkaW5nPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW2F0dHIuYXJpYS1sYWJlbF09XCIndG9nZ2xlICcgKyBub2RlLmxhYmVsXCIgbWF0VHJlZU5vZGVUb2dnbGUgKGNsaWNrKT1cIm9uQ2xpY2tUb2dnbGVCdXR0b24oJGV2ZW50LCBub2RlKVwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+XG4gICAgICAgICAge3t0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpID8gJ2V4cGFuZF9tb3JlJyA6ICdjaGV2cm9uX3JpZ2h0J319XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdEFsbENoZWNrYm94VmlzaWJsZTsgZWxzZSBzaW1wbGVQYXJlbnROb2RlVHBsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJub2RlLXdyYXBwZXJcIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94ICpuZ0lmPVwic2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlOyBlbHNlIHNpbXBsZVBhcmVudE5vZGVUcGxcIiAoY2xpY2spPVwiY2hlY2tib3hDbGlja2VkKCRldmVudClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2RvSXRlbVNlbGVjdGlvblRvZ2dsZShub2RlKVwiIFtjaGVja2VkXT1cImRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZSlcIiBbaW5kZXRlcm1pbmF0ZV09XCJkZXNjZW5kYW50c1BhcnRpYWxseVNlbGVjdGVkKG5vZGUpXCI+XG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJwYXJlbnROb2RlRnVsbHRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6bm9kZX1cIj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLXRlbXBsYXRlICNzaW1wbGVQYXJlbnROb2RlVHBsPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBhcmVudE5vZGVGdWxsdGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDpub2RlfVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9tYXQtdHJlZS1ub2RlPlxuICA8L21hdC10cmVlPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSBsZXQtbm9kZSAjbGVhZk5vZGVGdWxsdGVtcGxhdGU+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsZWFmTm9kZVRlbXBsYXRlOyBlbHNlIGRlZmF1bHRMZWFmTm9kZVRwbFwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxlYWZOb2RlVGVtcGxhdGVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0Om5vZGUuZGF0YX1cIj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TGVhZk5vZGVUcGw+XG4gICAge3tub2RlLmxhYmVsfX1cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBsZXQtbm9kZSAjcGFyZW50Tm9kZUZ1bGx0ZW1wbGF0ZT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhcmVudE5vZGVUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0UGFyZW50Tm9kZVRwbFwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBhcmVudE5vZGVUZW1wbGF0ZVwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6bm9kZS5kYXRhfVwiPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctdGVtcGxhdGUgI2RlZmF1bHRQYXJlbnROb2RlVHBsPlxuICAgIDxzcGFuPnt7bm9kZS5sYWJlbH19PC9zcGFuPlxuICAgIDxtYXQtcHJvZ3Jlc3MtYmFyICpuZ0lmPVwibm9kZS5pc0xvYWRpbmdcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIGZ4RmxleD48L21hdC1wcm9ncmVzcy1iYXI+XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuIl19
530
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUvby10cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RyZWUvby10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBR1IsUUFBUSxFQUNSLFdBQVcsRUFDWCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFjLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHekUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFP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O2dFQUNrQjtBQUMxQztJQUFDLHFCQUFxQixFQUFFOzt5REFDVztBQUNuQztJQUFDLHFCQUFxQixFQUFFOztpREFDRzs0RkEzRWhCLGNBQWM7a0JBWjFCLFNBQVM7K0JBQ0UsUUFBUSxVQUdWLHFCQUFxQixXQUNwQixzQkFBc0IsaUJBQ2hCLGlCQUFpQixDQUFDLElBQUksUUFDL0I7d0JBQ0osZ0JBQWdCLEVBQUUsTUFBTTtxQkFDekIsYUFDVSxDQUFDLFFBQVEsQ0FBQzs7MEJBZ0lsQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUM7NENBbEV0RCxhQUFhLE1BRWIsWUFBWSxNQUVaLGVBQWUsTUFPZix3QkFBd0IsTUFFeEIsaUJBQWlCLE1BRWpCLFNBQVMsTUFxQlQsZ0JBQWdCO3NCQURmLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSXRFLGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFPcEUsWUFBWTtzQkFEZixZQUFZO3VCQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFTbEUsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBCb29sZWFuSW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBTZXJ2aWNlUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NlcnZpY2UtcmVzcG9uc2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9UcmVlQ29tcG9uZW50U3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdGUvby10cmVlLWNvbXBvbmVudC1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBGaWx0ZXJFeHByZXNzaW9uVXRpbHMgfSBmcm9tICcuLi8uLi91dGlsL2ZpbHRlci1leHByZXNzaW9uLnV0aWxzJztcbmltcG9ydCB7IFNlcnZpY2VVdGlscyB9IGZyb20gJy4uLy4uL3V0aWwvc2VydmljZS51dGlscyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9Gb3JtQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS9vLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEFic3RyYWN0T1NlcnZpY2VDb21wb25lbnQgfSBmcm9tICcuLi9vLXNlcnZpY2UtY29tcG9uZW50LmNsYXNzJztcbmltcG9ydCB7IE9UcmVlRGFvIH0gZnJvbSAnLi9vLXRyZWUtZGFvLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1RyZWVEYXRhU291cmNlIH0gZnJvbSAnLi9vLXRyZWUuZGF0YXNvdXJjZSc7XG5pbXBvcnQgeyBPVHJlZU5vZGVDb21wb25lbnQgfSBmcm9tICcuL3RyZWUtbm9kZS90cmVlLW5vZGUuY29tcG9uZW50JztcblxuZXhwb3J0IHR5cGUgT1RyZWVGbGF0Tm9kZSA9IHtcbiAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgbGFiZWw6IHN0cmluZztcbiAgbGV2ZWw6IG51bWJlcixcbiAgcm9vdE5vZGU/OiBib29sZWFuLFxuICBleHBhbmRhYmxlOiBib29sZWFuLFxuICB0cmVlTm9kZT86IE9UcmVlTm9kZUNvbXBvbmVudCxcbiAgZGF0YTogYW55O1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuICByb3V0ZT86IHN0cmluZ1xuXG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX1RSRUUgPSBbXG4gIC8vIGF0dHIgW3N0cmluZ106IGxpc3QgaWRlbnRpZmllci4gSXQgaXMgbWFuZGF0b3J5IGlmIGRhdGEgYXJlIHByb3ZpZGVkIHRocm91Z2ggdGhlIGRhdGEgYXR0cmlidXRlLiBEZWZhdWx0OiBlbnRpdHkgKGlmIHNldCkuXG4gICdvYXR0cjogYXR0cicsXG5cbiAgLy8gc2VydmljZSBbc3RyaW5nXTogSkVFIHNlcnZpY2UgcGF0aC4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdzZXJ2aWNlJyxcblxuICAvLyBlbnRpdHkgW3N0cmluZ106IGVudGl0eSBvZiB0aGUgc2VydmljZS4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdlbnRpdHknLFxuXG4gIC8vIGNvbHVtbnMgW3N0cmluZ106IGNvbHVtbnMgb2YgdGhlIGVudGl0eSwgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdjb2x1bW5zJyxcblxuICAvLyBrZXlzIFtzdHJpbmddOiBlbnRpdHkga2V5cywgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdrZXlzJyxcblxuICAvLyBwYXJlbnQta2V5cyBbc3RyaW5nXTogcGFyZW50IGtleXMgdG8gZmlsdGVyLCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3BhcmVudEtleXM6IHBhcmVudC1rZXlzJyxcblxuICAvLyBxdWVyeS1tZXRob2QgW3N0cmluZ106IG5hbWUgb2YgdGhlIHNlcnZpY2UgbWV0aG9kIHRvIHBlcmZvcm0gcXVlcmllcy4gRGVmYXVsdDogcXVlcnkuXG4gICdxdWVyeU1ldGhvZDogcXVlcnktbWV0aG9kJyxcblxuICAvLyBpbnNlcnQtYnV0dG9uIFtub3x5ZXNdOiBzaG93IGluc2VydCBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgJ2luc2VydEJ1dHRvbjogaW5zZXJ0LWJ1dHRvbicsXG5cbiAgLy8gcmVmcmVzaC1idXR0b24gW25vfHllc106IHNob3cgcmVmcmVzaCBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgJ3JlZnJlc2hCdXR0b246IHJlZnJlc2gtYnV0dG9uJyxcblxuICAvLyBkZWxldGUtYnV0dG9uIFtub3x5ZXNdOiBzaG93IGRlbGV0ZSBidXR0b24gd2hlbiB1c2VyIHNlbGVjdCBpdGVtcy4gRGVmYXVsdDogeWVzLlxuICAnZGVsZXRlQnV0dG9uOiBkZWxldGUtYnV0dG9uJyxcblxuICAvLyBFTkQgT0YgREVGQVVMVF9JTlBVVFNfT19TRVJWSUNFX0NPTVBPTkVOVFxuICAndmlzaWJsZUNvbHVtbnM6IHZpc2libGUtY29sdW1ucycsXG4gICdzZWxlY3RBbGxDaGVja2JveDogc2VsZWN0LWFsbC1jaGVja2JveCcsXG4gICdzZXBhcmF0b3InLFxuICAncGFyZW50Q29sdW1uOiBwYXJlbnQtY29sdW1uJyxcbiAgJ3NvcnRDb2x1bW46IHNvcnQtY29sdW1uJyxcbiAgLy8gc2VsZWN0LWFsbC1jaGVja2JveC12aXNpYmxlIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgc2VsZWN0aW9uIGNoZWNrIGJveGVzLkRlZmF1bHQ6IG5vLlxuICAnc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlOiBzZWxlY3QtYWxsLWNoZWNrYm94LXZpc2libGUnLFxuICAvLyBmaWx0ZXIgW3llc3xub3x0cnVlfGZhbHNlXTogd2hldGhlciBmaWx0ZXIgaXMgY2FzZSBzZW5zaXRpdmUuIERlZmF1bHQ6IG5vLlxuICAnZmlsdGVyQ2FzZVNlbnNpdGl2ZTogZmlsdGVyLWNhc2Utc2Vuc2l0aXZlJyxcbiAgLy8gcXVpY2stZmlsdGVyIFtub3x5ZXNdOiBzaG93IHF1aWNrIGZpbHRlci4gRGVmYXVsdDogeWVzLlxuICAncXVpY2tGaWx0ZXI6IHF1aWNrLWZpbHRlcicsXG4gIC8vIHF1aWNrLWZpbHRlci1wbGFjZWhvbGRlcjogcXVpY2sgZmlsdGVyIHBsYWNlaG9sZGVyXG4gICdxdWlja0ZpbHRlclBsYWNlaG9sZGVyOiBxdWljay1maWx0ZXItcGxhY2Vob2xkZXInLFxuICAvLyBxdWljay1maWx0ZXItY29sdW1ucyBbc3RyaW5nXTogY29sdW1ucyBvZiB0aGUgZmlsdGVyLCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3F1aWNrRmlsdGVyQ29sdW1uczogcXVpY2stZmlsdGVyLWNvbHVtbnMnLFxuICAvLyBkZXRhaWwtbW9kZSBbbm9uZXxjbGlja3xkb3VibGVjbGlja106IHdheSB0byBvcGVuIHRoZSBkZXRhaWwgZm9ybSBvZiBhIHJvdy4gRGVmYXVsdDogJ2NsaWNrJy5cbiAgJ2RldGFpbE1vZGU6IGRldGFpbC1tb2RlJyxcbiAgLy8gZGV0YWlsLWZvcm0tcm91dGUgW3N0cmluZ106IHJvdXRlIG9mIGRldGFpbCBmb3JtLiBEZWZhdWx0OiAnZGV0YWlsJy5cbiAgJ2RldGFpbEZvcm1Sb3V0ZTogZGV0YWlsLWZvcm0tcm91dGUnLFxuICAvLyBzaG93LWJ1dHRvbnMtdGV4dCBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHRleHQgb2YgaGVhZGVyIGJ1dHRvbnMuIERlZmF1bHQ6IHllcy5cbiAgJ3Nob3dCdXR0b25zVGV4dDogc2hvdy1idXR0b25zLXRleHQnLFxuICAncm9vdFRpdGxlOiByb290LXRpdGxlJyxcbiAgJ3JlY3Vyc2l2ZScsXG4gICdyb3V0ZSdcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19UUkVFID0gWydvbk5vZGVTZWxlY3RlZCcsICdvbk5vZGVFeHBhbmRlZCcsICdvbk5vZGVDb2xsYXBzZWQnLCAnb25Mb2FkTmV4dExldmVsJywgJ29uRGF0YUxvYWRlZCcsICdvbk5vZGVDbGljayddO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLXRyZWUnLFxuICB0ZW1wbGF0ZVVybDogJy4vby10cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vby10cmVlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19UUkVFLFxuICBvdXRwdXRzOiBERUZBVUxUX09VVFBVVFNfT19UUkVFLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5vLXRyZWVdJzogJ3RydWUnXG4gIH0sXG4gIHByb3ZpZGVyczogW09UcmVlRGFvXVxufSlcbmV4cG9ydCBjbGFzcyBPVHJlZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0T1NlcnZpY2VDb21wb25lbnQ8T1RyZWVDb21wb25lbnRTdGF0ZVNlcnZpY2U+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuXG4gIGdldExldmVsID0gKG5vZGU6IE9UcmVlRmxhdE5vZGUpID0+IG5vZGUubGV2ZWw7XG5cbiAgaXNFeHBhbmRhYmxlID0gKG5vZGU6IE9UcmVlRmxhdE5vZGUpID0+IG5vZGUuZXhwYW5kYWJsZTtcblxuICBnZXRDaGlsZHJlbiA9IChub2RlOiBPVHJlZUZsYXROb2RlKTogYW55ID0+IHtcbiAgICBpZiAodGhpcy5yZWN1cnNpdmUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJlY3Vyc2l2ZUNoaWxkcmVuTm9kZShub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJlZU5vZGVDaGlsZHJlbihub2RlKTtcbiAgICB9XG4gIH1cblxuICBnZXRUcmVlTm9kZUNoaWxkcmVuKG5vZGU6IE9UcmVlRmxhdE5vZGUpOiBhbnkge1xuICAgIGlmIChub2RlLmxldmVsID09PSAwICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMucm9vdFRpdGxlKSkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdE5vZGVzO1xuICAgIH0gZWxzZSBpZiAobm9kZS50cmVlTm9kZSkge1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG5vZGUudHJlZU5vZGUucm9vdFRpdGxlKSAmJiAhVXRpbC5pc0RlZmluZWQobm9kZS5yb290Tm9kZSkpIHtcbiAgICAgICAgbGV0IHJvb3ROb2RlOiBPVHJlZUZsYXROb2RlID0ge1xuICAgICAgICAgIGlkOiB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggKyAxLCByb290Tm9kZTogdHJ1ZSwgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQobm9kZS50cmVlTm9kZS5yb290VGl0bGUpLCBsZXZlbDogbm9kZS5sZXZlbCArIDEsIGV4cGFuZGFibGU6IHRydWUsIGRhdGE6IG5vZGUuZGF0YSwgaXNMb2FkaW5nOiBmYWxzZSwgdHJlZU5vZGU6IG5vZGUudHJlZU5vZGVcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kYW9UcmVlLmZsYXROb2RlTWFwLnNldChyb290Tm9kZSwgbm9kZSk7XG4gICAgICAgIHJldHVybiBbcm9vdE5vZGVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5vZGUudHJlZU5vZGUuY2hpbGRRdWVyeURhdGEobm9kZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVOb2Rlcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW1bdGhpcy5wYXJlbnRLZXlzXSA9PT0gbm9kZVt0aGlzLmtleXNdKTtcbiAgICB9XG4gIH1cblxuICBnZXRSZWN1cnNpdmVDaGlsZHJlbk5vZGUobm9kZTogT1RyZWVGbGF0Tm9kZSk6IGFueSB7XG4gICAgaWYgKG5vZGUubGV2ZWwgPT09IDAgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5yb290VGl0bGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290Tm9kZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkUXVlcnlEYXRhKG5vZGUpO1xuICAgIH1cblxuICB9XG4gIGdldENvbXBvbmVudEZpbHRlcihleGlzdGluZ0ZpbHRlcjogYW55ID0ge30pOiBhbnkge1xuICAgIGxldCBmaWx0ZXIgPSBleGlzdGluZ0ZpbHRlcjtcbiAgICBpZiAodGhpcy5yZWN1cnNpdmUgJiYgdGhpcy5wYXJlbnRDb2x1bW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcGFyZW50SXRlbUV4cHIgPSBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRFeHByZXNzaW9uRnJvbU9iamVjdChmaWx0ZXIpO1xuICAgICAgY29uc3QgcGFyZW50Tm90TnVsbEV4cHIgPSBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRFeHByZXNzaW9uSXNOdWxsKHRoaXMucGFyZW50Q29sdW1uKTtcbiAgICAgIGNvbnN0IGZpbHRlckV4cHIgPSBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRDb21wbGV4RXhwcmVzc2lvbihwYXJlbnRJdGVtRXhwciwgcGFyZW50Tm90TnVsbEV4cHIsIEZpbHRlckV4cHJlc3Npb25VdGlscy5PUF9BTkQpO1xuICAgICAgZmlsdGVyID0ge307XG4gICAgICBmaWx0ZXJbRmlsdGVyRXhwcmVzc2lvblV0aWxzLkZJTFRFUl9FWFBSRVNTSU9OX0tFWV0gPSBmaWx0ZXJFeHByO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuZ2V0Q29tcG9uZW50RmlsdGVyKGZpbHRlcik7XG4gIH1cblxuICBoYXNDaGlsZCA9IChfOiBudW1iZXIsIF9ub2RlRGF0YTogT1RyZWVGbGF0Tm9kZSkgPT4gX25vZGVEYXRhLmV4cGFuZGFibGU7XG5cbiAgaGFzTm9Db250ZW50ID0gKF86IG51bWJlciwgX25vZGVEYXRhOiBPVHJlZUZsYXROb2RlKSA9PiBfbm9kZURhdGEubGFiZWwgPT09ICcnO1xuXG5cbiAgZGF0YVNvdXJjZTogT1RyZWVEYXRhU291cmNlO1xuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICByZWZyZXNoQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGRlbGV0ZUJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd0J1dHRvbnNUZXh0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgdmlzaWJsZUNvbHVtbnM6IHN0cmluZztcbiAgc2VwYXJhdG9yOiBzdHJpbmcgPSBDb2Rlcy5IWVBIRU5fU0VQQVJBVE9SO1xuICBwYXJlbnRDb2x1bW46IHN0cmluZztcbiAgc29ydENvbHVtbjogc3RyaW5nO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzZWxlY3RBbGxDaGVja2JveDogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcmVjdXJzaXZlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIF9xdWlja0ZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwYWdpbmF0aW9uQ29udHJvbHMgPSBmYWxzZTtcbiAgcXVpY2tGaWx0ZXJDb2x1bW5zOiBzdHJpbmc7XG4gIHNlbGVjdGVkTm9kZTogT1RyZWVGbGF0Tm9kZTtcbiAgY2hpbGRyZU5vZGVzOiBPVHJlZUZsYXROb2RlW10gPSBbXTtcbiAgbm9kZXNBcnJheTogT1RyZWVGbGF0Tm9kZVtdID0gW107XG4gIGFuY2VzdG9yczogYW55W10gPSBbXTtcbiAgY2hlY2tsaXN0U2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPE9UcmVlRmxhdE5vZGU+KHRydWUsIFtdLCB0cnVlLCAoc20xLCBzbTIpID0+IHNtMS5pZCA9PT0gc20yLmlkKTtcblxuICBvbk5vZGVTZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIG9uTm9kZUV4cGFuZGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgb25Ob2RlQ29sbGFwc2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgb25Mb2FkTmV4dExldmVsOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgb25Ob2RlQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHJvb3RUaXRsZTogc3RyaW5nO1xuICByb290Tm9kZXM6IE9UcmVlRmxhdE5vZGVbXSA9IFtdO1xuICBkYW9UcmVlOiBPVHJlZURhbztcblxuICBAQ29udGVudENoaWxkKCdsZWFmTm9kZVRlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiBmYWxzZSB9KVxuICBsZWFmTm9kZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ3BhcmVudE5vZGVUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogZmFsc2UgfSlcbiAgcGFyZW50Tm9kZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHRyZWVGbGF0dGVuZXI6IGFueTtcbiAgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxPVHJlZUZsYXROb2RlLCBPVHJlZUZsYXROb2RlPjtcblxuICBAQ29udGVudENoaWxkKCdub2RlVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IGZhbHNlIH0pXG4gIHNldCBub2RlVGVtcGxhdGUodmFsdWU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgdGhpcy5sZWFmTm9kZVRlbXBsYXRlID0gdmFsdWU7XG4gICAgICB0aGlzLnBhcmVudE5vZGVUZW1wbGF0ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBPVHJlZU5vZGVDb21wb25lbnQpLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9KVxuICB0cmVlTm9kZSE6IE9UcmVlTm9kZUNvbXBvbmVudDtcblxuICBwcm90ZWN0ZWQgdmlzaWJsZUNvbHVtbnNBcnJheTogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGVuYWJsZWREZWxldGVCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwdWJsaWMgcm91dGU6IHN0cmluZztcbiAgZ2V0IHNob3dUcmVlTWVudUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGF0aWNPcHQgPSB0aGlzLnNlbGVjdEFsbENoZWNrYm94O1xuICAgIHJldHVybiBzdGF0aWNPcHQ7XG4gIH1cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBlbFJlZjogRWxlbWVudFJlZixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KGZvcndhcmRSZWYoKCkgPT4gT0Zvcm1Db21wb25lbnQpKSBmb3JtOiBPRm9ybUNvbXBvbmVudFxuICApIHtcbiAgICBzdXBlcihpbmplY3RvciwgZWxSZWYsIGZvcm0pO1xuICAgIHRoaXMuZGFvVHJlZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9UcmVlRGFvKVxuXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNldFRyZWVDb250cm9sKCk7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgdGhpcy5pbml0aWFsaXplUGFyYW1zKCk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLnNlbGVjdGlvbi5jaGFuZ2VkLnN1YnNjcmliZShcbiAgICAgICAgKCkgPT4gKHRoaXMuZW5hYmxlZERlbGV0ZUJ1dHRvbiA9ICF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KCkpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG5cbiAgcHVibGljIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZURhbygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluaXRpYWxpemVEYW8oKSB7XG5cbiAgICBpZiAodGhpcy5zdGF0aWNEYXRhKSB7XG4gICAgICB0aGlzLnF1ZXJ5T25CaW5kID0gZmFsc2U7XG4gICAgICB0aGlzLnF1ZXJ5T25Jbml0ID0gZmFsc2U7XG4gICAgICB0aGlzLnNldERhdGFBcnJheSh0aGlzLnN0YXRpY0RhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyZVNlcnZpY2UoKTtcbiAgICB9XG4gIH1cblxuICBpbml0aWFsaXplUGFyYW1zKCk6IHZvaWQge1xuICAgIC8vIElmIHZpc2libGUtY29sdW1ucyBpcyBub3QgcHJlc2VudCB0aGVuIHZpc2libGUtY29sdW1ucyBpcyBhbGwgY29sdW1uc1xuICAgIGlmICghdGhpcy52aXNpYmxlQ29sdW1ucykge1xuICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IHRoaXMuY29sdW1ucztcbiAgICB9XG5cbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHRoaXMucXVpY2tGaWx0ZXJDb2x1bW5zKSkge1xuICAgICAgdGhpcy5xdWlja0ZpbHRlckNvbHVtbnMgPSB0aGlzLnZpc2libGVDb2x1bW5zO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy52aXNpYmxlQ29sdW1ucywgdHJ1ZSk7XG4gICAgdGhpcy5xdWlja0ZpbHRlckNvbEFycmF5ID0gVXRpbC5wYXJzZUFycmF5KHRoaXMucXVpY2tGaWx0ZXJDb2x1bW5zLCB0cnVlKTtcbiAgICB0aGlzLnNldERhdGFzb3VyY2UoKTtcbiAgICB0aGlzLmFmdGVyVmlld0luaXQoKTtcbiAgICBpZiAodGhpcy5xdWVyeU9uSW5pdCkge1xuICAgICAgdGhpcy5xdWVyeURhdGEoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcmVnaXN0ZXJUcmVlTm9kZShvVHJlZU5vZGU6IE9UcmVlTm9kZUNvbXBvbmVudCkge1xuICAgIC8vIHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZvckVhY2goKVxuICB9XG5cbiAgY2hlY2tib3hDbGlja2VkKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgbGVhZk5vZGVDbGlja2VkKGV2ZW50OiBFdmVudCwgbm9kZTogT1RyZWVGbGF0Tm9kZSk6IHZvaWQge1xuICAgIHRoaXMubm9kZUNsaWNrZWQobm9kZSwgZXZlbnQpO1xuICB9XG5cbiAgcGFyZW50Tm9kZUNsaWNrZWQoZXZlbnQ6IEV2ZW50LCBub2RlOiBPVHJlZUZsYXROb2RlKTogdm9pZCB7XG4gICAgdGhpcy5ub2RlQ2xpY2tlZChub2RlLCBldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbm9kZUNsaWNrZWQobm9kZTogT1RyZWVGbGF0Tm9kZSwgZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLm9uTm9kZUNsaWNrLmVtaXQobm9kZSk7XG4gICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBub2RlO1xuICAgIGlmICh0aGlzLmRldGFpbE1vZGUgIT09IENvZGVzLkRFVEFJTF9NT0RFX05PTkUgJiYgIXRoaXMuaXNSb290Tm9kZShub2RlKSkge1xuICAgICAgLypcbiAgICAgIFNlIHBvZHJpYSBtZWpvcmFyIGxsYW1hbmRvIHRoaXMudmlld0RldGFpbChub2RlLmRhdGEpO1xuICAgICAgc2kgYWxtYWNlbmFtb3MgZWwgbm9kbywgYWN0dWFsbWVudGUgc2UgZXN0YSBhbG1hY2VuYW5kbyBzaSBleGlzdGUgdW4gdHJlZS1ub2RlIGhpam9cbiAgICAgICovXG4gICAgICB0aGlzLm5hdmlnYXRlVG9WaWV3RGV0YWlsKG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGlzUm9vdE5vZGUobm9kZTogT1RyZWVGbGF0Tm9kZSkge1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZChub2RlLnJvb3ROb2RlKSAmJiBub2RlLnJvb3ROb2RlO1xuICB9XG5cbiAgb25DbGlja1RvZ2dsZUJ1dHRvbihldmVudDogRXZlbnQsIG5vZGUpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpKSB7XG4gICAgICB0aGlzLm9uTm9kZUV4cGFuZGVkLmVtaXQobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25Ob2RlQ29sbGFwc2VkLmVtaXQobm9kZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAqIFRvZ2dsZSB0aGUgbm9kZSwgcmVtb3ZlIGZyb20gZGlzcGxheSBsaXN0XG4gICovXG4gIHRvZ2dsZU5vZGUobm9kZTogT1RyZWVGbGF0Tm9kZSwgZXhwYW5kOiBib29sZWFuKSB7XG4gICAgbm9kZS5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIGlmIChleHBhbmQgJiYgbm9kZS5leHBhbmRhYmxlKSB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuZ2V0Q2hpbGRyZW4obm9kZSk7XG4gICAgICBpZiAoVXRpbC5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UudXBkYXRlVHJlZShub2RlLCBjaGlsZHJlbiwgZXhwYW5kKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlQXN5bmNUcmVlKGNoaWxkcmVuLCBub2RlLCBleHBhbmQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UudXBkYXRlVHJlZShub2RlLCBbXSwgZXhwYW5kKTtcbiAgICB9XG5cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQXN5bmNUcmVlKGNoaWxkcmVuOiBhbnksIG5vZGU6IE9UcmVlRmxhdE5vZGUsIGV4cGFuZDogYm9vbGVhbikge1xuICAgIGNoaWxkcmVuLnN1YnNjcmliZSgocmVzOiBTZXJ2aWNlUmVzcG9uc2UpID0+IHtcbiAgICAgIGxldCBkYXRhO1xuICAgICAgaWYgKHJlcy5pc1N1Y2Nlc3NmdWwoKSkge1xuICAgICAgICBjb25zdCBhcnJEYXRhID0gKHJlcy5kYXRhICE9PSB1bmRlZmluZWQpID8gcmVzLmRhdGEgOiBbXTtcbiAgICAgICAgZGF0YSA9IFV0aWwuaXNBcnJheShhcnJEYXRhKSA/IGFyckRhdGEgOiBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGF0YVNvdXJjZS51cGRhdGVUcmVlKG5vZGUsIGRhdGEsIGV4cGFuZCk7XG4gICAgfSwgZXJyID0+IHtcbiAgICAgIG5vZGUuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5xdWVyeUZhbGxiYWNrRnVuY3Rpb24pKSB7XG4gICAgICAgIHRoaXMucXVlcnlGYWxsYmFja0Z1bmN0aW9uKGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9FcnJvckRpYWxvZ01hbmFnZXIub3BlbkVycm9yRGlhbG9nKGVycik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgLyoqIFRvZ2dsZSBhIGxlYWYgdG8tZG8gaXRlbSBzZWxlY3Rpb24uIENoZWNrIGFsbCB0aGUgcGFyZW50cyB0byBzZWUgaWYgdGhleSBjaGFuZ2VkICovXG4gIHRvZG9MZWFmSXRlbVNlbGVjdGlvblRvZ2dsZShub2RlOiBPVHJlZUZsYXROb2RlKTogdm9pZCB7XG4gICAgdGhpcy50b2RvSXRlbVNlbGVjdGlvblRvZ2dsZShub2RlKTtcbiAgfVxuXG4gIC8qKiBUb2dnbGUgdGhlIHRvLWRvIGl0ZW0gc2VsZWN0aW9uLiBTZWxlY3QvZGVzZWxlY3QgYWxsIHRoZSBkZXNjZW5kYW50cyBub2RlICovXG4gIHRvZG9JdGVtU2VsZWN0aW9uVG9nZ2xlKG5vZGU6IE9UcmVlRmxhdE5vZGUpOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi50b2dnbGUobm9kZSk7XG5cbiAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSk7XG4gICAgdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKVxuICAgICAgPyB0aGlzLmNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3QoLi4uZGVzY2VuZGFudHMpXG4gICAgICA6IHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLmRlc2NlbmRhbnRzKTtcblxuICAgIC8vIEZvcmNlIHVwZGF0ZSBmb3IgdGhlIHBhcmVudFxuICAgIGRlc2NlbmRhbnRzLmV2ZXJ5KChjaGlsZCkgPT4gdGhpcy5jaGVja2xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChjaGlsZCkpO1xuICAgIHRoaXMub25Ob2RlU2VsZWN0ZWQuZW1pdChub2RlLmRhdGEpO1xuXG5cbiAgfVxuXG5cbiAgLyoqIFdoZXRoZXIgYWxsIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgbm9kZSBhcmUgc2VsZWN0ZWQuICovXG4gIGRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZTogT1RyZWVGbGF0Tm9kZSk6IGJvb2xlYW4ge1xuICAgIGxldCBkZXNjQWxsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSk7XG4gICAgaWYgKG5vZGUuZXhwYW5kYWJsZSkge1xuXG4gICAgICBpZiAodGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpICYmIGRlc2NlbmRhbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGVzY0FsbFNlbGVjdGVkID0gZGVzY2VuZGFudHMuZXZlcnkoKGNoaWxkKSA9PlxuICAgICAgICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoY2hpbGQpXG4gICAgICAgICk7XG4gICAgICAgIGRlc2NBbGxTZWxlY3RlZCA/IHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdChub2RlKSA6IHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmRlc2VsZWN0KG5vZGUpO1xuICAgICAgICByZXR1cm4gZGVzY0FsbFNlbGVjdGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSk7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSk7XG4gICAgfVxuXG4gIH1cblxuICAvKiogV2hldGhlciBwYXJ0IG9mIHRoZSBkZXNjZW5kYW50cyBhcmUgc2VsZWN0ZWQgKi9cbiAgZGVzY2VuZGFudHNQYXJ0aWFsbHlTZWxlY3RlZChub2RlOiBPVHJlZUZsYXROb2RlKTogYm9vbGVhbiB7XG5cbiAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpO1xuICAgIGlmIChub2RlLmV4cGFuZGFibGUpIHtcbiAgICAgIGlmIChkZXNjZW5kYW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdCA9IGRlc2NlbmRhbnRzLnNvbWUoKGNoaWxkKSA9PlxuICAgICAgICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoY2hpbGQpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQgJiYgIXRoaXMuZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlKTtcblxuICB9XG5cblxuICBwcm90ZWN0ZWQgc2V0VHJlZUNvbnRyb2woKSB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLnRyZWVDb250cm9sKSkge1xuICAgICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBGbGF0VHJlZUNvbnRyb2w8T1RyZWVGbGF0Tm9kZT4odGhpcy5nZXRMZXZlbCwgdGhpcy5pc0V4cGFuZGFibGUpO1xuICAgIH1cbiAgfVxuICAvKiogKi9cblxuICBwcm90ZWN0ZWQgc2V0RGF0YXNvdXJjZSgpIHtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBPVHJlZURhdGFTb3VyY2UodGhpcywgdGhpcy50cmVlQ29udHJvbCwgdGhpcy5pbmplY3Rvcik7XG4gICAgfVxuXG4gIH1cblxuICBnZXRQYXJlbnROb2Rlcyhub2RlOiBPVHJlZUZsYXROb2RlLCBpbmRleDogbnVtYmVyLCB0cmVlOiBPVHJlZUZsYXROb2RlW10pOiBPVHJlZUZsYXROb2RlW10ge1xuICAgIGxldCBwYXJlbnROb2RlID0gdGhpcy5kYW9UcmVlLmZsYXROb2RlTWFwLmdldChub2RlKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQocGFyZW50Tm9kZSkpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nTm9kZSA9IHRyZWUuZmluZEluZGV4KHggPT4geFsnaWQnXSA9PT0gcGFyZW50Tm9kZVsnaWQnXSkgPiAtMTtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChwYXJlbnROb2RlKSkge1xuICAgICAgICBpZiAoIWV4aXN0aW5nTm9kZSkge1xuICAgICAgICAgIC8vaWYgbm90IGV4aXN0IG5vZGUgaW4gdHJlZSB0aGVuLCBhZGQgcGFyZW50IGJlZm9yZSBub2RlXG4gICAgICAgICAgdHJlZS5zcGxpY2UoaW5kZXgsIDAsIHBhcmVudE5vZGUpXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFyZW50Tm9kZXMocGFyZW50Tm9kZSwgaW5kZXgsIHRyZWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vaWYgbm90IGV4aXN0IG5vZGUgaW4gdHJlZSB0aGVuLCBhZGQgcGFyZW50IGJlZm9yZSBub2RlXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFyZW50Tm9kZXMocGFyZW50Tm9kZSwgaW5kZXgsIHRyZWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJlZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRyZWU7XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyRGF0YSh2YWx1ZT86IHN0cmluZywgbG9hZE1vcmU/OiBib29sZWFuKTogdm9pZCB7XG5cbiAgICBsZXQgZmlsdGVyZWRUcmVlRGF0YSA9IFtdO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgZm9yIChsZXQgW25lc3RlZE5vZGVdIG9mIHRoaXMuZGFvVHJlZS5mbGF0Tm9kZU1hcCkge1xuICAgICAgICBpZiAobmVzdGVkTm9kZS5sYWJlbC50b0xvY2FsZUxvd2VyQ2FzZSgpLmluZGV4T2YodmFsdWUudG9Mb2NhbGVMb3dlckNhc2UoKSkgPiAtMSkge1xuICAgICAgICAgIGZpbHRlcmVkVHJlZURhdGEucHVzaChuZXN0ZWROb2RlKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgIHdoaWxlIChpbmRleCA8IGZpbHRlcmVkVHJlZURhdGEubGVuZ3RoKSB7XG4gICAgICAgIGxldCBub2RlID0gZmlsdGVyZWRUcmVlRGF0YVtpbmRleF07XG4gICAgICAgIGNvbnN0IHBhcmVudE5vZGVzID0gdGhpcy5nZXRQYXJlbnROb2Rlcyhub2RlLCBpbmRleCwgZmlsdGVyZWRUcmVlRGF0YSk7XG4gICAgICAgIGlmICghVXRpbC5pc0FycmF5RW1wdHkocGFyZW50Tm9kZXMpKSB7XG4gICAgICAgICAgZmlsdGVyZWRUcmVlRGF0YSA9IHBhcmVudE5vZGVzO1xuICAgICAgICB9XG4gICAgICAgIGluZGV4Kys7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGZpbHRlcmVkVHJlZURhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbHRlcmVkVHJlZURhdGEgPSB0aGlzLmRhdGFSZXNwb25zZUFycmF5O1xuICAgICAgdGhpcy5zZXREYXRhQXJyYXkoZmlsdGVyZWRUcmVlRGF0YSk7XG4gICAgfVxuXG5cbiAgICAvLyBOb3RpZnkgdGhlIGNoYW5nZS5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGxldCByb290Tm9kZXMgPSBmaWx0ZXJlZFRyZWVEYXRhLmZpbHRlcihub2RlID0+IG5vZGUubGV2ZWwgPT0gMCk7XG4gICAgICB0aGlzLmV4cGFuZE5vZGVzV2l0aE5vZGVzKHJvb3ROb2Rlcyk7XG4gICAgfVxuXG4gIH1cbiAgLyoqXG4gICAqIEV4cGFuZHMgbm9kZXMgd2l0aCBub2Rlc1xuICAgKiBAcGFyYW0gdHJlZURhdGFcbiAgICovXG4gIGV4cGFuZE5vZGVzV2l0aE5vZGVzKHRyZWVEYXRhOiBPVHJlZUZsYXROb2RlW10pIHtcbiAgICB0cmVlRGF0YS5maWx0ZXIobm9kZSA9PiBub2RlLmV4cGFuZGFibGUpLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSk7XG4gICAgICBpZiAoZGVzY2VuZGFudHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChub2RlKTtcbiAgICAgICAgdGhpcy5leHBhbmROb2Rlc1dpdGhOb2RlcyhkZXNjZW5kYW50cylcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgICogR2V0cyBkYXRhIHRyZWVcbiAgICAqIEByZXR1cm5zXG4gICAgKi9cbiAgZ2V0RGF0YUFycmF5KCkge1xuICAgIHJldHVybiB0aGlzLmRhb1RyZWUuZGF0YTtcbiAgfVxuXG4gIHNldERhdGFBcnJheShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmRhb1RyZWUuZmxhdE5vZGVNYXAuY2xlYXIoKTtcbiAgICB0aGlzLmRhb1RyZWUuc2V0RGF0YUFycmF5KGRhdGEpO1xuICAgIGlmICh0aGlzLnJlY3Vyc2l2ZSkge1xuICAgICAgdGhpcy5jaGlsZHJlTm9kZXMgPSBkYXRhLmZpbHRlcihcbiAgICAgICAgKGl0ZW06IGFueSkgPT4gaXRlbVt0aGlzLnBhcmVudENvbHVtbl0gIT0gbnVsbFxuICAgICAgKTtcbiAgICAgIHRoaXMucm9vdE5vZGVzID0gZGF0YS5maWx0ZXIoXG4gICAgICAgIChpdGVtOiBhbnkpID0+ICFVdGlsLmlzRGVmaW5lZChpdGVtW3RoaXMucGFyZW50Q29sdW1uXSkgfHwgaXRlbVt0aGlzLnBhcmVudENvbHVtbl0gPT09IG51bGxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5yb290Tm9kZXMgPSBkYXRhO1xuXG4gICAgbGV0IGxldmVsID0gMDtcbiAgICBsZXQgcm9vdE5vZGU6IE9UcmVlRmxhdE5vZGU7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMucm9vdFRpdGxlKSkge1xuICAgICAgbGV2ZWwgPSArMTtcbiAgICAgIHJvb3ROb2RlID0geyBpZDogMCwgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQodGhpcy5yb290VGl0bGUpLCByb290Tm9kZTogdHJ1ZSwgbGV2ZWw6IDAsIGV4cGFuZGFibGU6IHRydWUsIGRhdGE6IHt9LCBpc0xvYWRpbmc6IGZhbHNlIH07XG4gICAgICB0aGlzLmRhb1RyZWUuZmxhdE5vZGVNYXAuc2V0KHJvb3ROb2RlLCBudWxsKTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gW3Jvb3ROb2RlXTtcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKHJvb3ROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLnJvb3ROb2Rlcy5tYXAobm9kZSA9PiB0aGlzLnRyYW5zZm9ybWVyKG5vZGUsIGxldmVsKSk7XG4gICAgfVxuXG4gIH1cblxuICB0cmFuc2Zvcm1lciA9IChub2RlOiBhbnksIGxldmVsOiBudW1iZXIsIHBhcmVudE5vZGU/OiBhbnkpID0+IHtcblxuICAgIGNvbnN0IG5vZGVDaGlsZHJlbiA9IHRoaXMuY2hpbGRyZU5vZGVzLmZpbHRlcigoaXRlbSkgPT4gaXRlbVt0aGlzLnBhcmVudENvbHVtbl0gPT09IG5vZGVbdGhpcy5rZXlzXSk7XG4gICAgY29uc3QgZmxhdE5vZGU6IE9UcmVlRmxhdE5vZGUgPVxuICAgIHtcbiAgICAgICdpZCc6IHRoaXMuZ2V0Tm9kZUlkKG5vZGUsIHBhcmVudE5vZGUpLFxuICAgICAgJ2xhYmVsJzogdGhpcy5nZXRJdGVtVGV4dChub2RlKSxcbiAgICAgICdsZXZlbCc6IGxldmVsLFxuICAgICAgdHJlZU5vZGU6IHRoaXMudHJlZU5vZGUsXG4gICAgICAnZXhwYW5kYWJsZSc6IFV0aWwuaXNEZWZpbmVkKHRoaXMudHJlZU5vZGUpIHx8ICEhbm9kZUNoaWxkcmVuPy5sZW5ndGggfHwgdGhpcy5yZWN1cnNpdmUsXG4gICAgICAnZGF0YSc6IG5vZGUsXG4gICAgICAnaXNMb2FkaW5nJzogZmFsc2UsXG4gICAgICAncm91dGUnOiB0aGlzLnJvdXRlXG4gICAgfTtcblxuICAgIHRoaXMuZGFvVHJlZS5mbGF0Tm9kZU1hcC5zZXQoZmxhdE5vZGUsIHBhcmVudE5vZGUpO1xuXG4gICAgLy9yZWN1cnNpdmVcbiAgICBub2RlQ2hpbGRyZW4uZm9yRWFjaChub2RlID0+IHRoaXMudHJhbnNmb3JtZXIobm9kZSwgbGV2ZWwgKyAxKSk7XG4gICAgcmV0dXJuIGZsYXROb2RlO1xuXG5cbiAgfVxuXG4gIG9uU2VsZWN0Q2hlY2tib3hDaGFuZ2UodmlzaWJsZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlID0gdmlzaWJsZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzb3J0KGFycmF5OiBPVHJlZUZsYXROb2RlW10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zb3J0Q29sdW1uICE9IG51bGwpIHtcbiAgICAgIGFycmF5LnNvcnQoKGEsIGIpID0+XG4gICAgICAgIGEuZGF0YVt0aGlzLnNvcnRDb2x1bW5dLmxvY2FsZUNvbXBhcmUoYi5kYXRhW3RoaXMuc29ydENvbHVtbl0pXG4gICAgICApO1xuICAgICAgYXJyYXlcbiAgICAgICAgLmZpbHRlcigobm9kZSkgPT4gISF0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpKVxuICAgICAgICAuZm9yRWFjaCgobm9kZSkgPT4gdGhpcy5zb3J0KHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSkpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0SXRlbVRleHQoaXRlbTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQ29sdW1uc0FycmF5XG4gICAgICAuZmlsdGVyKChjb2wpID0+IGl0ZW1bY29sXSAhPSBudWxsICYmIGAke2l0ZW1bY29sXX1gLmxlbmd0aCA+IDApXG4gICAgICAubWFwKChjb2wpID0+IGl0ZW1bY29sXSlcbiAgICAgIC5qb2luKHRoaXMuc2VwYXJhdG9yKTtcbiAgfVxuXG4gIGdldEl0ZW1LZXkoaXRlbTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5rZXlzQXJyYXkubWFwKChjb2wpID0+IGl0ZW1bY29sXSkuam9pbignOycpO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgZmlsdGVyQnlRdWlja0ZpbHRlckNvbHVtbnMoXG4gICAgaXRlbTogYW55LFxuICAgIHF1aWNrZmlsdGVyOiBzdHJpbmdcbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2FzZVNlbnNpdGl2ZSA9IHRoaXMuaXNGaWx0ZXJDYXNlU2Vuc2l0aXZlKCk7XG4gICAgY29uc3QgcmVnRXhwU3RyID0gbmV3IFJlZ0V4cChcbiAgICAgIFV0aWwuZXNjYXBlU3BlY2lhbENoYXJhY3RlcihcbiAgICAgICAgVXRpbC5ub3JtYWxpemVTdHJpbmcocXVpY2tmaWx0ZXIsICFjYXNlU2Vuc2l0aXZlKVxuICAgICAgKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UXVpY2tGaWx0ZXJDb2x1bW5zKCkuc29tZSgoY29sKSA9PlxuICAgICAgcmVnRXhwU3RyLnRlc3QoVXRpbC5ub3JtYWxpemVTdHJpbmcoaXRlbS5kYXRhW2NvbF0gKyAnJywgIWNhc2VTZW5zaXRpdmUpKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYWRkKGU/OiBFdmVudCk6IHZvaWQge1xuICAgIHN1cGVyLmluc2VydERldGFpbCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldE5vZGVJZChpdGVtOiBhbnksIHBhcmVudE5vZGU6IGFueSkge1xuICAgIC8qKiByZXZpc2FybG86aWd1YWwgY29uIGlkIGluY3JlbWVudGFsIGVyYSBtYXMgZmFjaWwgZSBpZ3VhbCBkZSBlZmljaWVudGUgKi9cbiAgICBsZXQgaWQgPSAnJztcbiAgICB0aGlzLmtleXNBcnJheS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZCArPSBpdGVtW2tleV07XG4gICAgfSk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMucGFyZW50S2V5cykgJiYgVXRpbC5pc0RlZmluZWQocGFyZW50Tm9kZSkpIHtcbiAgICAgIGlkICs9IHBhcmVudE5vZGUuaWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMua2V5cyArICc6JyArIGlkO1xuICB9XG5cblxuICBwdWJsaWMgY2hpbGRRdWVyeURhdGEobm9kZTogT1RyZWVGbGF0Tm9kZSk6IE9ic2VydmFibGU8U2VydmljZVJlc3BvbnNlPiB8IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IHF1ZXJ5TWV0aG9kTmFtZSA9IHRoaXMucXVlcnlNZXRob2Q7XG4gICAgaWYgKCF0aGlzLmRhdGFTZXJ2aWNlIHx8ICEocXVlcnlNZXRob2ROYW1lIGluIHRoaXMuZGF0YVNlcnZpY2UpIHx8ICF0aGlzLmVudGl0eSkge1xuICAgICAgcmV0dXJuIG9mKHsgZGF0YTogW10gfSk7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudEl0ZW0gPSBTZXJ2aWNlVXRpbHMuZ2V0UGFyZW50S2V5c0Zyb21Gb3JtKHRoaXMuX3BLZXlzRXF1aXYsIHRoaXMuZm9ybSk7XG4gICAgbGV0IGZpbHRlclxuICAgIGlmICh0aGlzLnJlY3Vyc2l2ZSkge1xuICAgICAgZmlsdGVyID0gcGFyZW50SXRlbSA/PyB7fTtcbiAgICAgIGZpbHRlclt0aGlzLnBhcmVudENvbHVtbl0gPSBub2RlLmRhdGFbdGhpcy5rZXlzQXJyYXlbMF1dXG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbHRlciA9IFNlcnZpY2VVdGlscy5nZXRGaWx0ZXJVc2luZ1BhcmVudEtleXMobm9kZS5kYXRhLCBub2RlLnRyZWVOb2RlLl9wS2V5c0VxdWl2KTtcbiAgICB9XG5cbiAgICBsZXQgcXVlcnlBcmd1bWVudHMgPSBbZmlsdGVyLCB0aGlzLmNvbEFycmF5LCB0aGlzLmVudGl0eV07XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZVtxdWVyeU1ldGhvZE5hbWVdKC4uLnF1ZXJ5QXJndW1lbnRzKSBhcyBPYnNlcnZhYmxlPFNlcnZpY2VSZXNwb25zZT47XG4gIH1cblxuICBwcm90ZWN0ZWQgbmF2aWdhdGVUb1ZpZXdEZXRhaWwobm9kZTogT1RyZWVGbGF0Tm9kZSkge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChub2RlLnJvdXRlKSkge1xuICAgICAgbGV0IHJvdXRlID0gdW5kZWZpbmVkO1xuXG4gICAgICBsZXQgbm9kZVJvdXRlID0gbm9kZS5yb3V0ZTtcbiAgICAgIGxldCByb3V0ZUFycmF5ID0gbm9kZVJvdXRlLnNwbGl0KENvZGVzLlJPVVRFX1NFUEFSQVRPUik7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcm91dGVBcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAocm91dGVBcnJheVtpXS5zdGFydHNXaXRoKENvZGVzLlJPVVRFX1ZBUklBQkxFX0NIQVIpKSB7XG4gICAgICAgICAgcm91dGVBcnJheVtpXSA9IG5vZGUuZGF0YVtyb3V0ZUFycmF5W2ldLnN1YnN0cmluZygxKV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJvdXRlID0gcm91dGVBcnJheS5qb2luKENvZGVzLlJPVVRFX1NFUEFSQVRPUik7XG5cbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChyb3V0ZSkpIHtcbiAgICAgICAgY29uc3QgZXh0cmFzID0ge1xuICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0Um91dGVcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3JvdXRlXSwgZXh0cmFzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaXNTZWxlY3RlZE5vZGUobm9kZTogT1RyZWVGbGF0Tm9kZSkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkTm9kZSA9PSBub2RlO1xuICB9XG59XG4iLCI8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhGbGV4PlxuXG4gIDxkaXYgKm5nSWY9XCJoYXNDb250cm9scygpXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYnV0dG9uc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dCdXR0b25zVGV4dDtlbHNlIHNob3dCdXR0b25zV2l0aG91dFRleHRcIj5cblxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaW5zZXJ0QnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiBhcmlhLWxhYmVsPVwiSW5zZXJ0XCIgKGNsaWNrKT1cImFkZCgkZXZlbnQpXCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTphZGRcIj48L21hdC1pY29uPlxuICAgICAgICAgIDxzcGFuPnt7ICdJTlNFUlQnIHwgb1RyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInJlZnJlc2hCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgbWF0LXN0cm9rZWQtYnV0dG9uIGFyaWEtbGFiZWw9XCJSZWZyZXNoXCIgKGNsaWNrKT1cInJlbG9hZERhdGEoKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6YXV0b3JlbmV3XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyAnUkVGUkVTSCcgfCBvVHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZGVsZXRlQnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiBhcmlhLWxhYmVsPVwiRGVsZXRlXCIgW2Rpc2FibGVkXT1cIiFlbmFibGVkRGVsZXRlQnV0dG9uXCJcbiAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiIWVuYWJsZWREZWxldGVCdXR0b25cIj5cbiAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm9udGltaXplOmRlbGV0ZVwiPjwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgJ0RFTEVURScgfCBvVHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjc2hvd0J1dHRvbnNXaXRob3V0VGV4dD5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImluc2VydEJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIkluc2VydFwiIChjbGljayk9XCJhZGQoJGV2ZW50KVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6YWRkXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInJlZnJlc2hCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJSZWZyZXNoXCIgKGNsaWNrKT1cInJlbG9hZERhdGEoKVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6YXV0b3JlbmV3XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImRlbGV0ZUJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIkRlbGV0ZVwiIFtkaXNhYmxlZF09XCIhZW5hYmxlZERlbGV0ZUJ1dHRvblwiXG4gICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFlbmFibGVkRGVsZXRlQnV0dG9uXCI+XG4gICAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTpkZWxldGVcIj48L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltvLXRyZWUtYnV0dG9uXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGZ4RmxleD5cbiAgICAgIDxzcGFuIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgY2xhc3M9XCJ0aXRsZVwiPnt7IHRpdGxlIHwgb1RyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8by1zZWFyY2gtaW5wdXQgKm5nSWY9XCJxdWlja0ZpbHRlclwiIFtmaWx0ZXItY2FzZS1zZW5zaXRpdmVdPVwiZmlsdGVyQ2FzZVNlbnNpdGl2ZVwiIFtzaG93LWNhc2Utc2Vuc2l0aXZlLWNoZWNrYm94XT1cInNob3dDYXNlU2Vuc2l0aXZlQ2hlY2tib3goKVwiXG4gICAgICBbY29sdW1uc109XCJxdWlja0ZpbHRlckNvbHVtbnNcIiBbcGxhY2Vob2xkZXJdPVwicXVpY2tGaWx0ZXJQbGFjZWhvbGRlclwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgZmxvYXQtbGFiZWw9XCJuZXZlclwiIHNob3ctbWVudT1cIm5vXCI+XG4gICAgPC9vLXNlYXJjaC1pbnB1dD5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cInNob3dUcmVlTWVudUJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cIm8tdHJlZS1tZW51LWJ1dHRvblwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJ0cmVlTWVudS5tYXRNZW51XCJcbiAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6bW9yZV92ZXJ0XCI+PC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8by10cmVlLW1lbnUgI3RyZWVNZW51IFtzZWxlY3QtYWxsLWNoZWNrYm94XT1cInNlbGVjdEFsbENoZWNrYm94XCIgW3NlbGVjdC1hbGwtY2hlY2tib3gtdmlzaWJsZV09XCJzZWxlY3RBbGxDaGVja2JveFZpc2libGVcIlxuICAgICAgKG9uU2VsZWN0Q2hlY2tib3hDaGFuZ2UpPVwib25TZWxlY3RDaGVja2JveENoYW5nZSgkZXZlbnQpXCI+PC9vLXRyZWUtbWVudT5cblxuICA8L2Rpdj5cblxuICA8bWF0LXRyZWUgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiIFt0cmVlQ29udHJvbF09XCJ0cmVlQ29udHJvbFwiPlxuXG4gICAgPCEtLSBUaGlzIGlzIHRoZSB0cmVlIG5vZGUgdGVtcGxhdGUgZm9yIGxlYWYgbm9kZXMgLS0+XG4gICAgPG1hdC10cmVlLW5vZGUgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIiAoY2xpY2spPVwibGVhZk5vZGVDbGlja2VkKCRldmVudCwgbm9kZSlcIiBtYXRUcmVlTm9kZVRvZ2dsZSBtYXRUcmVlTm9kZVBhZGRpbmdcbiAgICAgIFtuZ0NsYXNzXT1cInsnc2VsZWN0ZWQtbm9kZSc6IGlzU2VsZWN0ZWROb2RlKG5vZGUpfVwiPlxuICAgICAgPCEtLSB1c2UgYSBkaXNhYmxlZCBidXR0b24gdG8gcHJvdmlkZSBwYWRkaW5nIGZvciB0cmVlIGxlYWYgLS0+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlZD48L2J1dHRvbj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdEFsbENoZWNrYm94VmlzaWJsZTsgZWxzZSBzaW1wbGVMZWFmTm9kZVRwbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibm9kZS13cmFwcGVyXCI+XG4gICAgICAgICAgPG1hdC1jaGVja2JveCAqbmdJZj1cInNlbGVjdEFsbENoZWNrYm94VmlzaWJsZTsgZWxzZSBzaW1wbGVMZWFmTm9kZVRwbFwiIFtjaGVja2VkXT1cImNoZWNrbGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjaGVja2JveENsaWNrZWQoJGV2ZW50KVwiIChjaGFuZ2UpPVwidG9kb0xlYWZJdGVtU2VsZWN0aW9uVG9nZ2xlKG5vZGUpXCI+XG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJsZWFmTm9kZUZ1bGx0ZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0Om5vZGV9XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI3NpbXBsZUxlYWZOb2RlVHBsPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxlYWZOb2RlRnVsbHRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6bm9kZX1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPC9tYXQtdHJlZS1ub2RlPlxuICAgIDwhLS0gVGhpcyBpcyB0aGUgdHJlZSBub2RlIHRlbXBsYXRlIGZvciBleHBhbmRhYmxlIG5vZGVzIC0tPlxuICAgIDxtYXQtdHJlZS1ub2RlICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlOyB3aGVuOiBoYXNDaGlsZFwiIChjbGljayk9XCJwYXJlbnROb2RlQ2xpY2tlZCgkZXZlbnQsIG5vZGUpXCIgbWF0VHJlZU5vZGVQYWRkaW5nXG4gICAgICBbbmdDbGFzc109XCJ7J3NlbGVjdGVkLW5vZGUnOiBpc1NlbGVjdGVkTm9kZShub2RlKX1cIj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3RvZ2dsZSAnICsgbm9kZS5sYWJlbFwiIG1hdFRyZWVOb2RlVG9nZ2xlIChjbGljayk9XCJvbkNsaWNrVG9nZ2xlQnV0dG9uKCRldmVudCwgbm9kZSlcIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPlxuICAgICAgICAgIHt7dHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKSA/ICdleHBhbmRfbW9yZScgOiAnY2hldnJvbl9yaWdodCd9fVxuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RBbGxDaGVja2JveFZpc2libGU7IGVsc2Ugc2ltcGxlUGFyZW50Tm9kZVRwbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibm9kZS13cmFwcGVyXCI+XG4gICAgICAgICAgPG1hdC1jaGVja2JveCAqbmdJZj1cInNlbGVjdEFsbENoZWNrYm94VmlzaWJsZTsgZWxzZSBzaW1wbGVQYXJlbnROb2RlVHBsXCIgKGNsaWNrKT1cImNoZWNrYm94Q2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwidG9kb0l0ZW1TZWxlY3Rpb25Ub2dnbGUobm9kZSlcIiBbY2hlY2tlZF09XCJkZXNjZW5kYW50c0FsbFNlbGVjdGVkKG5vZGUpXCIgW2luZGV0ZXJtaW5hdGVdPVwiZGVzY2VuZGFudHNQYXJ0aWFsbHlTZWxlY3RlZChub2RlKVwiPlxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwicGFyZW50Tm9kZUZ1bGx0ZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0Om5vZGV9XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjc2ltcGxlUGFyZW50Tm9kZVRwbD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJwYXJlbnROb2RlRnVsbHRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6bm9kZX1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbWF0LXRyZWUtbm9kZT5cbiAgPC9tYXQtdHJlZT5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgbGV0LW5vZGUgI2xlYWZOb2RlRnVsbHRlbXBsYXRlPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibGVhZk5vZGVUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0TGVhZk5vZGVUcGxcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJsZWFmTm9kZVRlbXBsYXRlXCJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDpub2RlLmRhdGF9XCI+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdExlYWZOb2RlVHBsPlxuICAgIHt7bm9kZS5sYWJlbH19XG4gIDwvbmctdGVtcGxhdGU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgbGV0LW5vZGUgI3BhcmVudE5vZGVGdWxsdGVtcGxhdGU+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJlbnROb2RlVGVtcGxhdGU7IGVsc2UgZGVmYXVsdFBhcmVudE5vZGVUcGxcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJwYXJlbnROb2RlVGVtcGxhdGVcIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0Om5vZGUuZGF0YX1cIj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0UGFyZW50Tm9kZVRwbD5cbiAgICA8c3Bhbj57e25vZGUubGFiZWx9fTwvc3Bhbj5cbiAgICA8bWF0LXByb2dyZXNzLWJhciAqbmdJZj1cIm5vZGUuaXNMb2FkaW5nXCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiBmeEZsZXg+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLW1lbnUuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2ludGVyZmFjZXMvYXBwLW1lbnUuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIE1lbnVDb21tb25Sb3V0ZSB7XG4gIHJvdXRlPzogc3RyaW5nO1xuICBwYXRoTWF0Y2g/OiAnZnVsbCcgfCAncHJlZml4J1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVDb21tb25JdGVtIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICB0b29sdGlwPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBjbGFzcz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZW51R3JvdXAgZXh0ZW5kcyBNZW51Q29tbW9uSXRlbSB7XG4gIGl0ZW1zOiAoTWVudUl0ZW1BY3Rpb24gfCBNZW51SXRlbUxvY2FsZSB8IE1lbnVJdGVtTG9nb3V0IHwgTWVudUl0ZW1Vc2VySW5mbyB8IE1lbnVHcm91cCB8IE1lbnVJdGVtIHwgTWVudUl0ZW1Sb3V0ZSlbXTtcbiAgb3BlbmVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZW51R3JvdXBSb3V0ZSBleHRlbmRzIE1lbnVHcm91cCwgTWVudUNvbW1vblJvdXRlIHtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZW51SXRlbSBleHRlbmRzIE1lbnVDb21tb25JdGVtIHtcbiAgaW1hZ2U/OiBzdHJpbmc7XG4gIGNvbXBvbmVudD86IGFueTtcbiAgJ2NvbXBvbmVudC1pbnB1dHMnPzogb2JqZWN0O1xuICAnc2hvdy1pbi1jYXJkLW1lbnUnPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTWVudUl0ZW1Sb3V0ZSBleHRlbmRzIE1lbnVJdGVtLCBNZW51Q29tbW9uUm91dGUge1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVJdGVtQWN0aW9uIGV4dGVuZHMgTWVudUl0ZW0ge1xuICBjb25maXJtPzogc3RyaW5nO1xuICBjb25maXJtVGV4dD86IHN0cmluZztcbiAgYWN0aW9uKCk6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZW51SXRlbUxvY2FsZSBleHRlbmRzIE1lbnVJdGVtIHtcbiAgbG9jYWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVudUl0ZW1Mb2dvdXQgZXh0ZW5kcyBNZW51SXRlbSB7XG4gIHJvdXRlOiBzdHJpbmc7XG4gIGNvbmZpcm06IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZW51SXRlbVVzZXJJbmZvIGV4dGVuZHMgTWVudUl0ZW0ge1xuICB1c2VyOiBzdHJpbmc7XG4gIGF2YXRhcjogc3RyaW5nO1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLW1lbnUuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2ludGVyZmFjZXMvYXBwLW1lbnUuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIE1lbnVDb21tb25Sb3V0ZSB7XG4gIHJvdXRlPzogc3RyaW5nO1xuICBwYXRoTWF0Y2g/OiAnZnVsbCcgfCAncHJlZml4J1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVDb21tb25JdGVtIHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICB0b29sdGlwPzogc3RyaW5nO1xuICBzdmdJY29uPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBjbGFzcz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZW51R3JvdXAgZXh0ZW5kcyBNZW51Q29tbW9uSXRlbSB7XG4gIGl0ZW1zOiAoTWVudUl0ZW1BY3Rpb24gfCBNZW51SXRlbUxvY2FsZSB8IE1lbnVJdGVtTG9nb3V0IHwgTWVudUl0ZW1Vc2VySW5mbyB8IE1lbnVHcm91cCB8IE1lbnVJdGVtIHwgTWVudUl0ZW1Sb3V0ZSlbXTtcbiAgb3BlbmVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZW51R3JvdXBSb3V0ZSBleHRlbmRzIE1lbnVHcm91cCwgTWVudUNvbW1vblJvdXRlIHtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZW51SXRlbSBleHRlbmRzIE1lbnVDb21tb25JdGVtIHtcbiAgaW1hZ2U/OiBzdHJpbmc7XG4gIGNvbXBvbmVudD86IGFueTtcbiAgJ2NvbXBvbmVudC1pbnB1dHMnPzogb2JqZWN0O1xuICAnc2hvdy1pbi1jYXJkLW1lbnUnPzogYm9vbGVhbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTWVudUl0ZW1Sb3V0ZSBleHRlbmRzIE1lbnVJdGVtLCBNZW51Q29tbW9uUm91dGUge1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVJdGVtQWN0aW9uIGV4dGVuZHMgTWVudUl0ZW0ge1xuICBjb25maXJtPzogc3RyaW5nO1xuICBjb25maXJtVGV4dD86IHN0cmluZztcbiAgYWN0aW9uKCk6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZW51SXRlbUxvY2FsZSBleHRlbmRzIE1lbnVJdGVtIHtcbiAgbG9jYWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVudUl0ZW1Mb2dvdXQgZXh0ZW5kcyBNZW51SXRlbSB7XG4gIHJvdXRlOiBzdHJpbmc7XG4gIGNvbmZpcm06IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZW51SXRlbVVzZXJJbmZvIGV4dGVuZHMgTWVudUl0ZW0ge1xuICB1c2VyOiBzdHJpbmc7XG4gIGF2YXRhcjogc3RyaW5nO1xufVxuIl19