@dotglitch/ngx-common 1.1.16 → 1.1.18

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 (52) hide show
  1. package/components/menu/menu.component.d.ts +3 -3
  2. package/directives/menu.directive.d.ts +2 -2
  3. package/directives/tooltip.directive.d.ts +1 -1
  4. package/esm2022/components/command-palette/command-palette.component.mjs +4 -4
  5. package/esm2022/components/command-palette/shortcut/shortcut.component.mjs +3 -3
  6. package/esm2022/components/dynamic-html/dynamic-html.component.mjs +4 -4
  7. package/esm2022/components/dynamic-html/dynamic-html.module.mjs +4 -4
  8. package/esm2022/components/dynamic-html/dynamic-html.service.mjs +4 -4
  9. package/esm2022/components/filemanager/file-grid/file-grid.component.mjs +6 -6
  10. package/esm2022/components/filemanager/filemanager.component.mjs +4 -4
  11. package/esm2022/components/filemanager/folder-rename/folder-rename.component.mjs +4 -4
  12. package/esm2022/components/filemanager/icon-resolver.mjs +1 -1
  13. package/esm2022/components/filemanager/toolbar/breadcrumb/breadcrumb.component.mjs +3 -3
  14. package/esm2022/components/filemanager/toolbar/icon-button/icon-button.component.mjs +3 -3
  15. package/esm2022/components/filemanager/toolbar/toolbar.component.mjs +3 -3
  16. package/esm2022/components/filemanager/tree-view/tree-view.component.mjs +5 -5
  17. package/esm2022/components/lazy-loader/lazy-loader.component.mjs +4 -4
  18. package/esm2022/components/lazy-loader/lazy-loader.module.mjs +4 -4
  19. package/esm2022/components/lazy-loader/lazy-loader.service.mjs +4 -4
  20. package/esm2022/components/menu/menu.component.mjs +36 -29
  21. package/esm2022/components/react-magic-wrapper/react-magic-wrapper.component.mjs +4 -4
  22. package/esm2022/components/tabulator/tabulator.component.mjs +5 -5
  23. package/esm2022/components/tooltip/tooltip.component.mjs +5 -8
  24. package/esm2022/components/vscode/ts-type-resolver/dependency-parser.mjs +1 -1
  25. package/esm2022/components/vscode/ts-type-resolver/import-resolver.mjs +1 -1
  26. package/esm2022/components/vscode/ts-type-resolver/main.mjs +1 -1
  27. package/esm2022/components/vscode/ts-type-resolver/types.mjs +1 -1
  28. package/esm2022/components/vscode/ts-type-resolver/unpkg-source-resolver.mjs +1 -1
  29. package/esm2022/components/vscode/ts-type-resolver/update-emitter.mjs +1 -1
  30. package/esm2022/components/vscode/vscode.component.mjs +4 -4
  31. package/esm2022/directives/menu.directive.mjs +30 -42
  32. package/esm2022/directives/tooltip.directive.mjs +25 -38
  33. package/esm2022/directives/utils.mjs +1 -1
  34. package/esm2022/pipes/html-bypass.pipe.mjs +3 -3
  35. package/esm2022/pipes/resource-bypass.pipe.mjs +3 -3
  36. package/esm2022/pipes/script-bypass.pipe.mjs +3 -3
  37. package/esm2022/pipes/style-bypass.pipe.mjs +3 -3
  38. package/esm2022/pipes/url-bypass.pipe.mjs +3 -3
  39. package/esm2022/services/command-palette.service.mjs +4 -4
  40. package/esm2022/services/dependency.service.mjs +4 -4
  41. package/esm2022/services/dialog.service.mjs +3 -3
  42. package/esm2022/services/fetch.service.mjs +3 -3
  43. package/esm2022/services/file.service.mjs +3 -3
  44. package/esm2022/services/keyboard.service.mjs +4 -4
  45. package/esm2022/services/navigation.service.mjs +3 -3
  46. package/esm2022/services/theme.service.mjs +3 -3
  47. package/esm2022/utils/index.mjs +1 -1
  48. package/fesm2022/{dotglitch-ngx-common-folder-rename.component-h07keNnV.mjs → dotglitch-ngx-common-folder-rename.component-0RqscdRS.mjs} +4 -4
  49. package/fesm2022/{dotglitch-ngx-common-folder-rename.component-h07keNnV.mjs.map → dotglitch-ngx-common-folder-rename.component-0RqscdRS.mjs.map} +1 -1
  50. package/fesm2022/dotglitch-ngx-common.mjs +188 -211
  51. package/fesm2022/dotglitch-ngx-common.mjs.map +1 -1
  52. package/package.json +3 -3
