imm-element-ui 1.1.5 → 1.1.7

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.
@@ -35,6 +35,7 @@ export class CrumbActionComponent extends AmComponent {
35
35
  // 新建按钮
36
36
  this.addVisible = input();
37
37
  this.newUrl = input('');
38
+ this.configNewPath = input('');
38
39
  this.onExport = input();
39
40
  // 新建按钮outline
40
41
  this.outlined = input(false);
@@ -64,14 +65,18 @@ export class CrumbActionComponent extends AmComponent {
64
65
  },
65
66
  ];
66
67
  this.isSave = computed(() => {
67
- console.log('ac----', this.action.saveSignal());
68
68
  return this.action.saveSignal();
69
69
  });
70
+ this.loading = computed(() => {
71
+ return this.action.loading();
72
+ });
70
73
  this.saveBtnDisable = input(false);
74
+ this.currentPageUrl = '';
71
75
  effect(() => {
72
76
  let last = this.crumbList().pop();
73
77
  if (last?.url) {
74
78
  this.isNew = last.url?.indexOf('new') > -1 ? true : false;
79
+ this.currentPageUrl = last.url;
75
80
  }
76
81
  if (last?.title) {
77
82
  this.crumbTitle.set(last);
@@ -107,11 +112,19 @@ export class CrumbActionComponent extends AmComponent {
107
112
  this.showAct = window.innerWidth < 768 ? true : false;
108
113
  }
109
114
  goNew() {
110
- if (this.newUrl() == '')
111
- return;
112
- this.router.navigate([this.newUrl()]).then((res) => {
113
- this.userHistoryService.setLastTitle('New');
114
- });
115
+ if (!this.configNewPath()) {
116
+ if (this.newUrl() == '')
117
+ return;
118
+ this.router.navigate([this.newUrl()]).then((res) => {
119
+ this.userHistoryService.setLastTitle('New');
120
+ });
121
+ }
122
+ else {
123
+ this.router.navigate([this.configNewPath()]).then((res) => {
124
+ this.userHistoryService.setLastTitle('New');
125
+ this.userHistoryService.filterUrl(this.currentPageUrl);
126
+ });
127
+ }
115
128
  }
116
129
  closeNew() {
117
130
  let length = this.crumbList().length;
@@ -166,11 +179,11 @@ export class CrumbActionComponent extends AmComponent {
166
179
  this.action.saveSignal.set(false);
167
180
  }
168
181
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CrumbActionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
169
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CrumbActionComponent, isStandalone: true, selector: "app-crumb-action", inputs: { isShowCog: { classPropertyName: "isShowCog", publicName: "isShowCog", isSignal: true, isRequired: false, transformFunction: null }, addVisible: { classPropertyName: "addVisible", publicName: "addVisible", isSignal: true, isRequired: false, transformFunction: null }, newUrl: { classPropertyName: "newUrl", publicName: "newUrl", isSignal: true, isRequired: false, transformFunction: null }, onExport: { classPropertyName: "onExport", publicName: "onExport", isSignal: true, isRequired: false, transformFunction: null }, outlined: { classPropertyName: "outlined", publicName: "outlined", isSignal: true, isRequired: false, transformFunction: null }, isList: { classPropertyName: "isList", publicName: "isList", isSignal: true, isRequired: false, transformFunction: null }, authLevel: { classPropertyName: "authLevel", publicName: "authLevel", isSignal: true, isRequired: false, transformFunction: null }, actionList: { classPropertyName: "actionList", publicName: "actionList", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, menus: { classPropertyName: "menus", publicName: "menus", isSignal: true, isRequired: false, transformFunction: null }, saveBtnDisable: { classPropertyName: "saveBtnDisable", publicName: "saveBtnDisable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { saveEvent: "saveEvent", cancelEvent: "cancelEvent", actionEvent: "actionEvent" }, host: { listeners: { "window:resize": "resize($event)" } }, queries: [{ propertyName: "newBtnTemplateRef", first: true, predicate: ["newBtn"] }], viewQueries: [{ propertyName: "op", first: true, predicate: ["op"], descendants: true }, { propertyName: "listOp", first: true, predicate: ["listOp"], descendants: true }, { propertyName: "actOp", first: true, predicate: ["actOp"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"flex items-center gap-1\">\n <div class=\"left-btn flex gap-1\">\n <!-- TODO \u6743\u9650\u6570\u636E\u63A5\u5165 -->\n @if(!newBtnTemplateRef){\n @if(this.authLevel() > 2 && addVisible()){\n <p-button (click)=\"goNew()\" [outlined]=\"outlined()\">{{'app.create' | translate}}</p-button>\n }\n } @else {\n <ng-container *ngTemplateOutlet=\"newBtnTemplateRef\"></ng-container>\n }\n </div>\n @if(crumbList().length > 0){\n <div class=\"flex flex-col leading-none\">\n <div class=\"hidden md:flex\">\n @if(crumbList().length <= 2){\n @for(fchild of crumbList(); track fchild.url){\n <div class=\"crumb-title cursor-pointer text-[12px] max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\" (click)=\"back(fchild)\">\n @if(fchild.i18nKey!= ''){\n {{ fchild!.i18nKey | translate}}\n } @else {\n {{fchild.title}}\n }\n </div>\n }\n } @else {\n <div class=\"flex\">\n <div class=\"crumb-title cursor-pointer select-crumb\">\n <div class=\"w-[17px] h-[17px] flex items-center font-bold text-[13px]\" (click)=\"toggle($event)\">\n ...\n </div>\n <p-tieredmenu #op [model]=\"crumbFront\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\">\n <span class=\"ml-2 w-full\" (click)=\"back(item)\">\n @if(item.i18nKey!= ''){\n {{ item!.i18nKey | translate}}\n } @else {\n {{item.title}}\n }\n </span>\n </a>\n </ng-template>\n </p-tieredmenu>\n </div>\n @for(item of crumbEnd;track item.url){\n <div class=\"crumb-title cursor-pointer text-[12px] max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\" (click)=\"back(item)\">\n @if(item.i18nKey!= ''){\n {{ item!.i18nKey | translate}}\n } @else {\n {{item.title}}\n }\n </div>\n }\n </div>\n }\n \n </div>\n <div class=\"min-w-0 text-text-color text-[12px] title-action\">\n <span class=\"hidden md:inline-block max-w-[150px] overflow-hidden text-ellipsis whitespace-nowrap\">{{isNew? 'New':crumbTitle().title}}</span>\n @if(isShowCog()){\n @if(isList()){\n <p-button variant=\"text\" severity=\"secondary\" icon=\"pi pi-cog\" aria-label=\"\u64CD\u4F5C\" (onClick)=\"toggleListOp($event)\"/>\n @if(displayOpItems().length > 0){\n <p-tieredmenu #listOp [model]=\"displayOpItems()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\" (click)=\"listAct(item)\">\n <span [class]=\"item.icon\" class=\"p-tieredmenu-item-icon\"></span>\n <span class=\"ml-2\">{{ item.label | translate }}</span>\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\n {{ item.shortcut }}\n </span>\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\n </a>\n </ng-template>\n </p-tieredmenu>\n }\n } @else {\n <p-button variant=\"text\" severity=\"secondary\" icon=\"pi pi-cog\" aria-label=\"\u64CD\u4F5C\" (onClick)=\"toggleAct($event)\"/>\n @if(actionList().length > 0 && showAct){\n <p-tieredmenu #actOp [model]=\"actionList()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\n <a pRipple \n class=\"flex items-center p-tieredmenu-item-link\"\n [class]=\"(item.auth || 0) > (authLevel() || 0) || !!item.btnHidden?.(data()) ? 'hidden' : 'block'\" \n (click)=\"actEvent(item)\">\n <span class=\"ml-2\">{{item.i18nKey ? (item.i18nKey | translate) : item.label}}</span>\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\n {{ item.shortcut }}\n </span>\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\n </a>\n </ng-template>\n </p-tieredmenu>\n }\n }\n }\n @if(this.authLevel() > 2 && !isList()){\n <p-button \n variant=\"text\" \n [severity]=\"setSaveClass()\" \n icon=\"pi pi-cloud-upload\" \n [loading]=\"isLoading()\"\n aria-label=\"\u624B\u52A8\u4FDD\u5B58\"\n [disabled]=\"saveBtnDisable()\" \n class=\"p-0\"\n (click)=\"handleSave()\">\n </p-button>\n }\n <!-- @if(crumbList().length >= 2){ -->\n <p-button \n variant=\"text\" \n severity=\"secondary\" \n icon=\"pi pi-times\" \n aria-label=\"\u5173\u95ED\" \n class=\"p-0\"\n (click)=\"closeNew()\">\n </p-button>\n <!-- } -->\n </div>\n </div>\n } @else {\n <!-- \u521D\u59CB\u8282\u70B9 -->\n <div class=\"min-w-0 flex items-center text-[14px] text-text-color\">\n <span class=\"hidden md:inline-block max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\">\n @if(crumbTitle().i18nKey != ''){\n {{crumbTitle().i18nKey | translate}}\n } @else {\n {{crumbTitle().title}}\n }\n </span>\n @if(isShowCog()){\n <p-button \n variant=\"text\"\n severity=\"secondary\" \n icon=\"pi pi-cog\" \n aria-label=\"\u64CD\u4F5C\" \n (onClick)=\"toggleListOp($event)\"/>\n @if(displayOpItems().length > 0){\n <p-tieredmenu #listOp [model]=\"displayOpItems()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\" (click)=\"listAct(item)\">\n <span [class]=\"item.icon\" class=\"p-tieredmenu-item-icon\"></span>\n <span class=\"ml-2\">{{ item.label | translate }}</span>\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\n {{ item.shortcut }}\n </span>\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\n </a>\n </ng-template>\n </p-tieredmenu>\n }\n \n }\n @if(!isList()){\n <p-button \n variant=\"text\" \n severity=\"secondary\" \n icon=\"pi pi-cloud-upload\" \n aria-label=\"\u624B\u52A8\u4FDD\u5B58\"\n [disabled]=\"saveBtnDisable()\" \n class=\"p-0\"\n (click)=\"handleSave()\">\n </p-button>\n <p-button \n variant=\"text\" \n severity=\"secondary\" \n icon=\"pi pi-times\" \n aria-label=\"\u5173\u95ED\" \n class=\"p-0\"\n (click)=\"closeNew()\">\n </p-button>\n }\n </div>\n }\n \n</div>", styles: [":host ::ng-deep .p-disabled,:host ::ng-deep .p-component:disabled{opacity:1}:host ::ng-deep .p-inputtext{border-width:0;border-radius:0;box-shadow:none;background:#fff;padding:0}:host ::ng-deep .p-inputtext:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputtext:not(:disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:not(:disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered .p-autocomplete-input:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-label{padding:0}:host ::ng-deep .p-select{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-select .p-select-dropdown{display:none}:host ::ng-deep .p-select .p-select-clear-icon{display:none}:host ::ng-deep .p-select:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-select-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-open .p-select-dropdown{display:flex}:host ::ng-deep .p-select-open .p-select-clear-icon{display:flex}:host ::ng-deep .p-select:hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select:hover .p-select-dropdown{display:flex}:host ::ng-deep .p-select:hover .p-select-clear-icon{display:flex}:host ::ng-deep .p-select.ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select.ng-hovered .p-select-dropdown{display:flex}:host ::ng-deep .p-select.ng-hovered .p-select-clear-icon{display:flex}:host ::ng-deep .p-multiselect-label{padding:0}:host ::ng-deep .p-multiselect{border-width:0;border-radius:0;background:#fff;box-shadow:none}:host ::ng-deep .p-multiselect .p-multiselect-dropdown{display:none}:host ::ng-deep .p-multiselect:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-multiselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect-open .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled):hover .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-textarea{border-radius:0;box-shadow:none;padding:0;background:#fff;resize:none}:host ::ng-deep .p-textarea:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border:1px solid var(--p-red-500)!important}:host ::ng-deep .p-textarea:not(:disabled):hover{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:not(:disabled).ng-hovered{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:focus{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-treeselect-label{padding:0}:host ::ng-deep .p-treeselect{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-treeselect .p-treeselect-dropdown{display:none}:host ::ng-deep .ng-invalid.ng-dirty>.p-treeselect{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-treeselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect-open .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled):hover .p-treeselect-dropdown{display:flex}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled) .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-menubar{border-width:0;padding:0}:host ::ng-deep .p-menubar-submenu{z-index:3}:host ::ng-deep .p-fileupload-advanced{border-width:0;border-radius:0;background-color:#fff}:host ::ng-deep .p-fileupload-header{padding:0}:host ::ng-deep .p-fileupload-content{padding:0;display:block;border-width:0}:host ::ng-deep .p-inputnumber:not(.ng-valid).ng-dirty>.p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputnumber.ng-hovered:not(.p-disabled)>.p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-invalid.ng-dirty>.p-datepicker .p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .ng-hovered>.p-datepicker:not(.p-disabled) .p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor{border:1px solid #cbd5e1}:host ::ng-deep .cm-editor.cm-focused{outline:none!important;border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor:hover{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor.ng-hovered{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-gutters{background-color:#fff;border:\"none\"}:host ::ng-deep .cm-activeLineGutter{background-color:#fff}.crumb-title{color:var(--p-primary-color)}.crumb-title+.crumb-title{padding-left:.5rem}.crumb-title+.crumb-title:before{padding-right:.5rem;content:var(--breadcrumb-divider, \"/\")}:host::ng-deep .p-button-text.p-button-secondary{color:var(--p-surface-700)}:host::ng-deep .title-action .p-button{padding:0}:host::ng-deep .new-action .p-button{padding:0}:host::ng-deep .new-action .p-button button{padding-top:2px;height:100%;align-items:center}:host::ng-deep .select-crumb .p-button{padding:0;background-color:#fff;line-height:1}:host::ng-deep .select-crumb .p-button button{padding:0;width:17px;height:17px}:host::ng-deep .p-popover-content{padding:.5rem}:host::ng-deep .left-btn .p-button{height:33px;min-width:51px}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: TieredMenu, selector: "p-tieredMenu, p-tieredmenu, p-tiered-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "breakpoint", "autoZIndex", "baseZIndex", "autoDisplay", "showTransitionOptions", "hideTransitionOptions", "id", "ariaLabel", "ariaLabelledBy", "disabled", "tabindex"], outputs: ["onShow", "onHide"] }] }); }
182
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CrumbActionComponent, isStandalone: true, selector: "app-crumb-action", inputs: { isShowCog: { classPropertyName: "isShowCog", publicName: "isShowCog", isSignal: true, isRequired: false, transformFunction: null }, addVisible: { classPropertyName: "addVisible", publicName: "addVisible", isSignal: true, isRequired: false, transformFunction: null }, newUrl: { classPropertyName: "newUrl", publicName: "newUrl", isSignal: true, isRequired: false, transformFunction: null }, configNewPath: { classPropertyName: "configNewPath", publicName: "configNewPath", isSignal: true, isRequired: false, transformFunction: null }, onExport: { classPropertyName: "onExport", publicName: "onExport", isSignal: true, isRequired: false, transformFunction: null }, outlined: { classPropertyName: "outlined", publicName: "outlined", isSignal: true, isRequired: false, transformFunction: null }, isList: { classPropertyName: "isList", publicName: "isList", isSignal: true, isRequired: false, transformFunction: null }, authLevel: { classPropertyName: "authLevel", publicName: "authLevel", isSignal: true, isRequired: false, transformFunction: null }, actionList: { classPropertyName: "actionList", publicName: "actionList", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, menus: { classPropertyName: "menus", publicName: "menus", isSignal: true, isRequired: false, transformFunction: null }, saveBtnDisable: { classPropertyName: "saveBtnDisable", publicName: "saveBtnDisable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { saveEvent: "saveEvent", cancelEvent: "cancelEvent", actionEvent: "actionEvent" }, host: { listeners: { "window:resize": "resize($event)" } }, queries: [{ propertyName: "newBtnTemplateRef", first: true, predicate: ["newBtn"] }], viewQueries: [{ propertyName: "op", first: true, predicate: ["op"], descendants: true }, { propertyName: "listOp", first: true, predicate: ["listOp"], descendants: true }, { propertyName: "actOp", first: true, predicate: ["actOp"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"flex items-center gap-1\">\n <div class=\"left-btn flex gap-1\">\n <!-- TODO \u6743\u9650\u6570\u636E\u63A5\u5165 -->\n @if(!newBtnTemplateRef){\n @if(this.authLevel() > 2 && addVisible()){\n <p-button (click)=\"goNew()\" [outlined]=\"outlined()\">{{'app.create' | translate}}</p-button>\n }\n } @else {\n <ng-container *ngTemplateOutlet=\"newBtnTemplateRef\"></ng-container>\n }\n </div>\n @if(crumbList().length > 0){\n <div class=\"flex flex-col leading-none\">\n <div class=\"hidden md:flex\">\n @if(crumbList().length <= 2){\n @for(fchild of crumbList(); track fchild.url){\n <div class=\"crumb-title cursor-pointer text-[12px] max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\" (click)=\"back(fchild)\">\n @if(fchild.i18nKey!= ''){\n {{ fchild!.i18nKey | translate}}\n } @else {\n {{fchild.title}}\n }\n </div>\n }\n } @else {\n <div class=\"flex\">\n <div class=\"crumb-title cursor-pointer select-crumb\">\n <div class=\"w-[17px] h-[17px] flex items-center font-bold text-[13px]\" (click)=\"toggle($event)\">\n ...\n </div>\n <p-tieredmenu #op [model]=\"crumbFront\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\">\n <span class=\"ml-2 w-full\" (click)=\"back(item)\">\n @if(item.i18nKey!= ''){\n {{ item!.i18nKey | translate}}\n } @else {\n {{item.title}}\n }\n </span>\n </a>\n </ng-template>\n </p-tieredmenu>\n </div>\n @for(item of crumbEnd;track item.url){\n <div class=\"crumb-title cursor-pointer text-[12px] max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\" (click)=\"back(item)\">\n @if(item.i18nKey!= ''){\n {{ item!.i18nKey | translate}}\n } @else {\n {{item.title}}\n }\n </div>\n }\n </div>\n }\n \n </div>\n <div class=\"min-w-0 text-text-color text-[12px] title-action\">\n <span class=\"hidden md:inline-block max-w-[150px] overflow-hidden text-ellipsis whitespace-nowrap\">{{isNew? 'New':crumbTitle().title}}</span>\n @if(isShowCog()){\n @if(isList()){\n <p-button variant=\"text\" severity=\"secondary\" icon=\"pi pi-cog\" aria-label=\"\u64CD\u4F5C\" (onClick)=\"toggleListOp($event)\"/>\n @if(displayOpItems().length > 0){\n <p-tieredmenu #listOp [model]=\"displayOpItems()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\" (click)=\"listAct(item)\">\n <span [class]=\"item.icon\" class=\"p-tieredmenu-item-icon\"></span>\n <span class=\"ml-2\">{{ item.label | translate }}</span>\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\n {{ item.shortcut }}\n </span>\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\n </a>\n </ng-template>\n </p-tieredmenu>\n }\n } @else {\n <p-button variant=\"text\" severity=\"secondary\" icon=\"pi pi-cog\" aria-label=\"\u64CD\u4F5C\" (onClick)=\"toggleAct($event)\"/>\n @if(actionList().length > 0 && showAct){\n <p-tieredmenu #actOp [model]=\"actionList()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\n <a pRipple \n class=\"flex items-center p-tieredmenu-item-link\"\n [class]=\"(item.auth || 0) > (authLevel() || 0) || !!item.btnHidden?.(data()) ? 'hidden' : 'block'\" \n (click)=\"actEvent(item)\">\n <span class=\"ml-2\">{{item.i18nKey ? (item.i18nKey | translate) : item.label}}</span>\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\n {{ item.shortcut }}\n </span>\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\n </a>\n </ng-template>\n </p-tieredmenu>\n }\n }\n }\n @if(this.authLevel() > 2 && !isList()){\n <p-button \n variant=\"text\" \n [severity]=\"setSaveClass()\" \n icon=\"pi pi-cloud-upload\" \n [loading]=\"loading()\"\n aria-label=\"\u624B\u52A8\u4FDD\u5B58\"\n [disabled]=\"saveBtnDisable()\" \n class=\"p-0\"\n (click)=\"handleSave()\">\n </p-button>\n }\n <!-- @if(crumbList().length >= 2){ -->\n <p-button \n variant=\"text\" \n severity=\"secondary\" \n icon=\"pi pi-times\" \n aria-label=\"\u5173\u95ED\" \n class=\"p-0\"\n (click)=\"closeNew()\">\n </p-button>\n <!-- } -->\n </div>\n </div>\n } @else {\n <!-- \u521D\u59CB\u8282\u70B9 -->\n <div class=\"min-w-0 flex items-center text-[14px] text-text-color\">\n <span class=\"hidden md:inline-block max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\">\n @if(crumbTitle().i18nKey != ''){\n {{crumbTitle().i18nKey | translate}}\n } @else {\n {{crumbTitle().title}}\n }\n </span>\n @if(isShowCog()){\n <p-button \n variant=\"text\"\n severity=\"secondary\" \n icon=\"pi pi-cog\" \n aria-label=\"\u64CD\u4F5C\" \n (onClick)=\"toggleListOp($event)\"/>\n @if(displayOpItems().length > 0){\n <p-tieredmenu #listOp [model]=\"displayOpItems()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\" (click)=\"listAct(item)\">\n <span [class]=\"item.icon\" class=\"p-tieredmenu-item-icon\"></span>\n <span class=\"ml-2\">{{ item.label | translate }}</span>\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\n {{ item.shortcut }}\n </span>\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\n </a>\n </ng-template>\n </p-tieredmenu>\n }\n \n }\n @if(!isList()){\n <p-button \n variant=\"text\" \n severity=\"secondary\" \n icon=\"pi pi-cloud-upload\" \n aria-label=\"\u624B\u52A8\u4FDD\u5B58\"\n [disabled]=\"saveBtnDisable()\" \n class=\"p-0\"\n (click)=\"handleSave()\">\n </p-button>\n <p-button \n variant=\"text\" \n severity=\"secondary\" \n icon=\"pi pi-times\" \n aria-label=\"\u5173\u95ED\" \n class=\"p-0\"\n (click)=\"closeNew()\">\n </p-button>\n }\n </div>\n }\n \n</div>", styles: [":host ::ng-deep .p-disabled,:host ::ng-deep .p-component:disabled{opacity:1}:host ::ng-deep .p-inputtext{border-width:0;border-radius:0;box-shadow:none;background:#fff;padding:0}:host ::ng-deep .p-inputtext:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputtext:not(:disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:not(:disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered .p-autocomplete-input:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-label{padding:0}:host ::ng-deep .p-select{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-select .p-select-dropdown{display:none}:host ::ng-deep .p-select .p-select-clear-icon{display:none}:host ::ng-deep .p-select:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-select-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-open .p-select-dropdown{display:flex}:host ::ng-deep .p-select-open .p-select-clear-icon{display:flex}:host ::ng-deep .p-select:hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select:hover .p-select-dropdown{display:flex}:host ::ng-deep .p-select:hover .p-select-clear-icon{display:flex}:host ::ng-deep .p-select.ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select.ng-hovered .p-select-dropdown{display:flex}:host ::ng-deep .p-select.ng-hovered .p-select-clear-icon{display:flex}:host ::ng-deep .p-multiselect-label{padding:0}:host ::ng-deep .p-multiselect{border-width:0;border-radius:0;background:#fff;box-shadow:none}:host ::ng-deep .p-multiselect .p-multiselect-dropdown{display:none}:host ::ng-deep .p-multiselect:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-multiselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect-open .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled):hover .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-textarea{border-radius:0;box-shadow:none;padding:0;background:#fff;resize:none}:host ::ng-deep .p-textarea:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border:1px solid var(--p-red-500)!important}:host ::ng-deep .p-textarea:not(:disabled):hover{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:not(:disabled).ng-hovered{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:focus{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-treeselect-label{padding:0}:host ::ng-deep .p-treeselect{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-treeselect .p-treeselect-dropdown{display:none}:host ::ng-deep .ng-invalid.ng-dirty>.p-treeselect{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-treeselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect-open .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled):hover .p-treeselect-dropdown{display:flex}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled) .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-menubar{border-width:0;padding:0}:host ::ng-deep .p-menubar-submenu{z-index:3}:host ::ng-deep .p-fileupload-advanced{border-width:0;border-radius:0;background-color:#fff}:host ::ng-deep .p-fileupload-header{padding:0}:host ::ng-deep .p-fileupload-content{padding:0;display:block;border-width:0}:host ::ng-deep .p-inputnumber:not(.ng-valid).ng-dirty>.p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputnumber.ng-hovered:not(.p-disabled)>.p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-invalid.ng-dirty>.p-datepicker .p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .ng-hovered>.p-datepicker:not(.p-disabled) .p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor{border:1px solid #cbd5e1}:host ::ng-deep .cm-editor.cm-focused{outline:none!important;border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor:hover{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor.ng-hovered{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-gutters{background-color:#fff;border:\"none\"}:host ::ng-deep .cm-activeLineGutter{background-color:#fff}.crumb-title{color:var(--p-primary-color)}.crumb-title+.crumb-title{padding-left:.5rem}.crumb-title+.crumb-title:before{padding-right:.5rem;content:var(--breadcrumb-divider, \"/\")}:host::ng-deep .p-button-text.p-button-secondary{color:var(--p-surface-700)}:host::ng-deep .title-action .p-button{padding:0}:host::ng-deep .new-action .p-button{padding:0}:host::ng-deep .new-action .p-button button{padding-top:2px;height:100%;align-items:center}:host::ng-deep .select-crumb .p-button{padding:0;background-color:#fff;line-height:1}:host::ng-deep .select-crumb .p-button button{padding:0;width:17px;height:17px}:host::ng-deep .p-popover-content{padding:.5rem}:host::ng-deep .left-btn .p-button{height:33px;min-width:51px}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: TieredMenu, selector: "p-tieredMenu, p-tieredmenu, p-tiered-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "breakpoint", "autoZIndex", "baseZIndex", "autoDisplay", "showTransitionOptions", "hideTransitionOptions", "id", "ariaLabel", "ariaLabelledBy", "disabled", "tabindex"], outputs: ["onShow", "onHide"] }] }); }
170
183
  }
