UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

209 lines 28.8 kB
import { __decorate, __metadata } from "tslib"; import { ChangeDetectionStrategy, Component, ContentChild, Directive, EventEmitter, Input, Output, QueryList, TemplateRef, ViewChildren, } from '@angular/core'; import { ValueHook } from '../../core/utils/public-api'; import { ConnectionStatus } from '../constants'; import { TerminalComponent } from '../terminal/component'; import * as i0 from "@angular/core"; const _c0 = (a0, a1) => [a0, a1]; const _c1 = a0 => ({ index: a0 }); function TerminalGroupComponent_aui_tab_group_0_aui_tab_1_div_1_aui_icon_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "aui-icon", 12); i0.ɵɵpipe(1, "translate"); } if (rf & 2) { i0.ɵɵproperty("auiTooltip", i0.ɵɵpipeBind1(1, 1, "exec_connecting")); } } function TerminalGroupComponent_aui_tab_group_0_aui_tab_1_div_1_aui_icon_2_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "aui-icon", 13); } if (rf & 2) { const i_r4 = i0.ɵɵnextContext(2).index; i0.ɵɵnextContext(2); const disconnectedTip_r5 = i0.ɵɵreference(2); i0.ɵɵproperty("auiTooltip", disconnectedTip_r5)("auiTooltipContext", i0.ɵɵpureFunction1(2, _c1, i_r4)); } } function TerminalGroupComponent_aui_tab_group_0_aui_tab_1_div_1_aui_icon_3_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "aui-icon", 14); } if (rf & 2) { const option_r6 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵproperty("icon", option_r6.icon); } } function TerminalGroupComponent_aui_tab_group_0_aui_tab_1_div_1_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 7); i0.ɵɵtemplate(1, TerminalGroupComponent_aui_tab_group_0_aui_tab_1_div_1_aui_icon_1_Template, 2, 3, "aui-icon", 8)(2, TerminalGroupComponent_aui_tab_group_0_aui_tab_1_div_1_aui_icon_2_Template, 1, 4, "aui-icon", 9)(3, TerminalGroupComponent_aui_tab_group_0_aui_tab_1_div_1_aui_icon_3_Template, 1, 1, "aui-icon", 10); i0.ɵɵelement(4, "acl-text-ellipsis", 11); i0.ɵɵelementEnd(); } if (rf & 2) { const option_r6 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", i0.ɵɵpureFunction2(5, _c0, ctx_r1.ConnectionStatus.Connecting, ctx_r1.ConnectionStatus.ReConnecting).includes(ctx_r1.statusMap.get(option_r6))); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", i0.ɵɵpureFunction2(8, _c0, ctx_r1.ConnectionStatus.Disconnected, ctx_r1.ConnectionStatus.NoPermission).includes(ctx_r1.statusMap.get(option_r6))); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", ctx_r1.statusMap.get(option_r6) === ctx_r1.ConnectionStatus.Connected && option_r6.icon); i0.ɵɵadvance(); i0.ɵɵproperty("text", option_r6.label || option_r6.pod)("tailLength", 6); } } function TerminalGroupComponent_aui_tab_group_0_aui_tab_1_Template(rf, ctx) { if (rf & 1) { const _r3 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "aui-tab", 4); i0.ɵɵlistener("close", function TerminalGroupComponent_aui_tab_group_0_aui_tab_1_Template_aui_tab_close_0_listener() { const i_r4 = i0.ɵɵrestoreView(_r3).index; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.removeTerminal(i_r4)); }); i0.ɵɵtemplate(1, TerminalGroupComponent_aui_tab_group_0_aui_tab_1_div_1_Template, 5, 11, "div", 5); i0.ɵɵelementStart(2, "acl-terminal", 6); i0.ɵɵlistener("connectionStatusChange", function TerminalGroupComponent_aui_tab_group_0_aui_tab_1_Template_acl_terminal_connectionStatusChange_2_listener($event) { const option_r6 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.handleConnectionStatusChange(option_r6, $event)); })("socketReady", function TerminalGroupComponent_aui_tab_group_0_aui_tab_1_Template_acl_terminal_socketReady_2_listener($event) { const ctx_r6 = i0.ɵɵrestoreView(_r3); const option_r6 = ctx_r6.$implicit; const i_r4 = ctx_r6.index; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.socketReady.emit({ option: option_r6, socket: $event, index: i_r4 })); })("fallbackShell", function TerminalGroupComponent_aui_tab_group_0_aui_tab_1_Template_acl_terminal_fallbackShell_2_listener($event) { const option_r6 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.fallbackShell.emit({ option: option_r6, shell: $event })); }); i0.ɵɵelementEnd()(); } if (rf & 2) { const option_r6 = ctx.$implicit; const i_r4 = ctx.index; const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵproperty("closeable", true); i0.ɵɵadvance(2); i0.ɵɵproperty("option", option_r6)("index", i_r4)("extraButton", (ctx_r1.terminalExtraButton == null ? null : ctx_r1.terminalExtraButton.enable) ? ctx_r1.terminalExtraButtonRef : null)("extraContent", ctx_r1.terminalExtraContentRef); } } function TerminalGroupComponent_aui_tab_group_0_Template(rf, ctx) { if (rf & 1) { const _r1 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "aui-tab-group", 2); i0.ɵɵlistener("selectedIndexChange", function TerminalGroupComponent_aui_tab_group_0_Template_aui_tab_group_selectedIndexChange_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.selectedIndexChange.emit($event)); }); i0.ɵɵtemplate(1, TerminalGroupComponent_aui_tab_group_0_aui_tab_1_Template, 3, 5, "aui-tab", 3); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵproperty("lazy", true)("selectedIndex", ctx_r1.selectedIndex); i0.ɵɵadvance(); i0.ɵɵproperty("ngForOf", ctx_r1.terminalOptions)("ngForTrackBy", ctx_r1.trackByOption); } } function TerminalGroupComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) { const _r8 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "span"); i0.ɵɵtext(1); i0.ɵɵpipe(2, "translate"); i0.ɵɵelementEnd(); i0.ɵɵelementStart(3, "button", 15); i0.ɵɵlistener("click", function TerminalGroupComponent_ng_template_1_Template_button_click_3_listener() { const i_r9 = i0.ɵɵrestoreView(_r8).index; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.reconnect(i_r9)); }); i0.ɵɵtext(4); i0.ɵɵpipe(5, "translate"); i0.ɵɵelementEnd(); } if (rf & 2) { i0.ɵɵadvance(); i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(2, 2, "exec_disconnected_tip")); i0.ɵɵadvance(3); i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(5, 4, "reconnect"), " "); } } export class TerminalExtraButtonDirective { constructor() { this.enable = true; } static { this.ɵfac = function TerminalExtraButtonDirective_Factory(t) { return new (t || TerminalExtraButtonDirective)(); }; } static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: TerminalExtraButtonDirective, selectors: [["", "aclTerminalExtraButton", ""]], inputs: { enable: [0, "aclTerminalExtraButton", "enable"] } }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TerminalExtraButtonDirective, [{ type: Directive, args: [{ selector: '[aclTerminalExtraButton]', }] }], null, { enable: [{ type: Input, args: ['aclTerminalExtraButton'] }] }); })(); export class TerminalExtraContentDirective { static { this.ɵfac = function TerminalExtraContentDirective_Factory(t) { return new (t || TerminalExtraContentDirective)(); }; } static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: TerminalExtraContentDirective, selectors: [["", "aclTerminalExtraContent", ""]] }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TerminalExtraContentDirective, [{ type: Directive, args: [{ selector: '[aclTerminalExtraContent]', }] }], null, null); })(); export class TerminalGroupComponent { constructor() { this.ConnectionStatus = ConnectionStatus; this.hasActivatedMap = new Map(); this.selectedIndex = 0; this.terminalOptions = []; this.selectedIndexChange = new EventEmitter(); this.terminalOptionsChange = new EventEmitter(); this.socketReady = new EventEmitter(); this.fallbackShell = new EventEmitter(); this.statusMap = new Map(); } removeTerminal(index) { this.terminals.get(index)?.killProcess(); this.terminalOptionsChange.emit([ ...this.terminalOptions.slice(0, index), ...this.terminalOptions.slice(index + 1), ]); } trackByOption(_, option) { return option; } handleConnectionStatusChange(option, status) { this.statusMap.set(option, status); } reconnect(index) { this.terminals.get(index).reconnect(); } static { this.ɵfac = function TerminalGroupComponent_Factory(t) { return new (t || TerminalGroupComponent)(); }; } static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TerminalGroupComponent, selectors: [["acl-terminal-group"]], contentQueries: function TerminalGroupComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) { i0.ɵɵcontentQuery(dirIndex, TerminalExtraButtonDirective, 5); i0.ɵɵcontentQuery(dirIndex, TerminalExtraButtonDirective, 5, TemplateRef); i0.ɵɵcontentQuery(dirIndex, TerminalExtraContentDirective, 5, TemplateRef); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.terminalExtraButton = _t.first); i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.terminalExtraButtonRef = _t.first); i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.terminalExtraContentRef = _t.first); } }, viewQuery: function TerminalGroupComponent_Query(rf, ctx) { if (rf & 1) { i0.ɵɵviewQuery(TerminalComponent, 5); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.terminals = _t); } }, inputs: { selectedIndex: "selectedIndex", terminalOptions: "terminalOptions" }, outputs: { selectedIndexChange: "selectedIndexChange", terminalOptionsChange: "terminalOptionsChange", socketReady: "socketReady", fallbackShell: "fallbackShell" }, decls: 3, vars: 1, consts: [["disconnectedTip", ""], ["type", "card", 3, "lazy", "selectedIndex", "selectedIndexChange", 4, "ngIf"], ["type", "card", 3, "selectedIndexChange", "lazy", "selectedIndex"], [3, "closeable", "close", 4, "ngFor", "ngForOf", "ngForTrackBy"], [3, "close", "closeable"], ["class", "tw-flex", 4, "auiTabLabel"], [3, "connectionStatusChange", "socketReady", "fallbackShell", "option", "index", "extraButton", "extraContent"], [1, "tw-flex"], ["class", "tw-mr-4 tw-icon-l tw-text-primary", "icon", "spinner", 3, "auiTooltip", 4, "ngIf"], ["class", "tw-mr-4 tw-icon-l tw-text-red", "icon", "exclamation_triangle_s", "background", "triangle", 3, "auiTooltip", "auiTooltipContext", 4, "ngIf"], ["class", "tw-mr-4 tw-icon-l", 3, "icon", 4, "ngIf"], [3, "text", "tailLength"], ["icon", "spinner", 1, "tw-mr-4", "tw-icon-l", "tw-text-primary", 3, "auiTooltip"], ["icon", "exclamation_triangle_s", "background", "triangle", 1, "tw-mr-4", "tw-icon-l", "tw-text-red", 3, "auiTooltip", "auiTooltipContext"], [1, "tw-mr-4", "tw-icon-l", 3, "icon"], ["aui-button", "text", "size", "mini", 3, "click"]], template: function TerminalGroupComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵtemplate(0, TerminalGroupComponent_aui_tab_group_0_Template, 2, 4, "aui-tab-group", 1)(1, TerminalGroupComponent_ng_template_1_Template, 6, 6, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor); } if (rf & 2) { i0.ɵɵproperty("ngIf", ctx.terminalOptions == null ? null : ctx.terminalOptions.length); } }, styles: ["[_nghost-%COMP%] aui-tab-body, [_nghost-%COMP%] .aui-tab-body{display:block;width:100%;min-height:100%;height:100%}[_nghost-%COMP%] >aui-tab-group>.aui-tab-group{height:100%}[_nghost-%COMP%] >aui-tab-group>.aui-tab-group .aui-tab-group__body-wrapper{display:flex;flex:1 1 0;height:0}[_nghost-%COMP%] .aui-tab-body{display:flex}[_nghost-%COMP%] .aui-tab-body__content{display:flex;flex-direction:column;flex:1;width:100%}[_nghost-%COMP%] acl-terminal[_ngcontent-%COMP%]{flex:1;height:0}"], changeDetection: 0 }); } } __decorate([ ValueHook(function (index) { this.terminals?.get(index)?.focus(); if (this.terminals?.get(index) && !this.hasActivatedMap.get(index)) { this.hasActivatedMap.set(index, true); this.terminals.get(index)?.activateTerminal(); } }), __metadata("design:type", Object) ], TerminalGroupComponent.prototype, "selectedIndex", void 0); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TerminalGroupComponent, [{ type: Component, args: [{ selector: 'acl-terminal-group', changeDetection: ChangeDetectionStrategy.OnPush, template: "<aui-tab-group\n *ngIf=\"terminalOptions?.length\"\n type=\"card\"\n [lazy]=\"true\"\n [selectedIndex]=\"selectedIndex\"\n (selectedIndexChange)=\"selectedIndexChange.emit($event)\"\n>\n <aui-tab\n *ngFor=\"\n let option of terminalOptions;\n let i = index;\n trackBy: trackByOption\n \"\n [closeable]=\"true\"\n (close)=\"removeTerminal(i)\"\n >\n <div\n *auiTabLabel\n class=\"tw-flex\"\n >\n <aui-icon\n *ngIf=\"\n [ConnectionStatus.Connecting, ConnectionStatus.ReConnecting].includes(\n statusMap.get(option)\n )\n \"\n class=\"tw-mr-4 tw-icon-l tw-text-primary\"\n icon=\"spinner\"\n [auiTooltip]=\"'exec_connecting' | translate\"\n ></aui-icon>\n <aui-icon\n *ngIf=\"\n [\n ConnectionStatus.Disconnected,\n ConnectionStatus.NoPermission\n ].includes(statusMap.get(option))\n \"\n class=\"tw-mr-4 tw-icon-l tw-text-red\"\n icon=\"exclamation_triangle_s\"\n background=\"triangle\"\n [auiTooltip]=\"disconnectedTip\"\n [auiTooltipContext]=\"{ index: i }\"\n ></aui-icon>\n <aui-icon\n *ngIf=\"\n statusMap.get(option) === ConnectionStatus.Connected && option.icon\n \"\n [icon]=\"option.icon\"\n class=\"tw-mr-4 tw-icon-l\"\n ></aui-icon>\n <acl-text-ellipsis\n [text]=\"option.label || option.pod\"\n [tailLength]=\"6\"\n ></acl-text-ellipsis>\n </div>\n <acl-terminal\n [option]=\"option\"\n [index]=\"i\"\n [extraButton]=\"\n terminalExtraButton?.enable ? terminalExtraButtonRef : null\n \"\n [extraContent]=\"terminalExtraContentRef\"\n (connectionStatusChange)=\"handleConnectionStatusChange(option, $event)\"\n (socketReady)=\"\n socketReady.emit({\n option,\n socket: $event,\n index: i\n })\n \"\n (fallbackShell)=\"\n fallbackShell.emit({\n option,\n shell: $event\n })\n \"\n ></acl-terminal>\n </aui-tab>\n</aui-tab-group>\n\n<ng-template\n #disconnectedTip\n let-i=\"index\"\n>\n <span>{{ 'exec_disconnected_tip' | translate }}</span>\n <button\n aui-button=\"text\"\n size=\"mini\"\n (click)=\"reconnect(i)\"\n >\n {{ 'reconnect' | translate }}\n </button>\n</ng-template>\n", styles: [":host ::ng-deep aui-tab-body,:host ::ng-deep .aui-tab-body{display:block;width:100%;min-height:100%;height:100%}:host ::ng-deep>aui-tab-group>.aui-tab-group{height:100%}:host ::ng-deep>aui-tab-group>.aui-tab-group .aui-tab-group__body-wrapper{display:flex;flex:1 1 0;height:0}:host ::ng-deep .aui-tab-body{display:flex}:host ::ng-deep .aui-tab-body__content{display:flex;flex-direction:column;flex:1;width:100%}:host acl-terminal{flex:1;height:0}\n"] }] }], null, { selectedIndex: [{ type: Input }], terminalOptions: [{ type: Input }], terminalExtraButton: [{ type: ContentChild, args: [TerminalExtraButtonDirective] }], terminalExtraButtonRef: [{ type: ContentChild, args: [TerminalExtraButtonDirective, { read: TemplateRef, }] }], terminalExtraContentRef: [{ type: ContentChild, args: [TerminalExtraContentDirective, { read: TemplateRef, }] }], selectedIndexChange: [{ type: Output }], terminalOptionsChange: [{ type: Output }], socketReady: [{ type: Output }], fallbackShell: [{ type: Output }], terminals: [{ type: ViewChildren, args: [TerminalComponent] }] }); })(); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TerminalGroupComponent, { className: "TerminalGroupComponent" }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2V4ZWMvdGVybWluYWwtZ3JvdXAvY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL2V4ZWMvdGVybWluYWwtZ3JvdXAvdGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUNYLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7OztJQ0twRCwrQkFTWTs7O0lBRFYsb0VBQTRDOzs7SUFFOUMsK0JBWVk7Ozs7O0lBRFYsQUFEQSwrQ0FBOEIsdURBQ0k7OztJQUVwQywrQkFNWTs7O0lBRlYscUNBQW9COzs7SUEvQnhCLDhCQUdDO0lBd0JDLEFBYkEsQUFWQSxpSEFTQyxvR0FhQSxxR0FPQTtJQUNELHdDQUdxQjtJQUN2QixpQkFBTTs7OztJQWpDRCxjQUtUO0lBTFMscUtBS1Q7SUFLUyxjQU1UO0lBTlMsdUtBTVQ7SUFPUyxjQUdUO0lBSFMsOEdBR1Q7SUFJUSxjQUFtQztJQUNuQyxBQURBLHVEQUFtQyxpQkFDbkI7Ozs7SUE3Q3RCLGtDQVFDO0lBREMsMk5BQVMsMkJBQWlCLEtBQUM7SUFFM0Isa0dBR0M7SUFvQ0QsdUNBcUJDO0lBTkMsQUFQQSxBQURBLGlSQUEwQixzREFBNEMsS0FBQyxnU0FFNUQsd0JBQ1Ysa0RBSUEsQ0FDUCxLQURPLGtQQUVVLDBCQUNWLG9DQUdBLENBQ1AsS0FETztJQUVMLEFBREcsaUJBQWUsRUFDUjs7Ozs7SUFoRVIsZ0NBQWtCO0lBMkNoQixlQUFpQjtJQUtqQixBQUhBLEFBREEsQUFEQSxrQ0FBaUIsZUFDTix1SUFHVixnREFDdUM7Ozs7SUE3RDlDLHdDQU1DO0lBREMscU9BQXVCLHVDQUFnQyxLQUFDO0lBRXhELCtGQVFDO0lBK0RILGlCQUFnQjs7O0lBMUVkLEFBREEsMkJBQWEsdUNBQ2tCO0lBS1QsY0FDWDtJQUNBLEFBRlcsZ0RBQ1gsc0NBR2I7Ozs7SUF1RUUsNEJBQU07SUFBQSxZQUF5Qzs7SUFBQSxpQkFBTztJQUN0RCxrQ0FJQztJQURDLDZNQUFTLHNCQUFZLEtBQUM7SUFFdEIsWUFDRjs7SUFBQSxpQkFBUzs7SUFQSCxjQUF5QztJQUF6QyxtRUFBeUM7SUFNN0MsZUFDRjtJQURFLGtFQUNGOztBRHRFRixNQUFNLE9BQU8sNEJBQTRCO0lBSHpDO1FBS0UsV0FBTSxHQUFpQixJQUFJLENBQUM7S0FDN0I7NkZBSFksNEJBQTRCO29FQUE1Qiw0QkFBNEI7O2lGQUE1Qiw0QkFBNEI7Y0FIeEMsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSwwQkFBMEI7YUFDckM7Z0JBR0MsTUFBTTtrQkFETCxLQUFLO21CQUFDLHdCQUF3Qjs7QUFPakMsTUFBTSxPQUFPLDZCQUE2Qjs4RkFBN0IsNkJBQTZCO29FQUE3Qiw2QkFBNkI7O2lGQUE3Qiw2QkFBNkI7Y0FIekMsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSwyQkFBMkI7YUFDdEM7O0FBU0QsTUFBTSxPQUFPLHNCQUFzQjtJQU5uQztRQU9FLHFCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBRTVCLG9CQUFlLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7UUFVckQsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFHbEIsb0JBQWUsR0FBcUIsRUFBRSxDQUFDO1FBZ0I5Qix3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBR2pELDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUFvQixDQUFDO1FBRzdELGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBSW5DLENBQUM7UUFHSSxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUdyQyxDQUFDO1FBS0wsY0FBUyxHQUFHLElBQUksR0FBRyxFQUFvQyxDQUFDO0tBd0J6RDtJQXRCQyxjQUFjLENBQUMsS0FBYTtRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDO1lBQzlCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztZQUN2QyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxDQUFTLEVBQUUsTUFBc0I7UUFDN0MsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELDRCQUE0QixDQUMxQixNQUFzQixFQUN0QixNQUF3QjtRQUV4QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFhO1FBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3hDLENBQUM7dUZBNUVVLHNCQUFzQjtvRUFBdEIsc0JBQXNCO3dDQWtCbkIsNEJBQTRCO3dDQUc1Qiw0QkFBNEIsS0FDbEMsV0FBVzt3Q0FJTCw2QkFBNkIsS0FDbkMsV0FBVzs7Ozs7OzsyQkF1QkwsaUJBQWlCOzs7OztZQ1BqQyxBQWhGQSwyRkFNQywyR0E2RUE7O1lBbEZFLHNGQUE2Qjs7O0FEaUQ5QjtJQVJDLFNBQVMsQ0FBQyxVQUF3QyxLQUFhO1FBQzlELElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3BDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25FLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDLENBQUM7OzZEQUVnQjtpRkFiUCxzQkFBc0I7Y0FObEMsU0FBUzsyQkFDRSxvQkFBb0IsbUJBR2IsdUJBQXVCLENBQUMsTUFBTTtnQkFlL0MsYUFBYTtrQkFEWixLQUFLO1lBSU4sZUFBZTtrQkFEZCxLQUFLO1lBSU4sbUJBQW1CO2tCQURsQixZQUFZO21CQUFDLDRCQUE0QjtZQU0xQyxzQkFBc0I7a0JBSHJCLFlBQVk7bUJBQUMsNEJBQTRCLEVBQUU7b0JBQzFDLElBQUksRUFBRSxXQUFXO2lCQUNsQjtZQU1ELHVCQUF1QjtrQkFIdEIsWUFBWTttQkFBQyw2QkFBNkIsRUFBRTtvQkFDM0MsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCO1lBSVEsbUJBQW1CO2tCQUQzQixNQUFNO1lBSUUscUJBQXFCO2tCQUQ3QixNQUFNO1lBSUUsV0FBVztrQkFEbkIsTUFBTTtZQVFFLGFBQWE7a0JBRHJCLE1BQU07WUFPUCxTQUFTO2tCQURSLFlBQVk7bUJBQUMsaUJBQWlCOztrRkFsRHBCLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFZhbHVlSG9vayB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvcHVibGljLWFwaSc7XG5pbXBvcnQgeyBDb25uZWN0aW9uU3RhdHVzIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFRlcm1pbmFsQ29tcG9uZW50IH0gZnJvbSAnLi4vdGVybWluYWwvY29tcG9uZW50JztcbmltcG9ydCB7IFRlcm1pbmFsT3B0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYWNsVGVybWluYWxFeHRyYUJ1dHRvbl0nLFxufSlcbmV4cG9ydCBjbGFzcyBUZXJtaW5hbEV4dHJhQnV0dG9uRGlyZWN0aXZlIHtcbiAgQElucHV0KCdhY2xUZXJtaW5hbEV4dHJhQnV0dG9uJylcbiAgZW5hYmxlOiBib29sZWFuIHwgJycgPSB0cnVlO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYWNsVGVybWluYWxFeHRyYUNvbnRlbnRdJyxcbn0pXG5leHBvcnQgY2xhc3MgVGVybWluYWxFeHRyYUNvbnRlbnREaXJlY3RpdmUge31cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWNsLXRlcm1pbmFsLWdyb3VwJyxcbiAgdGVtcGxhdGVVcmw6ICd0ZW1wbGF0ZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3N0eWxlLnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRlcm1pbmFsR3JvdXBDb21wb25lbnQge1xuICBDb25uZWN0aW9uU3RhdHVzID0gQ29ubmVjdGlvblN0YXR1cztcblxuICBwcml2YXRlIGhhc0FjdGl2YXRlZE1hcCA9IG5ldyBNYXA8bnVtYmVyLCBib29sZWFuPigpO1xuXG4gIEBWYWx1ZUhvb2soZnVuY3Rpb24gKHRoaXM6IFRlcm1pbmFsR3JvdXBDb21wb25lbnQsIGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnRlcm1pbmFscz8uZ2V0KGluZGV4KT8uZm9jdXMoKTtcbiAgICBpZiAodGhpcy50ZXJtaW5hbHM/LmdldChpbmRleCkgJiYgIXRoaXMuaGFzQWN0aXZhdGVkTWFwLmdldChpbmRleCkpIHtcbiAgICAgIHRoaXMuaGFzQWN0aXZhdGVkTWFwLnNldChpbmRleCwgdHJ1ZSk7XG4gICAgICB0aGlzLnRlcm1pbmFscy5nZXQoaW5kZXgpPy5hY3RpdmF0ZVRlcm1pbmFsKCk7XG4gICAgfVxuICB9KVxuICBASW5wdXQoKVxuICBzZWxlY3RlZEluZGV4ID0gMDtcblxuICBASW5wdXQoKVxuICB0ZXJtaW5hbE9wdGlvbnM6IFRlcm1pbmFsT3B0aW9uW10gPSBbXTtcblxuICBAQ29udGVudENoaWxkKFRlcm1pbmFsRXh0cmFCdXR0b25EaXJlY3RpdmUpXG4gIHRlcm1pbmFsRXh0cmFCdXR0b246IFRlcm1pbmFsRXh0cmFCdXR0b25EaXJlY3RpdmU7XG5cbiAgQENvbnRlbnRDaGlsZChUZXJtaW5hbEV4dHJhQnV0dG9uRGlyZWN0aXZlLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gIH0pXG4gIHRlcm1pbmFsRXh0cmFCdXR0b25SZWY6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIEBDb250ZW50Q2hpbGQoVGVybWluYWxFeHRyYUNvbnRlbnREaXJlY3RpdmUsIHtcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgfSlcbiAgdGVybWluYWxFeHRyYUNvbnRlbnRSZWY6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBzZWxlY3RlZEluZGV4Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IHRlcm1pbmFsT3B0aW9uc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGVybWluYWxPcHRpb25bXT4oKTtcblxuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgc29ja2V0UmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBvcHRpb246IFRlcm1pbmFsT3B0aW9uO1xuICAgIHNvY2tldDogV2ViU29ja2V0O1xuICAgIGluZGV4OiBudW1iZXI7XG4gIH0+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IGZhbGxiYWNrU2hlbGwgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBvcHRpb246IFRlcm1pbmFsT3B0aW9uO1xuICAgIHNoZWxsOiBzdHJpbmc7XG4gIH0+KCk7XG5cbiAgQFZpZXdDaGlsZHJlbihUZXJtaW5hbENvbXBvbmVudClcbiAgdGVybWluYWxzOiBRdWVyeUxpc3Q8VGVybWluYWxDb21wb25lbnQ+O1xuXG4gIHN0YXR1c01hcCA9IG5ldyBNYXA8VGVybWluYWxPcHRpb24sIENvbm5lY3Rpb25TdGF0dXM+KCk7XG5cbiAgcmVtb3ZlVGVybWluYWwoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMudGVybWluYWxzLmdldChpbmRleCk/LmtpbGxQcm9jZXNzKCk7XG4gICAgdGhpcy50ZXJtaW5hbE9wdGlvbnNDaGFuZ2UuZW1pdChbXG4gICAgICAuLi50aGlzLnRlcm1pbmFsT3B0aW9ucy5zbGljZSgwLCBpbmRleCksXG4gICAgICAuLi50aGlzLnRlcm1pbmFsT3B0aW9ucy5zbGljZShpbmRleCArIDEpLFxuICAgIF0pO1xuICB9XG5cbiAgdHJhY2tCeU9wdGlvbihfOiBudW1iZXIsIG9wdGlvbjogVGVybWluYWxPcHRpb24pIHtcbiAgICByZXR1cm4gb3B0aW9uO1xuICB9XG5cbiAgaGFuZGxlQ29ubmVjdGlvblN0YXR1c0NoYW5nZShcbiAgICBvcHRpb246IFRlcm1pbmFsT3B0aW9uLFxuICAgIHN0YXR1czogQ29ubmVjdGlvblN0YXR1cyxcbiAgKSB7XG4gICAgdGhpcy5zdGF0dXNNYXAuc2V0KG9wdGlvbiwgc3RhdHVzKTtcbiAgfVxuXG4gIHJlY29ubmVjdChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy50ZXJtaW5hbHMuZ2V0KGluZGV4KS5yZWNvbm5lY3QoKTtcbiAgfVxufVxuIiwiPGF1aS10YWItZ3JvdXBcbiAgKm5nSWY9XCJ0ZXJtaW5hbE9wdGlvbnM/Lmxlbmd0aFwiXG4gIHR5cGU9XCJjYXJkXCJcbiAgW2xhenldPVwidHJ1ZVwiXG4gIFtzZWxlY3RlZEluZGV4XT1cInNlbGVjdGVkSW5kZXhcIlxuICAoc2VsZWN0ZWRJbmRleENoYW5nZSk9XCJzZWxlY3RlZEluZGV4Q2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4+XG4gIDxhdWktdGFiXG4gICAgKm5nRm9yPVwiXG4gICAgICBsZXQgb3B0aW9uIG9mIHRlcm1pbmFsT3B0aW9ucztcbiAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICB0cmFja0J5OiB0cmFja0J5T3B0aW9uXG4gICAgXCJcbiAgICBbY2xvc2VhYmxlXT1cInRydWVcIlxuICAgIChjbG9zZSk9XCJyZW1vdmVUZXJtaW5hbChpKVwiXG4gID5cbiAgICA8ZGl2XG4gICAgICAqYXVpVGFiTGFiZWxcbiAgICAgIGNsYXNzPVwidHctZmxleFwiXG4gICAgPlxuICAgICAgPGF1aS1pY29uXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgW0Nvbm5lY3Rpb25TdGF0dXMuQ29ubmVjdGluZywgQ29ubmVjdGlvblN0YXR1cy5SZUNvbm5lY3RpbmddLmluY2x1ZGVzKFxuICAgICAgICAgICAgc3RhdHVzTWFwLmdldChvcHRpb24pXG4gICAgICAgICAgKVxuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cInR3LW1yLTQgdHctaWNvbi1sIHR3LXRleHQtcHJpbWFyeVwiXG4gICAgICAgIGljb249XCJzcGlubmVyXCJcbiAgICAgICAgW2F1aVRvb2x0aXBdPVwiJ2V4ZWNfY29ubmVjdGluZycgfCB0cmFuc2xhdGVcIlxuICAgICAgPjwvYXVpLWljb24+XG4gICAgICA8YXVpLWljb25cbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBbXG4gICAgICAgICAgICBDb25uZWN0aW9uU3RhdHVzLkRpc2Nvbm5lY3RlZCxcbiAgICAgICAgICAgIENvbm5lY3Rpb25TdGF0dXMuTm9QZXJtaXNzaW9uXG4gICAgICAgICAgXS5pbmNsdWRlcyhzdGF0dXNNYXAuZ2V0KG9wdGlvbikpXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwidHctbXItNCB0dy1pY29uLWwgdHctdGV4dC1yZWRcIlxuICAgICAgICBpY29uPVwiZXhjbGFtYXRpb25fdHJpYW5nbGVfc1wiXG4gICAgICAgIGJhY2tncm91bmQ9XCJ0cmlhbmdsZVwiXG4gICAgICAgIFthdWlUb29sdGlwXT1cImRpc2Nvbm5lY3RlZFRpcFwiXG4gICAgICAgIFthdWlUb29sdGlwQ29udGV4dF09XCJ7IGluZGV4OiBpIH1cIlxuICAgICAgPjwvYXVpLWljb24+XG4gICAgICA8YXVpLWljb25cbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICBzdGF0dXNNYXAuZ2V0KG9wdGlvbikgPT09IENvbm5lY3Rpb25TdGF0dXMuQ29ubmVjdGVkICYmIG9wdGlvbi5pY29uXG4gICAgICAgIFwiXG4gICAgICAgIFtpY29uXT1cIm9wdGlvbi5pY29uXCJcbiAgICAgICAgY2xhc3M9XCJ0dy1tci00IHR3LWljb24tbFwiXG4gICAgICA+PC9hdWktaWNvbj5cbiAgICAgIDxhY2wtdGV4dC1lbGxpcHNpc1xuICAgICAgICBbdGV4dF09XCJvcHRpb24ubGFiZWwgfHwgb3B0aW9uLnBvZFwiXG4gICAgICAgIFt0YWlsTGVuZ3RoXT1cIjZcIlxuICAgICAgPjwvYWNsLXRleHQtZWxsaXBzaXM+XG4gICAgPC9kaXY+XG4gICAgPGFjbC10ZXJtaW5hbFxuICAgICAgW29wdGlvbl09XCJvcHRpb25cIlxuICAgICAgW2luZGV4XT1cImlcIlxuICAgICAgW2V4dHJhQnV0dG9uXT1cIlxuICAgICAgICB0ZXJtaW5hbEV4dHJhQnV0dG9uPy5lbmFibGUgPyB0ZXJtaW5hbEV4dHJhQnV0dG9uUmVmIDogbnVsbFxuICAgICAgXCJcbiAgICAgIFtleHRyYUNvbnRlbnRdPVwidGVybWluYWxFeHRyYUNvbnRlbnRSZWZcIlxuICAgICAgKGNvbm5lY3Rpb25TdGF0dXNDaGFuZ2UpPVwiaGFuZGxlQ29ubmVjdGlvblN0YXR1c0NoYW5nZShvcHRpb24sICRldmVudClcIlxuICAgICAgKHNvY2tldFJlYWR5KT1cIlxuICAgICAgICBzb2NrZXRSZWFkeS5lbWl0KHtcbiAgICAgICAgICBvcHRpb24sXG4gICAgICAgICAgc29ja2V0OiAkZXZlbnQsXG4gICAgICAgICAgaW5kZXg6IGlcbiAgICAgICAgfSlcbiAgICAgIFwiXG4gICAgICAoZmFsbGJhY2tTaGVsbCk9XCJcbiAgICAgICAgZmFsbGJhY2tTaGVsbC5lbWl0KHtcbiAgICAgICAgICBvcHRpb24sXG4gICAgICAgICAgc2hlbGw6ICRldmVudFxuICAgICAgICB9KVxuICAgICAgXCJcbiAgICA+PC9hY2wtdGVybWluYWw+XG4gIDwvYXVpLXRhYj5cbjwvYXVpLXRhYi1ncm91cD5cblxuPG5nLXRlbXBsYXRlXG4gICNkaXNjb25uZWN0ZWRUaXBcbiAgbGV0LWk9XCJpbmRleFwiXG4+XG4gIDxzcGFuPnt7ICdleGVjX2Rpc2Nvbm5lY3RlZF90aXAnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICA8YnV0dG9uXG4gICAgYXVpLWJ1dHRvbj1cInRleHRcIlxuICAgIHNpemU9XCJtaW5pXCJcbiAgICAoY2xpY2spPVwicmVjb25uZWN0KGkpXCJcbiAgPlxuICAgIHt7ICdyZWNvbm5lY3QnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==