@@ -281,7 +281,7 @@ export class FileGridComponent {
281
281
  label: "Delete",
282
282
  icon: "delete",
283
283
  // shortcutLabel: "Del",
284
- isVisible: data => !data.path.includes("#/"),
284
+ isVisible: data => !data.path.includes("#/"), // omit files in compressed dirs
285
285
  action: (evt) => {
286
286
  const path = evt.path + evt.name;
287
287
  const url = this.config.apiSettings.deleteEntryUrlTemplate
@@ -303,7 +303,7 @@ export class FileGridComponent {
303
303
  {
304
304
  label: "Rename",
305
305
  icon: "drive_file_rename_outline",
306
- isVisible: data => !data.path.includes("#/"),
306
+ isVisible: data => !data.path.includes("#/"), // omit files in compressed dirs
307
307
  // shortcutLabel: "F2",
308
308
  action: (data) => {
309
309
  this.dialog.open("folder-rename", "@dotglitch/ngx-web-components", {
@@ -613,10 +613,10 @@ export class FileGridComponent {
613
613
  inputs: { path: data?.path || this.path, name: data?.name || '', config: this.config }
614
614
  }).then(r => this.loadFolder());
615
615
  }
616
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: FileGridComponent, deps: [{ token: i1.Fetch }, { token: i1.KeyboardService }, { token: i1.DialogService }, { token: i2.MatDialog }, { token: i3.FilemanagerComponent }, { token: i0.ChangeDetectorRef }, { token: i4.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
617
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.9", type: FileGridComponent, isStandalone: true, selector: "app-file-grid", inputs: { path: "path", config: "config", showHiddenFiles: "showHiddenFiles", viewMode: "viewMode", gridSize: "gridSize", tab: "tab", selection: "selection", value: "value", sortOrder: "sortOrder" }, outputs: { pathChange: "pathChange", fileSelect: "fileSelect", fileDblClick: "fileDblClick", folderSelect: "folderSelect", folderDblClick: "folderDblClick", newTab: "newTab", loadFiles: "loadFiles", selectionChange: "selectionChange", valueChange: "valueChange" }, viewQueries: [{ propertyName: "filesRef", first: true, predicate: ["fileViewport"], descendants: true }, { propertyName: "tabulator", first: true, predicate: TabulatorComponent, descendants: true }, { propertyName: "renameTemplate", first: true, predicate: ["renameTemplate"], descendants: true, read: TemplateRef }], ngImport: i0, template: "@if (showLoader) {\n <mat-progress-bar [class.hide]=\"hideLoader\" mode=\"query\"/>\n}\n\n<div\n style=\"display: contents\"\n [style.--filemanager-fileicon-backdrop]=\"'url(' + iconResolver.path + '/pop/generic.svg)'\"\n (dragstart)=\"userIsDraggingFile = true\"\n (dragend)=\"userIsDraggingFile = false\"\n (dragover)=\"draggingOver = true\"\n (dragleave)=\"draggingOver = false\"\n (ondrop)=\"onDrop($event)\"\n>\n <!-- <ng-container *ngIf=\"draggingOver\"></ng-container> -->\n <!-- Grid mode -->\n <ng-scrollbar\n *ngIf=\"viewMode == 'grid'\"\n class=\"grid {{gridSize}} {{config.imageSize || 'normal'}}\"\n [class.selectionMode]=\"config.mode == 'focusFiles'\"\n [class.showDropArea]=\"draggingOver\"\n style=\"height: 100%; width: 100%\"\n track=\"vertical\"\n pointerEventsMethod=\"scrollbar\"\n [ngx-contextmenu]=\"folderContextMenu\"\n >\n <div class=\"resize-observer\" #fileViewport></div>\n <cdk-virtual-scroll-viewport\n itemSize=\"134\"\n scrollViewport\n (click)=\"selection = []; selectionText = ''\"\n >\n <div class=\"row\" *cdkVirtualFor=\"let row of sortedFolders\">\n <div class=\"file\"\n *ngFor=\"let item of row\"\n [class.selected]=\"selection.includes(item)\"\n [class.generic]=\"item['_icon'].needsBackdrop\"\n [ngx-contextmenu]=\"fileContextMenu\"\n [ngx-menu-context]=\"item\"\n >\n <mat-checkbox\n #checkbox\n *ngIf=\"config.mode == 'focusFiles' && item.kind == 'file'\"\n [checked]=\"item['_value']\"\n (change)=\"onToggle(item, $event)\"\n />\n <div\n style=\"display: contents\"\n (click)=\"onSelect(item, $event)\"\n (dblclick)=\"onItemClick(item)\"\n (dragstart)=\"onDragStart($event, item)\"\n >\n <img [src]=\"item['_icon'].path\"/>\n <p>{{item['vanityName'] || item.name}}</p>\n </div>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n </ng-scrollbar>\n\n <!-- List mode -->\n <div\n *ngIf=\"viewMode == 'list'\"\n style=\"width: 100%; height: 100%\"\n [class.showDropArea]=\"draggingOver\"\n [ngx-contextmenu]=\"folderContextMenu\"\n >\n <app-tabulator\n [dataSource]=\"directoryContents\"\n [columns]=\"[\n { field: 'name', title: 'Name', formatter: nameCellFormatter },\n { field: '_size', title: 'Size' },\n { field: '_ctime', title: 'Created' },\n { field: '_mtime', title: 'Modified' },\n ]\"\n [options]=\"{\n rowHeight: 32\n }\"\n (rowClick)=\"onRowClick($event)\"\n (rowDblClick)=\"onItemClick($event.data)\"\n (rowContext)=\"onRowCtx($event)\"\n />\n </div>\n</div>\n\n<div class=\"select-hint\" *ngIf=\"selectionText\">\n {{selectionText}}\n</div>\n\n<div class=\"controls\">\n <button\n mat-flat-button\n class=\"upload-button\"\n (click)=\"onCreateFolder()\"\n >\n <mat-icon>create_new_folder</mat-icon>\n New Folder\n </button>\n <button\n mat-flat-button\n class=\"upload-button\"\n (click)=\"onUploadFile()\"\n >\n <mat-icon>upload_file</mat-icon>\n Upload\n </button>\n</div>\n", styles: [":host{display:block;height:100%;width:100%;overflow:hidden}.resize-observer{position:absolute;inset:0}.grid .row{flex:1;display:grid;grid-template-columns:repeat(auto-fill,80px);justify-content:space-between;grid-gap:20px;grid-auto-rows:min-content;padding:10px;margin-right:10px}.grid .file{width:80px;z-index:1;position:relative;transition:opacity 50ms ease-in-out;display:flex;flex-direction:column;align-items:center;text-align:center}.grid .file.selected p{background-color:#8ad9d9;color:#000}.grid .file.generic:before{content:\" \";position:absolute;background:var(--filemanager-fileicon-backdrop);background-repeat:no-repeat;width:100%;height:100%;z-index:-1;left:0}.grid .file.generic img{height:44px;width:44px;margin-top:28px;margin-bottom:8px}.grid .file img{-webkit-user-select:none;user-select:none}.grid .file p{height:50px;width:100%;margin:0;padding:2px;font-size:14px;line-height:16px;border-radius:4px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;text-overflow:ellipsis;overflow-wrap:break-word;transition:background-color 50ms ease-in-out,color 50ms ease-in-out}.grid .file mat-checkbox{position:absolute;left:-32px;top:-16px}:host ::ng-deep .small .file{width:46px}:host ::ng-deep .grid.selectionMode .row{padding-left:30px}:host ::ng-deep .grid.selectionMode .cdk-virtual-scroll-content-wrapper{padding-top:10px}:host ::ng-deep .tabulator .tabulator-row .tabulator-cell:not(:first-of-type){padding-top:9px}.list .row{flex:1;display:flex;align-items:center;padding:5px 10px;height:42px}.list .row p{margin:0}.list .row:hover{background-color:var(--filemanager-row-hover-background-color, #343434)}.list .row.selected p{background-color:#8ad9d9;color:#000;border-radius:5px;padding:0 4px}.list .row.odd{background-color:var(--filemanager-row-alt-background-color, #323232)}.controls{position:absolute;bottom:12px;right:12px;display:flex}.select-hint{position:absolute;font-size:14px;bottom:0;right:0;background-color:#000a;padding:2px 10px;border:1px solid black;border-top-right-radius:5px;border-bottom:none;border-right:none;z-index:9999}.select-hint:hover{display:none}.showDropArea{border:4px dashed rgba(18,18,18,.8);transition:border-color .25s ease}:host ::ng-deep ng-scrollbar.ng-scrollbar{box-sizing:border-box!important;--scrollbar-thumb-color: #666;min-height:200px;min-width:200px}mat-progress-bar{--mdc-linear-progress-track-height: 2px;position:absolute;top:0;left:0;width:100%;animation:dropIn .2s ease;transition:position .2s ease;z-index:100}mat-progress-bar.hide{top:-2px}@keyframes dropIn{0%{top:-2px}to{top:0}}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "ngmodule", type: NgScrollbarModule }, { kind: "component", type: i5.NgScrollbar, selector: "ng-scrollbar", inputs: ["disabled", "sensorDisabled", "pointerEventsDisabled", "viewportPropagateMouseMove", "autoHeightDisabled", "autoWidthDisabled", "viewClass", "trackClass", "thumbClass", "minThumbSize", "trackClickScrollDuration", "pointerEventsMethod", "track", "visibility", "appearance", "position", "sensorDebounce", "scrollAuditTime"], outputs: ["updated"], exportAs: ["ngScrollbar"] }, { kind: "directive", type: i5.ScrollViewport, selector: "[scrollViewport]" }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i7.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: TabulatorComponent, selector: "app-tabulator", inputs: ["dataSource", "columns", "key", "options"], outputs: ["cellClick", "cellDblClick", "rowClick", "rowContext", "rowDblClick"] }, { kind: "directive", type: MenuDirective, selector: "[ngx-contextmenu],[ngx-menu],[ngxContextmenu],[ngxMenu]", inputs: ["ngx-menu-context", "ngx-contextmenu", "ngx-menu", "ngx-menu-config"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i10.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i10.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i10.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }] }); }
616
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: FileGridComponent, deps: [{ token: i1.Fetch }, { token: i1.KeyboardService }, { token: i1.DialogService }, { token: i2.MatDialog }, { token: i3.FilemanagerComponent }, { token: i0.ChangeDetectorRef }, { token: i4.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
617
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.1", type: FileGridComponent, isStandalone: true, selector: "app-file-grid", inputs: { path: "path", config: "config", showHiddenFiles: "showHiddenFiles", viewMode: "viewMode", gridSize: "gridSize", tab: "tab", selection: "selection", value: "value", sortOrder: "sortOrder" }, outputs: { pathChange: "pathChange", fileSelect: "fileSelect", fileDblClick: "fileDblClick", folderSelect: "folderSelect", folderDblClick: "folderDblClick", newTab: "newTab", loadFiles: "loadFiles", selectionChange: "selectionChange", valueChange: "valueChange" }, viewQueries: [{ propertyName: "filesRef", first: true, predicate: ["fileViewport"], descendants: true }, { propertyName: "tabulator", first: true, predicate: TabulatorComponent, descendants: true }, { propertyName: "renameTemplate", first: true, predicate: ["renameTemplate"], descendants: true, read: TemplateRef }], ngImport: i0, template: "@if (showLoader) {\n <mat-progress-bar [class.hide]=\"hideLoader\" mode=\"query\"/>\n}\n\n<div\n style=\"display: contents\"\n [style.--filemanager-fileicon-backdrop]=\"'url(' + iconResolver.path + '/pop/generic.svg)'\"\n (dragstart)=\"userIsDraggingFile = true\"\n (dragend)=\"userIsDraggingFile = false\"\n (dragover)=\"draggingOver = true\"\n (dragleave)=\"draggingOver = false\"\n (ondrop)=\"onDrop($event)\"\n>\n <!-- <ng-container *ngIf=\"draggingOver\"></ng-container> -->\n <!-- Grid mode -->\n <ng-scrollbar\n *ngIf=\"viewMode == 'grid'\"\n class=\"grid {{gridSize}} {{config.imageSize || 'normal'}}\"\n [class.selectionMode]=\"config.mode == 'focusFiles'\"\n [class.showDropArea]=\"draggingOver\"\n style=\"height: 100%; width: 100%\"\n track=\"vertical\"\n pointerEventsMethod=\"scrollbar\"\n [ngx-contextmenu]=\"folderContextMenu\"\n >\n <div class=\"resize-observer\" #fileViewport></div>\n <cdk-virtual-scroll-viewport\n itemSize=\"134\"\n scrollViewport\n (click)=\"selection = []; selectionText = ''\"\n >\n <div class=\"row\" *cdkVirtualFor=\"let row of sortedFolders\">\n <div class=\"file\"\n *ngFor=\"let item of row\"\n [class.selected]=\"selection.includes(item)\"\n [class.generic]=\"item['_icon'].needsBackdrop\"\n [ngx-contextmenu]=\"fileContextMenu\"\n [ngx-menu-context]=\"item\"\n >\n <mat-checkbox\n #checkbox\n *ngIf=\"config.mode == 'focusFiles' && item.kind == 'file'\"\n [checked]=\"item['_value']\"\n (change)=\"onToggle(item, $event)\"\n />\n <div\n style=\"display: contents\"\n (click)=\"onSelect(item, $event)\"\n (dblclick)=\"onItemClick(item)\"\n (dragstart)=\"onDragStart($event, item)\"\n >\n <img [src]=\"item['_icon'].path\"/>\n <p>{{item['vanityName'] || item.name}}</p>\n </div>\n </div>\n </div>\n </cdk-virtual-scroll-viewport>\n </ng-scrollbar>\n\n <!-- List mode -->\n <div\n *ngIf=\"viewMode == 'list'\"\n style=\"width: 100%; height: 100%\"\n [class.showDropArea]=\"draggingOver\"\n [ngx-contextmenu]=\"folderContextMenu\"\n >\n <app-tabulator\n [dataSource]=\"directoryContents\"\n [columns]=\"[\n { field: 'name', title: 'Name', formatter: nameCellFormatter },\n { field: '_size', title: 'Size' },\n { field: '_ctime', title: 'Created' },\n { field: '_mtime', title: 'Modified' },\n ]\"\n [options]=\"{\n rowHeight: 32\n }\"\n (rowClick)=\"onRowClick($event)\"\n (rowDblClick)=\"onItemClick($event.data)\"\n (rowContext)=\"onRowCtx($event)\"\n />\n </div>\n</div>\n\n<div class=\"select-hint\" *ngIf=\"selectionText\">\n {{selectionText}}\n</div>\n\n<div class=\"controls\">\n <button\n mat-flat-button\n class=\"upload-button\"\n (click)=\"onCreateFolder()\"\n >\n <mat-icon>create_new_folder</mat-icon>\n New Folder\n </button>\n <button\n mat-flat-button\n class=\"upload-button\"\n (click)=\"onUploadFile()\"\n >\n <mat-icon>upload_file</mat-icon>\n Upload\n </button>\n</div>\n", styles: [":host{display:block;height:100%;width:100%;overflow:hidden}.resize-observer{position:absolute;inset:0}.grid .row{flex:1;display:grid;grid-template-columns:repeat(auto-fill,80px);justify-content:space-between;grid-gap:20px;grid-auto-rows:min-content;padding:10px;margin-right:10px}.grid .file{width:80px;z-index:1;position:relative;transition:opacity 50ms ease-in-out;display:flex;flex-direction:column;align-items:center;text-align:center}.grid .file.selected p{background-color:#8ad9d9;color:#000}.grid .file.generic:before{content:\" \";position:absolute;background:var(--filemanager-fileicon-backdrop);background-repeat:no-repeat;width:100%;height:100%;z-index:-1;left:0}.grid .file.generic img{height:44px;width:44px;margin-top:28px;margin-bottom:8px}.grid .file img{-webkit-user-select:none;user-select:none}.grid .file p{height:50px;width:100%;margin:0;padding:2px;font-size:14px;line-height:16px;border-radius:4px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;text-overflow:ellipsis;overflow-wrap:break-word;transition:background-color 50ms ease-in-out,color 50ms ease-in-out}.grid .file mat-checkbox{position:absolute;left:-32px;top:-16px}:host ::ng-deep .small .file{width:46px}:host ::ng-deep .grid.selectionMode .row{padding-left:30px}:host ::ng-deep .grid.selectionMode .cdk-virtual-scroll-content-wrapper{padding-top:10px}:host ::ng-deep .tabulator .tabulator-row .tabulator-cell:not(:first-of-type){padding-top:9px}.list .row{flex:1;display:flex;align-items:center;padding:5px 10px;height:42px}.list .row p{margin:0}.list .row:hover{background-color:var(--filemanager-row-hover-background-color, #343434)}.list .row.selected p{background-color:#8ad9d9;color:#000;border-radius:5px;padding:0 4px}.list .row.odd{background-color:var(--filemanager-row-alt-background-color, #323232)}.controls{position:absolute;bottom:12px;right:12px;display:flex}.select-hint{position:absolute;font-size:14px;bottom:0;right:0;background-color:#000a;padding:2px 10px;border:1px solid black;border-top-right-radius:5px;border-bottom:none;border-right:none;z-index:9999}.select-hint:hover{display:none}.showDropArea{border:4px dashed rgba(18,18,18,.8);transition:border-color .25s ease}:host ::ng-deep ng-scrollbar.ng-scrollbar{box-sizing:border-box!important;--scrollbar-thumb-color: #666;min-height:200px;min-width:200px}mat-progress-bar{--mdc-linear-progress-track-height: 2px;position:absolute;top:0;left:0;width:100%;animation:dropIn .2s ease;transition:position .2s ease;z-index:100}mat-progress-bar.hide{top:-2px}@keyframes dropIn{0%{top:-2px}to{top:0}}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "ngmodule", type: NgScrollbarModule }, { kind: "component", type: i5.NgScrollbar, selector: "ng-scrollbar", inputs: ["disabled", "sensorDisabled", "pointerEventsDisabled", "viewportPropagateMouseMove", "autoHeightDisabled", "autoWidthDisabled", "viewClass", "trackClass", "thumbClass", "minThumbSize", "trackClickScrollDuration", "pointerEventsMethod", "track", "visibility", "appearance", "position", "sensorDebounce", "scrollAuditTime"], outputs: ["updated"], exportAs: ["ngScrollbar"] }, { kind: "directive", type: i5.ScrollViewport, selector: "[scrollViewport]" }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i7.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: TabulatorComponent, selector: "app-tabulator", inputs: ["dataSource", "columns", "key", "options"], outputs: ["cellClick", "cellDblClick", "rowClick", "rowContext", "rowDblClick"] }, { kind: "directive", type: MenuDirective, selector: "[ngx-contextmenu],[ngx-menu]", inputs: ["ngx-menu-context", "ngx-contextmenu", "ngx-menu", "ngx-menu-config"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i10.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i10.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i10.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }] }); }
618
618
  }
619
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: FileGridComponent, decorators: [{
619
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: FileGridComponent, decorators: [{
620
620
  type: Component,
621
621
  args: [{ selector: 'app-file-grid', imports: [
622
622
  NgIf,
@@ -679,4 +679,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImpor
679
679
  }], sortOrder: [{
680
680
  type: Input
681
681
  }] } });
682
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy9maWxlbWFuYWdlci9maWxlLWdyaWQvZmlsZS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy9maWxlbWFuYWdlci9maWxlLWdyaWQvZmlsZS1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFnQyxXQUFXLEVBQXFCLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFxQixpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3hDLE9BQU8sRUFBeUMsYUFBYSxFQUFZLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFD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LEdBQUc7WUFDdkIsS0FBSyxFQUFFLENBQUMsQ0FBaUIsRUFBRSxDQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLEtBQUssRUFBRSxDQUFDLENBQWlCLEVBQUUsQ0FBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RSxTQUFTLEVBQUUsQ0FBQyxDQUFpQixFQUFFLENBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTztZQUN0RixVQUFVLEVBQUUsQ0FBQyxDQUFpQixFQUFFLENBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTztZQUN2RixNQUFNLEVBQUUsQ0FBQyxDQUFpQixFQUFFLENBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSTtZQUM3RSxNQUFNLEVBQUUsQ0FBQyxDQUFpQixFQUFFLENBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JJLENBQUM7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QUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBR0UsU0FBUztzQkFBakIsS0FBSztnQkFDSSxlQUFlO3NCQUF4QixNQUFNO2dCQUVFLEtBQUs7c0JBQWIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQWNFLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIElucHV0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIE9wdGlvbmFsLCBJbmplY3QsIFRlbXBsYXRlUmVmLCBDaGFuZ2VEZXRlY3RvclJlZiwgU2VjdXJpdHlDb250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5pbXBvcnQgeyBNYXRDaGVja2JveENoYW5nZSwgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IERhdGVQaXBlLCBOZ0Zvck9mLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNjcm9sbGluZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgQ2VsbENvbXBvbmVudCwgRW1wdHlDYWxsYmFjayB9IGZyb20gJ3RhYnVsYXRvci10YWJsZXMnO1xuaW1wb3J0IHsgTmdTY3JvbGxiYXJNb2R1bGUgfSBmcm9tICduZ3gtc2Nyb2xsYmFyJztcbmltcG9ydCB7IERpcmVjdG9yeURlc2NyaXB0b3IsIEZpbGVEZXNjcmlwdG9yLCBGaWxlbWFuYWdlckNvbXBvbmVudCwgRmlsZVZpZXdUYWIsIEZTRGVzY3JpcHRvciwgTmd4RmlsZU1hbmFnZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vZmlsZW1hbmFnZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEZpbGVTb3J0aW5nIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgSWNvblJlc29sdmVyIH0gZnJvbSAnLi4vaWNvbi1yZXNvbHZlcic7XG5pbXBvcnQgeyBUYWJ1bGF0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi90YWJ1bGF0b3IvdGFidWxhdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XG5pbXBvcnQgeyB1cGxvYWRGaWxlIH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlLCBGZXRjaCwgS2V5Ym9hcmRTZXJ2aWNlLCBNZW51RGlyZWN0aXZlLCBNZW51SXRlbSwgb3Blbk1lbnUgfSBmcm9tICcuLi8uLi8uLi9wdWJsaWMtYXBpJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcblxuY29uc3QgaXRlbVdpZHRoID0gKDgwICsgMjApO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FwcC1maWxlLWdyaWQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9maWxlLWdyaWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZpbGUtZ3JpZC5jb21wb25lbnQuc2NzcyddLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdJZixcbiAgICAgICAgTmdGb3JPZixcbiAgICAgICAgRGF0ZVBpcGUsXG4gICAgICAgIE1hdFRhYnNNb2R1bGUsXG4gICAgICAgIE5nU2Nyb2xsYmFyTW9kdWxlLFxuICAgICAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICAgICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgICAgIE1hdFByb2dyZXNzQmFyTW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIFRhYnVsYXRvckNvbXBvbmVudCxcbiAgICAgICAgTWVudURpcmVjdGl2ZSxcbiAgICAgICAgU2Nyb2xsaW5nTW9kdWxlXG4gICAgXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBAVmlld0NoaWxkKFwiZmlsZVZpZXdwb3J0XCIpIGZpbGVzUmVmOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoVGFidWxhdG9yQ29tcG9uZW50KSB0YWJ1bGF0b3I6IFRhYnVsYXRvckNvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoJ3JlbmFtZVRlbXBsYXRlJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSByZW5hbWVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuXG4gICAgcHJpdmF0ZSBfcGF0aDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHNldCBwYXRoKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuXG4gICAgICAgIGlmICh0aGlzLl9wYXRoICYmIHRoaXMuY29uZmlnLm5hdmlnYXRlT25seVRvRGVzY2VuZGFudHMpIHtcbiAgICAgICAgICAgIGlmICghdmFsdWUuc3RhcnRzV2l0aCgnLycpKVxuICAgICAgICAgICAgICAgIHZhbHVlID0gJy8nICsgdmFsdWU7XG4gICAgICAgICAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgodGhpcy5jb25maWcucGF0aCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByZXYgPSB0aGlzLl9wYXRoO1xuXG4gICAgICAgIHRoaXMuX3BhdGggPSB2YWx1ZTtcblxuICAgICAgICBpZiAocHJldiAhPSB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5wYXRoQ2hhbmdlLm5leHQodGhpcy5wYXRoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5hcGlTZXR0aW5ncylcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRGb2xkZXIoKVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBwYXRoKCkge3JldHVybiB0aGlzLl9wYXRofVxuICAgIEBPdXRwdXQoKSBwYXRoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBASW5wdXQoKSBjb25maWc6IE5neEZpbGVNYW5hZ2VyQ29uZmlndXJhdGlvbiA9IHt9O1xuICAgIEBJbnB1dCgpIHNob3dIaWRkZW5GaWxlcyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHZpZXdNb2RlOiBcImxpc3RcIiB8IFwiZ3JpZFwiID0gXCJncmlkXCI7XG4gICAgQElucHV0KCkgZ3JpZFNpemU6IFwic21hbGxcIiB8IFwibm9ybWFsXCIgfCBcImxhcmdlXCIgPSBcIm5vcm1hbFwiO1xuICAgIEBJbnB1dCgpIHRhYjogRmlsZVZpZXdUYWI7XG5cbiAgICBAT3V0cHV0KCkgZmlsZVNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZURlc2NyaXB0b3I+KCk7XG4gICAgQE91dHB1dCgpIGZpbGVEYmxDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZURlc2NyaXB0b3I+KCk7XG4gICAgQE91dHB1dCgpIGZvbGRlclNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8RGlyZWN0b3J5RGVzY3JpcHRvcj4oKTtcbiAgICBAT3V0cHV0KCkgZm9sZGVyRGJsQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPERpcmVjdG9yeURlc2NyaXB0b3I+KCk7XG4gICAgQE91dHB1dCgpIG5ld1RhYiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBwYXRoOiBzdHJpbmc7IH0+KCk7XG4gICAgQE91dHB1dCgpIGxvYWRGaWxlcyA9IG5ldyBFdmVudEVtaXR0ZXI8RlNEZXNjcmlwdG9yW10+KCk7XG5cbiAgICBkaXJlY3RvcnlDb250ZW50czogRlNEZXNjcmlwdG9yW10gPSBbXTtcbiAgICBASW5wdXQoKSBzZWxlY3Rpb246IEZTRGVzY3JpcHRvcltdID0gW107XG4gICAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RlNEZXNjcmlwdG9yW10+KCk7XG5cbiAgICBASW5wdXQoKSB2YWx1ZTogRlNEZXNjcmlwdG9yW10gPSBbXTtcbiAgICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZTRGVzY3JpcHRvcltdPigpO1xuXG4gICAgc2VsZWN0aW9uVGV4dDogc3RyaW5nO1xuXG4gICAgc29ydGVkRm9sZGVyczogYW55W11bXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBzb3J0ZXJzID0ge1xuICAgICAgICBcImEtelwiOiAoYTogRmlsZURlc2NyaXB0b3IsIGI6IEZpbGVEZXNjcmlwdG9yKSA9PiBhLm5hbWUgPiBiLm5hbWUgPyAxIDogLTEsXG4gICAgICAgIFwiei1hXCI6IChhOiBGaWxlRGVzY3JpcHRvciwgYjogRmlsZURlc2NyaXB0b3IpID0+IGIubmFtZSA+IGEubmFtZSA/IDEgOiAtMSxcbiAgICAgICAgXCJsYXN0bW9kXCI6IChhOiBGaWxlRGVzY3JpcHRvciwgYjogRmlsZURlc2NyaXB0b3IpID0+IGIuc3RhdHMubXRpbWVNcyAtIGEuc3RhdHMubXRpbWVNcyxcbiAgICAgICAgXCJmaXJzdG1vZFwiOiAoYTogRmlsZURlc2NyaXB0b3IsIGI6IEZpbGVEZXNjcmlwdG9yKSA9PiBhLnN0YXRzLm10aW1lTXMgLSBiLnN0YXRzLm10aW1lTXMsXG4gICAgICAgIFwic2l6ZVwiOiAoYTogRmlsZURlc2NyaXB0b3IsIGI6IEZpbGVEZXNjcmlwdG9yKSA9PiBiLnN0YXRzLnNpemUgLSBhLnN0YXRzLnNpemUsXG4gICAgICAgIFwidHlwZVwiOiAoYTogRmlsZURlc2NyaXB0b3IsIGI6IEZpbGVEZXNjcmlwdG9yKSA9PiBhLnBhdGguc3BsaXQoJy4nKS5zcGxpY2UoLTEsIDEpWzBdID4gYi5wYXRoLnNwbGl0KCcuJykuc3BsaWNlKC0xLCAxKVswXSA/IDEgOiAtMVxuICAgIH07XG4gICAgQElucHV0KCkgc29ydE9yZGVyOiBGaWxlU29ydGluZyA9IFwiYS16XCI7XG5cbiAgICBpdGVtc1BlclJvdyA9IDY7XG5cbiAgICAvLyBJZiB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgaW5zaWRlIG9mIGFuIGFyY2hpdmVcbiAgICBpc0FyY2hpdmUgPSB0cnVlO1xuXG4gICAgdXNlcklzRHJhZ2dpbmdGaWxlID0gZmFsc2U7XG4gICAgZHJhZ2dpbmdPdmVyID0gZmFsc2U7XG5cbiAgICBzaG93TG9hZGVyID0gZmFsc2U7XG4gICAgaGlkZUxvYWRlciA9IGZhbHNlO1xuXG4gICAgcmVhZG9ubHkgY29sdW1ucyA9IFtcbiAgICAgICAgeyBpZDogXCJuYW1lXCIsIGxhYmVsOiBcIk5hbWVcIiB9LFxuICAgICAgICB7IGlkOiBcInNpemVcIiwgbGFiZWw6IFwiU2l6ZVwifSxcbiAgICAgICAgeyBpZDogXCJ0eXBlXCIsIGxhYmVsOiBcIlR5cGVcIn0sXG4gICAgICAgIHsgaWQ6IFwib3duZXJcIiwgbGFiZWw6IFwiT3duZXJcIn0sXG4gICAgICAgIHsgaWQ6IFwiZ3JvdXBcIiwgbGFiZWw6IFwiR3JvdXBcIn0sXG4gICAgICAgIHsgaWQ6IFwicGVybWlzc2lvbnNcIiwgbGFiZWw6IFwiUGVybWlzc2lvbnNcIn0sXG4gICAgICAgIHsgaWQ6IFwibG9jYXRpb25cIiwgbGFiZWw6IFwiTG9jYXRpb25cIn0sXG4gICAgICAgIHsgaWQ6IFwibW9kaWZpZWRcIiwgbGFiZWw6IFwiTW9kaWZpZWRcIn0sXG4gICAgICAgIHsgaWQ6IFwibW9kaWZpZWQtLXRpbWVcIiwgbGFiZWw6IFwiTW9kaWZpZWQgLSBUaW1lXCJ9LFxuICAgICAgICB7IGlkOiBcImFjY2Vzc2VkXCIsIGxhYmVsOiBcIkFjY2Vzc2VkXCJ9LFxuICAgICAgICB7IGlkOiBcImNyZWF0ZWRcIiwgbGFiZWw6IFwiQ3JlYXRlZFwifSxcbiAgICAgICAgeyBpZDogXCJyZWNlbmN5XCIsIGxhYmVsOiBcIlJlY2VuY3lcIn0sXG4gICAgICAgIHsgaWQ6IFwic3RhclwiLCBsYWJlbDogXCJTdGFyXCJ9LFxuICAgICAgICB7IGlkOiBcImRldGFpbGVkLXR5cGVcIiwgbGFiZWw6IFwiRGV0YWlsZWQgVHlwZVwifSxcbiAgICBdO1xuXG4gICAgY29scyA9IFtcbiAgICAgICAgeyBpZDogXCJuYW1lXCIsIGxhYmVsOiBcIk5hbWVcIiB9LFxuICAgICAgICB7IGlkOiBcInNpemVcIiwgbGFiZWw6IFwiU2l6ZVwiIH0sXG4gICAgICAgIHsgaWQ6IFwibW9kaWZpZWRcIiwgbGFiZWw6IFwiTW9kaWZpZWRcIiB9LFxuICAgICAgICB7IGlkOiBcInN0YXJcIiwgbGFiZWw6IFwiU3RhclwiIH1cbiAgICBdO1xuXG4gICAgZm9sZGVyQ29udGV4dE1lbnU6IE1lbnVJdGVtPEZTRGVzY3JpcHRvcj5bXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IFwiTmV3IEZvbGRlclwiLFxuICAgICAgICAgICAgLy8gc2hvcnRjdXRMYWJlbDogXCJTaGlmdCtDdHJsK05cIixcbiAgICAgICAgICAgIGljb246IFwiY3JlYXRlX25ld19mb2xkZXJcIixcbiAgICAgICAgICAgIGFjdGlvbjogKGRhdGEpID0+IHRoaXMub25DcmVhdGVGb2xkZXIoZGF0YSlcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IFwiVXBsb2FkIGZpbGVcIixcbiAgICAgICAgICAgIC8vIHNob3J0Y3V0TGFiZWw6IFwiQ3RybCtEXCIsXG4gICAgICAgICAgICBpY29uOiBcImZpbGVfdXBsb2FkXCIsXG4gICAgICAgICAgICBhY3Rpb246IChldnQpID0+IHRoaXMub25VcGxvYWRGaWxlKGV2dClcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZXBhcmF0b3JcIixcbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgICAgaXNEaXNhYmxlZDogKGRhdGEpID0+IHRydWUsXG4gICAgICAgIC8vICAgICBsYWJlbDogXCJfUF9hc3RlXCIsXG4gICAgICAgIC8vICAgICBpY29uOiBcImNvbnRlbnRfcGFzdGVcIixcbiAgICAgICAgLy8gICAgIGFjdGlvbjogKGV2dCkgPT4ge1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogXCJTZWxlY3QgX0FfbGxcIixcbiAgICAgICAgICAgIHNob3J0Y3V0TGFiZWw6IFwiQ3RybCtBXCIsXG4gICAgICAgICAgICBpY29uOiBcInNlbGVjdF9hbGxcIixcbiAgICAgICAgICAgIGFjdGlvbjogKGV2dCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gdGhpcy5fc29ydEZpbHRlcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uVGV4dCA9IHRoaXMuZ2V0U2VsZWN0aW9uVGV4dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLm5leHQodGhpcy5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBcInNlcGFyYXRvclwiLFxuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgICBsYWJlbDogXCJQX3Jfb3BlcnRpZXNcIixcbiAgICAgICAgLy8gICAgIGljb246IFwiZmluZF9pbl9wYWdlXCIsXG4gICAgICAgIC8vICAgICBhY3Rpb246IChldnQpID0+IHtcblxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9XG4gICAgXTtcblxuICAgIGZpbGVDb250ZXh0TWVudTogTWVudUl0ZW08RlNEZXNjcmlwdG9yPltdID0gW107XG5cbiAgICBwZXJmb3JtQ2hlY2tzdW0ocGF0aCwgZGlnZXN0KSB7XG4gICAgICAgIC8vIHRoaXMud2luZG93TWFuYWdlci5vcGVuV2luZG93KHtcbiAgICAgICAgLy8gICAgIGFwcElkOiBcImNoZWNrc3VtXCIsXG4gICAgICAgIC8vICAgICBkYXRhOiB7IGRpZ2VzdCwgcGF0aCB9LFxuICAgICAgICAvLyAgICAgd29ya3NwYWNlOiB0aGlzLndpbmRvd1JlZi53b3Jrc3BhY2UsXG4gICAgICAgIC8vICAgICB3aWR0aDogNjAwLFxuICAgICAgICAvLyAgICAgaGVpZ2h0OiAyNTBcbiAgICAgICAgLy8gfSk7XG4gICAgfVxuXG4gICAgaWNvblJlc29sdmVyOiBJY29uUmVzb2x2ZXI7XG5cbiAgICBnZXQgbGliQ29uZmlnKCkgeyByZXR1cm4gdGhpcy5maWxlTWFuYWdlci5saWJDb25maWcgfVxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGZldGNoOiBGZXRjaCxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBrZXlib2FyZDogS2V5Ym9hcmRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZzogRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBtYXREaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBmaWxlTWFuYWdlcjogRmlsZW1hbmFnZXJDb21wb25lbnQsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHNhbml0aXplcjogRG9tU2FuaXRpemVyXG4gICAgKSB7XG5cblxuICAgICAgICB0aGlzLmljb25SZXNvbHZlciA9IG5ldyBJY29uUmVzb2x2ZXIodGhpcy5saWJDb25maWcuYXNzZXRQYXRoKTtcblxuICAgICAgICAvLyBjdHJsICsgYSA9PiBzZWxlY3QgYWxsXG4gICAgICAgIGtleWJvYXJkLm9uS2V5Q29tbWFuZCh7XG4gICAgICAgICAgICBrZXk6IFwiYVwiLFxuICAgICAgICAgICAgY3RybDogdHJ1ZSxcbiAgICAgICAgfSkuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHRoaXMuX3NvcnRGaWx0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uVGV4dCA9IHRoaXMuZ2V0U2VsZWN0aW9uVGV4dCgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGlvbik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGN0cmwgKyBjID0+IGNvcHkgZmlsZSBuYW1lcyB0byBjbGlwYm9hcmRcbiAgICAgICAga2V5Ym9hcmQub25LZXlDb21tYW5kKHtcbiAgICAgICAgICAgIGtleTogXCJjXCIsXG4gICAgICAgICAgICBjdHJsOiB0cnVlLFxuICAgICAgICB9KS5zdWJzY3JpYmUoZXZ0ID0+IHtcblxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBjdHJsICsgaCA9PiB0b2dnbGUgaGlkZGVuIGZpbGVzXG4gICAgICAgIGtleWJvYXJkLm9uS2V5Q29tbWFuZCh7XG4gICAgICAgICAgICBrZXk6IFwiaFwiLFxuICAgICAgICAgICAgY3RybDogdHJ1ZSxcbiAgICAgICAgICAgIGludGVycnVwdDogdHJ1ZVxuICAgICAgICB9KS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0hpZGRlbkZpbGVzID0gIXRoaXMuc2hvd0hpZGRlbkZpbGVzO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBGMiA9PiBSZW5hbWUgc2VsZWN0ZWQgZmlsZXNcbiAgICAgICAga2V5Ym9hcmQub25LZXlDb21tYW5kKHtcbiAgICAgICAgICAgIGtleTogXCJmMlwiLFxuICAgICAgICB9KS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgICAgICAgIC8vIFJlbmFtZSBzZWxlY3RlZCBmaWxlKHMpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEVudGVyID0+IE9wZW4gc2VsZWN0ZWQgZmlsZXNcbiAgICAgICAga2V5Ym9hcmQub25LZXlDb21tYW5kKHtcbiAgICAgICAgICAgIGtleTogXCJFbnRlclwiLFxuICAgICAgICB9KS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5kaXJlY3RvcnlDb250ZW50cy5maWx0ZXIoZGMgPT4gdGhpcy5zZWxlY3Rpb24uZmluZChpID0+IGkubmFtZSA9PSBkYy5uYW1lKSk7XG4gICAgICAgICAgICAvLyB0aGlzLndpbmRvd01hbmFnZXIub3BlbkZpbGVzKGZpbGVzIGFzIGFueSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIERlbGV0ZSA9PiBkZWxldGUgc2VsZWN0ZWQgZmlsZXNcbiAgICAgICAga2V5Ym9hcmQub25LZXlDb21tYW5kKHtcbiAgICAgICAgICAgIGtleTogXCJkZWxldGVcIixcbiAgICAgICAgfSkuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWxlcyA9IHRoaXMuZGlyZWN0b3J5Q29udGVudHMuZmlsdGVyKGRjID0+IHRoaXMuc2VsZWN0aW9uLmZpbmQoaSA9PiBpLm5hbWUgPT0gZGMubmFtZSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgLy8gdGhpcy5sb2FkRm9sZGVyKCk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLmZpbGVDb250ZXh0TWVudSA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJEb3dubG9hZFwiLFxuICAgICAgICAgICAgICAgIGljb246IFwiZG93bmxvYWRcIixcbiAgICAgICAgICAgICAgICBhY3Rpb246IChmaWxlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0YXJnZXQgPSBgJHt3aW5kb3cub3JpZ2lufSR7dGhpcy5jb25maWcuYXBpU2V0dGluZ3MuZG93bmxvYWRFbnRyeVVybH1gO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IGZpbGUucGF0aCArIGZpbGUubmFtZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZS5raW5kID09IFwiZGlyZWN0b3J5XCIgJiYgIXBhdGguZW5kc1dpdGgoJy8nKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggKz0gXCIvXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ICs9IGAke3RhcmdldC5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nfXBhdGg9JHtwYXRofSZuZ3N3LWJ5cGFzcz10cnVlYDtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2codGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2luZG93Lm9wZW4odGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgICAgICAgICAgICAgICAgbGluay5kb3dubG9hZCA9IGZpbGUubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgbGluay5ocmVmID0gdGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICBsaW5rLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIGxpbmsucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZU1hbmFnZXIuZmlsZURvd25sb2FkLm5leHQoZmlsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJPcGVuIGluIG5ldyBUYWJcIixcbiAgICAgICAgICAgICAgICBpY29uOiBcIm9wZW5faW5fbmV3XCIsXG4gICAgICAgICAgICAgICAgaXNWaXNpYmxlOiAoZGF0YSkgPT4gZGF0YS5raW5kID09IFwiZGlyZWN0b3J5XCIsXG4gICAgICAgICAgICAgICAgYWN0aW9uOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVNYW5hZ2VyLmluaXRUYWIoZGF0YS5wYXRoICsgZGF0YS5uYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgLy8gICAgIGxhYmVsOiBcIk9wZW4gd2l0aCBBcHBsaWNhdGlvbi4uLlwiLFxuICAgICAgICAgICAgLy8gICAgIGlzVmlzaWJsZTogKGRhdGEpID0+IGRhdGEua2luZCA9PSBcImZpbGVcIixcbiAgICAgICAgICAgIC8vICAgICBzaG9ydGN1dExhYmVsOiBcIkN0cmwrRFwiLFxuICAgICAgICAgICAgLy8gICAgIGFjdGlvbjogKGV2dCkgPT4ge1xuXG4gICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICBcInNlcGFyYXRvclwiLFxuICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgLy8gICAgIGxhYmVsOiBcIkN1dFwiLFxuICAgICAgICAgICAgLy8gICAgIGljb246IFwiY29udGVudF9jdXRcIixcbiAgICAgICAgICAgIC8vICAgICBpc0Rpc2FibGVkOiBkYXRhID0+IHRydWUsXG4gICAgICAgICAgICAvLyAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiQ29weVwiLFxuICAgICAgICAgICAgLy8gICAgIGljb246IFwiZmlsZV9jb3B5XCIsXG4gICAgICAgICAgICAvLyAgICAgaXNEaXNhYmxlZDogZGF0YSA9PiB0cnVlLFxuICAgICAgICAgICAgLy8gICAgIGNoaWxkcmVuUmVzb2x2ZXI6ICgpID0+IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCA1MDAwMDApKVxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgIC8vICAgICBsYWJlbDogXCJNb3ZlIFRvLi4uXCIsXG4gICAgICAgICAgICAvLyAgICAgaWNvbjogXCJkcml2ZV9maWxlX21vdmVcIixcbiAgICAgICAgICAgIC8vICAgICBzaG9ydGN1dExhYmVsOiBcIkN0cmwrQVwiLFxuICAgICAgICAgICAgLy8gICAgIGFjdGlvbjogKGV2dCkgPT4ge1xuXG4gICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiQ29weSBUby4uLlwiLFxuICAgICAgICAgICAgLy8gICAgIGljb246IFwiZm9sZGVyX2NvcHlcIixcbiAgICAgICAgICAgIC8vICAgICBzaG9ydGN1dExhYmVsOiBcIkN0cmwrQVwiLFxuICAgICAgICAgICAgLy8gICAgIGFjdGlvbjogKGV2dCkgPT4ge1xuXG4gICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiRGVsZXRlXCIsXG4gICAgICAgICAgICAgICAgaWNvbjogXCJkZWxldGVcIixcbiAgICAgICAgICAgICAgICAvLyBzaG9ydGN1dExhYmVsOiBcIkRlbFwiLFxuICAgICAgICAgICAgICAgIGlzVmlzaWJsZTogZGF0YSA9PiAhZGF0YS5wYXRoLmluY2x1ZGVzKFwiIy9cIiksIC8vIG9taXQgZmlsZXMgaW4gY29tcHJlc3NlZCBkaXJzXG4gICAgICAgICAgICAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBldnQucGF0aCArIGV2dC5uYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnLmFwaVNldHRpbmdzLmRlbGV0ZUVudHJ5VXJsVGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5jb25maWcuYXBpU2V0dGluZ3MuZGVsZXRlRW50cnlVcmxUZW1wbGF0ZShwYXRoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmNvbmZpZy5hcGlTZXR0aW5ncy5kZWxldGVFbnRyeVVybDtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZldGNoLnBvc3QodXJsLCB7IHBhdGg6IGV2dC5wYXRoICsgZXZ0Lm5hbWUgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMubG9hZEZvbGRlcigpKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgLy8gICAgIGxhYmVsOiBcIlNocmVkIGZpbGVcIixcbiAgICAgICAgICAgIC8vICAgICBpY29uOiBcImRlbGV0ZV9mb3JldmVyXCIsXG4gICAgICAgICAgICAvLyAgICAgaXNWaXNpYmxlOiBkYXRhID0+ICFkYXRhLnBhdGguaW5jbHVkZXMoXCIjL1wiKSwgLy8gb21pdCBmaWxlcyBpbiBjb21wcmVzc2VkIGRpcnNcbiAgICAgICAgICAgIC8vICAgICBhY3Rpb246IChldnQpID0+IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5mZXRjaC5wb3N0KGAvYXBpL2ZpbGVzeXN0ZW0vZGVsZXRlP3dpcGU9dHJ1ZWAsIHsgZmlsZXM6IFtldnQucGF0aCArIGV2dC5uYW1lXX0pXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmxvYWRGb2xkZXIoKSlcbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJSZW5hbWVcIixcbiAgICAgICAgICAgICAgICBpY29uOiBcImRyaXZlX2ZpbGVfcmVuYW1lX291dGxpbmVcIixcbiAgICAgICAgICAgICAgICBpc1Zpc2libGU6IGRhdGEgPT4gIWRhdGEucGF0aC5pbmNsdWRlcyhcIiMvXCIpLCAvLyBvbWl0IGZpbGVzIGluIGNvbXByZXNzZWQgZGlyc1xuICAgICAgICAgICAgICAgIC8vIHNob3J0Y3V0TGFiZWw6IFwiRjJcIixcbiAgICAgICAgICAgICAgICBhY3Rpb246IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nLm9wZW4oXCJmb2xkZXItcmVuYW1lXCIsIFwiQGRvdGdsaXRjaC9uZ3gtd2ViLWNvbXBvbmVudHNcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRzOiB7IHBhdGg6IGRhdGE/LnBhdGggfHwgdGhpcy5wYXRoLCBuYW1lOiBkYXRhPy5uYW1lIHx8ICcnLCBjb25maWc6IHRoaXMuY29uZmlnIH1cbiAgICAgICAgICAgICAgICAgICAgfSkudGhlbihyID0+IHRoaXMubG9hZEZvbGRlcigpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8vIEV4dHJhY3QgSGVyZVxuICAgICAgICAgICAgLy8gRXh0cmFjdCBUby4uLlxuICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgLy8gICAgIGxhYmVsOiBcIkV4dHJhY3QgSGVyZVwiLFxuICAgICAgICAgICAgLy8gICAgIGljb246IFwiZm9sZGVyX3ppcFwiLFxuICAgICAgICAgICAgLy8gICAgIHNob3J0Y3V0TGFiZWw6IFwiQ3RybCtBXCIsXG4gICAgICAgICAgICAvLyAgICAgaXNEaXNhYmxlZDogKGRhdGEpID0+ICEoZGF0YS5raW5kID09IFwiZmlsZVwiICYmIGRhdGEuZXh0ICE9IFwiLnppcFwiICYmIGlzQXJjaGl2ZShkYXRhKSksXG4gICAgICAgICAgICAvLyAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgIC8vICAgICBsYWJlbDogXCJFeHRyYWN0IHRvLi4uXCIsXG4gICAgICAgICAgICAvLyAgICAgaWNvbjogXCJmb2xkZXJfemlwXCIsXG4gICAgICAgICAgICAvLyAgICAgc2hvcnRjdXRMYWJlbDogXCJDdHJsK0FcIixcbiAgICAgICAgICAgIC8vICAgICBpc0Rpc2FibGVkOiAoZGF0YSkgPT4gIShkYXRhLmtpbmQgPT0gXCJmaWxlXCIgJiYgZGF0YS5leHQgIT0gXCIuemlwXCIgJiYgaXNBcmNoaXZlKGRhdGEpKSxcbiAgICAgICAgICAgIC8vICAgICBhY3Rpb246IChldnQpID0+IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgLy8gICAgIGxhYmVsOiBcIkNvbXByZXNzLi4uXCIsXG4gICAgICAgICAgICAvLyAgICAgaWNvbjogXCJmb2xkZXJfemlwXCIsXG4gICAgICAgICAgICAvLyAgICAgc2hvcnRjdXRMYWJlbDogXCJDdHJsK0FcIixcbiAgICAgICAgICAgIC8vICAgICBpc0Rpc2FibGVkOiAoZGF0YSkgPT4gZGF0YS5raW5kID09IFwiZmlsZVwiLFxuICAgICAgICAgICAgLy8gICAgIGFjdGlvbjogKGV2dCkgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IFwiQ2hlY2tzdW1cIixcbiAgICAgICAgICAgICAgICBpY29uOiBcIm1hbmFnZV9zZWFyY2hcIixcbiAgICAgICAgICAgICAgICBpc0Rpc2FibGVkOiAoZGF0YSkgPT4gZGF0YS5raW5kICE9IFwiZmlsZVwiLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIk1ENVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAoZXZ0KSA9PiB0aGlzLnBlcmZvcm1DaGVja3N1bShldnQucGF0aCArIGV2dC5uYW1lLCBcIm1kNVwiKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiU0hBMVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAoZXZ0KSA9PiB0aGlzLnBlcmZvcm1DaGVja3N1bShldnQucGF0aCArIGV2dC5uYW1lLCBcInNoYTFcIiksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBcIlNIQTI1NlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAoZXZ0KSA9PiB0aGlzLnBlcmZvcm1DaGVja3N1bShldnQucGF0aCArIGV2dC5uYW1lLCBcInNoYTI1NlwiKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiU0hBNTEyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IChldnQpID0+IHRoaXMucGVyZm9ybUNoZWNrc3VtKGV2dC5wYXRoICsgZXZ0Lm5hbWUsIFwic2hhNTEyXCIpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgaXNWaXNpYmxlOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc0FyY2hpdmUgfHwgZGF0YS5raW5kID09IFwiZmlsZVwiO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgLy8gICAgIGxhYmVsOiBcIlN0YXJcIixcbiAgICAgICAgICAgIC8vICAgICBpY29uOiBcInN0YXJcIixcbiAgICAgICAgICAgIC8vICAgICBzaG9ydGN1dExhYmVsOiBcIkN0cmwrQVwiLFxuICAgICAgICAgICAgLy8gICAgIGFjdGlvbjogKGV2dCkgPT4ge1xuXG4gICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAvLyBcInNlcGFyYXRvclwiLFxuICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgLy8gICAgIGxhYmVsOiBcIlBfcl9vcGVydGllc1wiLFxuICAgICAgICAgICAgLy8gICAgIGljb246IFwiZmluZF9pbl9wYWdlXCIsXG4gICAgICAgICAgICAvLyAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG5cbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGFzeW5jIGxvYWRGb2xkZXIoKSB7XG4gICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IHRydWU7XG4gICAgICAgIHRoaXMuaGlkZUxvYWRlciA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnLmFwaVNldHRpbmdzLmxpc3RFbnRyaWVzVXJsVGVtcGxhdGVcbiAgICAgICAgICAgID8gdGhpcy5jb25maWcuYXBpU2V0dGluZ3MubGlzdEVudHJpZXNVcmxUZW1wbGF0ZSh0aGlzLnBhdGgpXG4gICAgICAgICAgICA6IHRoaXMuY29uZmlnLmFwaVNldHRpbmdzLmxpc3RFbnRyaWVzVXJsXG5cbiAgICAgICAgdGhpcy5mZXRjaC5wb3N0KHVybCwgeyBwYXRoOiB0aGlzLnBhdGgsIHNob3dIaWRkZW46IHRoaXMuc2hvd0hpZGRlbkZpbGVzIH0pXG4gICAgICAgICAgICAudGhlbigoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZXM6IEZpbGVEZXNjcmlwdG9yW10gPSBkYXRhPy5maWxlcyB8fCBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXJzOiBEaXJlY3RvcnlEZXNjcmlwdG9yW10gPSBkYXRhPy5kaXJzIHx8IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0b3JzID0gZmlsZXMuY29uY2F0KGRpcnMgYXMgYW55KSBhcyBGU0Rlc2NyaXB0b3JbXTtcblxuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JzLmZvckVhY2goZiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZbJ19pY29uJ10gPSB0aGlzLmljb25SZXNvbHZlci5yZXNvbHZlSWNvbihmKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGYua2luZCA9PSBcImZpbGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZlsnX2N0aW1lJ10gPSBuZXcgRGF0ZShmLnN0YXRzPy5jdGltZU1zKT8udG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZbJ19tdGltZSddID0gbmV3IERhdGUoZi5zdGF0cz8ubXRpbWVNcyk/LnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmWydfc2l6ZSddID0gdGhpcy5ieXRlc1RvU3RyaW5nKGYuc3RhdHM/LnNpemUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRpcmVjdG9yeUNvbnRlbnRzID0gZGVzY3JpcHRvcnM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0RmlsdGVyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRGaWxlcy5uZXh0KGRlc2NyaXB0b3JzKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvcnRlZEZvbGRlcnMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mbG93Um93cygpO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlc2l6ZSgpLCAyNTApO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXNpemUoKSwgNTAwKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzaXplKCksIDEwMDApO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXNpemUoKSwgMjUwMCk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlc2l6ZSgpLCA1MDAwKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiBjb25zb2xlLmVycm9yKGUpKVxuICAgICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZUxvYWRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICAgICAgICB9KVxuICAgIH1cblxuICAgIGZsb3dSb3dzKCkge1xuICAgICAgICBsZXQgZmlsdGVyZWQgPSB0aGlzLl9zb3J0RmlsdGVyKCk7XG5cbiAgICAgICAgdGhpcy5zb3J0ZWRGb2xkZXJzID0gW107XG4gICAgICAgIGNvbnN0IG51bSA9IE1hdGguY2VpbChmaWx0ZXJlZC5sZW5ndGggLyB0aGlzLml0ZW1zUGVyUm93KTtcbiAgICAgICAgY29uc3QgaXRlcmF0aW9ucyA9IE1hdGgubWluKG51bSwgMTAwKTtcblxuICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBpdGVyYXRpb25zOyByb3crKykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNvcnRlZEZvbGRlcnNbcm93XSlcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRlZEZvbGRlcnNbcm93XSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gcm93ICogdGhpcy5pdGVtc1BlclJvdzsgaSA8IChyb3cgKyAxKSAqIHRoaXMuaXRlbXNQZXJSb3cgJiYgaSA8IGZpbHRlcmVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0ZWRGb2xkZXJzW3Jvd10ucHVzaChmaWx0ZXJlZFtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNlbGVjdChpdGVtOiBGU0Rlc2NyaXB0b3IsIGV2dCkge1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgaWYgKHRoaXMua2V5Ym9hcmQuaXNTaGlmdFByZXNzZWQpIHtcbiAgICAgICAgICAgIGxldCBzdGFydCA9IHRoaXMuZGlyZWN0b3J5Q29udGVudHMuZmluZEluZGV4KGkgPT4gaS5uYW1lID09IHRoaXMuc2VsZWN0aW9uLnNsaWNlKC0xLCAxKVswXS5uYW1lKTtcbiAgICAgICAgICAgIGxldCBlbmQgPSB0aGlzLmRpcmVjdG9yeUNvbnRlbnRzLmluZGV4T2YoaXRlbSk7XG5cbiAgICAgICAgICAgIGlmIChzdGFydCA9PSAtMSlcbiAgICAgICAgICAgICAgICBzdGFydCA9IGVuZDtcblxuICAgICAgICAgICAgbGV0IGl0ZW1zID0gc3RhcnQgPiBlbmRcbiAgICAgICAgICAgICAgICA/IHRoaXMuZGlyZWN0b3J5Q29udGVudHMuc2xpY2UoZW5kLCBzdGFydCArIDEpXG4gICAgICAgICAgICAgICAgOiB0aGlzLmRpcmVjdG9yeUNvbnRlbnRzLnNsaWNlKHN0YXJ0LCBlbmQgKyAxKTtcblxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBpdGVtcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmtleWJvYXJkLmlzQ3RybFByZXNzZWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaW5jbHVkZXMoaXRlbSkpXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucHVzaChpdGVtKTtcbiAgICAgICAgICAgIGVsc2UgLy8gQ2FzZSB0aGF0IHdlIHNlbGVjdGVkIHRoZSBzYW1lIGl0ZW0gdHdpY2VcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zcGxpY2UodGhpcy5zZWxlY3Rpb24uaW5kZXhPZihpdGVtKSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBbaXRlbV07XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25bMF0ua2luZCA9PSBcImRpcmVjdG9yeVwiKVxuICAgICAgICAgICAgICAgIHRoaXMuZm9sZGVyU2VsZWN0Lm5leHQodGhpcy5zZWxlY3Rpb25bMF0pO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuZmlsZVNlbGVjdC5uZXh0KHRoaXMuc2VsZWN0aW9uWzBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLm5leHQodGhpcy5zZWxlY3Rpb24pO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblRleHQgPSB0aGlzLmdldFNlbGVjdGlvblRleHQoKTtcbiAgICB9XG5cbiAgICBvbkl0ZW1DbGljayhmaWxlOiBGU0Rlc2NyaXB0b3IpIHtcbiAgICAgICAgY29uc29sZS5sb2coZmlsZSwgdGhpcyk7XG4gICAgICAgIGlmIChmaWxlLmtpbmQgPT0gXCJkaXJlY3RvcnlcIikge1xuICAgICAgICAgICAgdGhpcy5mb2xkZXJEYmxDbGljay5uZXh0KGZpbGUpO1xuICAgICAgICAgICAgdGhpcy5wYXRoID0gZmlsZS5wYXRoICsgZmlsZS5uYW1lO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVsc2UgaWYgKGZpbGUuZXh0ID09IFwiemlwXCIpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuZmlsZURibENsaWNrLm5leHQoZmlsZSk7XG4gICAgICAgIC8vICAgICB0aGlzLnBhdGggPSBmaWxlLnBhdGggKyBmaWxlLm5hbWU7XG4gICAgICAgIC8vIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVEYmxDbGljay5uZXh0KGZpbGUpO1xuICAgICAgICAgICAgdGhpcy5maWxlU2VsZWN0Lm5leHQoZmlsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblRvZ2dsZShpdGVtLCBzdGF0ZTogTWF0Q2hlY2tib3hDaGFuZ2UpIHtcbiAgICAgICAgaXRlbVsnX3ZhbHVlJ10gPSBzdGF0ZS5jaGVja2VkO1xuXG4gICAgICAgIC8vIFRPRE86IFdoYXQgY2F1c2VzIHRoaXMgdG8gYmUgbnVsbCB3aGVuIGluaXRpYWxpemVkIHdpdGggYW4gYXJyYXk/XG4gICAgICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlLmNoZWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGkgPSB0aGlzLnZhbHVlLmZpbmRJbmRleCh2ID0+IHYgPT0gaXRlbSk7XG4gICAgICAgICAgICBpZiAoaSA+PSAwKVxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UubmV4dCh0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICBhc3luYyBjbGVhclNlbGVjdGlvbigpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLm5leHQodGhpcy52YWx1ZSk7XG5cbiAgICAgICAgdGhpcy50YWJ1bGF0b3I/LnRhYmxlPy5nZXRSb3dzKCkuZm9yRWFjaChyID0+IHIuZ2V0RWxlbWVudCgpLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdGVkJykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NvcnRGaWx0ZXIoKTogRmlsZURlc2NyaXB0b3JbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpcmVjdG9yeUNvbnRlbnRzID0gdGhpcy5kaXJlY3RvcnlDb250ZW50cz8uZmlsdGVyKGQgPT4gZC5raW5kID09ICdkaXJlY3RvcnknKVxuICAgICAgICAgICAgLmNvbmNhdCh0aGlzLmRpcmVjdG9yeUNvbnRlbnRzPy5maWx0ZXIoZCA9PiBkLmtpbmQgPT0gJ2ZpbGUnKVxuICAgICAgICAgICAgICAgIC5zb3J0KHRoaXMuc29ydGVyc1t0aGlzLnNvcnRPcmRlcl0pXG4gICAgICAgICAgICApIGFzIEZpbGVEZXNjcmlwdG9yW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3Rpb25UZXh0KCkge1xuICAgICAgICBjb25zdCBkaXJDb3VudCA9IHRoaXMuc2VsZWN0aW9uLmZpbHRlcihzID0+IHMua2luZCA9PSBcImRpcmVjdG9yeVwiKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGZpbGVDb3VudCA9IHRoaXMuc2VsZWN0aW9uLmZpbHRlcihzID0+IHMua2luZCA9PSBcImZpbGVcIikubGVuZ3RoO1xuXG4gICAgICAgIGlmIChkaXJDb3VudCArIGZpbGVDb3VudCA9PSAwKSByZXR1cm4gXCJcIjtcblxuICAgICAgICBjb25zdCB0b3RhbFNpemUgPVxuICAgICAgICAgICAgdGhpcy5kaXJlY3RvcnlDb250ZW50c1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoZCA9PiBkLmtpbmQgPT0gXCJmaWxlXCIpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihkID0+IHRoaXMuc2VsZWN0aW9uPy5maW5kKGkgPT4gaS5uYW1lID09IGQubmFtZSkpXG4gICAgICAgICAgICAgICAgLm1hcChkID0+IGRbJ3N0YXRzJ10uc2l6ZSkucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG5cbiAgICAgICAgaWYgKGRpckNvdW50ICsgZmlsZUNvdW50ID09IDEpXG4gICAgICAgICAgICByZXR1cm4gYFwiJHt0aGlzLnNlbGVjdGlvblswXS5uYW1lfVwiIHNlbGVjdGVkICgke3RoaXMuYnl0ZXNUb1N0cmluZyh0b3RhbFNpemUpfSlgO1xuXG4gICAgICAgIGlmIChkaXJDb3VudCA+IDAgJiYgZmlsZUNvdW50ID09IDApXG4gICAgICAgICAgICByZXR1cm4gYFwiJHtkaXJDb3VudH1cIiBmb2xkZXJzIHNlbGVjdGVkYDtcbiAgICAgICAgaWYgKGZpbGVDb3VudCA+IDAgJiYgZGlyQ291bnQgPT0gMClcbiAgICAgICAgICAgIHJldHVybiBgJHtmaWxlQ291bnR9IGl0ZW1zIHNlbGVjdGVkICgke3RoaXMuYnl0ZXNUb1N0cmluZyh0b3RhbFNpemUpfSlgO1xuXG4gICAgICAgIHJldHVybiBgJHtkaXJDb3VudH0gZm9sZGVyJHtkaXJDb3VudCA9PSAxID8gXCJcIiA6IFwic1wifSBzZWxlY3RlZCwgJHtmaWxlQ291bnR9IG90aGVyIGl0ZW0ke2ZpbGVDb3VudCA9PSAxID8gXCJcIiA6IFwic1wifSBzZWxlY3RlZCAoJHt0aGlzLmJ5dGVzVG9TdHJpbmcodG90YWxTaXplKX0pYDtcbiAgICB9XG5cbiAgICBieXRlc1RvU3RyaW5nKGJ5dGVzOiBudW1iZXIsIGRlY2ltYWxzID0gMikge1xuICAgICAgICBpZiAoIStieXRlcykgcmV0dXJuICcwIEJ5dGVzJztcblxuICAgICAgICBjb25zdCBrID0gMTAyNDtcbiAgICAgICAgY29uc3QgZG0gPSBkZWNpbWFscyA8IDAgPyAwIDogZGVjaW1hbHM7XG4gICAgICAgIGNvbnN0IHNpemVzID0gWydCeXRlcycsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddO1xuXG4gICAgICAgIGNvbnN0IGkgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKGspKTtcblxuICAgICAgICByZXR1cm4gYCR7cGFyc2VGbG9hdCgoYnl0ZXMgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZChkbSkpfSAke3NpemVzW2ldfWA7XG4gICAgfVxuXG4gICAgcmVzaXplKCkge1xuICAgICAgICBpZiAoIXRoaXMuZmlsZXNSZWYpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXNpemUoKSwgMjUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGJvdW5kcyA9ICh0aGlzLmZpbGVzUmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGNvbnN0IG5ld0NvbENvdW50ID0gTWF0aC5mbG9vcihib3VuZHMud2lkdGggLyBpdGVtV2lkdGgpO1xuICAgICAgICBpZiAobmV3Q29sQ291bnQgIT0gdGhpcy5pdGVtc1BlclJvdykge1xuICAgICAgICAgICAgdGhpcy5pdGVtc1BlclJvdyA9IE1hdGguZmxvb3IoYm91bmRzLndpZHRoIC8gaXRlbVdpZHRoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zUGVyUm93ID4gMTAwKVxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNQZXJSb3cgPSAxO1xuXG4gICAgICAgICAgICB0aGlzLmZsb3dSb3dzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zb3J0ZWRGb2xkZXJzPy5sZW5ndGggPT0gMClcbiAgICAgICAgICAgIHRoaXMuZmxvd1Jvd3MoKTtcbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydChldnQ6IERyYWdFdmVudCwgaXRlbTogRlNEZXNjcmlwdG9yKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGAke3dpbmRvdy5vcmlnaW59L2FwaS9maWxlc3lzdGVtL2Rvd25sb2FkP2Rpcj0ke2l0ZW0ucGF0aH0mZmlsZT0ke2l0ZW0ubmFtZX1gO1xuXG4gICAgICAgIGV2dC5kYXRhVHJhbnNmZXIuY2xlYXJEYXRhKCk7XG4gICAgICAgIC8vIGV2dC5kYXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dC91cmktbGlzdCcsIHRhcmdldCk7XG4gICAgICAgIC8vIGV2dC5kYXRhVHJhbnNmZXIuc2V0RGF0YSgnRG93bmxvYWRVUkwnLCBgdGV4dC91cmktbGlzdDoke3RhcmdldH1gKTtcbiAgICAgICAgZXZ0LmRhdGFUcmFuc2Zlci5zZXREYXRhKCd0ZXh0L3BsYWluJywgaXRlbS5uYW1lKTtcbiAgICB9XG5cbiAgICBvbkRyb3AoZXYpIHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAoZXYuZGF0YVRyYW5zZmVyLml0ZW1zKSB7XG4gICAgICAgICAgICAvLyBVc2UgRGF0YVRyYW5zZmVySXRlbUxpc3QgaW50ZXJmYWNlIHRvIGFjY2VzcyB0aGUgZmlsZShzKVxuICAgICAgICAgICAgWy4uLmV2LmRhdGFUcmFuc2Zlci5pdGVtc10uZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgLy8gSWYgZHJvcHBlZCBpdGVtcyBhcmVuJ3QgZmlsZXMsIHJlamVjdCB0aGVtXG4gICAgICAgICAgICBpZiAoaXRlbS5raW5kID09PSBcImZpbGVcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBpdGVtLmdldEFzRmlsZSgpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGDigKYgZmlsZVske2l9XS5uYW1lID0gJHtmaWxlLm5hbWV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFVzZSBEYXRhVHJhbnNmZXIgaW50ZXJmYWNlIHRvIGFjY2VzcyB0aGUgZmlsZShzKVxuICAgICAgICAgICAgWy4uLmV2LmRhdGFUcmFuc2Zlci5maWxlc10uZm9yRWFjaCgoZmlsZSwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYOKApiBmaWxlWyR7aX1dLm5hbWUgPSAke2ZpbGUubmFtZX1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmFtZUNlbGxGb3JtYXR0ZXIgPSAoKGNlbGw6IENlbGxDb21wb25lbnQsIGZvcm1hdHRlclBhcmFtczoge30sIG9uUmVuZGVyZWQ6IEVtcHR5Q2FsbGJhY2spID0+IHtcbiAgICAgICAgLy8gVE9ETzogU2FuaXRpemU/XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBjZWxsLmdldERhdGEoKSBhcyBGU0Rlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHN0eWxlPVwiaGVpZ2h0OiAyNHB4OyBtYXJnaW4tcmlnaHQ6IDZweFwiIHNyYz1cIiR7aXRlbVsnX2ljb24nXS5wYXRofVwiLz5cbiAgICAgICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbjogMFwiPiR7dGhpcy5zYW5pdGl6ZXIuc2FuaXRpemUoU2VjdXJpdHlDb250ZXh0LkhUTUwsIGl0ZW1bJ3Zhbml0eU5hbWUnXSB8fCBpdGVtLm5hbWUpfTwvcD5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgYDtcbiAgICB9KS5iaW5kKHRoaXMpXG5cbiAgICBvblJvd0N0eCh7ZXZlbnQsIHJvd30pIHtcbiAgICAgICAgb3Blbk1lbnUodGhpcy5tYXREaWFsb2csIHRoaXMuZmlsZUNvbnRleHRNZW51LCByb3cuZ2V0RGF0YSgpLCBldmVudCk7XG4gICAgfVxuXG4gICAgb25Sb3dDbGljayh7ZXZlbnQsIHJvdywgZGF0YX0pIHtcbiAgICAgICAgLy8gJGV2ZW50LmRhdGFbJ192YWx1ZSddID0gJGV2ZW50LmRhdGFbJ192YWx1ZSddID09IHRydWUgPyBmYWxzZSA6IHRydWVcbiAgICAgICAgLy8gY29uc29sZS5sb2coZXZlbnQsIHJvdywgZGF0YSwgdGhpcy52YWx1ZSk7XG5cbiAgICAgICAgY29uc3Qgcm93RWwgPSByb3cuZ2V0RWxlbWVudCgpO1xuICAgICAgICBsZXQgc3RhdGUgPSByb3dFbC5jbGFzc0xpc3QuY29udGFpbnMoJ3NlbGVjdGVkJyk7XG4gICAgICAgIGRhdGFbJ192YWx1ZSddID0gIXN0YXRlO1xuXG4gICAgICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzdGF0ZSkge1xuICAgICAgICAgICAgcm93RWwuY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJvd0VsLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICBjb25zdCBpID0gdGhpcy52YWx1ZS5maW5kSW5kZXgodiA9PiB2ID09IGRhdGEpO1xuICAgICAgICAgICAgaWYgKGkgPj0gMClcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UubmV4dCh0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICBzb3J0KCkge1xuICAgICAgICB0aGlzLl9zb3J0RmlsdGVyKCk7XG4gICAgfVxuXG4gICAgb25VcGxvYWRGaWxlKGV2dD86IEZTRGVzY3JpcHRvcikge1xuICAgICAgICB1cGxvYWRGaWxlKFxuICAgICAgICAgICAgdGhpcy5mZXRjaCxcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgICAgdGhpcy5fcGF0aCxcbiAgICAgICAgICAgIGV2dCA/IChldnQucGF0aCArIGV2dC5uYW1lKSA6IG51bGwsXG4gICAgICAgICAgICB0aGlzLmZpbGVNYW5hZ2VyLmNvbnRleHRUYWdzXG4gICAgICAgIClcbiAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgIC8vIFJlZnJlc2ggZm9sZGVyIGNvbnRlbnRzXG4gICAgICAgICAgICB0aGlzLmxvYWRGb2xkZXIoKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBvbkNyZWF0ZUZvbGRlcihkYXRhPzogRlNEZXNjcmlwdG9yKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nLm9wZW4oXCJmb2xkZXItcmVuYW1lXCIsIFwiQGRvdGdsaXRjaC9uZ3gtd2ViLWNvbXBvbmVudHNcIiwge1xuICAgICAgICAgICAgaW5wdXRzOiB7IHBhdGg6IGRhdGE/LnBhdGggfHwgdGhpcy5wYXRoLCBuYW1lOiBkYXRhPy5uYW1lIHx8ICcnLCBjb25maWc6IHRoaXMuY29uZmlnIH1cbiAgICAgICAgfSkudGhlbihyID0+IHRoaXMubG9hZEZvbGRlcigpKVxuICAgIH1cbn1cblxuIiwiQGlmIChzaG93TG9hZGVyKSB7XG4gICAgPG1hdC1wcm9ncmVzcy1iYXIgW2NsYXNzLmhpZGVdPVwiaGlkZUxvYWRlclwiIG1vZGU9XCJxdWVyeVwiLz5cbn1cblxuPGRpdlxuICAgIHN0eWxlPVwiZGlzcGxheTogY29udGVudHNcIlxuICAgIFtzdHlsZS4tLWZpbGVtYW5hZ2VyLWZpbGVpY29uLWJhY2tkcm9wXT1cIid1cmwoJyArIGljb25SZXNvbHZlci5wYXRoICsgJy9wb3AvZ2VuZXJpYy5zdmcpJ1wiXG4gICAgKGRyYWdzdGFydCk9XCJ1c2VySXNEcmFnZ2luZ0ZpbGUgPSB0cnVlXCJcbiAgICAoZHJhZ2VuZCk9XCJ1c2VySXNEcmFnZ2luZ0ZpbGUgPSBmYWxzZVwiXG4gICAgKGRyYWdvdmVyKT1cImRyYWdnaW5nT3ZlciA9IHRydWVcIlxuICAgIChkcmFnbGVhdmUpPVwiZHJhZ2dpbmdPdmVyID0gZmFsc2VcIlxuICAgIChvbmRyb3ApPVwib25Ecm9wKCRldmVudClcIlxuPlxuICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cImRyYWdnaW5nT3ZlclwiPjwvbmctY29udGFpbmVyPiAtLT5cbiAgICA8IS0tIEdyaWQgbW9kZSAtLT5cbiAgICA8bmctc2Nyb2xsYmFyXG4gICAgICAgICpuZ0lmPVwidmlld01vZGUgPT0gJ2dyaWQnXCJcbiAgICAgICAgY2xhc3M9XCJncmlkIHt7Z3JpZFNpemV9fSB7e2NvbmZpZy5pbWFnZVNpemUgfHwgJ25vcm1hbCd9fVwiXG4gICAgICAgIFtjbGFzcy5zZWxlY3Rpb25Nb2RlXT1cImNvbmZpZy5tb2RlID09ICdmb2N1c0ZpbGVzJ1wiXG4gICAgICAgIFtjbGFzcy5zaG93RHJvcEFyZWFdPVwiZHJhZ2dpbmdPdmVyXCJcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlXCJcbiAgICAgICAgdHJhY2s9XCJ2ZXJ0aWNhbFwiXG4gICAgICAgIHBvaW50ZXJFdmVudHNNZXRob2Q9XCJzY3JvbGxiYXJcIlxuICAgICAgICBbbmd4LWNvbnRleHRtZW51XT1cImZvbGRlckNvbnRleHRNZW51XCJcbiAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXNpemUtb2JzZXJ2ZXJcIiAjZmlsZVZpZXdwb3J0PjwvZGl2PlxuICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICAgICAgICBpdGVtU2l6ZT1cIjEzNFwiXG4gICAgICAgICAgICBzY3JvbGxWaWV3cG9ydFxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGlvbiA9IFtdOyBzZWxlY3Rpb25UZXh0ID0gJydcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKmNka1ZpcnR1YWxGb3I9XCJsZXQgcm93IG9mIHNvcnRlZEZvbGRlcnNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJvd1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJzZWxlY3Rpb24uaW5jbHVkZXMoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZ2VuZXJpY109XCJpdGVtWydfaWNvbiddLm5lZWRzQmFja2Ryb3BcIlxuICAgICAgICAgICAgICAgICAgICBbbmd4LWNvbnRleHRtZW51XT1cImZpbGVDb250ZXh0TWVudVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ3gtbWVudS1jb250ZXh0XT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgI2NoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbmZpZy5tb2RlID09ICdmb2N1c0ZpbGVzJyAmJiBpdGVtLmtpbmQgPT0gJ2ZpbGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cIml0ZW1bJ192YWx1ZSddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGUoaXRlbSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogY29udGVudHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0KGl0ZW0sICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChkcmFnc3RhcnQpPVwib25EcmFnU3RhcnQoJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpdGVtWydfaWNvbiddLnBhdGhcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cD57e2l0ZW1bJ3Zhbml0eU5hbWUnXSB8fCBpdGVtLm5hbWV9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgPC9uZy1zY3JvbGxiYXI+XG5cbiAgICA8IS0tIExpc3QgbW9kZSAtLT5cbiAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwidmlld01vZGUgPT0gJ2xpc3QnXCJcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlXCJcbiAgICAgICAgW2NsYXNzLnNob3dEcm9wQXJlYV09XCJkcmFnZ2luZ092ZXJcIlxuICAgICAgICBbbmd4LWNvbnRleHRtZW51XT1cImZvbGRlckNvbnRleHRNZW51XCJcbiAgICA+XG4gICAgICAgIDxhcHAtdGFidWxhdG9yXG4gICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJkaXJlY3RvcnlDb250ZW50c1wiXG4gICAgICAgICAgICBbY29sdW1uc109XCJbXG4gICAgICAgICAgICAgICAgeyBmaWVsZDogJ25hbWUnLCB0aXRsZTogJ05hbWUnLCBmb3JtYXR0ZXI6IG5hbWVDZWxsRm9ybWF0dGVyIH0sXG4gICAgICAgICAgICAgICAgeyBmaWVsZDogJ19zaXplJywgdGl0bGU6ICdTaXplJyB9LFxuICAgICAgICAgICAgICAgIHsgZmllbGQ6ICdfY3RpbWUnLCB0aXRsZTogJ0NyZWF0ZWQnIH0sXG4gICAgICAgICAgICAgICAgeyBmaWVsZDogJ19tdGltZScsIHRpdGxlOiAnTW9kaWZpZWQnIH0sXG4gICAgICAgICAgICBdXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cIntcbiAgICAgICAgICAgICAgICByb3dIZWlnaHQ6IDMyXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChyb3dDbGljayk9XCJvblJvd0NsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgKHJvd0RibENsaWNrKT1cIm9uSXRlbUNsaWNrKCRldmVudC5kYXRhKVwiXG4gICAgICAgICAgICAocm93Q29udGV4dCk9XCJvblJvd0N0eCgkZXZlbnQpXCJcbiAgICAgICAgLz5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwic2VsZWN0LWhpbnRcIiAqbmdJZj1cInNlbGVjdGlvblRleHRcIj5cbiAgICB7e3NlbGVjdGlvblRleHR9fVxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJjb250cm9sc1wiPlxuICAgIDxidXR0b25cbiAgICAgICAgbWF0LWZsYXQtYnV0dG9uXG4gICAgICAgIGNsYXNzPVwidXBsb2FkLWJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJvbkNyZWF0ZUZvbGRlcigpXCJcbiAgICA+XG4gICAgICAgIDxtYXQtaWNvbj5jcmVhdGVfbmV3X2ZvbGRlcjwvbWF0LWljb24+XG4gICAgICAgIE5ldyBGb2xkZXJcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1mbGF0LWJ1dHRvblxuICAgICAgICBjbGFzcz1cInVwbG9hZC1idXR0b25cIlxuICAgICAgICAoY2xpY2spPVwib25VcGxvYWRGaWxlKClcIlxuICAgID5cbiAgICAgICAgPG1hdC1pY29uPnVwbG9hZF9maWxlPC9tYXQtaWNvbj5cbiAgICAgICAgVXBsb2FkXG4gICAgPC9idXR0b24+XG48L2Rpdj5cbiJdfQ==
682
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy9maWxlbWFuYWdlci9maWxlLWdyaWQvZmlsZS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy9maWxlbWFuYWdlci9maWxlLWdyaWQvZmlsZS1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFjLFdBQVcsRUFBcUIsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZKLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQXFCLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUF5QyxhQUFhLEVBQVksUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7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QWE7d0JBQ2IsZUFBZTtxQkFDbEIsY0FDVyxJQUFJOzBQQUdXLFFBQVE7c0JBQWxDLFNBQVM7dUJBQUMsY0FBYztnQkFDTSxTQUFTO3NCQUF2QyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFFdUIsY0FBYztzQkFBakUsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBSXJDLElBQUk7c0JBQWhCLEtBQUs7Z0JBcUJJLFVBQVU7c0JBQW5CLE1BQU07Z0JBRUUsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUdFLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTTtnQkFFRSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFjRSxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBJbnB1dCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBUZW1wbGF0ZVJlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYsIFNlY3VyaXR5Q29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0VGFic01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hDaGFuZ2UsIE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBEYXRlUGlwZSwgTmdGb3JPZiwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTY3JvbGxpbmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBDZWxsQ29tcG9uZW50LCBFbXB0eUNhbGxiYWNrIH0gZnJvbSAndGFidWxhdG9yLXRhYmxlcyc7XG5pbXBvcnQgeyBOZ1Njcm9sbGJhck1vZHVsZSB9IGZyb20gJ25neC1zY3JvbGxiYXInO1xuaW1wb3J0IHsgRGlyZWN0b3J5RGVzY3JpcHRvciwgRmlsZURlc2NyaXB0b3IsIEZpbGVtYW5hZ2VyQ29tcG9uZW50LCBGaWxlVmlld1RhYiwgRlNEZXNjcmlwdG9yLCBOZ3hGaWxlTWFuYWdlckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9maWxlbWFuYWdlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmlsZVNvcnRpbmcgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBJY29uUmVzb2x2ZXIgfSBmcm9tICcuLi9pY29uLXJlc29sdmVyJztcbmltcG9ydCB7IFRhYnVsYXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RhYnVsYXRvci90YWJ1bGF0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdFByb2dyZXNzQmFyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcbmltcG9ydCB7IHVwbG9hZEZpbGUgfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIEZldGNoLCBLZXlib2FyZFNlcnZpY2UsIE1lbnVEaXJlY3RpdmUsIE1lbnVJdGVtLCBvcGVuTWVudSB9IGZyb20gJy4uLy4uLy4uL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuXG5jb25zdCBpdGVtV2lkdGggPSAoODAgKyAyMCk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLWZpbGUtZ3JpZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUtZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZmlsZS1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ0Zvck9mLFxuICAgICAgICBEYXRlUGlwZSxcbiAgICAgICAgTWF0VGFic01vZHVsZSxcbiAgICAgICAgTmdTY3JvbGxiYXJNb2R1bGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICAgICAgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgVGFidWxhdG9yQ29tcG9uZW50LFxuICAgICAgICBNZW51RGlyZWN0aXZlLFxuICAgICAgICBTY3JvbGxpbmdNb2R1bGVcbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRmlsZUdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBWaWV3Q2hpbGQoXCJmaWxlVmlld3BvcnRcIikgZmlsZXNSZWY6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZChUYWJ1bGF0b3JDb21wb25lbnQpIHRhYnVsYXRvcjogVGFidWxhdG9yQ29tcG9uZW50O1xuXG4gICAgQFZpZXdDaGlsZCgncmVuYW1lVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIHJlbmFtZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG5cbiAgICBwcml2YXRlIF9wYXRoOiBzdHJpbmc7XG4gICAgQElucHV0KCkgc2V0IHBhdGgodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHRoaXMuX3BhdGggJiYgdGhpcy5jb25maWcubmF2aWdhdGVPbmx5VG9EZXNjZW5kYW50cykge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZS5zdGFydHNXaXRoKCcvJykpXG4gICAgICAgICAgICAgICAgdmFsdWUgPSAnLycgKyB2YWx1ZTtcbiAgICAgICAgICAgIGlmICghdmFsdWUuc3RhcnRzV2l0aCh0aGlzLmNvbmZpZy5wYXRoKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJldiA9IHRoaXMuX3BhdGg7XG5cbiAgICAgICAgdGhpcy5fcGF0aCA9IHZhbHVlO1xuXG4gICAgICAgIGlmIChwcmV2ICE9IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnBhdGhDaGFuZ2UubmV4dCh0aGlzLnBhdGgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmFwaVNldHRpbmdzKVxuICAgICAgICAgICAgICAgIHRoaXMubG9hZEZvbGRlcigpXG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHBhdGgoKSB7cmV0dXJuIHRoaXMuX3BhdGh9XG4gICAgQE91dHB1dCgpIHBhdGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIEBJbnB1dCgpIGNvbmZpZzogTmd4RmlsZU1hbmFnZXJDb25maWd1cmF0aW9uID0ge307XG4gICAgQElucHV0KCkgc2hvd0hpZGRlbkZpbGVzID0gZmFsc2U7XG4gICAgQElucHV0KCkgdmlld01vZGU6IFwibGlzdFwiIHwgXCJncmlkXCIgPSBcImdyaWRcIjtcbiAgICBASW5wdXQoKSBncmlkU2l6ZTogXCJzbWFsbFwiIHwgXCJub3JtYWxcIiB8IFwibGFyZ2VcIiA9IFwibm9ybWFsXCI7XG4gICAgQElucHV0KCkgdGFiOiBGaWxlVmlld1RhYjtcblxuICAgIEBPdXRwdXQoKSBmaWxlU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlRGVzY3JpcHRvcj4oKTtcbiAgICBAT3V0cHV0KCkgZmlsZURibENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlRGVzY3JpcHRvcj4oKTtcbiAgICBAT3V0cHV0KCkgZm9sZGVyU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxEaXJlY3RvcnlEZXNjcmlwdG9yPigpO1xuICAgIEBPdXRwdXQoKSBmb2xkZXJEYmxDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RGlyZWN0b3J5RGVzY3JpcHRvcj4oKTtcbiAgICBAT3V0cHV0KCkgbmV3VGFiID0gbmV3IEV2ZW50RW1pdHRlcjx7IHBhdGg6IHN0cmluZzsgfT4oKTtcbiAgICBAT3V0cHV0KCkgbG9hZEZpbGVzID0gbmV3IEV2ZW50RW1pdHRlcjxGU0Rlc2NyaXB0b3JbXT4oKTtcblxuICAgIGRpcmVjdG9yeUNvbnRlbnRzOiBGU0Rlc2NyaXB0b3JbXSA9IFtdO1xuICAgIEBJbnB1dCgpIHNlbGVjdGlvbjogRlNEZXNjcmlwdG9yW10gPSBbXTtcbiAgICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGU0Rlc2NyaXB0b3JbXT4oKTtcblxuICAgIEBJbnB1dCgpIHZhbHVlOiBGU0Rlc2NyaXB0b3JbXSA9IFtdO1xuICAgIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RlNEZXNjcmlwdG9yW10+KCk7XG5cbiAgICBzZWxlY3Rpb25UZXh0OiBzdHJpbmc7XG5cbiAgICBzb3J0ZWRGb2xkZXJzOiBhbnlbXVtdID0gW107XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHNvcnRlcnMgPSB7XG4gICAgICAgIFwiYS16XCI6IChhOiBGaWxlRGVzY3JpcHRvciwgYjogRmlsZURlc2NyaXB0b3IpID0+IGEubmFtZSA+IGIubmFtZSA/IDEgOiAtMSxcbiAgICAgICAgXCJ6LWFcIjogKGE6IEZpbGVEZXNjcmlwdG9yLCBiOiBGaWxlRGVzY3JpcHRvcikgPT4gYi5uYW1lID4gYS5uYW1lID8gMSA6IC0xLFxuICAgICAgICBcImxhc3Rtb2RcIjogKGE6IEZpbGVEZXNjcmlwdG9yLCBiOiBGaWxlRGVzY3JpcHRvcikgPT4gYi5zdGF0cy5tdGltZU1zIC0gYS5zdGF0cy5tdGltZU1zLFxuICAgICAgICBcImZpcnN0bW9kXCI6IChhOiBGaWxlRGVzY3JpcHRvciwgYjogRmlsZURlc2NyaXB0b3IpID0+IGEuc3RhdHMubXRpbWVNcyAtIGIuc3RhdHMubXRpbWVNcyxcbiAgICAgICAgXCJzaXplXCI6IChhOiBGaWxlRGVzY3JpcHRvciwgYjogRmlsZURlc2NyaXB0b3IpID0+IGIuc3RhdHMuc2l6ZSAtIGEuc3RhdHMuc2l6ZSxcbiAgICAgICAgXCJ0eXBlXCI6IChhOiBGaWxlRGVzY3JpcHRvciwgYjogRmlsZURlc2NyaXB0b3IpID0+IGEucGF0aC5zcGxpdCgnLicpLnNwbGljZSgtMSwgMSlbMF0gPiBiLnBhdGguc3BsaXQoJy4nKS5zcGxpY2UoLTEsIDEpWzBdID8gMSA6IC0xXG4gICAgfTtcbiAgICBASW5wdXQoKSBzb3J0T3JkZXI6IEZpbGVTb3J0aW5nID0gXCJhLXpcIjtcblxuICAgIGl0ZW1zUGVyUm93ID0gNjtcblxuICAgIC8vIElmIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcyBpbnNpZGUgb2YgYW4gYXJjaGl2ZVxuICAgIGlzQXJjaGl2ZSA9IHRydWU7XG5cbiAgICB1c2VySXNEcmFnZ2luZ0ZpbGUgPSBmYWxzZTtcbiAgICBkcmFnZ2luZ092ZXIgPSBmYWxzZTtcblxuICAgIHNob3dMb2FkZXIgPSBmYWxzZTtcbiAgICBoaWRlTG9hZGVyID0gZmFsc2U7XG5cbiAgICByZWFkb25seSBjb2x1bW5zID0gW1xuICAgICAgICB7IGlkOiBcIm5hbWVcIiwgbGFiZWw6IFwiTmFtZVwiIH0sXG4gICAgICAgIHsgaWQ6IFwic2l6ZVwiLCBsYWJlbDogXCJTaXplXCJ9LFxuICAgICAgICB7IGlkOiBcInR5cGVcIiwgbGFiZWw6IFwiVHlwZVwifSxcbiAgICAgICAgeyBpZDogXCJvd25lclwiLCBsYWJlbDogXCJPd25lclwifSxcbiAgICAgICAgeyBpZDogXCJncm91cFwiLCBsYWJlbDogXCJHcm91cFwifSxcbiAgICAgICAgeyBpZDogXCJwZXJtaXNzaW9uc1wiLCBsYWJlbDogXCJQZXJtaXNzaW9uc1wifSxcbiAgICAgICAgeyBpZDogXCJsb2NhdGlvblwiLCBsYWJlbDogXCJMb2NhdGlvblwifSxcbiAgICAgICAgeyBpZDogXCJtb2RpZmllZFwiLCBsYWJlbDogXCJNb2RpZmllZFwifSxcbiAgICAgICAgeyBpZDogXCJtb2RpZmllZC0tdGltZVwiLCBsYWJlbDogXCJNb2RpZmllZCAtIFRpbWVcIn0sXG4gICAgICAgIHsgaWQ6IFwiYWNjZXNzZWRcIiwgbGFiZWw6IFwiQWNjZXNzZWRcIn0sXG4gICAgICAgIHsgaWQ6IFwiY3JlYXRlZFwiLCBsYWJlbDogXCJDcmVhdGVkXCJ9LFxuICAgICAgICB7IGlkOiBcInJlY2VuY3lcIiwgbGFiZWw6IFwiUmVjZW5jeVwifSxcbiAgICAgICAgeyBpZDogXCJzdGFyXCIsIGxhYmVsOiBcIlN0YXJcIn0sXG4gICAgICAgIHsgaWQ6IFwiZGV0YWlsZWQtdHlwZVwiLCBsYWJlbDogXCJEZXRhaWxlZCBUeXBlXCJ9LFxuICAgIF07XG5cbiAgICBjb2xzID0gW1xuICAgICAgICB7IGlkOiBcIm5hbWVcIiwgbGFiZWw6IFwiTmFtZVwiIH0sXG4gICAgICAgIHsgaWQ6IFwic2l6ZVwiLCBsYWJlbDogXCJTaXplXCIgfSxcbiAgICAgICAgeyBpZDogXCJtb2RpZmllZFwiLCBsYWJlbDogXCJNb2RpZmllZFwiIH0sXG4gICAgICAgIHsgaWQ6IFwic3RhclwiLCBsYWJlbDogXCJTdGFyXCIgfVxuICAgIF07XG5cbiAgICBmb2xkZXJDb250ZXh0TWVudTogTWVudUl0ZW08RlNEZXNjcmlwdG9yPltdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogXCJOZXcgRm9sZGVyXCIsXG4gICAgICAgICAgICAvLyBzaG9ydGN1dExhYmVsOiBcIlNoaWZ0K0N0cmwrTlwiLFxuICAgICAgICAgICAgaWNvbjogXCJjcmVhdGVfbmV3X2ZvbGRlclwiLFxuICAgICAgICAgICAgYWN0aW9uOiAoZGF0YSkgPT4gdGhpcy5vbkNyZWF0ZUZvbGRlcihkYXRhKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogXCJVcGxvYWQgZmlsZVwiLFxuICAgICAgICAgICAgLy8gc2hvcnRjdXRMYWJlbDogXCJDdHJsK0RcIixcbiAgICAgICAgICAgIGljb246IFwiZmlsZV91cGxvYWRcIixcbiAgICAgICAgICAgIGFjdGlvbjogKGV2dCkgPT4gdGhpcy5vblVwbG9hZEZpbGUoZXZ0KVxuICAgICAgICB9LFxuICAgICAgICBcInNlcGFyYXRvclwiLFxuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgICBpc0Rpc2FibGVkOiAoZGF0YSkgPT4gdHJ1ZSxcbiAgICAgICAgLy8gICAgIGxhYmVsOiBcIl9QX2FzdGVcIixcbiAgICAgICAgLy8gICAgIGljb246IFwiY29udGVudF9wYXN0ZVwiLFxuICAgICAgICAvLyAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlNlbGVjdCBfQV9sbFwiLFxuICAgICAgICAgICAgc2hvcnRjdXRMYWJlbDogXCJDdHJsK0FcIixcbiAgICAgICAgICAgIGljb246IFwic2VsZWN0X2FsbFwiLFxuICAgICAgICAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSB0aGlzLl9zb3J0RmlsdGVyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25UZXh0ID0gdGhpcy5nZXRTZWxlY3Rpb25UZXh0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIFwic2VwYXJhdG9yXCIsXG4gICAgICAgIC8vIHtcbiAgICAgICAgLy8gICAgIGxhYmVsOiBcIlBfcl9vcGVydGllc1wiLFxuICAgICAgICAvLyAgICAgaWNvbjogXCJmaW5kX2luX3BhZ2VcIixcbiAgICAgICAgLy8gICAgIGFjdGlvbjogKGV2dCkgPT4ge1xuXG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH1cbiAgICBdO1xuXG4gICAgZmlsZUNvbnRleHRNZW51OiBNZW51SXRlbTxGU0Rlc2NyaXB0b3I+W10gPSBbXTtcblxuICAgIHBlcmZvcm1DaGVja3N1bShwYXRoLCBkaWdlc3QpIHtcbiAgICAgICAgLy8gdGhpcy53aW5kb3dNYW5hZ2VyLm9wZW5XaW5kb3coe1xuICAgICAgICAvLyAgICAgYXBwSWQ6IFwiY2hlY2tzdW1cIixcbiAgICAgICAgLy8gICAgIGRhdGE6IHsgZGlnZXN0LCBwYXRoIH0sXG4gICAgICAgIC8vICAgICB3b3Jrc3BhY2U6IHRoaXMud2luZG93UmVmLndvcmtzcGFjZSxcbiAgICAgICAgLy8gICAgIHdpZHRoOiA2MDAsXG4gICAgICAgIC8vICAgICBoZWlnaHQ6IDI1MFxuICAgICAgICAvLyB9KTtcbiAgICB9XG5cbiAgICBpY29uUmVzb2x2ZXI6IEljb25SZXNvbHZlcjtcblxuICAgIGdldCBsaWJDb25maWcoKSB7IHJldHVybiB0aGlzLmZpbGVNYW5hZ2VyLmxpYkNvbmZpZyB9XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZmV0Y2g6IEZldGNoLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGtleWJvYXJkOiBLZXlib2FyZFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1hdERpYWxvZzogTWF0RGlhbG9nLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGZpbGVNYW5hZ2VyOiBGaWxlbWFuYWdlckNvbXBvbmVudCxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcbiAgICApIHtcblxuXG4gICAgICAgIHRoaXMuaWNvblJlc29sdmVyID0gbmV3IEljb25SZXNvbHZlcih0aGlzLmxpYkNvbmZpZy5hc3NldFBhdGgpO1xuXG4gICAgICAgIC8vIGN0cmwgKyBhID0+IHNlbGVjdCBhbGxcbiAgICAgICAga2V5Ym9hcmQub25LZXlDb21tYW5kKHtcbiAgICAgICAgICAgIGtleTogXCJhXCIsXG4gICAgICAgICAgICBjdHJsOiB0cnVlLFxuICAgICAgICB9KS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gdGhpcy5fc29ydEZpbHRlcigpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25UZXh0ID0gdGhpcy5nZXRTZWxlY3Rpb25UZXh0KCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5uZXh0KHRoaXMuc2VsZWN0aW9uKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gY3RybCArIGMgPT4gY29weSBmaWxlIG5hbWVzIHRvIGNsaXBib2FyZFxuICAgICAgICBrZXlib2FyZC5vbktleUNvbW1hbmQoe1xuICAgICAgICAgICAga2V5OiBcImNcIixcbiAgICAgICAgICAgIGN0cmw6IHRydWUsXG4gICAgICAgIH0pLnN1YnNjcmliZShldnQgPT4ge1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGN0cmwgKyBoID0+IHRvZ2dsZSBoaWRkZW4gZmlsZXNcbiAgICAgICAga2V5Ym9hcmQub25LZXlDb21tYW5kKHtcbiAgICAgICAgICAgIGtleTogXCJoXCIsXG4gICAgICAgICAgICBjdHJsOiB0cnVlLFxuICAgICAgICAgICAgaW50ZXJydXB0OiB0cnVlXG4gICAgICAgIH0pLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93SGlkZGVuRmlsZXMgPSAhdGhpcy5zaG93SGlkZGVuRmlsZXM7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEYyID0+IFJlbmFtZSBzZWxlY3RlZCBmaWxlc1xuICAgICAgICBrZXlib2FyZC5vbktleUNvbW1hbmQoe1xuICAgICAgICAgICAga2V5OiBcImYyXCIsXG4gICAgICAgIH0pLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgICAgICAgLy8gUmVuYW1lIHNlbGVjdGVkIGZpbGUocylcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRW50ZXIgPT4gT3BlbiBzZWxlY3RlZCBmaWxlc1xuICAgICAgICBrZXlib2FyZC5vbktleUNvbW1hbmQoe1xuICAgICAgICAgICAga2V5OiBcIkVudGVyXCIsXG4gICAgICAgIH0pLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSB0aGlzLmRpcmVjdG9yeUNvbnRlbnRzLmZpbHRlcihkYyA9PiB0aGlzLnNlbGVjdGlvbi5maW5kKGkgPT4gaS5uYW1lID09IGRjLm5hbWUpKTtcbiAgICAgICAgICAgIC8vIHRoaXMud2luZG93TWFuYWdlci5vcGVuRmlsZXMoZmlsZXMgYXMgYW55KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRGVsZXRlID0+IGRlbGV0ZSBzZWxlY3RlZCBmaWxlc1xuICAgICAgICBrZXlib2FyZC5vbktleUNvbW1hbmQoe1xuICAgICAgICAgICAga2V5OiBcImRlbGV0ZVwiLFxuICAgICAgICB9KS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5kaXJlY3RvcnlDb250ZW50cy5maWx0ZXIoZGMgPT4gdGhpcy5zZWxlY3Rpb24uZmluZChpID0+IGkubmFtZSA9PSBkYy5uYW1lKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIG5nT25Jbml0KCkge1xuICAgICAgICAvLyB0aGlzLmxvYWRGb2xkZXIoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuZmlsZUNvbnRleHRNZW51ID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBcIkRvd25sb2FkXCIsXG4gICAgICAgICAgICAgICAgaWNvbjogXCJkb3dubG9hZFwiLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogKGZpbGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRhcmdldCA9IGAke3dpbmRvdy5vcmlnaW59JHt0aGlzLmNvbmZpZy5hcGlTZXR0aW5ncy5kb3dubG9hZEVudHJ5VXJsfWA7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXRoID0gZmlsZS5wYXRoICsgZmlsZS5uYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWxlLmtpbmQgPT0gXCJkaXJlY3RvcnlcIiAmJiAhcGF0aC5lbmRzV2l0aCgnLycpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCArPSBcIi9cIjtcblxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQgKz0gYCR7dGFyZ2V0LmluY2x1ZGVzKCc/JykgPyAnJicgOiAnPyd9cGF0aD0ke3BhdGh9Jm5nc3ctYnlwYXNzPXRydWVgO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAvLyB3aW5kb3cub3Blbih0YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgICAgICAgICAgICAgICAgICBsaW5rLmRvd25sb2FkID0gZmlsZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBsaW5rLmhyZWYgPSB0YXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgIGxpbmsuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgbGluay5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlTWFuYWdlci5maWxlRG93bmxvYWQubmV4dChmaWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBcIk9wZW4gaW4gbmV3IFRhYlwiLFxuICAgICAgICAgICAgICAgIGljb246IFwib3Blbl9pbl9uZXdcIixcbiAgICAgICAgICAgICAgICBpc1Zpc2libGU6IChkYXRhKSA9PiBkYXRhLmtpbmQgPT0gXCJkaXJlY3RvcnlcIixcbiAgICAgICAgICAgICAgICBhY3Rpb246IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZU1hbmFnZXIuaW5pdFRhYihkYXRhLnBhdGggKyBkYXRhLm5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiT3BlbiB3aXRoIEFwcGxpY2F0aW9uLi4uXCIsXG4gICAgICAgICAgICAvLyAgICAgaXNWaXNpYmxlOiAoZGF0YSkgPT4gZGF0YS5raW5kID09IFwiZmlsZVwiLFxuICAgICAgICAgICAgLy8gICAgIHNob3J0Y3V0TGFiZWw6IFwiQ3RybCtEXCIsXG4gICAgICAgICAgICAvLyAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG5cbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIFwic2VwYXJhdG9yXCIsXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiQ3V0XCIsXG4gICAgICAgICAgICAvLyAgICAgaWNvbjogXCJjb250ZW50X2N1dFwiLFxuICAgICAgICAgICAgLy8gICAgIGlzRGlzYWJsZWQ6IGRhdGEgPT4gdHJ1ZSxcbiAgICAgICAgICAgIC8vICAgICBhY3Rpb246IChldnQpID0+IHtcbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgIC8vICAgICBsYWJlbDogXCJDb3B5XCIsXG4gICAgICAgICAgICAvLyAgICAgaWNvbjogXCJmaWxlX2NvcHlcIixcbiAgICAgICAgICAgIC8vICAgICBpc0Rpc2FibGVkOiBkYXRhID0+IHRydWUsXG4gICAgICAgICAgICAvLyAgICAgY2hpbGRyZW5SZXNvbHZlcjogKCkgPT4gbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDUwMDAwMCkpXG4gICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgLy8gICAgIGxhYmVsOiBcIk1vdmUgVG8uLi5cIixcbiAgICAgICAgICAgIC8vICAgICBpY29uOiBcImRyaXZlX2ZpbGVfbW92ZVwiLFxuICAgICAgICAgICAgLy8gICAgIHNob3J0Y3V0TGFiZWw6IFwiQ3RybCtBXCIsXG4gICAgICAgICAgICAvLyAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG5cbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgIC8vICAgICBsYWJlbDogXCJDb3B5IFRvLi4uXCIsXG4gICAgICAgICAgICAvLyAgICAgaWNvbjogXCJmb2xkZXJfY29weVwiLFxuICAgICAgICAgICAgLy8gICAgIHNob3J0Y3V0TGFiZWw6IFwiQ3RybCtBXCIsXG4gICAgICAgICAgICAvLyAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG5cbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJEZWxldGVcIixcbiAgICAgICAgICAgICAgICBpY29uOiBcImRlbGV0ZVwiLFxuICAgICAgICAgICAgICAgIC8vIHNob3J0Y3V0TGFiZWw6IFwiRGVsXCIsXG4gICAgICAgICAgICAgICAgaXNWaXNpYmxlOiBkYXRhID0+ICFkYXRhLnBhdGguaW5jbHVkZXMoXCIjL1wiKSwgLy8gb21pdCBmaWxlcyBpbiBjb21wcmVzc2VkIGRpcnNcbiAgICAgICAgICAgICAgICBhY3Rpb246IChldnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGV2dC5wYXRoICsgZXZ0Lm5hbWU7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gdGhpcy5jb25maWcuYXBpU2V0dGluZ3MuZGVsZXRlRW50cnlVcmxUZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmNvbmZpZy5hcGlTZXR0aW5ncy5kZWxldGVFbnRyeVVybFRlbXBsYXRlKHBhdGgpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuY29uZmlnLmFwaVNldHRpbmdzLmRlbGV0ZUVudHJ5VXJsO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2gucG9zdCh1cmwsIHsgcGF0aDogZXZ0LnBhdGggKyBldnQubmFtZSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5sb2FkRm9sZGVyKCkpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiU2hyZWQgZmlsZVwiLFxuICAgICAgICAgICAgLy8gICAgIGljb246IFwiZGVsZXRlX2ZvcmV2ZXJcIixcbiAgICAgICAgICAgIC8vICAgICBpc1Zpc2libGU6IGRhdGEgPT4gIWRhdGEucGF0aC5pbmNsdWRlcyhcIiMvXCIpLCAvLyBvbWl0IGZpbGVzIGluIGNvbXByZXNzZWQgZGlyc1xuICAgICAgICAgICAgLy8gICAgIGFjdGlvbjogKGV2dCkgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLmZldGNoLnBvc3QoYC9hcGkvZmlsZXN5c3RlbS9kZWxldGU/d2lwZT10cnVlYCwgeyBmaWxlczogW2V2dC5wYXRoICsgZXZ0Lm5hbWVdfSlcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMubG9hZEZvbGRlcigpKVxuICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBcIlJlbmFtZVwiLFxuICAgICAgICAgICAgICAgIGljb246IFwiZHJpdmVfZmlsZV9yZW5hbWVfb3V0bGluZVwiLFxuICAgICAgICAgICAgICAgIGlzVmlzaWJsZTogZGF0YSA9PiAhZGF0YS5wYXRoLmluY2x1ZGVzKFwiIy9cIiksIC8vIG9taXQgZmlsZXMgaW4gY29tcHJlc3NlZCBkaXJzXG4gICAgICAgICAgICAgICAgLy8gc2hvcnRjdXRMYWJlbDogXCJGMlwiLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbihcImZvbGRlci1yZW5hbWVcIiwgXCJAZG90Z2xpdGNoL25neC13ZWItY29tcG9uZW50c1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHM6IHsgcGF0aDogZGF0YT8ucGF0aCB8fCB0aGlzLnBhdGgsIG5hbWU6IGRhdGE/Lm5hbWUgfHwgJycsIGNvbmZpZzogdGhpcy5jb25maWcgfVxuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKHIgPT4gdGhpcy5sb2FkRm9sZGVyKCkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy8gRXh0cmFjdCBIZXJlXG4gICAgICAgICAgICAvLyBFeHRyYWN0IFRvLi4uXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiRXh0cmFjdCBIZXJlXCIsXG4gICAgICAgICAgICAvLyAgICAgaWNvbjogXCJmb2xkZXJfemlwXCIsXG4gICAgICAgICAgICAvLyAgICAgc2hvcnRjdXRMYWJlbDogXCJDdHJsK0FcIixcbiAgICAgICAgICAgIC8vICAgICBpc0Rpc2FibGVkOiAoZGF0YSkgPT4gIShkYXRhLmtpbmQgPT0gXCJmaWxlXCIgJiYgZGF0YS5leHQgIT0gXCIuemlwXCIgJiYgaXNBcmNoaXZlKGRhdGEpKSxcbiAgICAgICAgICAgIC8vICAgICBhY3Rpb246IChldnQpID0+IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgLy8gICAgIGxhYmVsOiBcIkV4dHJhY3QgdG8uLi5cIixcbiAgICAgICAgICAgIC8vICAgICBpY29uOiBcImZvbGRlcl96aXBcIixcbiAgICAgICAgICAgIC8vICAgICBzaG9ydGN1dExhYmVsOiBcIkN0cmwrQVwiLFxuICAgICAgICAgICAgLy8gICAgIGlzRGlzYWJsZWQ6IChkYXRhKSA9PiAhKGRhdGEua2luZCA9PSBcImZpbGVcIiAmJiBkYXRhLmV4dCAhPSBcIi56aXBcIiAmJiBpc0FyY2hpdmUoZGF0YSkpLFxuICAgICAgICAgICAgLy8gICAgIGFjdGlvbjogKGV2dCkgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiQ29tcHJlc3MuLi5cIixcbiAgICAgICAgICAgIC8vICAgICBpY29uOiBcImZvbGRlcl96aXBcIixcbiAgICAgICAgICAgIC8vICAgICBzaG9ydGN1dExhYmVsOiBcIkN0cmwrQVwiLFxuICAgICAgICAgICAgLy8gICAgIGlzRGlzYWJsZWQ6IChkYXRhKSA9PiBkYXRhLmtpbmQgPT0gXCJmaWxlXCIsXG4gICAgICAgICAgICAvLyAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJDaGVja3N1bVwiLFxuICAgICAgICAgICAgICAgIGljb246IFwibWFuYWdlX3NlYXJjaFwiLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ6IChkYXRhKSA9PiBkYXRhLmtpbmQgIT0gXCJmaWxlXCIsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiTUQ1XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IChldnQpID0+IHRoaXMucGVyZm9ybUNoZWNrc3VtKGV2dC5wYXRoICsgZXZ0Lm5hbWUsIFwibWQ1XCIpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJTSEExXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IChldnQpID0+IHRoaXMucGVyZm9ybUNoZWNrc3VtKGV2dC5wYXRoICsgZXZ0Lm5hbWUsIFwic2hhMVwiKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiU0hBMjU2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IChldnQpID0+IHRoaXMucGVyZm9ybUNoZWNrc3VtKGV2dC5wYXRoICsgZXZ0Lm5hbWUsIFwic2hhMjU2XCIpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJTSEE1MTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogKGV2dCkgPT4gdGhpcy5wZXJmb3JtQ2hlY2tzdW0oZXZ0LnBhdGggKyBldnQubmFtZSwgXCJzaGE1MTJcIiksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBpc1Zpc2libGU6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzQXJjaGl2ZSB8fCBkYXRhLmtpbmQgPT0gXCJmaWxlXCI7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiU3RhclwiLFxuICAgICAgICAgICAgLy8gICAgIGljb246IFwic3RhclwiLFxuICAgICAgICAgICAgLy8gICAgIHNob3J0Y3V0TGFiZWw6IFwiQ3RybCtBXCIsXG4gICAgICAgICAgICAvLyAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG5cbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIC8vIFwic2VwYXJhdG9yXCIsXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiUF9yX29wZXJ0aWVzXCIsXG4gICAgICAgICAgICAvLyAgICAgaWNvbjogXCJmaW5kX2luX3BhZ2VcIixcbiAgICAgICAgICAgIC8vICAgICBhY3Rpb246IChldnQpID0+IHtcblxuICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgYXN5bmMgbG9hZEZvbGRlcigpIHtcbiAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5oaWRlTG9hZGVyID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5jb25maWcuYXBpU2V0dGluZ3MubGlzdEVudHJpZXNVcmxUZW1wbGF0ZVxuICAgICAgICAgICAgPyB0aGlzLmNvbmZpZy5hcGlTZXR0aW5ncy5saXN0RW50cmllc1VybFRlbXBsYXRlKHRoaXMucGF0aClcbiAgICAgICAgICAgIDogdGhpcy5jb25maWcuYXBpU2V0dGluZ3MubGlzdEVudHJpZXNVcmxcblxuICAgICAgICB0aGlzLmZldGNoLnBvc3QodXJsLCB7IHBhdGg6IHRoaXMucGF0aCwgc2hvd0hpZGRlbjogdGhpcy5zaG93SGlkZGVuRmlsZXMgfSlcbiAgICAgICAgICAgIC50aGVuKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlczogRmlsZURlc2NyaXB0b3JbXSA9IGRhdGE/LmZpbGVzIHx8IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpcnM6IERpcmVjdG9yeURlc2NyaXB0b3JbXSA9IGRhdGE/LmRpcnMgfHwgW107XG4gICAgICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRvcnMgPSBmaWxlcy5jb25jYXQoZGlycyBhcyBhbnkpIGFzIEZTRGVzY3JpcHRvcltdO1xuXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvcnMuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZlsnX2ljb24nXSA9IHRoaXMuaWNvblJlc29sdmVyLnJlc29sdmVJY29uKGYpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZi5raW5kID09IFwiZmlsZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmWydfY3RpbWUnXSA9IG5ldyBEYXRlKGYuc3RhdHM/LmN0aW1lTXMpPy50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZlsnX210aW1lJ10gPSBuZXcgRGF0ZShmLnN0YXRzPy5tdGltZU1zKT8udG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZbJ19zaXplJ10gPSB0aGlzLmJ5dGVzVG9TdHJpbmcoZi5zdGF0cz8uc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZGlyZWN0b3J5Q29udGVudHMgPSBkZXNjcmlwdG9ycztcblxuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnRGaWx0ZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZEZpbGVzLm5leHQoZGVzY3JpcHRvcnMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc29ydGVkRm9sZGVycy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZsb3dSb3dzKCk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzaXplKCksIDI1MCk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlc2l6ZSgpLCA1MDApO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXNpemUoKSwgMTAwMCk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlc2l6ZSgpLCAyNTAwKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzaXplKCksIDUwMDApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChlID0+IGNvbnNvbGUuZXJyb3IoZSkpXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlTG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgICAgIH0pXG4gICAgfVxuXG4gICAgZmxvd1Jvd3MoKSB7XG4gICAgICAgIGxldCBmaWx0ZXJlZCA9IHRoaXMuX3NvcnRGaWx0ZXIoKTtcblxuICAgICAgICB0aGlzLnNvcnRlZEZvbGRlcnMgPSBbXTtcbiAgICAgICAgY29uc3QgbnVtID0gTWF0aC5jZWlsKGZpbHRlcmVkLmxlbmd0aCAvIHRoaXMuaXRlbXNQZXJSb3cpO1xuICAgICAgICBjb25zdCBpdGVyYXRpb25zID0gTWF0aC5taW4obnVtLCAxMDApO1xuXG4gICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGl0ZXJhdGlvbnM7IHJvdysrKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc29ydGVkRm9sZGVyc1tyb3ddKVxuICAgICAgICAgICAgICAgIHRoaXMuc29ydGVkRm9sZGVyc1tyb3ddID0gW107XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSByb3cgKiB0aGlzLml0ZW1zUGVyUm93OyBpIDwgKHJvdyArIDEpICogdGhpcy5pdGVtc1BlclJvdyAmJiBpIDwgZmlsdGVyZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRlZEZvbGRlcnNbcm93XS5wdXNoKGZpbHRlcmVkW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2VsZWN0KGl0ZW06IEZTRGVzY3JpcHRvciwgZXZ0KSB7XG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBpZiAodGhpcy5rZXlib2FyZC5pc1NoaWZ0UHJlc3NlZCkge1xuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5kaXJlY3RvcnlDb250ZW50cy5maW5kSW5kZXgoaSA9PiBpLm5hbWUgPT0gdGhpcy5zZWxlY3Rpb24uc2xpY2UoLTEsIDEpWzBdLm5hbWUpO1xuICAgICAgICAgICAgbGV0IGVuZCA9IHRoaXMuZGlyZWN0b3J5Q29udGVudHMuaW5kZXhPZihpdGVtKTtcblxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09IC0xKVxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kO1xuXG4gICAgICAgICAgICBsZXQgaXRlbXMgPSBzdGFydCA+IGVuZFxuICAgICAgICAgICAgICAgID8gdGhpcy5kaXJlY3RvcnlDb250ZW50cy5zbGljZShlbmQsIHN0YXJ0ICsgMSlcbiAgICAgICAgICAgICAgICA6IHRoaXMuZGlyZWN0b3J5Q29udGVudHMuc2xpY2Uoc3RhcnQsIGVuZCArIDEpO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IGl0ZW1zO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMua2V5Ym9hcmQuaXNDdHJsUHJlc3NlZCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pbmNsdWRlcyhpdGVtKSlcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgZWxzZSAvLyBDYXNlIHRoYXQgd2Ugc2VsZWN0ZWQgdGhlIHNhbWUgaXRlbSB0d2ljZVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNwbGljZSh0aGlzLnNlbGVjdGlvbi5pbmRleE9mKGl0ZW0pLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IFtpdGVtXTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24ubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblswXS5raW5kID09IFwiZGlyZWN0b3J5XCIpXG4gICAgICAgICAgICAgICAgdGhpcy5mb2xkZXJTZWxlY3QubmV4dCh0aGlzLnNlbGVjdGlvblswXSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5maWxlU2VsZWN0Lm5leHQodGhpcy5zZWxlY3Rpb25bMF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGlvbik7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uVGV4dCA9IHRoaXMuZ2V0U2VsZWN0aW9uVGV4dCgpO1xuICAgIH1cblxuICAgIG9uSXRlbUNsaWNrKGZpbGU6IEZTRGVzY3JpcHRvcikge1xuICAgICAgICBjb25zb2xlLmxvZyhmaWxlLCB0aGlzKTtcbiAgICAgICAgaWYgKGZpbGUua2luZCA9PSBcImRpcmVjdG9yeVwiKSB7XG4gICAgICAgICAgICB0aGlzLmZvbGRlckRibENsaWNrLm5leHQoZmlsZSk7XG4gICAgICAgICAgICB0aGlzLnBhdGggPSBmaWxlLnBhdGggKyBmaWxlLm5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZWxzZSBpZiAoZmlsZS5leHQgPT0gXCJ6aXBcIikge1xuICAgICAgICAvLyAgICAgdGhpcy5maWxlRGJsQ2xpY2submV4dChmaWxlKTtcbiAgICAgICAgLy8gICAgIHRoaXMucGF0aCA9IGZpbGUucGF0aCArIGZpbGUubmFtZTtcbiAgICAgICAgLy8gfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZURibENsaWNrLm5leHQoZmlsZSk7XG4gICAgICAgICAgICB0aGlzLmZpbGVTZWxlY3QubmV4dChmaWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uVG9nZ2xlKGl0ZW0sIHN0YXRlOiBNYXRDaGVja2JveENoYW5nZSkge1xuICAgICAgICBpdGVtWydfdmFsdWUnXSA9IHN0YXRlLmNoZWNrZWQ7XG5cbiAgICAgICAgLy8gVE9ETzogV2hhdCBjYXVzZXMgdGhpcyB0byBiZSBudWxsIHdoZW4gaW5pdGlhbGl6ZWQgd2l0aCBhbiBhcnJheT9cbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUuY2hlY2tlZCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaSA9IHRoaXMudmFsdWUuZmluZEluZGV4KHYgPT4gdiA9PSBpdGVtKTtcbiAgICAgICAgICAgIGlmIChpID49IDApXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5uZXh0KHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIGFzeW5jIGNsZWFyU2VsZWN0aW9uKCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gW107XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UubmV4dCh0aGlzLnZhbHVlKTtcblxuICAgICAgICB0aGlzLnRhYnVsYXRvcj8udGFibGU/LmdldFJvd3MoKS5mb3JFYWNoKHIgPT4gci5nZXRFbGVtZW50KCkuY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0ZWQnKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc29ydEZpbHRlcigpOiBGaWxlRGVzY3JpcHRvcltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlyZWN0b3J5Q29udGVudHMgPSB0aGlzLmRpcmVjdG9yeUNvbnRlbnRzPy5maWx0ZXIoZCA9PiBkLmtpbmQgPT0gJ2RpcmVjdG9yeScpXG4gICAgICAgICAgICAuY29uY2F0KHRoaXMuZGlyZWN0b3J5Q29udGVudHM/LmZpbHRlcihkID0+IGQua2luZCA9PSAnZmlsZScpXG4gICAgICAgICAgICAgICAgLnNvcnQodGhpcy5zb3J0ZXJzW3RoaXMuc29ydE9yZGVyXSlcbiAgICAgICAgICAgICkgYXMgRmlsZURlc2NyaXB0b3JbXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGlvblRleHQoKSB7XG4gICAgICAgIGNvbnN0IGRpckNvdW50ID0gdGhpcy5zZWxlY3Rpb24uZmlsdGVyKHMgPT4gcy5raW5kID09IFwiZGlyZWN0b3J5XCIpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZmlsZUNvdW50ID0gdGhpcy5zZWxlY3Rpb24uZmlsdGVyKHMgPT4gcy5raW5kID09IFwiZmlsZVwiKS5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGRpckNvdW50ICsgZmlsZUNvdW50ID09IDApIHJldHVybiBcIlwiO1xuXG4gICAgICAgIGNvbnN0IHRvdGFsU2l6ZSA9XG4gICAgICAgICAgICB0aGlzLmRpcmVjdG9yeUNvbnRlbnRzXG4gICAgICAgICAgICAgICAgLmZpbHRlcihkID0+IGQua2luZCA9PSBcImZpbGVcIilcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGQgPT4gdGhpcy5zZWxlY3Rpb24/LmZpbmQoaSA9PiBpLm5hbWUgPT0gZC5uYW1lKSlcbiAgICAgICAgICAgICAgICAubWFwKGQgPT4gZFsnc3RhdHMnXS5zaXplKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcblxuICAgICAgICBpZiAoZGlyQ291bnQgKyBmaWxlQ291bnQgPT0gMSlcbiAgICAgICAgICAgIHJldHVybiBgXCIke3RoaXMuc2VsZWN0aW9uWzBdLm5hbWV9XCIgc2VsZWN0ZWQgKCR7dGhpcy5ieXRlc1RvU3RyaW5nKHRvdGFsU2l6ZSl9KWA7XG5cbiAgICAgICAgaWYgKGRpckNvdW50ID4gMCAmJiBmaWxlQ291bnQgPT0gMClcbiAgICAgICAgICAgIHJldHVybiBgXCIke2RpckNvdW50fVwiIGZvbGRlcnMgc2VsZWN0ZWRgO1xuICAgICAgICBpZiAoZmlsZUNvdW50ID4gMCAmJiBkaXJDb3VudCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIGAke2ZpbGVDb3VudH0gaXRlbXMgc2VsZWN0ZWQgKCR7dGhpcy5ieXRlc1RvU3RyaW5nKHRvdGFsU2l6ZSl9KWA7XG5cbiAgICAgICAgcmV0dXJuIGAke2RpckNvdW50fSBmb2xkZXIke2RpckNvdW50ID09IDEgPyBcIlwiIDogXCJzXCJ9IHNlbGVjdGVkLCAke2ZpbGVDb3VudH0gb3RoZXIgaXRlbSR7ZmlsZUNvdW50ID09IDEgPyBcIlwiIDogXCJzXCJ9IHNlbGVjdGVkICgke3RoaXMuYnl0ZXNUb1N0cmluZyh0b3RhbFNpemUpfSlgO1xuICAgIH1cblxuICAgIGJ5dGVzVG9TdHJpbmcoYnl0ZXM6IG51bWJlciwgZGVjaW1hbHMgPSAyKSB7XG4gICAgICAgIGlmICghK2J5dGVzKSByZXR1cm4gJzAgQnl0ZXMnO1xuXG4gICAgICAgIGNvbnN0IGsgPSAxMDI0O1xuICAgICAgICBjb25zdCBkbSA9IGRlY2ltYWxzIDwgMCA/IDAgOiBkZWNpbWFscztcbiAgICAgICAgY29uc3Qgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ107XG5cbiAgICAgICAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coaykpO1xuXG4gICAgICAgIHJldHVybiBgJHtwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGssIGkpKS50b0ZpeGVkKGRtKSl9ICR7c2l6ZXNbaV19YDtcbiAgICB9XG5cbiAgICByZXNpemUoKSB7XG4gICAgICAgIGlmICghdGhpcy5maWxlc1JlZikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlc2l6ZSgpLCAyNSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgYm91bmRzID0gKHRoaXMuZmlsZXNSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgY29uc3QgbmV3Q29sQ291bnQgPSBNYXRoLmZsb29yKGJvdW5kcy53aWR0aCAvIGl0ZW1XaWR0aCk7XG4gICAgICAgIGlmIChuZXdDb2xDb3VudCAhPSB0aGlzLml0ZW1zUGVyUm93KSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zUGVyUm93ID0gTWF0aC5mbG9vcihib3VuZHMud2lkdGggLyBpdGVtV2lkdGgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNQZXJSb3cgPiAxMDApXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1BlclJvdyA9IDE7XG5cbiAgICAgICAgICAgIHRoaXMuZmxvd1Jvd3MoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNvcnRlZEZvbGRlcnM/Lmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgdGhpcy5mbG93Um93cygpO1xuICAgIH1cblxuICAgIG9uRHJhZ1N0YXJ0KGV2dDogRHJhZ0V2ZW50LCBpdGVtOiBGU0Rlc2NyaXB0b3IpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gYCR7d2luZG93Lm9yaWdpbn0vYXBpL2ZpbGVzeXN0ZW0vZG93bmxvYWQ/ZGlyPSR7aXRlbS5wYXRofSZmaWxlPSR7aXRlbS5uYW1lfWA7XG5cbiAgICAgICAgZXZ0LmRhdGFUcmFuc2Zlci5jbGVhckRhdGEoKTtcbiAgICAgICAgLy8gZXZ0LmRhdGFUcmFuc2Zlci5zZXREYXRhKCd0ZXh0L3VyaS1saXN0JywgdGFyZ2V0KTtcbiAgICAgICAgLy8gZXZ0LmRhdGFUcmFuc2Zlci5zZXREYXRhKCdEb3dubG9hZFVSTCcsIGB0ZXh0L3VyaS1saXN0OiR7dGFyZ2V0fWApO1xuICAgICAgICBldnQuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvcGxhaW4nLCBpdGVtLm5hbWUpO1xuICAgIH1cblxuICAgIG9uRHJvcChldikge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGlmIChldi5kYXRhVHJhbnNmZXIuaXRlbXMpIHtcbiAgICAgICAgICAgIC8vIFVzZSBEYXRhVHJhbnNmZXJJdGVtTGlzdCBpbnRlcmZhY2UgdG8gYWNjZXNzIHRoZSBmaWxlKHMpXG4gICAgICAgICAgICBbLi4uZXYuZGF0YVRyYW5zZmVyLml0ZW1zXS5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XG4gICAgICAgICAgICAvLyBJZiBkcm9wcGVkIGl0ZW1zIGFyZW4ndCBmaWxlcywgcmVqZWN0IHRoZW1cbiAgICAgICAgICAgIGlmIChpdGVtLmtpbmQgPT09IFwiZmlsZVwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYOKApiBmaWxlWyR7aX1dLm5hbWUgPSAke2ZpbGUubmFtZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVXNlIERhdGFUcmFuc2ZlciBpbnRlcmZhY2UgdG8gYWNjZXNzIHRoZSBmaWxlKHMpXG4gICAgICAgICAgICBbLi4uZXYuZGF0YVRyYW5zZmVyLmZpbGVzXS5mb3JFYWNoKChmaWxlLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhg4oCmIGZpbGVbJHtpfV0ubmFtZSA9ICR7ZmlsZS5uYW1lfWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuYW1lQ2VsbEZvcm1hdHRlciA9ICgoY2VsbDogQ2VsbENvbXBvbmVudCwgZm9ybWF0dGVyUGFyYW1zOiB7fSwgb25SZW5kZXJlZDogRW1wdHlDYWxsYmFjaykgPT4ge1xuICAgICAgICAvLyBUT0RPOiBTYW5pdGl6ZT9cbiAgICAgICAgY29uc3QgaXRlbSA9IGNlbGwuZ2V0RGF0YSgpIGFzIEZTRGVzY3JpcHRvcjtcbiAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxpbWcgc3R5bGU9XCJoZWlnaHQ6IDI0cHg7IG1hcmdpbi1yaWdodDogNnB4XCIgc3JjPVwiJHtpdGVtWydfaWNvbiddLnBhdGh9XCIvPlxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwibWFyZ2luOiAwXCI+JHt0aGlzLnNhbml0aXplci5zYW5pdGl6ZShTZWN1cml0eUNvbnRleHQuSFRNTCwgaXRlbVsndmFuaXR5TmFtZSddIHx8IGl0ZW0ubmFtZSl9PC9wPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICBgO1xuICAgIH0pLmJpbmQodGhpcylcblxuICAgIG9uUm93Q3R4KHtldmVudCwgcm93fSkge1xuICAgICAgICBvcGVuTWVudSh0aGlzLm1hdERpYWxvZywgdGhpcy5maWxlQ29udGV4dE1lbnUsIHJvdy5nZXREYXRhKCksIGV2ZW50KTtcbiAgICB9XG5cbiAgICBvblJvd0NsaWNrKHtldmVudCwgcm93LCBkYXRhfSkge1xuICAgICAgICAvLyAkZXZlbnQuZGF0YVsnX3ZhbHVlJ10gPSAkZXZlbnQuZGF0YVsnX3ZhbHVlJ10gPT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhldmVudCwgcm93LCBkYXRhLCB0aGlzLnZhbHVlKTtcblxuICAgICAgICBjb25zdCByb3dFbCA9IHJvdy5nZXRFbGVtZW50KCk7XG4gICAgICAgIGxldCBzdGF0ZSA9IHJvd0VsLmNsYXNzTGlzdC5jb250YWlucygnc2VsZWN0ZWQnKTtcbiAgICAgICAgZGF0YVsnX3ZhbHVlJ10gPSAhc3RhdGU7XG5cbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN0YXRlKSB7XG4gICAgICAgICAgICByb3dFbC5jbGFzc0xpc3QuYWRkKCdzZWxlY3RlZCcpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcm93RWwuY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIGNvbnN0IGkgPSB0aGlzLnZhbHVlLmZpbmRJbmRleCh2ID0+IHYgPT0gZGF0YSk7XG4gICAgICAgICAgICBpZiAoaSA+PSAwKVxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5uZXh0KHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIHNvcnQoKSB7XG4gICAgICAgIHRoaXMuX3NvcnRGaWx0ZXIoKTtcbiAgICB9XG5cbiAgICBvblVwbG9hZEZpbGUoZXZ0PzogRlNEZXNjcmlwdG9yKSB7XG4gICAgICAgIHVwbG9hZEZpbGUoXG4gICAgICAgICAgICB0aGlzLmZldGNoLFxuICAgICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgICB0aGlzLl9wYXRoLFxuICAgICAgICAgICAgZXZ0ID8gKGV2dC5wYXRoICsgZXZ0Lm5hbWUpIDogbnVsbCxcbiAgICAgICAgICAgIHRoaXMuZmlsZU1hbmFnZXIuY29udGV4dFRhZ3NcbiAgICAgICAgKVxuICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgLy8gUmVmcmVzaCBmb2xkZXIgY29udGVudHNcbiAgICAgICAgICAgIHRoaXMubG9hZEZvbGRlcigpO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIG9uQ3JlYXRlRm9sZGVyKGRhdGE/OiBGU0Rlc2NyaXB0b3IpIHtcbiAgICAgICAgdGhpcy5kaWFsb2cub3BlbihcImZvbGRlci1yZW5hbWVcIiwgXCJAZG90Z2xpdGNoL25neC13ZWItY29tcG9uZW50c1wiLCB7XG4gICAgICAgICAgICBpbnB1dHM6IHsgcGF0aDogZGF0YT8ucGF0aCB8fCB0aGlzLnBhdGgsIG5hbWU6IGRhdGE/Lm5hbWUgfHwgJycsIGNvbmZpZzogdGhpcy5jb25maWcgfVxuICAgICAgICB9KS50aGVuKHIgPT4gdGhpcy5sb2FkRm9sZGVyKCkpXG4gICAgfVxufVxuXG4iLCJAaWYgKHNob3dMb2FkZXIpIHtcbiAgICA8bWF0LXByb2dyZXNzLWJhciBbY2xhc3MuaGlkZV09XCJoaWRlTG9hZGVyXCIgbW9kZT1cInF1ZXJ5XCIvPlxufVxuXG48ZGl2XG4gICAgc3R5bGU9XCJkaXNwbGF5OiBjb250ZW50c1wiXG4gICAgW3N0eWxlLi0tZmlsZW1hbmFnZXItZmlsZWljb24tYmFja2Ryb3BdPVwiJ3VybCgnICsgaWNvblJlc29sdmVyLnBhdGggKyAnL3BvcC9nZW5lcmljLnN2ZyknXCJcbiAgICAoZHJhZ3N0YXJ0KT1cInVzZXJJc0RyYWdnaW5nRmlsZSA9IHRydWVcIlxuICAgIChkcmFnZW5kKT1cInVzZXJJc0RyYWdnaW5nRmlsZSA9IGZhbHNlXCJcbiAgICAoZHJhZ292ZXIpPVwiZHJhZ2dpbmdPdmVyID0gdHJ1ZVwiXG4gICAgKGRyYWdsZWF2ZSk9XCJkcmFnZ2luZ092ZXIgPSBmYWxzZVwiXG4gICAgKG9uZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4+XG4gICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiZHJhZ2dpbmdPdmVyXCI+PC9uZy1jb250YWluZXI+IC0tPlxuICAgIDwhLS0gR3JpZCBtb2RlIC0tPlxuICAgIDxuZy1zY3JvbGxiYXJcbiAgICAgICAgKm5nSWY9XCJ2aWV3TW9kZSA9PSAnZ3JpZCdcIlxuICAgICAgICBjbGFzcz1cImdyaWQge3tncmlkU2l6ZX19IHt7Y29uZmlnLmltYWdlU2l6ZSB8fCAnbm9ybWFsJ319XCJcbiAgICAgICAgW2NsYXNzLnNlbGVjdGlvbk1vZGVdPVwiY29uZmlnLm1vZGUgPT0gJ2ZvY3VzRmlsZXMnXCJcbiAgICAgICAgW2NsYXNzLnNob3dEcm9wQXJlYV09XCJkcmFnZ2luZ092ZXJcIlxuICAgICAgICBzdHlsZT1cImhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCVcIlxuICAgICAgICB0cmFjaz1cInZlcnRpY2FsXCJcbiAgICAgICAgcG9pbnRlckV2ZW50c01ldGhvZD1cInNjcm9sbGJhclwiXG4gICAgICAgIFtuZ3gtY29udGV4dG1lbnVdPVwiZm9sZGVyQ29udGV4dE1lbnVcIlxuICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlc2l6ZS1vYnNlcnZlclwiICNmaWxlVmlld3BvcnQ+PC9kaXY+XG4gICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcbiAgICAgICAgICAgIGl0ZW1TaXplPVwiMTM0XCJcbiAgICAgICAgICAgIHNjcm9sbFZpZXdwb3J0XG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0aW9uID0gW107IHNlbGVjdGlvblRleHQgPSAnJ1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqY2RrVmlydHVhbEZvcj1cImxldCByb3cgb2Ygc29ydGVkRm9sZGVyc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygcm93XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cInNlbGVjdGlvbi5pbmNsdWRlcyhpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5nZW5lcmljXT1cIml0ZW1bJ19pY29uJ10ubmVlZHNCYWNrZHJvcFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ3gtY29udGV4dG1lbnVdPVwiZmlsZUNvbnRleHRNZW51XCJcbiAgICAgICAgICAgICAgICAgICAgW25neC1tZW51LWNvbnRleHRdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAjY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29uZmlnLm1vZGUgPT0gJ2ZvY3VzRmlsZXMnICYmIGl0ZW0ua2luZCA9PSAnZmlsZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXRlbVsnX3ZhbHVlJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblRvZ2dsZShpdGVtLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBjb250ZW50c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3QoaXRlbSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJvbkRyYWdTdGFydCgkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cIml0ZW1bJ19pY29uJ10ucGF0aFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPnt7aXRlbVsndmFuaXR5TmFtZSddIHx8IGl0ZW0ubmFtZX19PC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICA8L25nLXNjcm9sbGJhcj5cblxuICAgIDwhLS0gTGlzdCBtb2RlIC0tPlxuICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJ2aWV3TW9kZSA9PSAnbGlzdCdcIlxuICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCVcIlxuICAgICAgICBbY2xhc3Muc2hvd0Ryb3BBcmVhXT1cImRyYWdnaW5nT3ZlclwiXG4gICAgICAgIFtuZ3gtY29udGV4dG1lbnVdPVwiZm9sZGVyQ29udGV4dE1lbnVcIlxuICAgID5cbiAgICAgICAgPGFwcC10YWJ1bGF0b3JcbiAgICAgICAgICAgIFtkYXRhU291cmNlXT1cImRpcmVjdG9yeUNvbnRlbnRzXCJcbiAgICAgICAgICAgIFtjb2x1bW5zXT1cIltcbiAgICAgICAgICAgICAgICB7IGZpZWxkOiAnbmFtZScsIHRpdGxlOiAnTmFtZScsIGZvcm1hdHRlcjogbmFtZUNlbGxGb3JtYXR0ZXIgfSxcbiAgICAgICAgICAgICAgICB7IGZpZWxkOiAnX3NpemUnLCB0aXRsZTogJ1NpemUnIH0sXG4gICAgICAgICAgICAgICAgeyBmaWVsZDogJ19jdGltZScsIHRpdGxlOiAnQ3JlYXRlZCcgfSxcbiAgICAgICAgICAgICAgICB7IGZpZWxkOiAnX210aW1lJywgdGl0bGU6ICdNb2RpZmllZCcgfSxcbiAgICAgICAgICAgIF1cIlxuICAgICAgICAgICAgW29wdGlvbnNdPVwie1xuICAgICAgICAgICAgICAgIHJvd0hlaWdodDogMzJcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKHJvd0NsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAocm93RGJsQ2xpY2spPVwib25JdGVtQ2xpY2soJGV2ZW50LmRhdGEpXCJcbiAgICAgICAgICAgIChyb3dDb250ZXh0KT1cIm9uUm93Q3R4KCRldmVudClcIlxuICAgICAgICAvPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJzZWxlY3QtaGludFwiICpuZ0lmPVwic2VsZWN0aW9uVGV4dFwiPlxuICAgIHt7c2VsZWN0aW9uVGV4dH19XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImNvbnRyb2xzXCI+XG4gICAgPGJ1dHRvblxuICAgICAgICBtYXQtZmxhdC1idXR0b25cbiAgICAgICAgY2xhc3M9XCJ1cGxvYWQtYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ3JlYXRlRm9sZGVyKClcIlxuICAgID5cbiAgICAgICAgPG1hdC1pY29uPmNyZWF0ZV9uZXdfZm9sZGVyPC9tYXQtaWNvbj5cbiAgICAgICAgTmV3IEZvbGRlclxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgICAgbWF0LWZsYXQtYnV0dG9uXG4gICAgICAgIGNsYXNzPVwidXBsb2FkLWJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJvblVwbG9hZEZpbGUoKVwiXG4gICAgPlxuICAgICAgICA8bWF0LWljb24+dXBsb2FkX2ZpbGU8L21hdC1pY29uPlxuICAgICAgICBVcGxvYWRcbiAgICA8L2J1dHRvbj5cbjwvZGl2PlxuIl19