171
184
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CrumbActionComponent, decorators: [{
172
185
  type: Component,
173
- args: [{ selector: 'app-crumb-action', standalone: true, imports: [ButtonModule, TranslatePipe, CommonModule, TieredMenu], template: "<div class=\"flex items-center gap-1\">\n <div class=\"left-btn flex gap-1\">\n <!-- TODO \u6743\u9650\u6570\u636E\u63A5\u5165 -->\n @if(!newBtnTemplateRef){\n @if(this.authLevel() > 2 && addVisible()){\n <p-button (click)=\"goNew()\" [outlined]=\"outlined()\">{{'app.create' | translate}}</p-button>\n }\n } @else {\n <ng-container *ngTemplateOutlet=\"newBtnTemplateRef\"></ng-container>\n }\n </div>\n @if(crumbList().length > 0){\n <div class=\"flex flex-col leading-none\">\n <div class=\"hidden md:flex\">\n @if(crumbList().length <= 2){\n @for(fchild of crumbList(); track fchild.url){\n <div class=\"crumb-title cursor-pointer text-[12px] max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\" (click)=\"back(fchild)\">\n @if(fchild.i18nKey!= ''){\n {{ fchild!.i18nKey | translate}}\n } @else {\n {{fchild.title}}\n }\n </div>\n }\n } @else {\n <div class=\"flex\">\n <div class=\"crumb-title cursor-pointer select-crumb\">\n <div class=\"w-[17px] h-[17px] flex items-center font-bold text-[13px]\" (click)=\"toggle($event)\">\n ...\n </div>\n <p-tieredmenu #op [model]=\"crumbFront\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\">\n <span class=\"ml-2 w-full\" (click)=\"back(item)\">\n @if(item.i18nKey!= ''){\n {{ item!.i18nKey | translate}}\n } @else {\n {{item.title}}\n }\n </span>\n </a>\n </ng-template>\n </p-tieredmenu>\n </div>\n @for(item of crumbEnd;track item.url){\n <div class=\"crumb-title cursor-pointer text-[12px] max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\" (click)=\"back(item)\">\n @if(item.i18nKey!= ''){\n {{ item!.i18nKey | translate}}\n } @else {\n {{item.title}}\n }\n </div>\n }\n </div>\n }\n \n </div>\n <div class=\"min-w-0 text-text-color text-[12px] title-action\">\n <span class=\"hidden md:inline-block max-w-[150px] overflow-hidden text-ellipsis whitespace-nowrap\">{{isNew? 'New':crumbTitle().title}}</span>\n @if(isShowCog()){\n @if(isList()){\n <p-button variant=\"text\" severity=\"secondary\" icon=\"pi pi-cog\" aria-label=\"\u64CD\u4F5C\" (onClick)=\"toggleListOp($event)\"/>\n @if(displayOpItems().length > 0){\n <p-tieredmenu #listOp [model]=\"displayOpItems()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\" (click)=\"listAct(item)\">\n <span [class]=\"item.icon\" class=\"p-tieredmenu-item-icon\"></span>\n <span class=\"ml-2\">{{ item.label | translate }}</span>\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\n {{ item.shortcut }}\n </span>\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\n </a>\n </ng-template>\n </p-tieredmenu>\n }\n } @else {\n <p-button variant=\"text\" severity=\"secondary\" icon=\"pi pi-cog\" aria-label=\"\u64CD\u4F5C\" (onClick)=\"toggleAct($event)\"/>\n @if(actionList().length > 0 && showAct){\n <p-tieredmenu #actOp [model]=\"actionList()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\n <a pRipple \n class=\"flex items-center p-tieredmenu-item-link\"\n [class]=\"(item.auth || 0) > (authLevel() || 0) || !!item.btnHidden?.(data()) ? 'hidden' : 'block'\" \n (click)=\"actEvent(item)\">\n <span class=\"ml-2\">{{item.i18nKey ? (item.i18nKey | translate) : item.label}}</span>\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\n {{ item.shortcut }}\n </span>\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\n </a>\n </ng-template>\n </p-tieredmenu>\n }\n }\n }\n @if(this.authLevel() > 2 && !isList()){\n <p-button \n variant=\"text\" \n [severity]=\"setSaveClass()\" \n icon=\"pi pi-cloud-upload\" \n [loading]=\"isLoading()\"\n aria-label=\"\u624B\u52A8\u4FDD\u5B58\"\n [disabled]=\"saveBtnDisable()\" \n class=\"p-0\"\n (click)=\"handleSave()\">\n </p-button>\n }\n <!-- @if(crumbList().length >= 2){ -->\n <p-button \n variant=\"text\" \n severity=\"secondary\" \n icon=\"pi pi-times\" \n aria-label=\"\u5173\u95ED\" \n class=\"p-0\"\n (click)=\"closeNew()\">\n </p-button>\n <!-- } -->\n </div>\n </div>\n } @else {\n <!-- \u521D\u59CB\u8282\u70B9 -->\n <div class=\"min-w-0 flex items-center text-[14px] text-text-color\">\n <span class=\"hidden md:inline-block max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\">\n @if(crumbTitle().i18nKey != ''){\n {{crumbTitle().i18nKey | translate}}\n } @else {\n {{crumbTitle().title}}\n }\n </span>\n @if(isShowCog()){\n <p-button \n variant=\"text\"\n severity=\"secondary\" \n icon=\"pi pi-cog\" \n aria-label=\"\u64CD\u4F5C\" \n (onClick)=\"toggleListOp($event)\"/>\n @if(displayOpItems().length > 0){\n <p-tieredmenu #listOp [model]=\"displayOpItems()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\" (click)=\"listAct(item)\">\n <span [class]=\"item.icon\" class=\"p-tieredmenu-item-icon\"></span>\n <span class=\"ml-2\">{{ item.label | translate }}</span>\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\n {{ item.shortcut }}\n </span>\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\n </a>\n </ng-template>\n </p-tieredmenu>\n }\n \n }\n @if(!isList()){\n <p-button \n variant=\"text\" \n severity=\"secondary\" \n icon=\"pi pi-cloud-upload\" \n aria-label=\"\u624B\u52A8\u4FDD\u5B58\"\n [disabled]=\"saveBtnDisable()\" \n class=\"p-0\"\n (click)=\"handleSave()\">\n </p-button>\n <p-button \n variant=\"text\" \n severity=\"secondary\" \n icon=\"pi pi-times\" \n aria-label=\"\u5173\u95ED\" \n class=\"p-0\"\n (click)=\"closeNew()\">\n </p-button>\n }\n </div>\n }\n \n</div>", styles: [":host ::ng-deep .p-disabled,:host ::ng-deep .p-component:disabled{opacity:1}:host ::ng-deep .p-inputtext{border-width:0;border-radius:0;box-shadow:none;background:#fff;padding:0}:host ::ng-deep .p-inputtext:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputtext:not(:disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:not(:disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered .p-autocomplete-input:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-label{padding:0}:host ::ng-deep .p-select{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-select .p-select-dropdown{display:none}:host ::ng-deep .p-select .p-select-clear-icon{display:none}:host ::ng-deep .p-select:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-select-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-open .p-select-dropdown{display:flex}:host ::ng-deep .p-select-open .p-select-clear-icon{display:flex}:host ::ng-deep .p-select:hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select:hover .p-select-dropdown{display:flex}:host ::ng-deep .p-select:hover .p-select-clear-icon{display:flex}:host ::ng-deep .p-select.ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select.ng-hovered .p-select-dropdown{display:flex}:host ::ng-deep .p-select.ng-hovered .p-select-clear-icon{display:flex}:host ::ng-deep .p-multiselect-label{padding:0}:host ::ng-deep .p-multiselect{border-width:0;border-radius:0;background:#fff;box-shadow:none}:host ::ng-deep .p-multiselect .p-multiselect-dropdown{display:none}:host ::ng-deep .p-multiselect:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-multiselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect-open .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled):hover .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-textarea{border-radius:0;box-shadow:none;padding:0;background:#fff;resize:none}:host ::ng-deep .p-textarea:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border:1px solid var(--p-red-500)!important}:host ::ng-deep .p-textarea:not(:disabled):hover{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:not(:disabled).ng-hovered{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:focus{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-treeselect-label{padding:0}:host ::ng-deep .p-treeselect{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-treeselect .p-treeselect-dropdown{display:none}:host ::ng-deep .ng-invalid.ng-dirty>.p-treeselect{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-treeselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect-open .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled):hover .p-treeselect-dropdown{display:flex}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled) .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-menubar{border-width:0;padding:0}:host ::ng-deep .p-menubar-submenu{z-index:3}:host ::ng-deep .p-fileupload-advanced{border-width:0;border-radius:0;background-color:#fff}:host ::ng-deep .p-fileupload-header{padding:0}:host ::ng-deep .p-fileupload-content{padding:0;display:block;border-width:0}:host ::ng-deep .p-inputnumber:not(.ng-valid).ng-dirty>.p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputnumber.ng-hovered:not(.p-disabled)>.p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-invalid.ng-dirty>.p-datepicker .p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .ng-hovered>.p-datepicker:not(.p-disabled) .p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor{border:1px solid #cbd5e1}:host ::ng-deep .cm-editor.cm-focused{outline:none!important;border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor:hover{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor.ng-hovered{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-gutters{background-color:#fff;border:\"none\"}:host ::ng-deep .cm-activeLineGutter{background-color:#fff}.crumb-title{color:var(--p-primary-color)}.crumb-title+.crumb-title{padding-left:.5rem}.crumb-title+.crumb-title:before{padding-right:.5rem;content:var(--breadcrumb-divider, \"/\")}:host::ng-deep .p-button-text.p-button-secondary{color:var(--p-surface-700)}:host::ng-deep .title-action .p-button{padding:0}:host::ng-deep .new-action .p-button{padding:0}:host::ng-deep .new-action .p-button button{padding-top:2px;height:100%;align-items:center}:host::ng-deep .select-crumb .p-button{padding:0;background-color:#fff;line-height:1}:host::ng-deep .select-crumb .p-button button{padding:0;width:17px;height:17px}:host::ng-deep .p-popover-content{padding:.5rem}:host::ng-deep .left-btn .p-button{height:33px;min-width:51px}\n"] }]
186
+ args: [{ selector: 'app-crumb-action', standalone: true, imports: [ButtonModule, TranslatePipe, CommonModule, TieredMenu], template: "<div class=\"flex items-center gap-1\">\n <div class=\"left-btn flex gap-1\">\n <!-- TODO \u6743\u9650\u6570\u636E\u63A5\u5165 -->\n @if(!newBtnTemplateRef){\n @if(this.authLevel() > 2 && addVisible()){\n <p-button (click)=\"goNew()\" [outlined]=\"outlined()\">{{'app.create' | translate}}</p-button>\n }\n } @else {\n <ng-container *ngTemplateOutlet=\"newBtnTemplateRef\"></ng-container>\n }\n </div>\n @if(crumbList().length > 0){\n <div class=\"flex flex-col leading-none\">\n <div class=\"hidden md:flex\">\n @if(crumbList().length <= 2){\n @for(fchild of crumbList(); track fchild.url){\n <div class=\"crumb-title cursor-pointer text-[12px] max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\" (click)=\"back(fchild)\">\n @if(fchild.i18nKey!= ''){\n {{ fchild!.i18nKey | translate}}\n } @else {\n {{fchild.title}}\n }\n </div>\n }\n } @else {\n <div class=\"flex\">\n <div class=\"crumb-title cursor-pointer select-crumb\">\n <div class=\"w-[17px] h-[17px] flex items-center font-bold text-[13px]\" (click)=\"toggle($event)\">\n ...\n </div>\n <p-tieredmenu #op [model]=\"crumbFront\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\">\n <span class=\"ml-2 w-full\" (click)=\"back(item)\">\n @if(item.i18nKey!= ''){\n {{ item!.i18nKey | translate}}\n } @else {\n {{item.title}}\n }\n </span>\n </a>\n </ng-template>\n </p-tieredmenu>\n </div>\n @for(item of crumbEnd;track item.url){\n <div class=\"crumb-title cursor-pointer text-[12px] max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\" (click)=\"back(item)\">\n @if(item.i18nKey!= ''){\n {{ item!.i18nKey | translate}}\n } @else {\n {{item.title}}\n }\n </div>\n }\n </div>\n }\n \n </div>\n <div class=\"min-w-0 text-text-color text-[12px] title-action\">\n <span class=\"hidden md:inline-block max-w-[150px] overflow-hidden text-ellipsis whitespace-nowrap\">{{isNew? 'New':crumbTitle().title}}</span>\n @if(isShowCog()){\n @if(isList()){\n <p-button variant=\"text\" severity=\"secondary\" icon=\"pi pi-cog\" aria-label=\"\u64CD\u4F5C\" (onClick)=\"toggleListOp($event)\"/>\n @if(displayOpItems().length > 0){\n <p-tieredmenu #listOp [model]=\"displayOpItems()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\" (click)=\"listAct(item)\">\n <span [class]=\"item.icon\" class=\"p-tieredmenu-item-icon\"></span>\n <span class=\"ml-2\">{{ item.label | translate }}</span>\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\n {{ item.shortcut }}\n </span>\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\n </a>\n </ng-template>\n </p-tieredmenu>\n }\n } @else {\n <p-button variant=\"text\" severity=\"secondary\" icon=\"pi pi-cog\" aria-label=\"\u64CD\u4F5C\" (onClick)=\"toggleAct($event)\"/>\n @if(actionList().length > 0 && showAct){\n <p-tieredmenu #actOp [model]=\"actionList()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\n <a pRipple \n class=\"flex items-center p-tieredmenu-item-link\"\n [class]=\"(item.auth || 0) > (authLevel() || 0) || !!item.btnHidden?.(data()) ? 'hidden' : 'block'\" \n (click)=\"actEvent(item)\">\n <span class=\"ml-2\">{{item.i18nKey ? (item.i18nKey | translate) : item.label}}</span>\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\n {{ item.shortcut }}\n </span>\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\n </a>\n </ng-template>\n </p-tieredmenu>\n }\n }\n }\n @if(this.authLevel() > 2 && !isList()){\n <p-button \n variant=\"text\" \n [severity]=\"setSaveClass()\" \n icon=\"pi pi-cloud-upload\" \n [loading]=\"loading()\"\n aria-label=\"\u624B\u52A8\u4FDD\u5B58\"\n [disabled]=\"saveBtnDisable()\" \n class=\"p-0\"\n (click)=\"handleSave()\">\n </p-button>\n }\n <!-- @if(crumbList().length >= 2){ -->\n <p-button \n variant=\"text\" \n severity=\"secondary\" \n icon=\"pi pi-times\" \n aria-label=\"\u5173\u95ED\" \n class=\"p-0\"\n (click)=\"closeNew()\">\n </p-button>\n <!-- } -->\n </div>\n </div>\n } @else {\n <!-- \u521D\u59CB\u8282\u70B9 -->\n <div class=\"min-w-0 flex items-center text-[14px] text-text-color\">\n <span class=\"hidden md:inline-block max-w-[120px] overflow-hidden whitespace-nowrap text-ellipsis\">\n @if(crumbTitle().i18nKey != ''){\n {{crumbTitle().i18nKey | translate}}\n } @else {\n {{crumbTitle().title}}\n }\n </span>\n @if(isShowCog()){\n <p-button \n variant=\"text\"\n severity=\"secondary\" \n icon=\"pi pi-cog\" \n aria-label=\"\u64CD\u4F5C\" \n (onClick)=\"toggleListOp($event)\"/>\n @if(displayOpItems().length > 0){\n <p-tieredmenu #listOp [model]=\"displayOpItems()\" [popup]=\"true\" [style]=\"{position:'absolute'}\">\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\n <a pRipple class=\"flex items-center p-tieredmenu-item-link\" (click)=\"listAct(item)\">\n <span [class]=\"item.icon\" class=\"p-tieredmenu-item-icon\"></span>\n <span class=\"ml-2\">{{ item.label | translate }}</span>\n <span *ngIf=\"item.shortcut\" class=\"ml-auto border border-surface rounded bg-emphasis text-muted-color text-xs p-1\">\n {{ item.shortcut }}\n </span>\n <i *ngIf=\"hasSubmenu\" class=\"pi pi-angle-right ml-auto\"></i>\n </a>\n </ng-template>\n </p-tieredmenu>\n }\n \n }\n @if(!isList()){\n <p-button \n variant=\"text\" \n severity=\"secondary\" \n icon=\"pi pi-cloud-upload\" \n aria-label=\"\u624B\u52A8\u4FDD\u5B58\"\n [disabled]=\"saveBtnDisable()\" \n class=\"p-0\"\n (click)=\"handleSave()\">\n </p-button>\n <p-button \n variant=\"text\" \n severity=\"secondary\" \n icon=\"pi pi-times\" \n aria-label=\"\u5173\u95ED\" \n class=\"p-0\"\n (click)=\"closeNew()\">\n </p-button>\n }\n </div>\n }\n \n</div>", styles: [":host ::ng-deep .p-disabled,:host ::ng-deep .p-component:disabled{opacity:1}:host ::ng-deep .p-inputtext{border-width:0;border-radius:0;box-shadow:none;background:#fff;padding:0}:host ::ng-deep .p-inputtext:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputtext:not(:disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:not(:disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-inputtext:focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered .p-autocomplete-input:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-label{padding:0}:host ::ng-deep .p-select{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-select .p-select-dropdown{display:none}:host ::ng-deep .p-select .p-select-clear-icon{display:none}:host ::ng-deep .p-select:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-select-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select-open .p-select-dropdown{display:flex}:host ::ng-deep .p-select-open .p-select-clear-icon{display:flex}:host ::ng-deep .p-select:hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select:hover .p-select-dropdown{display:flex}:host ::ng-deep .p-select:hover .p-select-clear-icon{display:flex}:host ::ng-deep .p-select.ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-select.ng-hovered .p-select-dropdown{display:flex}:host ::ng-deep .p-select.ng-hovered .p-select-clear-icon{display:flex}:host ::ng-deep .p-multiselect-label{padding:0}:host ::ng-deep .p-multiselect{border-width:0;border-radius:0;background:#fff;box-shadow:none}:host ::ng-deep .p-multiselect .p-multiselect-dropdown{display:none}:host ::ng-deep .p-multiselect:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-multiselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect-open .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).p-focus .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled):hover .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-multiselect:not(.p-disabled).ng-hovered .p-multiselect-dropdown{display:flex}:host ::ng-deep .p-textarea{border-radius:0;box-shadow:none;padding:0;background:#fff;resize:none}:host ::ng-deep .p-textarea:not(.ng-valid).ng-dirty{background:var(--p-red-200)!important;border:1px solid var(--p-red-500)!important}:host ::ng-deep .p-textarea:not(:disabled):hover{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:not(:disabled).ng-hovered{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-textarea:focus{border:1px solid var(--p-primary-color);resize:vertical}:host ::ng-deep .p-treeselect-label{padding:0}:host ::ng-deep .p-treeselect{border-width:0;border-radius:0;box-shadow:none;background:#fff}:host ::ng-deep .p-treeselect .p-treeselect-dropdown{display:none}:host ::ng-deep .ng-invalid.ng-dirty>.p-treeselect{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-treeselect-open{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect-open .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled).p-focus .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-treeselect:not(.p-disabled):hover{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .p-treeselect:not(.p-disabled):hover .p-treeselect-dropdown{display:flex}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled){border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-hovered>.p-treeselect:not(.p-disabled) .p-treeselect-dropdown{display:flex}:host ::ng-deep .p-menubar{border-width:0;padding:0}:host ::ng-deep .p-menubar-submenu{z-index:3}:host ::ng-deep .p-fileupload-advanced{border-width:0;border-radius:0;background-color:#fff}:host ::ng-deep .p-fileupload-header{padding:0}:host ::ng-deep .p-fileupload-content{padding:0;display:block;border-width:0}:host ::ng-deep .p-inputnumber:not(.ng-valid).ng-dirty>.p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .p-inputnumber.ng-hovered:not(.p-disabled)>.p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .ng-invalid.ng-dirty>.p-datepicker .p-inputtext{background:var(--p-red-200)!important;border-bottom:1px solid var(--p-red-500)!important}:host ::ng-deep .ng-hovered>.p-datepicker:not(.p-disabled) .p-inputtext{border-bottom:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor{border:1px solid #cbd5e1}:host ::ng-deep .cm-editor.cm-focused{outline:none!important;border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor:hover{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-editor.ng-hovered{border:1px solid var(--p-primary-color)}:host ::ng-deep .cm-gutters{background-color:#fff;border:\"none\"}:host ::ng-deep .cm-activeLineGutter{background-color:#fff}.crumb-title{color:var(--p-primary-color)}.crumb-title+.crumb-title{padding-left:.5rem}.crumb-title+.crumb-title:before{padding-right:.5rem;content:var(--breadcrumb-divider, \"/\")}:host::ng-deep .p-button-text.p-button-secondary{color:var(--p-surface-700)}:host::ng-deep .title-action .p-button{padding:0}:host::ng-deep .new-action .p-button{padding:0}:host::ng-deep .new-action .p-button button{padding-top:2px;height:100%;align-items:center}:host::ng-deep .select-crumb .p-button{padding:0;background-color:#fff;line-height:1}:host::ng-deep .select-crumb .p-button button{padding:0;width:17px;height:17px}:host::ng-deep .p-popover-content{padding:.5rem}:host::ng-deep .left-btn .p-button{height:33px;min-width:51px}\n"] }]
174
187
  }], ctorParameters: () => [], propDecorators: { op: [{
175
188
  type: ViewChild,
176
189
  args: ['op']
@@ -187,4 +200,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
187
200
  type: HostListener,
188
201
  args: ['window:resize', ['$event']]
189
202
  }] } });
190
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1bWItYWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvY3J1bWItYWN0aW9uL2NydW1iLWFjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL2NydW1iLWFjdGlvbi9jcnVtYi1hY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFDTixTQUFTLEVBQ1QsUUFBUSxFQUNSLFlBQVksRUFDWixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUVOLE1BQU0sRUFFTixTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFlLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQVFoRCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsV0FBVztJQThEcEQ7UUFDQyxLQUFLLEVBQUUsQ0FBQztRQTlEVCx1QkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNoRCxXQUFNLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9CLGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3pCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENB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QztJQUVELFFBQVEsQ0FBQyxJQUFTO1FBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBVTtRQUNuQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFBRSxPQUFPO1FBQzFCLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNELFlBQVk7UUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFBLENBQUMsQ0FBQSxXQUFXLENBQUE7SUFDNUMsQ0FBQztJQUVELFdBQVc7UUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDbEMsQ0FBQzsrR0F4S1csb0JBQW9CO21HQUFwQixvQkFBb0IsMCtEQzlCakMsaXdQQStLTSw4M01EckpLLFlBQVksNmFBQUUsYUFBYSxpREFBRSxZQUFZLDBTQUFFLFVBQVU7OzRGQUluRCxvQkFBb0I7a0JBUGhDLFNBQVM7K0JBQ0Msa0JBQWtCLGNBQ2hCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQzt3REF5Qi9DLEVBQUU7c0JBQWxCLFNBQVM7dUJBQUMsSUFBSTtnQkFDTSxNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVE7Z0JBQ0MsS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPO2dCQW1COEIsaUJBQWlCO3NCQUFoRSxZQUFZO3VCQUFDLFFBQVEsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUU7Z0JBcUQ5QyxNQUFNO3NCQURMLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW1Db21wb25lbnQgfSBmcm9tICcuLy4uL2FtL2FtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcblx0Q29tcG9uZW50LFxyXG5cdGNvbXB1dGVkLFxyXG5cdENvbnRlbnRDaGlsZCxcclxuXHRlZmZlY3QsXHJcblx0SG9zdExpc3RlbmVyLFxyXG5cdGluamVjdCxcclxuXHRpbnB1dCxcclxuXHRPbkluaXQsXHJcblx0b3V0cHV0LFxyXG5cdE91dHB1dCxcclxuXHRzaWduYWwsXHJcblx0VGVtcGxhdGVSZWYsXHJcblx0Vmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVc2VySGlzdG9yeVNlcnZpY2UsIEhpc3RvcnlJdGVtLCBBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcHVibGljLWFwaSc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBQb3BvdmVyIH0gZnJvbSAncHJpbWVuZy9wb3BvdmVyJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgVGllcmVkTWVudSB9IGZyb20gJ3ByaW1lbmcvdGllcmVkbWVudSc7XHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnYXBwLWNydW1iLWFjdGlvbicsXHJcblx0c3RhbmRhbG9uZTogdHJ1ZSxcclxuXHRpbXBvcnRzOiBbQnV0dG9uTW9kdWxlLCBUcmFuc2xhdGVQaXBlLCBDb21tb25Nb2R1bGUsIFRpZXJlZE1lbnVdLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9jcnVtYi1hY3Rpb24uY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsOiAnLi9jcnVtYi1hY3Rpb24uY29tcG9uZW50LnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3J1bWJBY3Rpb25Db21wb25lbnQgZXh0ZW5kcyBBbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblx0dXNlckhpc3RvcnlTZXJ2aWNlID0gaW5qZWN0KFVzZXJIaXN0b3J5U2VydmljZSk7XHJcblx0YWN0aW9uID0gaW5qZWN0KEFjdGlvblNlcnZpY2UpO1xyXG5cdGNydW1iTGlzdCA9IGNvbXB1dGVkKCgpID0+IHtcclxuXHRcdGxldCBjcnVtYiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy51c2VySGlzdG9yeVNlcnZpY2UuaGlzdG9yeUxpc3QoKSkpO1xyXG5cdFx0Ly8gY29uc29sZS5sb2coJ2NydW1iJyxjcnVtYilcclxuXHRcdC8vIEB0cy1pZ25vcmVcclxuXHRcdGNvbnN0IGlzSTE4biA9IHdpbmRvdy5hcHBJc0kxOG5cclxuXHRcdGlmKCFpc0kxOG4pe1xyXG5cdFx0XHRjcnVtYi5mb3JFYWNoKChpdGVtOmFueSkgPT4ge1xyXG5cdFx0XHRcdGl0ZW0uaTE4bktleSA9ICcnXHJcblx0XHRcdH0pXHJcblx0XHR9XHJcblx0XHRyZXR1cm4gY3J1bWIubWFwKCh2OiBhbnkpID0+IHYpO1xyXG5cdH0pO1xyXG5cdGNydW1iVGl0bGUgPSBzaWduYWw8YW55Pih7fSk7XHJcblx0Ly8gcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcblx0aXNOZXcgPSBmYWxzZTtcclxuXHRpc1Nob3dDb2cgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblx0Y3J1bWJGcm9udDogSGlzdG9yeUl0ZW1bXSA9IFtdO1xyXG5cdGNydW1iRW5kOiBIaXN0b3J5SXRlbVtdID0gW107XHJcblx0QFZpZXdDaGlsZCgnb3AnKSBvcCE6IFBvcG92ZXI7XHJcblx0QFZpZXdDaGlsZCgnbGlzdE9wJykgbGlzdE9wITogUG9wb3ZlcjtcclxuXHRAVmlld0NoaWxkKCdhY3RPcCcpIGFjdE9wITogUG9wb3ZlcjtcclxuXHRzYXZlRXZlbnQgPSBvdXRwdXQoKTtcclxuXHQvLyDmlrDlu7rmjInpkq5cclxuXHRhZGRWaXNpYmxlID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oKTtcclxuXHRuZXdVcmwgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuXHRvbkV4cG9ydCA9IGlucHV0PEZ1bmN0aW9uPigpO1xyXG5cdC8vIOaWsOW7uuaMiemSrm91dGxpbmVcclxuXHRvdXRsaW5lZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHQvLyDmmK/lkKbmmK/liJfooajpobXpnaJcclxuXHRpc0xpc3QgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblx0Ly8g5p2D6ZmQ562J57qnXHJcblx0YXV0aExldmVsID0gaW5wdXQ8bnVtYmVyPigtMSk7XHJcblx0Y2FuY2VsRXZlbnQgPSBvdXRwdXQoKTtcclxuXHRhY3Rpb25MaXN0ID0gaW5wdXQ8YW55PihbXSk7XHJcblx0YWN0aW9uRXZlbnQgPSBvdXRwdXQoKTtcclxuXHRkYXRhID0gaW5wdXQ8YW55PigpO1xyXG5cdHNob3dBY3QgPSBmYWxzZTtcclxuXHRtZW51cyA9IGlucHV0PGFueVtdPihbXSk7XHJcblx0ZGlzcGxheU9wSXRlbXMgPSBjb21wdXRlZCgoKSA9PiBbLi4udGhpcy5tZW51cygpLCAuLi50aGlzLmxpc3RPcEl0ZW1zXS5maWx0ZXIoKHYpID0+IHRoaXMuYXV0aExldmVsKCkgPj0gdi5hdXRoKSk7XHJcblx0QENvbnRlbnRDaGlsZCgnbmV3QnRuJywgeyBkZXNjZW5kYW50czogZmFsc2UgfSkgbmV3QnRuVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XHJcblx0bGlzdE9wSXRlbXMgPSBbXHJcblx0XHR7XHJcblx0XHRcdGxhYmVsOiAnYXBwLnRhYmxlQWNJbXBvcnQnLFxyXG5cdFx0XHR0eXBlOiAnaW1wb3J0JyxcclxuXHRcdFx0aWNvbjogJ3BpIHBpLXVwbG9hZCcsXHJcblx0XHRcdGF1dGg6IDIsXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRsYWJlbDogJ2FwcC50YWJsZUFjRXhwb3J0JyxcclxuXHRcdFx0dHlwZTogJ2V4cG9ydCcsXHJcblx0XHRcdGljb246ICdwaSBwaS1kb3dubG9hZCcsXHJcblx0XHRcdGF1dGg6IDMsXHJcblx0XHR9LFxyXG5cdF07XHJcblx0aXNTYXZlID0gY29tcHV0ZWQoKCkgPT4ge1xyXG5cdFx0Y29uc29sZS5sb2coJ2FjLS0tLScsdGhpcy5hY3Rpb24uc2F2ZVNpZ25hbCgpKVxyXG5cdFx0cmV0dXJuIHRoaXMuYWN0aW9uLnNhdmVTaWduYWwoKVxyXG5cdH0pXHJcblx0c2F2ZUJ0bkRpc2FibGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSlcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0XHRlZmZlY3QoXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRsZXQgbGFzdCA9IHRoaXMuY3J1bWJMaXN0KCkucG9wKCk7XHJcblx0XHRcdFx0aWYgKGxhc3Q/LnVybCkge1xyXG5cdFx0XHRcdFx0dGhpcy5pc05ldyA9IGxhc3QudXJsPy5pbmRleE9mKCduZXcnKSA+IC0xID8gdHJ1ZSA6IGZhbHNlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAobGFzdD8udGl0bGUpIHtcclxuXHRcdFx0XHRcdHRoaXMuY3J1bWJUaXRsZS5zZXQobGFzdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb25zdCBsZW5ndGggPSB0aGlzLmNydW1iTGlzdCgpLmxlbmd0aDtcclxuXHRcdFx0XHRpZiAobGVuZ3RoID4gMikge1xyXG5cdFx0XHRcdFx0dGhpcy5jcnVtYkZyb250ID0gdGhpcy5jcnVtYkxpc3QoKVxyXG5cdFx0XHRcdFx0XHQubWFwKCh2OiBhbnkpID0+IHtcclxuXHRcdFx0XHRcdFx0XHR2LmxhYmVsID0gdi50aXRsZTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdjtcclxuXHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0LmZpbHRlcigodjogSGlzdG9yeUl0ZW0sIGluZGV4OiBudW1iZXIpID0+IGluZGV4IDw9IGxlbmd0aCAtIDEgLSAyKTtcclxuXHRcdFx0XHRcdHRoaXMuY3J1bWJFbmQgPSBbdGhpcy5jcnVtYkxpc3QoKVtsZW5ndGggLSAyXSwgdGhpcy5jcnVtYkxpc3QoKVtsZW5ndGggLSAxXV07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXHJcblx0XHQpO1xyXG5cdFx0Ly8gZWZmZWN0KCgpID0+IHtcclxuXHRcdC8vIFx0dGhpcy5saXN0T3BJdGVtcyA9IHRoaXMubGlzdE9wSXRlbXMuZmlsdGVyKCh2KSA9PiB0aGlzLmF1dGhMZXZlbCgpID49IHYubGV2ZWwpO1xyXG5cdFx0Ly8gfSk7XHJcblx0XHRlZmZlY3QoKCkgPT4ge1xyXG5cdFx0XHRjb25zb2xlLmxvZygnYWRkVmlzaWJsZScsIHRoaXMuYWRkVmlzaWJsZSgpKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuXHRyZXNpemUoZXZlbnQ6IGFueSkge1xyXG5cdFx0bGV0IHdpbmRvd1dpZHRoID0gKGV2ZW50LnRhcmdldCBhcyBXaW5kb3cpLmlubmVyV2lkdGg7XHJcblx0XHRpZiAod2luZG93V2lkdGggPCA3NjgpIHtcclxuXHRcdFx0dGhpcy5zaG93QWN0ID0gdHJ1ZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuc2hvd0FjdCA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2hvd0FjdCA9IHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4ID8gdHJ1ZSA6IGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Z29OZXcoKSB7XHJcblx0XHRpZiAodGhpcy5uZXdVcmwoKSA9PSAnJykgcmV0dXJuO1xyXG5cdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMubmV3VXJsKCldKS50aGVuKChyZXMpID0+IHtcclxuXHRcdFx0dGhpcy51c2VySGlzdG9yeVNlcnZpY2Uuc2V0TGFzdFRpdGxlKCdOZXcnKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0Y2xvc2VOZXcoKSB7XHJcblx0XHRsZXQgbGVuZ3RoID0gdGhpcy5jcnVtYkxpc3QoKS5sZW5ndGg7XHJcblx0XHRsZXQgbGFzdCA9IHRoaXMuY3J1bWJMaXN0KClbbGVuZ3RoIC0gMV07XHJcblx0XHRpZiAobGFzdCkge1xyXG5cdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbbGFzdC51cmxdKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuY2FuY2VsRXZlbnQuZW1pdCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0aGFuZGxlU2F2ZSgpIHtcclxuXHRcdHRoaXMuc2F2ZUV2ZW50LmVtaXQoKTtcclxuXHR9XHJcblxyXG5cdGJhY2soaXRlbTogYW55KSB7XHJcblx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbaXRlbS51cmxdKTtcclxuXHR9XHJcblxyXG5cdHRvZ2dsZShldmVudDogYW55KSB7XHJcblx0XHR0aGlzLm9wLnRvZ2dsZShldmVudCk7XHJcblx0fVxyXG5cclxuXHR0b2dnbGVMaXN0T3AoZXZlbnQ6IGFueSkge1xyXG5cdFx0aWYgKCF0aGlzLmlzTGlzdCgpKSByZXR1cm47XHJcblx0XHR0aGlzLmxpc3RPcCAmJiB0aGlzLmxpc3RPcC50b2dnbGUoZXZlbnQpO1xyXG5cdH1cclxuXHJcblx0bGlzdEFjdChpdGVtOiBhbnkpIHtcclxuXHRcdGlmIChpdGVtLnR5cGUgPT09ICdleHBvcnQnKSB7XHJcblx0XHRcdHRoaXMub25FeHBvcnQgJiYgdGhpcy5vbkV4cG9ydCgpISgpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gJ2ltcG9ydCcpIHtcclxuXHRcdFx0dGhpcy5hY3Rpb24uc2V0QWN0aW9uKHsgdHlwZTogaXRlbS50eXBlIH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoJ29uQ2xpY2snKSAmJiB0eXBlb2YgaXRlbS5vbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdFx0aXRlbS5vbkNsaWNrKGl0ZW0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdFxyXG5cdGFjdEV2ZW50KGl0ZW06IGFueSkge1xyXG5cdFx0dGhpcy5hY3Rpb25FdmVudC5lbWl0KGl0ZW0pO1xyXG5cdH1cclxuXHJcblx0dG9nZ2xlQWN0KGV2ZW50OiBhbnkpIHtcclxuXHRcdGlmICh0aGlzLmlzTGlzdCgpKSByZXR1cm47XHJcblx0XHR0aGlzLmFjdE9wICYmIHRoaXMuYWN0T3AudG9nZ2xlKGV2ZW50KTtcclxuXHR9XHJcblx0c2V0U2F2ZUNsYXNzKCl7XHJcblx0XHRyZXR1cm4gdGhpcy5pc1NhdmUoKSA/ICdkYW5nZXInOidzZWNvbmRhcnknXHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpe1xyXG5cdFx0dGhpcy5hY3Rpb24uc2F2ZVNpZ25hbC5zZXQoZmFsc2UpXHJcblx0fVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiPlxuICA8ZGl2IGNsYXNzPVwibGVmdC1idG4gZmxleCBnYXAtMVwiPlxuICAgIDwhLS0gVE9ETyDmnYPpmZDmlbDmja7mjqXlhaUgLS0+XG4gICAgQGlmKCFuZXdCdG5UZW1wbGF0ZVJlZil7XG4gICAgICBAaWYodGhpcy5hdXRoTGV2ZWwoKSA+IDIgJiYgYWRkVmlzaWJsZSgpKXtcbiAgICAgICAgPHAtYnV0dG9uIChjbGljayk9XCJnb05ldygpXCIgW291dGxpbmVkXT1cIm91dGxpbmVkKClcIj57eydhcHAuY3JlYXRlJyB8IHRyYW5zbGF0ZX19PC9wLWJ1dHRvbj5cbiAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuZXdCdG5UZW1wbGF0ZVJlZlwiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgPC9kaXY+XG4gIEBpZihjcnVtYkxpc3QoKS5sZW5ndGggPiAwKXtcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBsZWFkaW5nLW5vbmVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJoaWRkZW4gbWQ6ZmxleFwiPlxuICAgICAgICBAaWYoY3J1bWJMaXN0KCkubGVuZ3RoIDw9IDIpe1xuICAgICAgICAgIEBmb3IoZmNoaWxkIG9mIGNydW1iTGlzdCgpOyB0cmFjayBmY2hpbGQudXJsKXtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcnVtYi10aXRsZSBjdXJzb3ItcG9pbnRlciB0ZXh0LVsxMnB4XSBtYXgtdy1bMTIwcHhdIG92ZXJmbG93LWhpZGRlbiB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LWVsbGlwc2lzXCIgKGNsaWNrKT1cImJhY2soZmNoaWxkKVwiPlxuICAgICAgICAgICAgICAgQGlmKGZjaGlsZC5pMThuS2V5IT0gJycpe1xuICAgICAgICAgICAgICAgIHt7IGZjaGlsZCEuaTE4bktleSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICB7e2ZjaGlsZC50aXRsZX19XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3J1bWItdGl0bGUgY3Vyc29yLXBvaW50ZXIgc2VsZWN0LWNydW1iXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LVsxN3B4XSBoLVsxN3B4XSBmbGV4IGl0ZW1zLWNlbnRlciBmb250LWJvbGQgdGV4dC1bMTNweF1cIiAoY2xpY2spPVwidG9nZ2xlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAuLi5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxwLXRpZXJlZG1lbnUgI29wIFttb2RlbF09XCJjcnVtYkZyb250XCIgW3BvcHVwXT1cInRydWVcIiBbc3R5bGVdPVwie3Bvc2l0aW9uOidhYnNvbHV0ZSd9XCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpdGVtIGxldC1pdGVtIGxldC1oYXNTdWJtZW51PVwiaGFzU3VibWVudVwiPlxuICAgICAgICAgICAgICAgICAgPGEgcFJpcHBsZSBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHAtdGllcmVkbWVudS1pdGVtLWxpbmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTIgdy1mdWxsXCIgKGNsaWNrKT1cImJhY2soaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZihpdGVtLmkxOG5LZXkhPSAnJyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0hLmkxOG5LZXkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0udGl0bGV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9wLXRpZXJlZG1lbnU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBmb3IoaXRlbSBvZiBjcnVtYkVuZDt0cmFjayBpdGVtLnVybCl7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcnVtYi10aXRsZSBjdXJzb3ItcG9pbnRlciB0ZXh0LVsxMnB4XSBtYXgtdy1bMTIwcHhdIG92ZXJmbG93LWhpZGRlbiB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LWVsbGlwc2lzXCIgKGNsaWNrKT1cImJhY2soaXRlbSlcIj5cbiAgICAgICAgICAgICAgICBAaWYoaXRlbS5pMThuS2V5IT0gJycpe1xuICAgICAgICAgICAgICAgICAge3sgaXRlbSEuaTE4bktleSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAge3tpdGVtLnRpdGxlfX1cbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1pbi13LTAgdGV4dC10ZXh0LWNvbG9yIHRleHQtWzEycHhdIHRpdGxlLWFjdGlvblwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImhpZGRlbiBtZDppbmxpbmUtYmxvY2sgbWF4LXctWzE1MHB4XSBvdmVyZmxvdy1oaWRkZW4gdGV4dC1lbGxpcHNpcyB3aGl0ZXNwYWNlLW5vd3JhcFwiPnt7aXNOZXc/ICdOZXcnOmNydW1iVGl0bGUoKS50aXRsZX19PC9zcGFuPlxuICAgICAgICBAaWYoaXNTaG93Q29nKCkpe1xuICAgICAgICAgIEBpZihpc0xpc3QoKSl7XG4gICAgICAgICAgICA8cC1idXR0b24gdmFyaWFudD1cInRleHRcIiBzZXZlcml0eT1cInNlY29uZGFyeVwiIGljb249XCJwaSAgcGktY29nXCIgYXJpYS1sYWJlbD1cIuaTjeS9nFwiIChvbkNsaWNrKT1cInRvZ2dsZUxpc3RPcCgkZXZlbnQpXCIvPlxuICAgICAgICAgICAgQGlmKGRpc3BsYXlPcEl0ZW1zKCkubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgIDxwLXRpZXJlZG1lbnUgI2xpc3RPcCBbbW9kZWxdPVwiZGlzcGxheU9wSXRlbXMoKVwiIFtwb3B1cF09XCJ0cnVlXCIgW3N0eWxlXT1cIntwb3NpdGlvbjonYWJzb2x1dGUnfVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXRlbSBsZXQtaXRlbSBsZXQtaGFzU3VibWVudT1cImhhc1N1Ym1lbnVcIj5cbiAgICAgICAgICAgICAgICAgIDxhIHBSaXBwbGUgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBwLXRpZXJlZG1lbnUtaXRlbS1saW5rXCIgKGNsaWNrKT1cImxpc3RBY3QoaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIml0ZW0uaWNvblwiIGNsYXNzPVwicC10aWVyZWRtZW51LWl0ZW0taWNvblwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+e3sgaXRlbS5sYWJlbCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpdGVtLnNob3J0Y3V0XCIgY2xhc3M9XCJtbC1hdXRvIGJvcmRlciBib3JkZXItc3VyZmFjZSByb3VuZGVkIGJnLWVtcGhhc2lzIHRleHQtbXV0ZWQtY29sb3IgdGV4dC14cyBwLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uc2hvcnRjdXQgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImhhc1N1Ym1lbnVcIiBjbGFzcz1cInBpIHBpLWFuZ2xlLXJpZ2h0IG1sLWF1dG9cIj48L2k+XG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC10aWVyZWRtZW51PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHAtYnV0dG9uIHZhcmlhbnQ9XCJ0ZXh0XCIgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiBpY29uPVwicGkgIHBpLWNvZ1wiIGFyaWEtbGFiZWw9XCLmk43kvZxcIiAob25DbGljayk9XCJ0b2dnbGVBY3QoJGV2ZW50KVwiLz5cbiAgICAgICAgICAgIEBpZihhY3Rpb25MaXN0KCkubGVuZ3RoID4gMCAmJiBzaG93QWN0KXtcbiAgICAgICAgICAgICAgPHAtdGllcmVkbWVudSAjYWN0T3AgW21vZGVsXT1cImFjdGlvbkxpc3QoKVwiIFtwb3B1cF09XCJ0cnVlXCIgW3N0eWxlXT1cIntwb3NpdGlvbjonYWJzb2x1dGUnfVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXRlbSBsZXQtaXRlbSBsZXQtaGFzU3VibWVudT1cImhhc1N1Ym1lbnVcIj5cbiAgICAgICAgICAgICAgICAgIDxhIHBSaXBwbGUgXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcC10aWVyZWRtZW51LWl0ZW0tbGlua1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCIoaXRlbS5hdXRoIHx8IDApID4gKGF1dGhMZXZlbCgpIHx8IDApIHx8ICEhaXRlbS5idG5IaWRkZW4/LihkYXRhKCkpID8gJ2hpZGRlbicgOiAnYmxvY2snXCIgXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RFdmVudChpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTJcIj57e2l0ZW0uaTE4bktleSA/IChpdGVtLmkxOG5LZXkgfCB0cmFuc2xhdGUpIDogaXRlbS5sYWJlbH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0uc2hvcnRjdXRcIiBjbGFzcz1cIm1sLWF1dG8gYm9yZGVyIGJvcmRlci1zdXJmYWNlIHJvdW5kZWQgYmctZW1waGFzaXMgdGV4dC1tdXRlZC1jb2xvciB0ZXh0LXhzIHAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5zaG9ydGN1dCB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiaGFzU3VibWVudVwiIGNsYXNzPVwicGkgcGktYW5nbGUtcmlnaHQgbWwtYXV0b1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L3AtdGllcmVkbWVudT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgQGlmKHRoaXMuYXV0aExldmVsKCkgPiAyICYmICFpc0xpc3QoKSl7XG4gICAgICAgICAgPHAtYnV0dG9uIFxuICAgICAgICAgICAgdmFyaWFudD1cInRleHRcIiBcbiAgICAgICAgICAgIFtzZXZlcml0eV09XCJzZXRTYXZlQ2xhc3MoKVwiIFxuICAgICAgICAgICAgaWNvbj1cInBpICBwaS1jbG91ZC11cGxvYWRcIiBcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImlzTG9hZGluZygpXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCLmiYvliqjkv53lrZhcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNhdmVCdG5EaXNhYmxlKClcIiBcbiAgICAgICAgICAgIGNsYXNzPVwicC0wXCJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVTYXZlKClcIj5cbiAgICAgICAgICA8L3AtYnV0dG9uPlxuICAgICAgICB9XG4gICAgICAgIDwhLS0gQGlmKGNydW1iTGlzdCgpLmxlbmd0aCA+PSAyKXsgLS0+XG4gICAgICAgICAgPHAtYnV0dG9uIFxuICAgICAgICAgICAgdmFyaWFudD1cInRleHRcIiBcbiAgICAgICAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCIgXG4gICAgICAgICAgICBpY29uPVwicGkgIHBpLXRpbWVzXCIgXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwi5YWz6ZetXCIgXG4gICAgICAgICAgICBjbGFzcz1cInAtMFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xvc2VOZXcoKVwiPlxuICAgICAgICAgIDwvcC1idXR0b24+XG4gICAgICAgIDwhLS0gfSAtLT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9IEBlbHNlIHtcbiAgICA8IS0tIOWIneWni+iKgueCuSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibWluLXctMCBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LVsxNHB4XSB0ZXh0LXRleHQtY29sb3JcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiaGlkZGVuIG1kOmlubGluZS1ibG9jayBtYXgtdy1bMTIwcHhdIG92ZXJmbG93LWhpZGRlbiB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LWVsbGlwc2lzXCI+XG4gICAgICAgIEBpZihjcnVtYlRpdGxlKCkuaTE4bktleSAhPSAnJyl7XG4gICAgICAgICAge3tjcnVtYlRpdGxlKCkuaTE4bktleSB8IHRyYW5zbGF0ZX19XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIHt7Y3J1bWJUaXRsZSgpLnRpdGxlfX1cbiAgICAgICAgfVxuICAgICAgPC9zcGFuPlxuICAgICAgQGlmKGlzU2hvd0NvZygpKXtcbiAgICAgICAgPHAtYnV0dG9uIFxuICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiIFxuICAgICAgICAgIGljb249XCJwaSAgcGktY29nXCIgXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIuaTjeS9nFwiIFxuICAgICAgICAgIChvbkNsaWNrKT1cInRvZ2dsZUxpc3RPcCgkZXZlbnQpXCIvPlxuICAgICAgICAgIEBpZihkaXNwbGF5T3BJdGVtcygpLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgPHAtdGllcmVkbWVudSAjbGlzdE9wIFttb2RlbF09XCJkaXNwbGF5T3BJdGVtcygpXCIgW3BvcHVwXT1cInRydWVcIiBbc3R5bGVdPVwie3Bvc2l0aW9uOidhYnNvbHV0ZSd9XCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXRlbSBsZXQtaXRlbSBsZXQtaGFzU3VibWVudT1cImhhc1N1Ym1lbnVcIj5cbiAgICAgICAgICAgICAgICA8YSBwUmlwcGxlIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcC10aWVyZWRtZW51LWl0ZW0tbGlua1wiIChjbGljayk9XCJsaXN0QWN0KGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiaXRlbS5pY29uXCIgY2xhc3M9XCJwLXRpZXJlZG1lbnUtaXRlbS1pY29uXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+e3sgaXRlbS5sYWJlbCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zaG9ydGN1dFwiIGNsYXNzPVwibWwtYXV0byBib3JkZXIgYm9yZGVyLXN1cmZhY2Ugcm91bmRlZCBiZy1lbXBoYXNpcyB0ZXh0LW11dGVkLWNvbG9yIHRleHQteHMgcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5zaG9ydGN1dCB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJoYXNTdWJtZW51XCIgY2xhc3M9XCJwaSBwaS1hbmdsZS1yaWdodCBtbC1hdXRvXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtdGllcmVkbWVudT5cbiAgICAgICAgICB9XG4gICAgICAgIFxuICAgICAgfVxuICAgICAgQGlmKCFpc0xpc3QoKSl7XG4gICAgICAgIDxwLWJ1dHRvbiBcbiAgICAgICAgICB2YXJpYW50PVwidGV4dFwiIFxuICAgICAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCIgXG4gICAgICAgICAgaWNvbj1cInBpICBwaS1jbG91ZC11cGxvYWRcIiBcbiAgICAgICAgICBhcmlhLWxhYmVsPVwi5omL5Yqo5L+d5a2YXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwic2F2ZUJ0bkRpc2FibGUoKVwiIFxuICAgICAgICAgIGNsYXNzPVwicC0wXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2F2ZSgpXCI+XG4gICAgICAgIDwvcC1idXR0b24+XG4gICAgICAgIDxwLWJ1dHRvbiBcbiAgICAgICAgICB2YXJpYW50PVwidGV4dFwiIFxuICAgICAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCIgXG4gICAgICAgICAgaWNvbj1cInBpICBwaS10aW1lc1wiIFxuICAgICAgICAgIGFyaWEtbGFiZWw9XCLlhbPpl61cIiBcbiAgICAgICAgICBjbGFzcz1cInAtMFwiXG4gICAgICAgICAgKGNsaWNrKT1cImNsb3NlTmV3KClcIj5cbiAgICAgICAgPC9wLWJ1dHRvbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuICBcbjwvZGl2PiJdfQ==
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1bWItYWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvY3J1bWItYWN0aW9uL2NydW1iLWFjdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL2NydW1iLWFjdGlvbi9jcnVtYi1hY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFDTixTQUFTLEVBQ1QsUUFBUSxFQUNSLFlBQVksRUFDWixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUVOLE1BQU0sRUFFTixTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFlLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQVFoRCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsV0FBVztJQWtFcEQ7UUFDQyxLQUFLLEVBQUUsQ0FBQztRQWxFVCx1QkFBa0IsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNoRCxXQUFNLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9CLGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3pCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENB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OUJqQywrdlBBK0tNLDgzTURySkssWUFBWSw2YUFBRSxhQUFhLGlEQUFFLFlBQVksMFNBQUUsVUFBVTs7NEZBSW5ELG9CQUFvQjtrQkFQaEMsU0FBUzsrQkFDQyxrQkFBa0IsY0FDaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDO3dEQXlCL0MsRUFBRTtzQkFBbEIsU0FBUzt1QkFBQyxJQUFJO2dCQUNNLE1BQU07c0JBQTFCLFNBQVM7dUJBQUMsUUFBUTtnQkFDQyxLQUFLO3NCQUF4QixTQUFTO3VCQUFDLE9BQU87Z0JBb0I4QixpQkFBaUI7c0JBQWhFLFlBQVk7dUJBQUMsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRTtnQkF5RDlDLE1BQU07c0JBREwsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbUNvbXBvbmVudCB9IGZyb20gJy4vLi4vYW0vYW0uY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuXHRDb21wb25lbnQsXHJcblx0Y29tcHV0ZWQsXHJcblx0Q29udGVudENoaWxkLFxyXG5cdGVmZmVjdCxcclxuXHRIb3N0TGlzdGVuZXIsXHJcblx0aW5qZWN0LFxyXG5cdGlucHV0LFxyXG5cdE9uSW5pdCxcclxuXHRvdXRwdXQsXHJcblx0T3V0cHV0LFxyXG5cdHNpZ25hbCxcclxuXHRUZW1wbGF0ZVJlZixcclxuXHRWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVzZXJIaXN0b3J5U2VydmljZSwgSGlzdG9yeUl0ZW0sIEFjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9wdWJsaWMtYXBpJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IFBvcG92ZXIgfSBmcm9tICdwcmltZW5nL3BvcG92ZXInO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUaWVyZWRNZW51IH0gZnJvbSAncHJpbWVuZy90aWVyZWRtZW51JztcclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdhcHAtY3J1bWItYWN0aW9uJyxcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdGltcG9ydHM6IFtCdXR0b25Nb2R1bGUsIFRyYW5zbGF0ZVBpcGUsIENvbW1vbk1vZHVsZSwgVGllcmVkTWVudV0sXHJcblx0dGVtcGxhdGVVcmw6ICcuL2NydW1iLWFjdGlvbi5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmw6ICcuL2NydW1iLWFjdGlvbi5jb21wb25lbnQuc2NzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcnVtYkFjdGlvbkNvbXBvbmVudCBleHRlbmRzIEFtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHR1c2VySGlzdG9yeVNlcnZpY2UgPSBpbmplY3QoVXNlckhpc3RvcnlTZXJ2aWNlKTtcclxuXHRhY3Rpb24gPSBpbmplY3QoQWN0aW9uU2VydmljZSk7XHJcblx0Y3J1bWJMaXN0ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG5cdFx0bGV0IGNydW1iID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJIaXN0b3J5U2VydmljZS5oaXN0b3J5TGlzdCgpKSk7XHJcblx0XHQvLyBjb25zb2xlLmxvZygnY3J1bWInLGNydW1iKVxyXG5cdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0Y29uc3QgaXNJMThuID0gd2luZG93LmFwcElzSTE4blxyXG5cdFx0aWYoIWlzSTE4bil7XHJcblx0XHRcdGNydW1iLmZvckVhY2goKGl0ZW06YW55KSA9PiB7XHJcblx0XHRcdFx0aXRlbS5pMThuS2V5ID0gJydcclxuXHRcdFx0fSlcclxuXHRcdH1cclxuXHRcdHJldHVybiBjcnVtYi5tYXAoKHY6IGFueSkgPT4gdik7XHJcblx0fSk7XHJcblx0Y3J1bWJUaXRsZSA9IHNpZ25hbDxhbnk+KHt9KTtcclxuXHQvLyByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuXHRpc05ldyA9IGZhbHNlO1xyXG5cdGlzU2hvd0NvZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHRjcnVtYkZyb250OiBIaXN0b3J5SXRlbVtdID0gW107XHJcblx0Y3J1bWJFbmQ6IEhpc3RvcnlJdGVtW10gPSBbXTtcclxuXHRAVmlld0NoaWxkKCdvcCcpIG9wITogUG9wb3ZlcjtcclxuXHRAVmlld0NoaWxkKCdsaXN0T3AnKSBsaXN0T3AhOiBQb3BvdmVyO1xyXG5cdEBWaWV3Q2hpbGQoJ2FjdE9wJykgYWN0T3AhOiBQb3BvdmVyO1xyXG5cdHNhdmVFdmVudCA9IG91dHB1dCgpO1xyXG5cdC8vIOaWsOW7uuaMiemSrlxyXG5cdGFkZFZpc2libGUgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPigpO1xyXG5cdG5ld1VybCA9IGlucHV0PHN0cmluZz4oJycpO1xyXG5cdGNvbmZpZ05ld1BhdGggPSBpbnB1dDxzdHJpbmc+KCcnKVxyXG5cdG9uRXhwb3J0ID0gaW5wdXQ8RnVuY3Rpb24+KCk7XHJcblx0Ly8g5paw5bu65oyJ6ZKub3V0bGluZVxyXG5cdG91dGxpbmVkID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cdC8vIOaYr+WQpuaYr+WIl+ihqOmhtemdolxyXG5cdGlzTGlzdCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHQvLyDmnYPpmZDnrYnnuqdcclxuXHRhdXRoTGV2ZWwgPSBpbnB1dDxudW1iZXI+KC0xKTtcclxuXHRjYW5jZWxFdmVudCA9IG91dHB1dCgpO1xyXG5cdGFjdGlvbkxpc3QgPSBpbnB1dDxhbnk+KFtdKTtcclxuXHRhY3Rpb25FdmVudCA9IG91dHB1dCgpO1xyXG5cdGRhdGEgPSBpbnB1dDxhbnk+KCk7XHJcblx0c2hvd0FjdCA9IGZhbHNlO1xyXG5cdG1lbnVzID0gaW5wdXQ8YW55W10+KFtdKTtcclxuXHRkaXNwbGF5T3BJdGVtcyA9IGNvbXB1dGVkKCgpID0+IFsuLi50aGlzLm1lbnVzKCksIC4uLnRoaXMubGlzdE9wSXRlbXNdLmZpbHRlcigodikgPT4gdGhpcy5hdXRoTGV2ZWwoKSA+PSB2LmF1dGgpKTtcclxuXHRAQ29udGVudENoaWxkKCduZXdCdG4nLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9KSBuZXdCdG5UZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcclxuXHRsaXN0T3BJdGVtcyA9IFtcclxuXHRcdHtcclxuXHRcdFx0bGFiZWw6ICdhcHAudGFibGVBY0ltcG9ydCcsXHJcblx0XHRcdHR5cGU6ICdpbXBvcnQnLFxyXG5cdFx0XHRpY29uOiAncGkgcGktdXBsb2FkJyxcclxuXHRcdFx0YXV0aDogMixcclxuXHRcdH0sXHJcblx0XHR7XHJcblx0XHRcdGxhYmVsOiAnYXBwLnRhYmxlQWNFeHBvcnQnLFxyXG5cdFx0XHR0eXBlOiAnZXhwb3J0JyxcclxuXHRcdFx0aWNvbjogJ3BpIHBpLWRvd25sb2FkJyxcclxuXHRcdFx0YXV0aDogMyxcclxuXHRcdH0sXHJcblx0XTtcclxuXHRpc1NhdmUgPSBjb21wdXRlZCgoKSA9PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5hY3Rpb24uc2F2ZVNpZ25hbCgpXHJcblx0fSlcclxuXHRsb2FkaW5nID0gY29tcHV0ZWQoKCkgPT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuYWN0aW9uLmxvYWRpbmcoKVxyXG5cdH0pXHJcblx0c2F2ZUJ0bkRpc2FibGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSlcclxuXHRjdXJyZW50UGFnZVVybCA9ICcnXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0ZWZmZWN0KFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0bGV0IGxhc3QgPSB0aGlzLmNydW1iTGlzdCgpLnBvcCgpO1xyXG5cdFx0XHRcdGlmIChsYXN0Py51cmwpIHtcclxuXHRcdFx0XHRcdHRoaXMuaXNOZXcgPSBsYXN0LnVybD8uaW5kZXhPZignbmV3JykgPiAtMSA/IHRydWUgOiBmYWxzZTtcclxuXHRcdFx0XHRcdHRoaXMuY3VycmVudFBhZ2VVcmwgPSBsYXN0LnVybFxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAobGFzdD8udGl0bGUpIHtcclxuXHRcdFx0XHRcdHRoaXMuY3J1bWJUaXRsZS5zZXQobGFzdCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRjb25zdCBsZW5ndGggPSB0aGlzLmNydW1iTGlzdCgpLmxlbmd0aDtcclxuXHRcdFx0XHRpZiAobGVuZ3RoID4gMikge1xyXG5cdFx0XHRcdFx0dGhpcy5jcnVtYkZyb250ID0gdGhpcy5jcnVtYkxpc3QoKVxyXG5cdFx0XHRcdFx0XHQubWFwKCh2OiBhbnkpID0+IHtcclxuXHRcdFx0XHRcdFx0XHR2LmxhYmVsID0gdi50aXRsZTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdjtcclxuXHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0LmZpbHRlcigodjogSGlzdG9yeUl0ZW0sIGluZGV4OiBudW1iZXIpID0+IGluZGV4IDw9IGxlbmd0aCAtIDEgLSAyKTtcclxuXHRcdFx0XHRcdHRoaXMuY3J1bWJFbmQgPSBbdGhpcy5jcnVtYkxpc3QoKVtsZW5ndGggLSAyXSwgdGhpcy5jcnVtYkxpc3QoKVtsZW5ndGggLSAxXV07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXHJcblx0XHQpO1xyXG5cdFx0Ly8gZWZmZWN0KCgpID0+IHtcclxuXHRcdC8vIFx0dGhpcy5saXN0T3BJdGVtcyA9IHRoaXMubGlzdE9wSXRlbXMuZmlsdGVyKCh2KSA9PiB0aGlzLmF1dGhMZXZlbCgpID49IHYubGV2ZWwpO1xyXG5cdFx0Ly8gfSk7XHJcblx0XHRlZmZlY3QoKCkgPT4ge1xyXG5cdFx0XHRjb25zb2xlLmxvZygnYWRkVmlzaWJsZScsIHRoaXMuYWRkVmlzaWJsZSgpKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuXHRyZXNpemUoZXZlbnQ6IGFueSkge1xyXG5cdFx0bGV0IHdpbmRvd1dpZHRoID0gKGV2ZW50LnRhcmdldCBhcyBXaW5kb3cpLmlubmVyV2lkdGg7XHJcblx0XHRpZiAod2luZG93V2lkdGggPCA3NjgpIHtcclxuXHRcdFx0dGhpcy5zaG93QWN0ID0gdHJ1ZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuc2hvd0FjdCA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2hvd0FjdCA9IHdpbmRvdy5pbm5lcldpZHRoIDwgNzY4ID8gdHJ1ZSA6IGZhbHNlO1xyXG5cdH1cclxuXHJcblx0Z29OZXcoKSB7XHJcblx0XHRpZighdGhpcy5jb25maWdOZXdQYXRoKCkpe1xyXG5cdFx0XHRpZiAodGhpcy5uZXdVcmwoKSA9PSAnJykgcmV0dXJuO1xyXG5cdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5uZXdVcmwoKV0pLnRoZW4oKHJlcykgPT4ge1xyXG5cdFx0XHRcdHRoaXMudXNlckhpc3RvcnlTZXJ2aWNlLnNldExhc3RUaXRsZSgnTmV3Jyk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuY29uZmlnTmV3UGF0aCgpXSkudGhlbigocmVzKSA9PiB7XHJcblx0XHRcdFx0dGhpcy51c2VySGlzdG9yeVNlcnZpY2Uuc2V0TGFzdFRpdGxlKCdOZXcnKTtcclxuXHRcdFx0XHR0aGlzLnVzZXJIaXN0b3J5U2VydmljZS5maWx0ZXJVcmwodGhpcy5jdXJyZW50UGFnZVVybClcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjbG9zZU5ldygpIHtcclxuXHRcdGxldCBsZW5ndGggPSB0aGlzLmNydW1iTGlzdCgpLmxlbmd0aDtcclxuXHRcdGxldCBsYXN0ID0gdGhpcy5jcnVtYkxpc3QoKVtsZW5ndGggLSAxXTtcclxuXHRcdGlmIChsYXN0KSB7XHJcblx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtsYXN0LnVybF0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5jYW5jZWxFdmVudC5lbWl0KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRoYW5kbGVTYXZlKCkge1xyXG5cdFx0dGhpcy5zYXZlRXZlbnQuZW1pdCgpO1xyXG5cdH1cclxuXHJcblx0YmFjayhpdGVtOiBhbnkpIHtcclxuXHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtpdGVtLnVybF0pO1xyXG5cdH1cclxuXHJcblx0dG9nZ2xlKGV2ZW50OiBhbnkpIHtcclxuXHRcdHRoaXMub3AudG9nZ2xlKGV2ZW50KTtcclxuXHR9XHJcblxyXG5cdHRvZ2dsZUxpc3RPcChldmVudDogYW55KSB7XHJcblx0XHRpZiAoIXRoaXMuaXNMaXN0KCkpIHJldHVybjtcclxuXHRcdHRoaXMubGlzdE9wICYmIHRoaXMubGlzdE9wLnRvZ2dsZShldmVudCk7XHJcblx0fVxyXG5cclxuXHRsaXN0QWN0KGl0ZW06IGFueSkge1xyXG5cdFx0aWYgKGl0ZW0udHlwZSA9PT0gJ2V4cG9ydCcpIHtcclxuXHRcdFx0dGhpcy5vbkV4cG9ydCAmJiB0aGlzLm9uRXhwb3J0KCkhKCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAnaW1wb3J0Jykge1xyXG5cdFx0XHR0aGlzLmFjdGlvbi5zZXRBY3Rpb24oeyB0eXBlOiBpdGVtLnR5cGUgfSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eSgnb25DbGljaycpICYmIHR5cGVvZiBpdGVtLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcclxuXHRcdFx0XHRpdGVtLm9uQ2xpY2soaXRlbSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0XHJcblx0YWN0RXZlbnQoaXRlbTogYW55KSB7XHJcblx0XHR0aGlzLmFjdGlvbkV2ZW50LmVtaXQoaXRlbSk7XHJcblx0fVxyXG5cclxuXHR0b2dnbGVBY3QoZXZlbnQ6IGFueSkge1xyXG5cdFx0aWYgKHRoaXMuaXNMaXN0KCkpIHJldHVybjtcclxuXHRcdHRoaXMuYWN0T3AgJiYgdGhpcy5hY3RPcC50b2dnbGUoZXZlbnQpO1xyXG5cdH1cclxuXHRzZXRTYXZlQ2xhc3MoKXtcclxuXHRcdHJldHVybiB0aGlzLmlzU2F2ZSgpID8gJ2Rhbmdlcic6J3NlY29uZGFyeSdcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCl7XHJcblx0XHR0aGlzLmFjdGlvbi5zYXZlU2lnbmFsLnNldChmYWxzZSlcclxuXHR9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCI+XG4gIDxkaXYgY2xhc3M9XCJsZWZ0LWJ0biBmbGV4IGdhcC0xXCI+XG4gICAgPCEtLSBUT0RPIOadg+mZkOaVsOaNruaOpeWFpSAtLT5cbiAgICBAaWYoIW5ld0J0blRlbXBsYXRlUmVmKXtcbiAgICAgIEBpZih0aGlzLmF1dGhMZXZlbCgpID4gMiAmJiBhZGRWaXNpYmxlKCkpe1xuICAgICAgICA8cC1idXR0b24gKGNsaWNrKT1cImdvTmV3KClcIiBbb3V0bGluZWRdPVwib3V0bGluZWQoKVwiPnt7J2FwcC5jcmVhdGUnIHwgdHJhbnNsYXRlfX08L3AtYnV0dG9uPlxuICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5ld0J0blRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICA8L2Rpdj5cbiAgQGlmKGNydW1iTGlzdCgpLmxlbmd0aCA+IDApe1xuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGxlYWRpbmctbm9uZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImhpZGRlbiBtZDpmbGV4XCI+XG4gICAgICAgIEBpZihjcnVtYkxpc3QoKS5sZW5ndGggPD0gMil7XG4gICAgICAgICAgQGZvcihmY2hpbGQgb2YgY3J1bWJMaXN0KCk7IHRyYWNrIGZjaGlsZC51cmwpe1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNydW1iLXRpdGxlIGN1cnNvci1wb2ludGVyIHRleHQtWzEycHhdIG1heC13LVsxMjBweF0gb3ZlcmZsb3ctaGlkZGVuIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtZWxsaXBzaXNcIiAoY2xpY2spPVwiYmFjayhmY2hpbGQpXCI+XG4gICAgICAgICAgICAgICBAaWYoZmNoaWxkLmkxOG5LZXkhPSAnJyl7XG4gICAgICAgICAgICAgICAge3sgZmNoaWxkIS5pMThuS2V5IHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIHt7ZmNoaWxkLnRpdGxlfX1cbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcnVtYi10aXRsZSBjdXJzb3ItcG9pbnRlciBzZWxlY3QtY3J1bWJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctWzE3cHhdIGgtWzE3cHhdIGZsZXggaXRlbXMtY2VudGVyIGZvbnQtYm9sZCB0ZXh0LVsxM3B4XVwiIChjbGljayk9XCJ0b2dnbGUoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIC4uLlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHAtdGllcmVkbWVudSAjb3AgW21vZGVsXT1cImNydW1iRnJvbnRcIiBbcG9wdXBdPVwidHJ1ZVwiIFtzdHlsZV09XCJ7cG9zaXRpb246J2Fic29sdXRlJ31cIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2l0ZW0gbGV0LWl0ZW0gbGV0LWhhc1N1Ym1lbnU9XCJoYXNTdWJtZW51XCI+XG4gICAgICAgICAgICAgICAgICA8YSBwUmlwcGxlIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcC10aWVyZWRtZW51LWl0ZW0tbGlua1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMiB3LWZ1bGxcIiAoY2xpY2spPVwiYmFjayhpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGl0ZW0uaTE4bktleSE9ICcnKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbSEuaTE4bktleSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS50aXRsZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L3AtdGllcmVkbWVudT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGZvcihpdGVtIG9mIGNydW1iRW5kO3RyYWNrIGl0ZW0udXJsKXtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNydW1iLXRpdGxlIGN1cnNvci1wb2ludGVyIHRleHQtWzEycHhdIG1heC13LVsxMjBweF0gb3ZlcmZsb3ctaGlkZGVuIHdoaXRlc3BhY2Utbm93cmFwIHRleHQtZWxsaXBzaXNcIiAoY2xpY2spPVwiYmFjayhpdGVtKVwiPlxuICAgICAgICAgICAgICAgIEBpZihpdGVtLmkxOG5LZXkhPSAnJyl7XG4gICAgICAgICAgICAgICAgICB7eyBpdGVtIS5pMThuS2V5IHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICB7e2l0ZW0udGl0bGV9fVxuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibWluLXctMCB0ZXh0LXRleHQtY29sb3IgdGV4dC1bMTJweF0gdGl0bGUtYWN0aW9uXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaGlkZGVuIG1kOmlubGluZS1ibG9jayBtYXgtdy1bMTUwcHhdIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwXCI+e3tpc05ldz8gJ05ldyc6Y3J1bWJUaXRsZSgpLnRpdGxlfX08L3NwYW4+XG4gICAgICAgIEBpZihpc1Nob3dDb2coKSl7XG4gICAgICAgICAgQGlmKGlzTGlzdCgpKXtcbiAgICAgICAgICAgIDxwLWJ1dHRvbiB2YXJpYW50PVwidGV4dFwiIHNldmVyaXR5PVwic2Vjb25kYXJ5XCIgaWNvbj1cInBpICBwaS1jb2dcIiBhcmlhLWxhYmVsPVwi5pON5L2cXCIgKG9uQ2xpY2spPVwidG9nZ2xlTGlzdE9wKCRldmVudClcIi8+XG4gICAgICAgICAgICBAaWYoZGlzcGxheU9wSXRlbXMoKS5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgPHAtdGllcmVkbWVudSAjbGlzdE9wIFttb2RlbF09XCJkaXNwbGF5T3BJdGVtcygpXCIgW3BvcHVwXT1cInRydWVcIiBbc3R5bGVdPVwie3Bvc2l0aW9uOidhYnNvbHV0ZSd9XCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpdGVtIGxldC1pdGVtIGxldC1oYXNTdWJtZW51PVwiaGFzU3VibWVudVwiPlxuICAgICAgICAgICAgICAgICAgPGEgcFJpcHBsZSBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHAtdGllcmVkbWVudS1pdGVtLWxpbmtcIiAoY2xpY2spPVwibGlzdEFjdChpdGVtKVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiaXRlbS5pY29uXCIgY2xhc3M9XCJwLXRpZXJlZG1lbnUtaXRlbS1pY29uXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTJcIj57eyBpdGVtLmxhYmVsIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0uc2hvcnRjdXRcIiBjbGFzcz1cIm1sLWF1dG8gYm9yZGVyIGJvcmRlci1zdXJmYWNlIHJvdW5kZWQgYmctZW1waGFzaXMgdGV4dC1tdXRlZC1jb2xvciB0ZXh0LXhzIHAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5zaG9ydGN1dCB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiaGFzU3VibWVudVwiIGNsYXNzPVwicGkgcGktYW5nbGUtcmlnaHQgbWwtYXV0b1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9wLXRpZXJlZG1lbnU+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8cC1idXR0b24gdmFyaWFudD1cInRleHRcIiBzZXZlcml0eT1cInNlY29uZGFyeVwiIGljb249XCJwaSAgcGktY29nXCIgYXJpYS1sYWJlbD1cIuaTjeS9nFwiIChvbkNsaWNrKT1cInRvZ2dsZUFjdCgkZXZlbnQpXCIvPlxuICAgICAgICAgICAgQGlmKGFjdGlvbkxpc3QoKS5sZW5ndGggPiAwICYmIHNob3dBY3Qpe1xuICAgICAgICAgICAgICA8cC10aWVyZWRtZW51ICNhY3RPcCBbbW9kZWxdPVwiYWN0aW9uTGlzdCgpXCIgW3BvcHVwXT1cInRydWVcIiBbc3R5bGVdPVwie3Bvc2l0aW9uOidhYnNvbHV0ZSd9XCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpdGVtIGxldC1pdGVtIGxldC1oYXNTdWJtZW51PVwiaGFzU3VibWVudVwiPlxuICAgICAgICAgICAgICAgICAgPGEgcFJpcHBsZSBcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBwLXRpZXJlZG1lbnUtaXRlbS1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIihpdGVtLmF1dGggfHwgMCkgPiAoYXV0aExldmVsKCkgfHwgMCkgfHwgISFpdGVtLmJ0bkhpZGRlbj8uKGRhdGEoKSkgPyAnaGlkZGVuJyA6ICdibG9jaydcIiBcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdEV2ZW50KGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMlwiPnt7aXRlbS5pMThuS2V5ID8gKGl0ZW0uaTE4bktleSB8IHRyYW5zbGF0ZSkgOiBpdGVtLmxhYmVsfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zaG9ydGN1dFwiIGNsYXNzPVwibWwtYXV0byBib3JkZXIgYm9yZGVyLXN1cmZhY2Ugcm91bmRlZCBiZy1lbXBoYXNpcyB0ZXh0LW11dGVkLWNvbG9yIHRleHQteHMgcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnNob3J0Y3V0IH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJoYXNTdWJtZW51XCIgY2xhc3M9XCJwaSBwaS1hbmdsZS1yaWdodCBtbC1hdXRvXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC10aWVyZWRtZW51PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBAaWYodGhpcy5hdXRoTGV2ZWwoKSA+IDIgJiYgIWlzTGlzdCgpKXtcbiAgICAgICAgICA8cC1idXR0b24gXG4gICAgICAgICAgICB2YXJpYW50PVwidGV4dFwiIFxuICAgICAgICAgICAgW3NldmVyaXR5XT1cInNldFNhdmVDbGFzcygpXCIgXG4gICAgICAgICAgICBpY29uPVwicGkgIHBpLWNsb3VkLXVwbG9hZFwiIFxuICAgICAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZygpXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCLmiYvliqjkv53lrZhcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNhdmVCdG5EaXNhYmxlKClcIiBcbiAgICAgICAgICAgIGNsYXNzPVwicC0wXCJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVTYXZlKClcIj5cbiAgICAgICAgICA8L3AtYnV0dG9uPlxuICAgICAgICB9XG4gICAgICAgIDwhLS0gQGlmKGNydW1iTGlzdCgpLmxlbmd0aCA+PSAyKXsgLS0+XG4gICAgICAgICAgPHAtYnV0dG9uIFxuICAgICAgICAgICAgdmFyaWFudD1cInRleHRcIiBcbiAgICAgICAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCIgXG4gICAgICAgICAgICBpY29uPVwicGkgIHBpLXRpbWVzXCIgXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwi5YWz6ZetXCIgXG4gICAgICAgICAgICBjbGFzcz1cInAtMFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xvc2VOZXcoKVwiPlxuICAgICAgICAgIDwvcC1idXR0b24+XG4gICAgICAgIDwhLS0gfSAtLT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9IEBlbHNlIHtcbiAgICA8IS0tIOWIneWni+iKgueCuSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibWluLXctMCBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LVsxNHB4XSB0ZXh0LXRleHQtY29sb3JcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiaGlkZGVuIG1kOmlubGluZS1ibG9jayBtYXgtdy1bMTIwcHhdIG92ZXJmbG93LWhpZGRlbiB3aGl0ZXNwYWNlLW5vd3JhcCB0ZXh0LWVsbGlwc2lzXCI+XG4gICAgICAgIEBpZihjcnVtYlRpdGxlKCkuaTE4bktleSAhPSAnJyl7XG4gICAgICAgICAge3tjcnVtYlRpdGxlKCkuaTE4bktleSB8IHRyYW5zbGF0ZX19XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIHt7Y3J1bWJUaXRsZSgpLnRpdGxlfX1cbiAgICAgICAgfVxuICAgICAgPC9zcGFuPlxuICAgICAgQGlmKGlzU2hvd0NvZygpKXtcbiAgICAgICAgPHAtYnV0dG9uIFxuICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICBzZXZlcml0eT1cInNlY29uZGFyeVwiIFxuICAgICAgICAgIGljb249XCJwaSAgcGktY29nXCIgXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIuaTjeS9nFwiIFxuICAgICAgICAgIChvbkNsaWNrKT1cInRvZ2dsZUxpc3RPcCgkZXZlbnQpXCIvPlxuICAgICAgICAgIEBpZihkaXNwbGF5T3BJdGVtcygpLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgPHAtdGllcmVkbWVudSAjbGlzdE9wIFttb2RlbF09XCJkaXNwbGF5T3BJdGVtcygpXCIgW3BvcHVwXT1cInRydWVcIiBbc3R5bGVdPVwie3Bvc2l0aW9uOidhYnNvbHV0ZSd9XCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXRlbSBsZXQtaXRlbSBsZXQtaGFzU3VibWVudT1cImhhc1N1Ym1lbnVcIj5cbiAgICAgICAgICAgICAgICA8YSBwUmlwcGxlIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcC10aWVyZWRtZW51LWl0ZW0tbGlua1wiIChjbGljayk9XCJsaXN0QWN0KGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiaXRlbS5pY29uXCIgY2xhc3M9XCJwLXRpZXJlZG1lbnUtaXRlbS1pY29uXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+e3sgaXRlbS5sYWJlbCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5zaG9ydGN1dFwiIGNsYXNzPVwibWwtYXV0byBib3JkZXIgYm9yZGVyLXN1cmZhY2Ugcm91bmRlZCBiZy1lbXBoYXNpcyB0ZXh0LW11dGVkLWNvbG9yIHRleHQteHMgcC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5zaG9ydGN1dCB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJoYXNTdWJtZW51XCIgY2xhc3M9XCJwaSBwaS1hbmdsZS1yaWdodCBtbC1hdXRvXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtdGllcmVkbWVudT5cbiAgICAgICAgICB9XG4gICAgICAgIFxuICAgICAgfVxuICAgICAgQGlmKCFpc0xpc3QoKSl7XG4gICAgICAgIDxwLWJ1dHRvbiBcbiAgICAgICAgICB2YXJpYW50PVwidGV4dFwiIFxuICAgICAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCIgXG4gICAgICAgICAgaWNvbj1cInBpICBwaS1jbG91ZC11cGxvYWRcIiBcbiAgICAgICAgICBhcmlhLWxhYmVsPVwi5omL5Yqo5L+d5a2YXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwic2F2ZUJ0bkRpc2FibGUoKVwiIFxuICAgICAgICAgIGNsYXNzPVwicC0wXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2F2ZSgpXCI+XG4gICAgICAgIDwvcC1idXR0b24+XG4gICAgICAgIDxwLWJ1dHRvbiBcbiAgICAgICAgICB2YXJpYW50PVwidGV4dFwiIFxuICAgICAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCIgXG4gICAgICAgICAgaWNvbj1cInBpICBwaS10aW1lc1wiIFxuICAgICAgICAgIGFyaWEtbGFiZWw9XCLlhbPpl61cIiBcbiAgICAgICAgICBjbGFzcz1cInAtMFwiXG4gICAgICAgICAgKGNsaWNrKT1cImNsb3NlTmV3KClcIj5cbiAgICAgICAgPC9wLWJ1dHRvbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuICBcbjwvZGl2PiJdfQ==
@@ -270,6 +270,15 @@ export class FormComponent {
270
270
  }
271
271
  });
272
272
  }
273
+ /**
274
+ * 触发字段禁用,针对表单字段
275
+ * @param keys 字段key列表
276
+ */
277
+ triggerDisabledEffect(keys) {
278
+ keys?.forEach((key) => {
279
+ this.setFieldDisabled(key);
280
+ });
281
+ }
273
282
  /**
274
283
  * 动态设置字段禁用,禁用前清除字段dirty标记
275
284
  * @param key 字段key
@@ -301,4 +310,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
301
310
  type: HostListener,
302
311
  args: ['window:resize', ['$event']]
303
312
  }] } });
304
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL2Zvcm0vZm9ybS9mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvZm9ybS9mb3JtL2Zvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFDUixZQUFZLEVBSVosTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBQ1QsTUFBTSxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFhLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQWMsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7O0FBMEI3RCxNQUFNLE9BQU8s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Q2hDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxLQUFLLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ25DLENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7K0dBblVXLGFBQWE7bUdBQWIsYUFBYSxxZkFKZCxDQUFDLFFBQVEsQ0FBQyw4REFLUCxrQkFBa0IsZ0RDcERqQyx3SUFNQSx5RER3Q1csWUFBWSw4QkFBRSxtQkFBbUIsK0JBQUUsa0JBQWtCOzs0RkFLbkQsYUFBYTtrQkFSekIsU0FBUzsrQkFDQyxhQUFhLGNBQ1gsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixDQUFDLGFBQ3JELENBQUMsUUFBUSxDQUFDOzZHQUthLGVBQWU7c0JBQWhELFlBQVk7dUJBQUMsa0JBQWtCO2dCQTRCaEMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0Q29tcG9uZW50LFxyXG5cdGVmZmVjdCxcclxuXHRpbnB1dCxcclxuXHRjb21wdXRlZCxcclxuXHRWaWV3Q2hpbGRyZW4sXHJcblx0UXVlcnlMaXN0LFxyXG5cdEVsZW1lbnRSZWYsXHJcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXHJcblx0aW5qZWN0LFxyXG5cdEhvc3RMaXN0ZW5lcixcclxuXHR1bnRyYWNrZWQsXHJcblx0c2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1TdWJtaXR0ZWRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRmllbGRDb250cm9sIH0gZnJvbSAnLi4vZm9ybS1maWVsZC9maWVsZC1jb250cm9sJztcclxuaW1wb3J0IHsgRm9ybUZpZWxkLCBGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLWZpZWxkL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9pMThuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBmaWVsZFV0aWxzIH0gZnJvbSAnLi4vZm9ybS1maWVsZC9maWVsZC11dGlscyc7XHJcbmltcG9ydCB7IFVwc2VydCB9IGZyb20gJy4uLy4uL2FtL2FtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IGdlbmVyYXRlVW5pcXVlSWQgfSBmcm9tICcuLi8uLi9zaGFyZS91dGlscyc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvYWN0aW9uLnNlcnZpY2UnO1xyXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1PcHRpb25zIHtcclxuXHRmaWVsZHM/OiBGb3JtRmllbGRbXTtcclxuXHRmb3JtPzogRm9ybUdyb3VwO1xyXG5cdG1haW5GaWVsZD86IHN0cmluZztcclxuXHRsYWJlbFdpZHRoPzogc3RyaW5nO1xyXG5cdGludGVyYWN0aXZlTGFiZWw/OiBib29sZWFuO1xyXG5cdGV4dHJhPzogYW55O1xyXG5cdG1vZGVsTmFtZT86IHN0cmluZztcclxuXHR0eXBlPzogc3RyaW5nO1xyXG5cdGZrPzogc3RyaW5nO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZXJuYWxEYXRhIHtcclxuXHRrZXk/OiBzdHJpbmc7XHJcblx0dmFsdWU/OiBhbnk7XHJcblx0bGFiZWw/OiBzdHJpbmc7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnY3VzdG9tLWZvcm0nLFxyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0aW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybUZpZWxkQ29tcG9uZW50XSxcclxuXHRwcm92aWRlcnM6IFtEYXRlUGlwZV0sXHJcblx0dGVtcGxhdGVVcmw6ICcuL2Zvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsOiAnLi9mb3JtLmNvbXBvbmVudC5zY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1Db21wb25lbnQge1xyXG5cdEBWaWV3Q2hpbGRyZW4oRm9ybUZpZWxkQ29tcG9uZW50KSBmaWVsZENvbXBvbmVudHM/OiBRdWVyeUxpc3Q8Rm9ybUZpZWxkQ29tcG9uZW50PjtcclxuXHRyb3V0ZXI6IFJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG5cdGlzTmV3OiBib29sZWFuID0gZmFsc2U7XHJcblx0b3B0aW9ucyA9IGlucHV0PEZvcm1PcHRpb25zPih7fSk7XHJcblx0ZmllbGRzID0gY29tcHV0ZWQoKCkgPT4ge1xyXG5cdFx0dW50cmFja2VkKCgpID0+IHtcclxuXHRcdFx0dGhpcy5pbml0Rm9ybSgpO1xyXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHR0aGlzLnJlQ2FsY0xhYmVsU2l6ZSgpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHRoaXMub3B0aW9ucygpLmZpZWxkcztcclxuXHR9KTtcclxuXHJcblx0aTE4blNlcnZpY2UgPSBpbmplY3QoSTE4blNlcnZpY2UpO1xyXG5cdG1vZGVsID0gaW5wdXQ8YW55PigpO1xyXG5cdHVwc2VydCA9IGlucHV0PFVwc2VydD4oKTtcclxuXHRyYXdNb2RlbDogYW55ID0ge307XHJcblx0Y2hhbmdlZE1vZGVsOiBhbnkgPSB7fTtcclxuXHRmaWVsZExpc3QhOiBGb3JtRmllbGRbXTtcclxuXHRob29rT2JzZXJ2ZXJzOiBGdW5jdGlvbltdID0gW107XHJcblx0bGFiZWxNaW5XaWR0aCA9IHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcblx0aXNNYWluOiBib29sZWFuID0gdHJ1ZTtcclxuXHRzdWJzZXJ0OiBhbnk7XHJcblx0ZXh0cmE6IGFueSA9IHt9O1xyXG5cclxuXHRhY3Rpb25zID0gaW5qZWN0KEFjdGlvblNlcnZpY2UpO1xyXG5cdEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxyXG5cdG9uUmVzaXplKCkge1xyXG5cdFx0dGhpcy5yZUNhbGNMYWJlbFNpemUoKTtcclxuXHR9XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG5cdFx0cHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcblx0KSB7XHJcblx0XHR0aGlzLnJvdXRlci51cmwuc3BsaXQoJy8nKS5wb3AoKSA9PSAnbmV3JyAmJiAodGhpcy5pc05ldyA9IHRydWUpO1xyXG5cdFx0ZWZmZWN0KFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLm1vZGVsKCkpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHRoaXMuaXNOZXcpIHtcclxuXHRcdFx0XHRcdHRoaXMuZmllbGRMaXN0LmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblx0XHRcdFx0XHRcdGlmICghZmllbGQuZGVmYXVsdCkgcmV0dXJuO1xyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5tb2RlbCgpW2ZpZWxkLmtleSFdICE9PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHRcdFx0XHRcdFx0dW50cmFja2VkKCgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmhhbmRsZVZhbHVlQ2hhbmdlKGZpZWxkLmRlZmF1bHQsIGZpZWxkKTtcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5yYXdNb2RlbCA9IGZpZWxkVXRpbHMucHJlbG9hZExvZyh7IC4uLnRoaXMubW9kZWwoKSB9LCB0aGlzLmZpZWxkTGlzdCwgdGhpcy5kYXRlUGlwZSk7XHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VkTW9kZWwgPSB7fTtcclxuXHRcdFx0XHR1bnRyYWNrZWQoKCkgPT4gdGhpcy50cmlnZ2VySG9vaygpKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxyXG5cdFx0KTtcclxuXHRcdGVmZmVjdChcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdGxldCBtb2RlbE5hbWUgPSB0aGlzLm9wdGlvbnMoKS5tb2RlbE5hbWUgfHwgJyc7XHJcblx0XHRcdFx0aWYgKG1vZGVsTmFtZSAhPSAnJykge1xyXG5cdFx0XHRcdFx0dGhpcy5pc01haW4gPSAhdGhpcy51cHNlcnQoKT8uc3Vic2VydD8uZmluZCgodjogYW55KSA9PiB2LnN1Yk1vZGVsTmFtZSA9PT0gbW9kZWxOYW1lKTtcclxuXHRcdFx0XHRcdGlmICghdGhpcy5pc01haW4pIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zdWJzZXJ0ID0ge1xyXG5cdFx0XHRcdFx0XHRcdHN1Yk1vZGVsTmFtZTogbW9kZWxOYW1lLFxyXG5cdFx0XHRcdFx0XHRcdGZrOiB0aGlzLm9wdGlvbnMoKS5mayxcclxuXHRcdFx0XHRcdFx0XHRzdWJEYXRhOiBbXSxcclxuXHRcdFx0XHRcdFx0XHRtYXB0bXA6IG5ldyBNYXAoKSxcclxuXHRcdFx0XHRcdFx0XHRsb2d0bXA6IG5ldyBNYXAoKSxcclxuXHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0dGhpcy51cHNlcnQoKT8uc3Vic2VydD8ucHVzaCh0aGlzLnN1YnNlcnQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHR0aGlzLnJlQ2FsY0xhYmVsU2l6ZSgpO1xyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmkxOG5TZXJ2aWNlLmNoYW5nZS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG5cdFx0XHR0aGlzLnJlQ2FsY0xhYmVsU2l6ZSgpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpIHtcclxuXHRcdHRoaXMuaG9va09ic2VydmVycy5mb3JFYWNoKCh1bnN1YnNjcmliZSkgPT4gdW5zdWJzY3JpYmUoKSk7XHJcblx0fVxyXG5cclxuXHRpbml0Rm9ybSgpIHtcclxuXHRcdGlmICghdGhpcy5vcHRpb25zKCkuZXh0cmEpIHtcclxuXHRcdFx0dGhpcy5vcHRpb25zKCkuZXh0cmEgPSB7fTtcclxuXHRcdH1cclxuXHRcdGlmICghdGhpcy5vcHRpb25zKCkuZm9ybSkge1xyXG5cdFx0XHR0aGlzLm9wdGlvbnMoKS5mb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcblx0XHR9XHJcblx0XHR0aGlzLmZpZWxkTGlzdCA9IFtdO1xyXG5cdFx0Ly9AdHMtaWdub3JlXHJcblx0XHRjb25zdCBpc0kxOG4gPSB3aW5kb3cuYXBwSXNJMThuO1xyXG5cdFx0dGhpcy5wYXJzZUZpZWxkcyh0aGlzLm9wdGlvbnMoKS5maWVsZHMgfHwgW10pO1xyXG5cdFx0dGhpcy5maWVsZExpc3QuZm9yRWFjaCgoZmllbGQsIGluZGV4KSA9PiB7XHJcblx0XHRcdGZpZWxkVXRpbHMuZmllbGRIYW5kbGVyKGZpZWxkKTtcclxuXHRcdFx0ZmllbGQudXVpZCA9IGAke2dlbmVyYXRlVW5pcXVlSWQoKX0ke2luZGV4fWA7XHJcblx0XHRcdGZpZWxkLmxhYmVsTWluV2lkdGggPSB0aGlzLmxhYmVsTWluV2lkdGg7XHJcblx0XHRcdGZpZWxkLmludGVyYWN0aXZlTGFiZWwgPSB0aGlzLm9wdGlvbnMoKS5pbnRlcmFjdGl2ZUxhYmVsID8/IHRydWU7XHJcblx0XHRcdGlmIChpc0kxOG4gJiYgKCFmaWVsZFV0aWxzLnByb3BzKGZpZWxkKS5pMThuS2V5IHx8IGZpZWxkVXRpbHMucHJvcHMoZmllbGQpLmkxOG5LZXkgPT0gJycpKSB7XHJcblx0XHRcdFx0ZmllbGRVdGlscy5wcm9wcyhmaWVsZCkuaTE4bktleSA9IGB0YWJsZXMuJHt0aGlzLm9wdGlvbnMoKS5tb2RlbE5hbWV9LiR7ZmllbGQua2V5fWA7XHJcblx0XHRcdH1cclxuXHRcdFx0ZmllbGQuZm9ybSA9IHRoaXM7XHJcblx0XHRcdGlmIChpc09ic2VydmFibGUoZmllbGQuaG9vaykpIHtcclxuXHRcdFx0XHR0aGlzLnVuaXF1ZUhvb2soZmllbGQsIGZpZWxkLmhvb2spO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuaGFuZGxlRmllbGRDb250cm9sKGZpZWxkKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0Z2V0RmllbGQoa2V5OiBzdHJpbmcpIHtcclxuXHRcdHJldHVybiB0aGlzLmZpZWxkTGlzdC5maW5kKChmaWVsZCkgPT4gZmllbGQua2V5ID09PSBrZXkpO1xyXG5cdH1cclxuXHJcblx0cGFyc2VGaWVsZHMoZmllbGRzOiBGb3JtRmllbGRbXSkge1xyXG5cdFx0ZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblx0XHRcdGlmIChmaWVsZC5ncm91cCkge1xyXG5cdFx0XHRcdHRoaXMucGFyc2VGaWVsZHMoZmllbGQuZ3JvdXApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuZmllbGRMaXN0LnB1c2goZmllbGQpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZUZpZWxkQ29udHJvbChmaWVsZDogRm9ybUZpZWxkKSB7XHJcblx0XHRjb25zdCBmaWVsZENvbnRyb2wgPSBmaWVsZFV0aWxzLnByb3BzKGZpZWxkKT8ucmVxdWlyZWRcclxuXHRcdFx0PyBuZXcgRmllbGRDb250cm9sKG51bGwsIGZpZWxkLnZhbGlkYXRvcnMgPyBmaWVsZC52YWxpZGF0b3JzIDogVmFsaWRhdG9ycy5yZXF1aXJlZClcclxuXHRcdFx0OiBuZXcgRmllbGRDb250cm9sKG51bGwpO1xyXG5cdFx0dGhpcy5vcHRpb25zKCkuZm9ybT8uYWRkQ29udHJvbChmaWVsZC5rZXkgfHwgJycsIGZpZWxkQ29udHJvbCk7XHJcblx0XHRmaWVsZC5maWVsZENvbnRyb2wgPSBmaWVsZENvbnRyb2w7XHJcblx0XHRmaWVsZC5maWVsZENvbnRyb2w/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XHJcblx0XHRcdGNvbnN0IHRhcmdldFZhbHVlID0gZmllbGRVdGlscy5mcm9tRmllbGRWYWx1ZShmaWVsZCwgdmFsdWUsIHRoaXMuZGF0ZVBpcGUpO1xyXG5cdFx0XHRpZiAoZmllbGRVdGlscy5pc0Zha2VkQ2hhbmdlKHRhcmdldFZhbHVlLCB0aGlzLm1vZGVsKClbZmllbGQua2V5IV0sIGZpZWxkKSkge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoZmllbGRVdGlscy5wcm9wcyhmaWVsZCk/Lm9uTW9kZWxDaGFuZ2UgJiYgdHlwZW9mIGZpZWxkVXRpbHMucHJvcHMoZmllbGQpPy5vbk1vZGVsQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XHJcblx0XHRcdFx0ZmllbGRVdGlscy5wcm9wcyhmaWVsZCk/Lm9uTW9kZWxDaGFuZ2UhKGZpZWxkLCB7IHZhbHVlIH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuaGFuZGxlVmFsdWVDaGFuZ2UodGFyZ2V0VmFsdWUsIGZpZWxkKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlVmFsdWVDaGFuZ2UodmFsdWU6IGFueSwgZmllbGQ6IEZvcm1GaWVsZCkge1xyXG5cdFx0dGhpcy5tb2RlbCgpW2ZpZWxkLmtleSFdID0gdmFsdWU7XHJcblx0XHR0aGlzLmNoYW5nZWRNb2RlbFtmaWVsZC5rZXkhXSA9IHsgbmFtZTogZmllbGRVdGlscy5sYWJlbChmaWVsZCwgdGhpcy5pMThuU2VydmljZSksIHZhbHVlOiB2YWx1ZSwgdHlwZTogZmllbGQudHlwZSB9O1xyXG5cdFx0aWYgKHRoaXMuaXNNYWluKSB7XHJcblx0XHRcdHRoaXMuaGFuZGxlVXBzZXJ0KGZpZWxkLmtleSEsIHZhbHVlLCB0cnVlKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuaGFuZGxlU3Vic2VydChmaWVsZC5rZXkhLCB2YWx1ZSwgZmllbGQpO1xyXG5cdFx0fVxyXG5cdFx0Y29uc29sZS5sb2coJy0tLS0taGFuZGxlVmFsdWVDaGFuZ2UnLCB0aGlzLnVwc2VydCgpKTtcclxuXHRcdHRoaXMuaGFuZGxlSGlkZUV4cHJlc3Npb24oKTtcclxuXHRcdHRoaXMuYWN0aW9ucy5zYXZlU2lnbmFsLnNldCh0cnVlKTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZVVwc2VydChrZXk6IHN0cmluZywgdmFsdWU6IGFueSwgaXNMb2c/OiBib29sZWFuKSB7XHJcblx0XHRpZiAodGhpcy5pc05ldykge1xyXG5cdFx0XHR0aGlzLnVwc2VydCgpIS5hZGREYXRhIVtrZXldID0gdmFsdWU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnVwc2VydCgpIS51cGREYXRhIVtrZXldID0gdmFsdWU7XHJcblx0XHR9XHJcblx0XHRpZiAoIWlzTG9nKSByZXR1cm47XHJcblx0XHR0aGlzLnVwc2VydCgpIS5sb2chLmNvbnRlbnQgPSBmaWVsZFV0aWxzLnRyYW5zTG9nKFxyXG5cdFx0XHR0aGlzLnJhd01vZGVsLFxyXG5cdFx0XHR0aGlzLmNoYW5nZWRNb2RlbCxcclxuXHRcdFx0dGhpcy5tb2RlbCgpW3RoaXMub3B0aW9ucygpLm1haW5GaWVsZCFdLFxyXG5cdFx0XHR0aGlzLmlzTmV3LFxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZVN1YnNlcnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIGZpZWxkOiBGb3JtRmllbGQpIHtcclxuXHRcdGNvbnN0IGNoYW5nZWRNb2RlbCA9IE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyh0aGlzLmNoYW5nZWRNb2RlbCkubWFwKChba2V5LCB2YWx1ZV0pID0+IFtrZXksICh2YWx1ZSBhcyBhbnkpLnZhbHVlXSkpO1xyXG5cdFx0dGhpcy5zdWJzZXJ0LmxvZ3RtcC5zZXQoMCwgY2hhbmdlZE1vZGVsKTtcclxuXHRcdHRoaXMuc3Vic2VydC5zdWJEYXRhWzBdID0gY2hhbmdlZE1vZGVsO1xyXG5cdFx0dGhpcy5zdWJzZXJ0Lm1hcHRtcC5zZXQoa2V5LCB7XHJcblx0XHRcdGlkOiB0aGlzLm1vZGVsKCk/LmlkID8/IDAsXHJcblx0XHRcdG9sZFZhbHVlOiB0aGlzLnJhd01vZGVsW2tleV0sXHJcblx0XHRcdG5ld1ZhbHVlOiB2YWx1ZSxcclxuXHRcdFx0bGFiZWw6IGZpZWxkVXRpbHMubGFiZWwoZmllbGQsIHRoaXMuaTE4blNlcnZpY2UpLFxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVIaWRlRXhwcmVzc2lvbigpIHtcclxuXHRcdHRoaXMuZmllbGRMaXN0LmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblx0XHRcdGlmIChmaWVsZC5oaWRlRXhwcmVzc2lvbikge1xyXG5cdFx0XHRcdGZpZWxkLmhpZGUgPSBmaWVsZC5oaWRlRXhwcmVzc2lvbih0aGlzLm1vZGVsKCksIGZpZWxkKTtcclxuXHRcdFx0XHRpZiAoZmllbGQuaGlkZSkge1xyXG5cdFx0XHRcdFx0ZmllbGQuZmllbGRDb250cm9sPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuXHRcdFx0XHRcdGZpZWxkLmZpZWxkQ29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGZpZWxkLmZpZWxkQ29udHJvbD8uc2V0VmFsaWRhdG9ycyhcclxuXHRcdFx0XHRcdFx0ZmllbGRVdGlscy5wcm9wcyhmaWVsZCk/LnJlcXVpcmVkID8gKGZpZWxkLnZhbGlkYXRvcnMgPyBmaWVsZC52YWxpZGF0b3JzIDogVmFsaWRhdG9ycy5yZXF1aXJlZCkgOiB1bmRlZmluZWQsXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHR2YWxpZGF0ZSgpIHtcclxuXHRcdGZvciAobGV0IGtleSBpbiB0aGlzLm9wdGlvbnMoKS5mb3JtPy5jb250cm9scykge1xyXG5cdFx0XHQhdGhpcy5vcHRpb25zKCkuZm9ybT8uY29udHJvbHNba2V5XVsnZGlzYWJsZWQnXSAmJiB0aGlzLm9wdGlvbnMoKS5mb3JtPy5jb250cm9sc1trZXldLm1hcmtBc0RpcnR5KCk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGhpcy5vcHRpb25zKCkuZm9ybT8uZGlzYWJsZWQgPyB0cnVlIDogdGhpcy5vcHRpb25zKCkuZm9ybT8udmFsaWQ7XHJcblx0fVxyXG5cclxuXHR1bmlxdWVIb29rKGZpZWxkOiBGb3JtRmllbGQsIGhvb2s6IE9ic2VydmFibGU8KGZpZWxkPzogRm9ybUZpZWxkKSA9PiB2b2lkPikge1xyXG5cdFx0ZmllbGQuaG9vayA9IGhvb2sucGlwZShzaGFyZVJlcGxheSgxKSk7XHJcblx0fVxyXG5cclxuXHR0cmlnZ2VySG9vaygpIHtcclxuXHRcdHRoaXMuZmllbGRMaXN0LmZvckVhY2goKGZpZWxkKSA9PiB7XHJcblx0XHRcdGZpZWxkVXRpbHMudHJpZ2dlckhvb2tBbmRTZXRWYWx1ZShcclxuXHRcdFx0XHRmaWVsZCxcclxuXHRcdFx0XHR0aGlzLm1vZGVsKCk/LltmaWVsZC5rZXkhXSxcclxuXHRcdFx0XHRmYWxzZSxcclxuXHRcdFx0XHR0cnVlLFxyXG5cdFx0XHRcdHRoaXMuaG9va09ic2VydmVycyxcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmhhbmRsZUhpZGVFeHByZXNzaW9uKCk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR0aGlzLmRhdGVQaXBlLFxyXG5cdFx0XHQpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRyZUNhbGNMYWJlbFNpemUoKSB7XHJcblx0XHRpZiAodGhpcy5vcHRpb25zKCkubGFiZWxXaWR0aCkge1xyXG5cdFx0XHR0aGlzLmxhYmVsTWluV2lkdGguc2V0KHRoaXMub3B0aW9ucygpLmxhYmVsV2lkdGgpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLmxhYmVsTWluV2lkdGguc2V0KHVuZGVmaW5lZCk7XHJcblx0XHR0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHR0aGlzLmhhbmRsZUZpZWxkTGFiZWxzKCk7XHJcblx0XHR0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVGaWVsZExhYmVscygpIHtcclxuXHRcdGNvbnN0IGZpZWxkTGFiZWxzOiBFbGVtZW50UmVmW10gPSBbXTtcclxuXHRcdHRoaXMuZ2V0RmllbGRMYWJlbHModGhpcy5maWVsZENvbXBvbmVudHMsIGZpZWxkTGFiZWxzKTtcclxuXHRcdGNvbnN0IG9mZnNldFdpZHRocyA9IGZpZWxkTGFiZWxzLm1hcCgoZmllbGRMYWJlbCkgPT4gZmllbGRMYWJlbC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKTtcclxuXHRcdHRoaXMubGFiZWxNaW5XaWR0aC5zZXQoTWF0aC5tYXgoLi4ub2Zmc2V0V2lkdGhzKSArIDI0ICsgJ3B4Jyk7XHJcblx0fVxyXG5cclxuXHRnZXRGaWVsZExhYmVscyhmaWVsZENvbXBvbmVudHM6IFF1ZXJ5TGlzdDxGb3JtRmllbGRDb21wb25lbnQ+IHwgdW5kZWZpbmVkLCBmaWVsZExhYmVsczogRWxlbWVudFJlZltdKSB7XHJcblx0XHRpZiAoIWZpZWxkQ29tcG9uZW50cykge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRmaWVsZENvbXBvbmVudHM/LmZvckVhY2goKGNvbXBvbmVudCkgPT4ge1xyXG5cdFx0XHRjb25zdCBmaWVsZExhYmVsID0gY29tcG9uZW50LmdldEZpZWxkTGFiZWwoKTtcclxuXHRcdFx0aWYgKGZpZWxkTGFiZWwpIHtcclxuXHRcdFx0XHRmaWVsZExhYmVscy5wdXNoKGZpZWxkTGFiZWwpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuZ2V0RmllbGRMYWJlbHMoY29tcG9uZW50LmdldEZpZWxkQ29tcG9uZW50cygpLCBmaWVsZExhYmVscyk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIOinpuWPkeaooeWei+WPmOWKqO+8jOmSiOWvueihqOWNleWtl+auteaVsOaNrlxyXG5cdCAqIEBwYXJhbSBtb2RlbCDpnIDopoHlj5jliqjnmoTmlbDmja5cclxuXHQgKiBAcGFyYW0gZW1pdEV2ZW50IOaYr+WQpuinpuWPkeS6i+S7tlxyXG5cdCAqIEBwYXJhbSBkZXRlY3RNb2RlbENoYW5nZSDmmK/lkKbop6blj5FkZXRlY3RNb2RlbENoYW5nZVxyXG5cdCAqL1xyXG5cdHRyaWdnZXJNb2RlbEVmZmVjdChtb2RlbDogYW55LCBlbWl0RXZlbnQ/OiBib29sZWFuLCBlbWl0SG9vaz86IGJvb2xlYW4pIHtcclxuXHRcdE9iamVjdC5rZXlzKG1vZGVsKS5mb3JFYWNoKChrZXkpID0+IHtcclxuXHRcdFx0Y29uc3QgZmllbGQgPSB0aGlzLmdldEZpZWxkKGtleSkhO1xyXG5cdFx0XHRpZiAoIWZpZWxkKSByZXR1cm47XHJcblx0XHRcdGZpZWxkVXRpbHMudHJpZ2dlckhvb2tBbmRTZXRWYWx1ZShcclxuXHRcdFx0XHRmaWVsZCxcclxuXHRcdFx0XHRtb2RlbFtrZXldLFxyXG5cdFx0XHRcdGVtaXRFdmVudCA/PyB0cnVlLFxyXG5cdFx0XHRcdGVtaXRIb29rID8/IHRydWUsXHJcblx0XHRcdFx0dGhpcy5ob29rT2JzZXJ2ZXJzLFxyXG5cdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMuaGFuZGxlSGlkZUV4cHJlc3Npb24oKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHRoaXMuZGF0ZVBpcGUsXHJcblx0XHRcdCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIOinpuWPkeaVsOaNruWPmOWKqO+8jOmSiOWvuemdnuihqOWNleWtl+auteaVsOaNrlxyXG5cdCAqIEBwYXJhbSBkYXRhTGlzdCDlpJbpg6jmlbDmja7liJfooahcclxuXHQgKi9cclxuXHR0cmlnZ2VyRGF0YUVmZmVjdChkYXRhTGlzdDogRXh0ZXJuYWxEYXRhW10pIHtcclxuXHRcdGRhdGFMaXN0LmZvckVhY2goKGRhdGEpID0+IHtcclxuXHRcdFx0dGhpcy5tb2RlbCgpW2RhdGEua2V5IV0gPSBkYXRhLnZhbHVlO1xyXG5cdFx0XHRpZiAoZGF0YS5sYWJlbCkge1xyXG5cdFx0XHRcdHRoaXMuY2hhbmdlZE1vZGVsW2RhdGEua2V5IV0gPSB7IG5hbWU6IGRhdGEubGFiZWwsIHZhbHVlOiBkYXRhLnZhbHVlLCB0eXBlOiAnaW5wdXR0ZXh0JyB9O1xyXG5cdFx0XHRcdHRoaXMuaGFuZGxlVXBzZXJ0KGRhdGEua2V5ISwgZGF0YS52YWx1ZSwgdHJ1ZSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5oYW5kbGVVcHNlcnQoZGF0YS5rZXkhLCBkYXRhLnZhbHVlKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiDliqjmgIHorr7nva7lrZfmrrXnpoHnlKjvvIznpoHnlKjliY3muIXpmaTlrZfmrrVkaXJ0eeagh+iusFxyXG5cdCAqIEBwYXJhbSBrZXkg5a2X5q61a2V5XHJcblx0ICovXHJcblx0c2V0RmllbGREaXNhYmxlZChrZXk6IHN0cmluZykge1xyXG5cdFx0dGhpcy5nZXRGaWVsZChrZXkpPy5maWVsZENvbnRyb2w/Lm1hcmtBc1ByaXN0aW5lKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuXHRcdHRoaXMuZ2V0RmllbGQoa2V5KT8uZmllbGRDb250cm9sPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIOihqOWNleaPkOS6pOWQjueahOaUtuWwvuWkhOeQhu+8jOS4gOiIrOWcqOaPkOS6pOaOpeWPo+eahOWbnuiwg+WHveaVsOaJp+ihjFxyXG5cdCAqL1xyXG5cdGZpbmFsaXplKCkge1xyXG5cdFx0dGhpcy5maWVsZExpc3QuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuXHRcdFx0aWYgKFsnaW1hZ2UnLCAndXBsb2FkJ10uaW5jbHVkZXMoZmllbGQudHlwZSEpKSB7XHJcblx0XHRcdFx0ZmllbGQuZmllbGRDb250cm9sPy5hZnRlclN1Ym1pdCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcbn1cclxuIiwiQGZvciAoZmllbGQgb2YgZmllbGRzKCk7IHRyYWNrIGZpZWxkKSB7XHJcblx0PGZvcm0tZmllbGRcclxuXHRcdGNsYXNzPVwidy1mdWxsXCJcclxuXHRcdFtmaWVsZF09XCJmaWVsZFwiPlxyXG5cdDwvZm9ybS1maWVsZD5cclxufVxyXG4iXX0=
313
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL2Zvcm0vZm9ybS9mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvZm9ybS9mb3JtL2Zvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxFQUNMLFFBQVEsRUFDUixZQUFZLEVBSVosTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBQ1QsTUFBTSxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFhLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQWMsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7O0FBMEI3RCxNQUFNLE9BQU8s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Q0FBQyxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ1AsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNoQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSyxDQUFDLEVBQUUsQ0FBQztnQkFDL0MsS0FBSyxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUNuQyxDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOytHQTdVVyxhQUFhO21HQUFiLGFBQWEscWZBSmQsQ0FBQyxRQUFRLENBQUMsOERBS1Asa0JBQWtCLGdEQ3BEakMsd0lBTUEseUREd0NXLFlBQVksOEJBQUUsbUJBQW1CLCtCQUFFLGtCQUFrQjs7NEZBS25ELGFBQWE7a0JBUnpCLFNBQVM7K0JBQ0MsYUFBYSxjQUNYLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsQ0FBQyxhQUNyRCxDQUFDLFFBQVEsQ0FBQzs2R0FLYSxlQUFlO3NCQUFoRCxZQUFZO3VCQUFDLGtCQUFrQjtnQkE0QmhDLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG5cdENvbXBvbmVudCxcclxuXHRlZmZlY3QsXHJcblx0aW5wdXQsXHJcblx0Y29tcHV0ZWQsXHJcblx0Vmlld0NoaWxkcmVuLFxyXG5cdFF1ZXJ5TGlzdCxcclxuXHRFbGVtZW50UmVmLFxyXG5cdENoYW5nZURldGVjdG9yUmVmLFxyXG5cdGluamVjdCxcclxuXHRIb3N0TGlzdGVuZXIsXHJcblx0dW50cmFja2VkLFxyXG5cdHNpZ25hbCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBWYWxpZGF0b3JzLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3JtU3VibWl0dGVkRXZlbnQgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEZpZWxkQ29udHJvbCB9IGZyb20gJy4uL2Zvcm0tZmllbGQvZmllbGQtY29udHJvbCc7XHJcbmltcG9ydCB7IEZvcm1GaWVsZCwgRm9ybUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vZm9ybS1maWVsZC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvaTE4bi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZmllbGRVdGlscyB9IGZyb20gJy4uL2Zvcm0tZmllbGQvZmllbGQtdXRpbHMnO1xyXG5pbXBvcnQgeyBVcHNlcnQgfSBmcm9tICcuLi8uLi9hbS9hbS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBnZW5lcmF0ZVVuaXF1ZUlkIH0gZnJvbSAnLi4vLi4vc2hhcmUvdXRpbHMnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEFjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2FjdGlvbi5zZXJ2aWNlJztcclxuZXhwb3J0IGludGVyZmFjZSBGb3JtT3B0aW9ucyB7XHJcblx0ZmllbGRzPzogRm9ybUZpZWxkW107XHJcblx0Zm9ybT86IEZvcm1Hcm91cDtcclxuXHRtYWluRmllbGQ/OiBzdHJpbmc7XHJcblx0bGFiZWxXaWR0aD86IHN0cmluZztcclxuXHRpbnRlcmFjdGl2ZUxhYmVsPzogYm9vbGVhbjtcclxuXHRleHRyYT86IGFueTtcclxuXHRtb2RlbE5hbWU/OiBzdHJpbmc7XHJcblx0dHlwZT86IHN0cmluZztcclxuXHRmaz86IHN0cmluZztcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVybmFsRGF0YSB7XHJcblx0a2V5Pzogc3RyaW5nO1xyXG5cdHZhbHVlPzogYW55O1xyXG5cdGxhYmVsPzogc3RyaW5nO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2N1c3RvbS1mb3JtJyxcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1GaWVsZENvbXBvbmVudF0sXHJcblx0cHJvdmlkZXJzOiBbRGF0ZVBpcGVdLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybDogJy4vZm9ybS5jb21wb25lbnQuc2NzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtQ29tcG9uZW50IHtcclxuXHRAVmlld0NoaWxkcmVuKEZvcm1GaWVsZENvbXBvbmVudCkgZmllbGRDb21wb25lbnRzPzogUXVlcnlMaXN0PEZvcm1GaWVsZENvbXBvbmVudD47XHJcblx0cm91dGVyOiBSb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcclxuXHRpc05ldzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdG9wdGlvbnMgPSBpbnB1dDxGb3JtT3B0aW9ucz4oe30pO1xyXG5cdGZpZWxkcyA9IGNvbXB1dGVkKCgpID0+IHtcclxuXHRcdHVudHJhY2tlZCgoKSA9PiB7XHJcblx0XHRcdHRoaXMuaW5pdEZvcm0oKTtcclxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5yZUNhbGNMYWJlbFNpemUoKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiB0aGlzLm9wdGlvbnMoKS5maWVsZHM7XHJcblx0fSk7XHJcblxyXG5cdGkxOG5TZXJ2aWNlID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcclxuXHRtb2RlbCA9IGlucHV0PGFueT4oKTtcclxuXHR1cHNlcnQgPSBpbnB1dDxVcHNlcnQ+KCk7XHJcblx0cmF3TW9kZWw6IGFueSA9IHt9O1xyXG5cdGNoYW5nZWRNb2RlbDogYW55ID0ge307XHJcblx0ZmllbGRMaXN0ITogRm9ybUZpZWxkW107XHJcblx0aG9va09ic2VydmVyczogRnVuY3Rpb25bXSA9IFtdO1xyXG5cdGxhYmVsTWluV2lkdGggPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG5cdGlzTWFpbjogYm9vbGVhbiA9IHRydWU7XHJcblx0c3Vic2VydDogYW55O1xyXG5cdGV4dHJhOiBhbnkgPSB7fTtcclxuXHJcblx0YWN0aW9ucyA9IGluamVjdChBY3Rpb25TZXJ2aWNlKTtcclxuXHRASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuXHRvblJlc2l6ZSgpIHtcclxuXHRcdHRoaXMucmVDYWxjTGFiZWxTaXplKCk7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuXHRcdHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG5cdCkge1xyXG5cdFx0dGhpcy5yb3V0ZXIudXJsLnNwbGl0KCcvJykucG9wKCkgPT0gJ25ldycgJiYgKHRoaXMuaXNOZXcgPSB0cnVlKTtcclxuXHRcdGVmZmVjdChcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdGlmICghdGhpcy5tb2RlbCgpKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmICh0aGlzLmlzTmV3KSB7XHJcblx0XHRcdFx0XHR0aGlzLmZpZWxkTGlzdC5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAoIWZpZWxkLmRlZmF1bHQpIHJldHVybjtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMubW9kZWwoKVtmaWVsZC5rZXkhXSAhPT0gdW5kZWZpbmVkKSByZXR1cm47XHJcblx0XHRcdFx0XHRcdHVudHJhY2tlZCgoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5oYW5kbGVWYWx1ZUNoYW5nZShmaWVsZC5kZWZhdWx0LCBmaWVsZCk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMucmF3TW9kZWwgPSBmaWVsZFV0aWxzLnByZWxvYWRMb2coeyAuLi50aGlzLm1vZGVsKCkgfSwgdGhpcy5maWVsZExpc3QsIHRoaXMuZGF0ZVBpcGUpO1xyXG5cdFx0XHRcdHRoaXMuY2hhbmdlZE1vZGVsID0ge307XHJcblx0XHRcdFx0dW50cmFja2VkKCgpID0+IHRoaXMudHJpZ2dlckhvb2soKSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcclxuXHRcdCk7XHJcblx0XHRlZmZlY3QoXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRsZXQgbW9kZWxOYW1lID0gdGhpcy5vcHRpb25zKCkubW9kZWxOYW1lIHx8ICcnO1xyXG5cdFx0XHRcdGlmIChtb2RlbE5hbWUgIT0gJycpIHtcclxuXHRcdFx0XHRcdHRoaXMuaXNNYWluID0gIXRoaXMudXBzZXJ0KCk/LnN1YnNlcnQ/LmZpbmQoKHY6IGFueSkgPT4gdi5zdWJNb2RlbE5hbWUgPT09IG1vZGVsTmFtZSk7XHJcblx0XHRcdFx0XHRpZiAoIXRoaXMuaXNNYWluKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuc3Vic2VydCA9IHtcclxuXHRcdFx0XHRcdFx0XHRzdWJNb2RlbE5hbWU6IG1vZGVsTmFtZSxcclxuXHRcdFx0XHRcdFx0XHRmazogdGhpcy5vcHRpb25zKCkuZmssXHJcblx0XHRcdFx0XHRcdFx0c3ViRGF0YTogW10sXHJcblx0XHRcdFx0XHRcdFx0bWFwdG1wOiBuZXcgTWFwKCksXHJcblx0XHRcdFx0XHRcdFx0bG9ndG1wOiBuZXcgTWFwKCksXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdHRoaXMudXBzZXJ0KCk/LnN1YnNlcnQ/LnB1c2godGhpcy5zdWJzZXJ0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0dGhpcy5yZUNhbGNMYWJlbFNpemUoKTtcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5pMThuU2VydmljZS5jaGFuZ2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuXHRcdFx0dGhpcy5yZUNhbGNMYWJlbFNpemUoKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKSB7XHJcblx0XHR0aGlzLmhvb2tPYnNlcnZlcnMuZm9yRWFjaCgodW5zdWJzY3JpYmUpID0+IHVuc3Vic2NyaWJlKCkpO1xyXG5cdH1cclxuXHJcblx0aW5pdEZvcm0oKSB7XHJcblx0XHRpZiAoIXRoaXMub3B0aW9ucygpLmV4dHJhKSB7XHJcblx0XHRcdHRoaXMub3B0aW9ucygpLmV4dHJhID0ge307XHJcblx0XHR9XHJcblx0XHRpZiAoIXRoaXMub3B0aW9ucygpLmZvcm0pIHtcclxuXHRcdFx0dGhpcy5vcHRpb25zKCkuZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5maWVsZExpc3QgPSBbXTtcclxuXHRcdC8vQHRzLWlnbm9yZVxyXG5cdFx0Y29uc3QgaXNJMThuID0gd2luZG93LmFwcElzSTE4bjtcclxuXHRcdHRoaXMucGFyc2VGaWVsZHModGhpcy5vcHRpb25zKCkuZmllbGRzIHx8IFtdKTtcclxuXHRcdHRoaXMuZmllbGRMaXN0LmZvckVhY2goKGZpZWxkLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRmaWVsZFV0aWxzLmZpZWxkSGFuZGxlcihmaWVsZCk7XHJcblx0XHRcdGZpZWxkLnV1aWQgPSBgJHtnZW5lcmF0ZVVuaXF1ZUlkKCl9JHtpbmRleH1gO1xyXG5cdFx0XHRmaWVsZC5sYWJlbE1pbldpZHRoID0gdGhpcy5sYWJlbE1pbldpZHRoO1xyXG5cdFx0XHRmaWVsZC5pbnRlcmFjdGl2ZUxhYmVsID0gdGhpcy5vcHRpb25zKCkuaW50ZXJhY3RpdmVMYWJlbCA/PyB0cnVlO1xyXG5cdFx0XHRpZiAoaXNJMThuICYmICghZmllbGRVdGlscy5wcm9wcyhmaWVsZCkuaTE4bktleSB8fCBmaWVsZFV0aWxzLnByb3BzKGZpZWxkKS5pMThuS2V5ID09ICcnKSkge1xyXG5cdFx0XHRcdGZpZWxkVXRpbHMucHJvcHMoZmllbGQpLmkxOG5LZXkgPSBgdGFibGVzLiR7dGhpcy5vcHRpb25zKCkubW9kZWxOYW1lfS4ke2ZpZWxkLmtleX1gO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZpZWxkLmZvcm0gPSB0aGlzO1xyXG5cdFx0XHRpZiAoaXNPYnNlcnZhYmxlKGZpZWxkLmhvb2spKSB7XHJcblx0XHRcdFx0dGhpcy51bmlxdWVIb29rKGZpZWxkLCBmaWVsZC5ob29rKTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLmhhbmRsZUZpZWxkQ29udHJvbChmaWVsZCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGdldEZpZWxkKGtleTogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5maWVsZExpc3QuZmluZCgoZmllbGQpID0+IGZpZWxkLmtleSA9PT0ga2V5KTtcclxuXHR9XHJcblxyXG5cdHBhcnNlRmllbGRzKGZpZWxkczogRm9ybUZpZWxkW10pIHtcclxuXHRcdGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG5cdFx0XHRpZiAoZmllbGQuZ3JvdXApIHtcclxuXHRcdFx0XHR0aGlzLnBhcnNlRmllbGRzKGZpZWxkLmdyb3VwKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmZpZWxkTGlzdC5wdXNoKGZpZWxkKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVGaWVsZENvbnRyb2woZmllbGQ6IEZvcm1GaWVsZCkge1xyXG5cdFx0Y29uc3QgZmllbGRDb250cm9sID0gZmllbGRVdGlscy5wcm9wcyhmaWVsZCk/LnJlcXVpcmVkXHJcblx0XHRcdD8gbmV3IEZpZWxkQ29udHJvbChudWxsLCBmaWVsZC52YWxpZGF0b3JzID8gZmllbGQudmFsaWRhdG9ycyA6IFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcblx0XHRcdDogbmV3IEZpZWxkQ29udHJvbChudWxsKTtcclxuXHRcdHRoaXMub3B0aW9ucygpLmZvcm0/LmFkZENvbnRyb2woZmllbGQua2V5IHx8ICcnLCBmaWVsZENvbnRyb2wpO1xyXG5cdFx0ZmllbGQuZmllbGRDb250cm9sID0gZmllbGRDb250cm9sO1xyXG5cdFx0ZmllbGQuZmllbGRDb250cm9sPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG5cdFx0XHRjb25zdCB0YXJnZXRWYWx1ZSA9IGZpZWxkVXRpbHMuZnJvbUZpZWxkVmFsdWUoZmllbGQsIHZhbHVlLCB0aGlzLmRhdGVQaXBlKTtcclxuXHRcdFx0aWYgKGZpZWxkVXRpbHMuaXNGYWtlZENoYW5nZSh0YXJnZXRWYWx1ZSwgdGhpcy5tb2RlbCgpW2ZpZWxkLmtleSFdLCBmaWVsZCkpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKGZpZWxkVXRpbHMucHJvcHMoZmllbGQpPy5vbk1vZGVsQ2hhbmdlICYmIHR5cGVvZiBmaWVsZFV0aWxzLnByb3BzKGZpZWxkKT8ub25Nb2RlbENoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG5cdFx0XHRcdGZpZWxkVXRpbHMucHJvcHMoZmllbGQpPy5vbk1vZGVsQ2hhbmdlIShmaWVsZCwgeyB2YWx1ZSB9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLmhhbmRsZVZhbHVlQ2hhbmdlKHRhcmdldFZhbHVlLCBmaWVsZCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGhhbmRsZVZhbHVlQ2hhbmdlKHZhbHVlOiBhbnksIGZpZWxkOiBGb3JtRmllbGQpIHtcclxuXHRcdHRoaXMubW9kZWwoKVtmaWVsZC5rZXkhXSA9IHZhbHVlO1xyXG5cdFx0dGhpcy5jaGFuZ2VkTW9kZWxbZmllbGQua2V5IV0gPSB7IG5hbWU6IGZpZWxkVXRpbHMubGFiZWwoZmllbGQsIHRoaXMuaTE4blNlcnZpY2UpLCB2YWx1ZTogdmFsdWUsIHR5cGU6IGZpZWxkLnR5cGUgfTtcclxuXHRcdGlmICh0aGlzLmlzTWFpbikge1xyXG5cdFx0XHR0aGlzLmhhbmRsZVVwc2VydChmaWVsZC5rZXkhLCB2YWx1ZSwgdHJ1ZSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmhhbmRsZVN1YnNlcnQoZmllbGQua2V5ISwgdmFsdWUsIGZpZWxkKTtcclxuXHRcdH1cclxuXHRcdGNvbnNvbGUubG9nKCctLS0tLWhhbmRsZVZhbHVlQ2hhbmdlJywgdGhpcy51cHNlcnQoKSk7XHJcblx0XHR0aGlzLmhhbmRsZUhpZGVFeHByZXNzaW9uKCk7XHJcblx0XHR0aGlzLmFjdGlvbnMuc2F2ZVNpZ25hbC5zZXQodHJ1ZSk7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVVcHNlcnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIGlzTG9nPzogYm9vbGVhbikge1xyXG5cdFx0aWYgKHRoaXMuaXNOZXcpIHtcclxuXHRcdFx0dGhpcy51cHNlcnQoKSEuYWRkRGF0YSFba2V5XSA9IHZhbHVlO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy51cHNlcnQoKSEudXBkRGF0YSFba2V5XSA9IHZhbHVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFpc0xvZykgcmV0dXJuO1xyXG5cdFx0dGhpcy51cHNlcnQoKSEubG9nIS5jb250ZW50ID0gZmllbGRVdGlscy50cmFuc0xvZyhcclxuXHRcdFx0dGhpcy5yYXdNb2RlbCxcclxuXHRcdFx0dGhpcy5jaGFuZ2VkTW9kZWwsXHJcblx0XHRcdHRoaXMubW9kZWwoKVt0aGlzLm9wdGlvbnMoKS5tYWluRmllbGQhXSxcclxuXHRcdFx0dGhpcy5pc05ldyxcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRoYW5kbGVTdWJzZXJ0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBmaWVsZDogRm9ybUZpZWxkKSB7XHJcblx0XHRjb25zdCBjaGFuZ2VkTW9kZWwgPSBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXModGhpcy5jaGFuZ2VkTW9kZWwpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBba2V5LCAodmFsdWUgYXMgYW55KS52YWx1ZV0pKTtcclxuXHRcdHRoaXMuc3Vic2VydC5sb2d0bXAuc2V0KDAsIGNoYW5nZWRNb2RlbCk7XHJcblx0XHR0aGlzLnN1YnNlcnQuc3ViRGF0YVswXSA9IGNoYW5nZWRNb2RlbDtcclxuXHRcdHRoaXMuc3Vic2VydC5tYXB0bXAuc2V0KGtleSwge1xyXG5cdFx0XHRpZDogdGhpcy5tb2RlbCgpPy5pZCA/PyAwLFxyXG5cdFx0XHRvbGRWYWx1ZTogdGhpcy5yYXdNb2RlbFtrZXldLFxyXG5cdFx0XHRuZXdWYWx1ZTogdmFsdWUsXHJcblx0XHRcdGxhYmVsOiBmaWVsZFV0aWxzLmxhYmVsKGZpZWxkLCB0aGlzLmkxOG5TZXJ2aWNlKSxcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlSGlkZUV4cHJlc3Npb24oKSB7XHJcblx0XHR0aGlzLmZpZWxkTGlzdC5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG5cdFx0XHRpZiAoZmllbGQuaGlkZUV4cHJlc3Npb24pIHtcclxuXHRcdFx0XHRmaWVsZC5oaWRlID0gZmllbGQuaGlkZUV4cHJlc3Npb24odGhpcy5tb2RlbCgpLCBmaWVsZCk7XHJcblx0XHRcdFx0aWYgKGZpZWxkLmhpZGUpIHtcclxuXHRcdFx0XHRcdGZpZWxkLmZpZWxkQ29udHJvbD8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcblx0XHRcdFx0XHRmaWVsZC5maWVsZENvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRmaWVsZC5maWVsZENvbnRyb2w/LnNldFZhbGlkYXRvcnMoXHJcblx0XHRcdFx0XHRcdGZpZWxkVXRpbHMucHJvcHMoZmllbGQpPy5yZXF1aXJlZCA/IChmaWVsZC52YWxpZGF0b3JzID8gZmllbGQudmFsaWRhdG9ycyA6IFZhbGlkYXRvcnMucmVxdWlyZWQpIDogdW5kZWZpbmVkLFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0dmFsaWRhdGUoKSB7XHJcblx0XHRmb3IgKGxldCBrZXkgaW4gdGhpcy5vcHRpb25zKCkuZm9ybT8uY29udHJvbHMpIHtcclxuXHRcdFx0IXRoaXMub3B0aW9ucygpLmZvcm0/LmNvbnRyb2xzW2tleV1bJ2Rpc2FibGVkJ10gJiYgdGhpcy5vcHRpb25zKCkuZm9ybT8uY29udHJvbHNba2V5XS5tYXJrQXNEaXJ0eSgpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMub3B0aW9ucygpLmZvcm0/LmRpc2FibGVkID8gdHJ1ZSA6IHRoaXMub3B0aW9ucygpLmZvcm0/LnZhbGlkO1xyXG5cdH1cclxuXHJcblx0dW5pcXVlSG9vayhmaWVsZDogRm9ybUZpZWxkLCBob29rOiBPYnNlcnZhYmxlPChmaWVsZD86IEZvcm1GaWVsZCkgPT4gdm9pZD4pIHtcclxuXHRcdGZpZWxkLmhvb2sgPSBob29rLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xyXG5cdH1cclxuXHJcblx0dHJpZ2dlckhvb2soKSB7XHJcblx0XHR0aGlzLmZpZWxkTGlzdC5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG5cdFx0XHRmaWVsZFV0aWxzLnRyaWdnZXJIb29rQW5kU2V0VmFsdWUoXHJcblx0XHRcdFx0ZmllbGQsXHJcblx0XHRcdFx0dGhpcy5tb2RlbCgpPy5bZmllbGQua2V5IV0sXHJcblx0XHRcdFx0ZmFsc2UsXHJcblx0XHRcdFx0dHJ1ZSxcclxuXHRcdFx0XHR0aGlzLmhvb2tPYnNlcnZlcnMsXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5oYW5kbGVIaWRlRXhwcmVzc2lvbigpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0dGhpcy5kYXRlUGlwZSxcclxuXHRcdFx0KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cmVDYWxjTGFiZWxTaXplKCkge1xyXG5cdFx0aWYgKHRoaXMub3B0aW9ucygpLmxhYmVsV2lkdGgpIHtcclxuXHRcdFx0dGhpcy5sYWJlbE1pbldpZHRoLnNldCh0aGlzLm9wdGlvbnMoKS5sYWJlbFdpZHRoKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5sYWJlbE1pbldpZHRoLnNldCh1bmRlZmluZWQpO1xyXG5cdFx0dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0dGhpcy5oYW5kbGVGaWVsZExhYmVscygpO1xyXG5cdFx0dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdH1cclxuXHJcblx0aGFuZGxlRmllbGRMYWJlbHMoKSB7XHJcblx0XHRjb25zdCBmaWVsZExhYmVsczogRWxlbWVudFJlZltdID0gW107XHJcblx0XHR0aGlzLmdldEZpZWxkTGFiZWxzKHRoaXMuZmllbGRDb21wb25lbnRzLCBmaWVsZExhYmVscyk7XHJcblx0XHRjb25zdCBvZmZzZXRXaWR0aHMgPSBmaWVsZExhYmVscy5tYXAoKGZpZWxkTGFiZWwpID0+IGZpZWxkTGFiZWwubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCk7XHJcblx0XHR0aGlzLmxhYmVsTWluV2lkdGguc2V0KE1hdGgubWF4KC4uLm9mZnNldFdpZHRocykgKyAyNCArICdweCcpO1xyXG5cdH1cclxuXHJcblx0Z2V0RmllbGRMYWJlbHMoZmllbGRDb21wb25lbnRzOiBRdWVyeUxpc3Q8Rm9ybUZpZWxkQ29tcG9uZW50PiB8IHVuZGVmaW5lZCwgZmllbGRMYWJlbHM6IEVsZW1lbnRSZWZbXSkge1xyXG5cdFx0aWYgKCFmaWVsZENvbXBvbmVudHMpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0ZmllbGRDb21wb25lbnRzPy5mb3JFYWNoKChjb21wb25lbnQpID0+IHtcclxuXHRcdFx0Y29uc3QgZmllbGRMYWJlbCA9IGNvbXBvbmVudC5nZXRGaWVsZExhYmVsKCk7XHJcblx0XHRcdGlmIChmaWVsZExhYmVsKSB7XHJcblx0XHRcdFx0ZmllbGRMYWJlbHMucHVzaChmaWVsZExhYmVsKTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLmdldEZpZWxkTGFiZWxzKGNvbXBvbmVudC5nZXRGaWVsZENvbXBvbmVudHMoKSwgZmllbGRMYWJlbHMpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiDop6blj5HmqKHlnovlj5jliqjvvIzpkojlr7nooajljZXlrZfmrrXmlbDmja5cclxuXHQgKiBAcGFyYW0gbW9kZWwg6ZyA6KaB5Y+Y5Yqo55qE5pWw5o2uXHJcblx0ICogQHBhcmFtIGVtaXRFdmVudCDmmK/lkKbop6blj5Hkuovku7ZcclxuXHQgKiBAcGFyYW0gZGV0ZWN0TW9kZWxDaGFuZ2Ug5piv5ZCm6Kem5Y+RZGV0ZWN0TW9kZWxDaGFuZ2VcclxuXHQgKi9cclxuXHR0cmlnZ2VyTW9kZWxFZmZlY3QobW9kZWw6IGFueSwgZW1pdEV2ZW50PzogYm9vbGVhbiwgZW1pdEhvb2s/OiBib29sZWFuKSB7XHJcblx0XHRPYmplY3Qua2V5cyhtb2RlbCkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcblx0XHRcdGNvbnN0IGZpZWxkID0gdGhpcy5nZXRGaWVsZChrZXkpITtcclxuXHRcdFx0aWYgKCFmaWVsZCkgcmV0dXJuO1xyXG5cdFx0XHRmaWVsZFV0aWxzLnRyaWdnZXJIb29rQW5kU2V0VmFsdWUoXHJcblx0XHRcdFx0ZmllbGQsXHJcblx0XHRcdFx0bW9kZWxba2V5XSxcclxuXHRcdFx0XHRlbWl0RXZlbnQgPz8gdHJ1ZSxcclxuXHRcdFx0XHRlbWl0SG9vayA/PyB0cnVlLFxyXG5cdFx0XHRcdHRoaXMuaG9va09ic2VydmVycyxcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmhhbmRsZUhpZGVFeHByZXNzaW9uKCk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR0aGlzLmRhdGVQaXBlLFxyXG5cdFx0XHQpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiDop6blj5HmlbDmja7lj5jliqjvvIzpkojlr7npnZ7ooajljZXlrZfmrrXmlbDmja5cclxuXHQgKiBAcGFyYW0gZGF0YUxpc3Qg5aSW6YOo5pWw5o2u5YiX6KGoXHJcblx0ICovXHJcblx0dHJpZ2dlckRhdGFFZmZlY3QoZGF0YUxpc3Q6IEV4dGVybmFsRGF0YVtdKSB7XHJcblx0XHRkYXRhTGlzdC5mb3JFYWNoKChkYXRhKSA9PiB7XHJcblx0XHRcdHRoaXMubW9kZWwoKVtkYXRhLmtleSFdID0gZGF0YS52YWx1ZTtcclxuXHRcdFx0aWYgKGRhdGEubGFiZWwpIHtcclxuXHRcdFx0XHR0aGlzLmNoYW5nZWRNb2RlbFtkYXRhLmtleSFdID0geyBuYW1lOiBkYXRhLmxhYmVsLCB2YWx1ZTogZGF0YS52YWx1ZSwgdHlwZTogJ2lucHV0dGV4dCcgfTtcclxuXHRcdFx0XHR0aGlzLmhhbmRsZVVwc2VydChkYXRhLmtleSEsIGRhdGEudmFsdWUsIHRydWUpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuaGFuZGxlVXBzZXJ0KGRhdGEua2V5ISwgZGF0YS52YWx1ZSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICog6Kem5Y+R5a2X5q6156aB55So77yM6ZKI5a+56KGo5Y2V5a2X5q61XHJcblx0ICogQHBhcmFtIGtleXMg5a2X5q61a2V55YiX6KGoXHJcblx0ICovXHJcblx0dHJpZ2dlckRpc2FibGVkRWZmZWN0KGtleXM6IHN0cmluZ1tdKSB7XHJcblx0XHRrZXlzPy5mb3JFYWNoKChrZXkpID0+IHtcclxuXHRcdFx0dGhpcy5zZXRGaWVsZERpc2FibGVkKGtleSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIOWKqOaAgeiuvue9ruWtl+auteemgeeUqO+8jOemgeeUqOWJjea4hemZpOWtl+autWRpcnR55qCH6K6wXHJcblx0ICogQHBhcmFtIGtleSDlrZfmrrVrZXlcclxuXHQgKi9cclxuXHRzZXRGaWVsZERpc2FibGVkKGtleTogc3RyaW5nKSB7XHJcblx0XHR0aGlzLmdldEZpZWxkKGtleSk/LmZpZWxkQ29udHJvbD8ubWFya0FzUHJpc3RpbmUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG5cdFx0dGhpcy5nZXRGaWVsZChrZXkpPy5maWVsZENvbnRyb2w/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICog6KGo5Y2V5o+Q5Lqk5ZCO55qE5pS25bC+5aSE55CG77yM5LiA6Iis5Zyo5o+Q5Lqk5o6l5Y+j55qE5Zue6LCD5Ye95pWw5omn6KGMXHJcblx0ICovXHJcblx0ZmluYWxpemUoKSB7XHJcblx0XHR0aGlzLmZpZWxkTGlzdC5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG5cdFx0XHRpZiAoWydpbWFnZScsICd1cGxvYWQnXS5pbmNsdWRlcyhmaWVsZC50eXBlISkpIHtcclxuXHRcdFx0XHRmaWVsZC5maWVsZENvbnRyb2w/LmFmdGVyU3VibWl0KCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG4iLCJAZm9yIChmaWVsZCBvZiBmaWVsZHMoKTsgdHJhY2sgZmllbGQpIHtcclxuXHQ8Zm9ybS1maWVsZFxyXG5cdFx0Y2xhc3M9XCJ3LWZ1bGxcIlxyXG5cdFx0W2ZpZWxkXT1cImZpZWxkXCI+XHJcblx0PC9mb3JtLWZpZWxkPlxyXG59XHJcbiJdfQ==