UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

183 lines 25.7 kB
/** * @packageDocumentation * @module account-menu */ import { setTheme as setChartTheme } from '@alauda/chart'; import { AlaudaMonacoProviderService } from '@alauda/code-editor'; import { ThemeService } from '@alauda/ui'; import { ChangeDetectionStrategy, Component, Optional } from '@angular/core'; import { toSignal } from '@angular/core/rxjs-interop'; import { combineLatest, map } from 'rxjs'; import { AuthorizationStateService } from '../../../../authorization/public-api'; import { LOCAL_STORAGE_KEY_THEME_MODE } from '../../../../core/public-api'; import { LOCALE_STORAGE, TranslateService, getAvailableLanguages, } from '../../../../translate/public-api'; import * as i0 from "@angular/core"; import * as i1 from "../../../../authorization/public-api"; import * as i2 from "../../../../translate/public-api"; import * as i3 from "@alauda/ui"; import * as i4 from "@alauda/code-editor"; const _c0 = ["*"]; function AccountMenuComponent_ng_template_6_aui_submenu_2_Template(rf, ctx) { if (rf & 1) { const _r2 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "aui-submenu", 6)(1, "div"); i0.ɵɵelement(2, "aui-icon", 11); i0.ɵɵelementStart(3, "span"); i0.ɵɵtext(4); i0.ɵɵpipe(5, "translate"); i0.ɵɵelementEnd()(); i0.ɵɵelementStart(6, "aui-menu-item", 12); i0.ɵɵlistener("click", function AccountMenuComponent_ng_template_6_aui_submenu_2_Template_aui_menu_item_click_6_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.setThemeMode("system")); }); i0.ɵɵtext(7); i0.ɵɵpipe(8, "translate"); i0.ɵɵelementEnd(); i0.ɵɵelementStart(9, "aui-menu-item", 12); i0.ɵɵlistener("click", function AccountMenuComponent_ng_template_6_aui_submenu_2_Template_aui_menu_item_click_9_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.setThemeMode("light")); }); i0.ɵɵtext(10); i0.ɵɵpipe(11, "translate"); i0.ɵɵelementEnd(); i0.ɵɵelementStart(12, "aui-menu-item", 12); i0.ɵɵlistener("click", function AccountMenuComponent_ng_template_6_aui_submenu_2_Template_aui_menu_item_click_12_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.setThemeMode("dark")); }); i0.ɵɵtext(13); i0.ɵɵpipe(14, "translate"); i0.ɵɵelementEnd()(); } if (rf & 2) { const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵadvance(2); i0.ɵɵproperty("icon", ctx_r2.themeMode === "system" ? "computer" : ctx_r2.themeMode === "light" ? "sun" : "moon"); i0.ɵɵadvance(2); i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 8, "appearance")); i0.ɵɵadvance(2); i0.ɵɵproperty("actived", ctx_r2.themeMode === "system"); i0.ɵɵadvance(); i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(8, 10, "follow_the_system"), " "); i0.ɵɵadvance(2); i0.ɵɵproperty("actived", ctx_r2.themeMode === "light"); i0.ɵɵadvance(); i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(11, 12, "light_theme"), " "); i0.ɵɵadvance(2); i0.ɵɵproperty("actived", ctx_r2.themeMode === "dark"); i0.ɵɵadvance(); i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(14, 14, "dark_theme"), " "); } } function AccountMenuComponent_ng_template_6_aui_menu_item_9_Template(rf, ctx) { if (rf & 1) { const _r4 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "aui-menu-item", 12); i0.ɵɵlistener("click", function AccountMenuComponent_ng_template_6_aui_menu_item_9_Template_aui_menu_item_click_0_listener() { const lang_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.changeLanguage(lang_r5.id)); }); i0.ɵɵtext(1); i0.ɵɵelementEnd(); } if (rf & 2) { const lang_r5 = ctx.$implicit; const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵproperty("actived", lang_r5.id === ctx_r2.$currentLang()); i0.ɵɵadvance(); i0.ɵɵtextInterpolate1(" ", lang_r5.name, " "); } } function AccountMenuComponent_ng_template_6_Template(rf, ctx) { if (rf & 1) { const _r1 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "aui-menu"); i0.ɵɵprojection(1); i0.ɵɵtemplate(2, AccountMenuComponent_ng_template_6_aui_submenu_2_Template, 15, 16, "aui-submenu", 5); i0.ɵɵelementStart(3, "aui-submenu", 6)(4, "div"); i0.ɵɵelement(5, "aui-icon", 7); i0.ɵɵelementStart(6, "span"); i0.ɵɵtext(7); i0.ɵɵpipe(8, "translate"); i0.ɵɵelementEnd()(); i0.ɵɵtemplate(9, AccountMenuComponent_ng_template_6_aui_menu_item_9_Template, 2, 2, "aui-menu-item", 8); i0.ɵɵelementEnd(); i0.ɵɵelementStart(10, "aui-menu-item", 9); i0.ɵɵlistener("click", function AccountMenuComponent_ng_template_6_Template_aui_menu_item_click_10_listener() { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.logout()); }); i0.ɵɵelement(11, "aui-icon", 10); i0.ɵɵelementStart(12, "span"); i0.ɵɵtext(13); i0.ɵɵpipe(14, "translate"); i0.ɵɵelementEnd()()(); } if (rf & 2) { const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", ctx_r2.themeMode !== "custom"); i0.ɵɵadvance(5); i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(8, 5, "language")); i0.ɵɵadvance(2); i0.ɵɵproperty("ngForOf", ctx_r2.languages); i0.ɵɵadvance(); i0.ɵɵproperty("divide", true); i0.ɵɵadvance(3); i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(14, 7, "logout")); } } export class AccountMenuComponent { constructor(auth, translate, theme, monacoService) { this.auth = auth; this.translate = translate; this.theme = theme; this.displayName$ = this.auth .getTokenPayload() .pipe(map(account => account.email || account.name)); this.languages = getAvailableLanguages(); this.$currentLang = toSignal(this.translate.locale$); this.initThemeMode(); this.theme.currentTheme$.subscribe(theme => { setChartTheme(theme); }); if (monacoService) { monacoService.initMonaco().then(() => { combineLatest([ this.theme.currentTheme$, monacoService.themeMode$, ]).subscribe(([theme, mode]) => { monacoService.changeThemeMode(mode, theme); }); }); } } logout() { // 审计记录登出 this.auth.logoutWithAudit(); } changeLanguage(lang) { localStorage.setItem(LOCALE_STORAGE, lang); window.location.reload(); } setThemeMode(v) { localStorage.setItem(LOCAL_STORAGE_KEY_THEME_MODE, v); this.themeMode = v; this.theme.setThemeMode(v); } initThemeMode() { let localTheme = localStorage.getItem(LOCAL_STORAGE_KEY_THEME_MODE); if (!localTheme) { localTheme = 'system'; localStorage.setItem(LOCAL_STORAGE_KEY_THEME_MODE, localTheme); } this.themeMode = localTheme; if (['system', 'light', 'dark'].includes(localTheme)) { this.theme.setThemeMode(localTheme); } } static { this.ɵfac = function AccountMenuComponent_Factory(t) { return new (t || AccountMenuComponent)(i0.ɵɵdirectiveInject(i1.AuthorizationStateService), i0.ɵɵdirectiveInject(i2.TranslateService), i0.ɵɵdirectiveInject(i3.ThemeService), i0.ɵɵdirectiveInject(i4.AlaudaMonacoProviderService, 8)); }; } static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AccountMenuComponent, selectors: [["acl-account-menu"]], ngContentSelectors: _c0, decls: 8, vars: 5, consts: [["menu", ""], [1, "account-menu", 3, "auiDropdown", "auiDropdownClass"], ["src", "header/portrait.svg", "alt", "portrait", 1, "account-menu__icon"], [1, "account-menu__display"], ["icon", "angle_down", 1, "account-menu__pointer"], ["class", "acl-account-menu-item", 4, "ngIf"], [1, "acl-account-menu-item"], ["icon", "prod:globe"], [3, "actived", "click", 4, "ngFor", "ngForOf"], [1, "acl-account-menu-item", 3, "click", "divide"], ["icon", "sign_out"], [3, "icon"], [3, "click", "actived"]], template: function AccountMenuComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵprojectionDef(); i0.ɵɵelementStart(0, "div", 1); i0.ɵɵelement(1, "img", 2); i0.ɵɵelementStart(2, "div", 3); i0.ɵɵtext(3); i0.ɵɵpipe(4, "async"); i0.ɵɵelementEnd(); i0.ɵɵelement(5, "aui-icon", 4); i0.ɵɵelementEnd(); i0.ɵɵtemplate(6, AccountMenuComponent_ng_template_6_Template, 15, 9, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor); } if (rf & 2) { const menu_r6 = i0.ɵɵreference(7); i0.ɵɵproperty("auiDropdown", menu_r6)("auiDropdownClass", "acl-page-header__tooltip"); i0.ɵɵadvance(3); i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 3, ctx.displayName$)); } }, styles: ["[_nghost-%COMP%]{display:block}.account-menu[_ngcontent-%COMP%]{display:flex;align-items:center;padding:0 8px 0 24px;height:32px;border-radius:2px;color:var(--acl-page-header-text-color);cursor:pointer;position:relative}.account-menu__icon[_ngcontent-%COMP%]{position:absolute;left:-16px;top:0;height:32px;width:32px;border-radius:50%;margin-right:8px}.account-menu[_ngcontent-%COMP%]:hover, .account-menu.isActive[_ngcontent-%COMP%]{color:#fff;background-color:rgb(var(--aui-color-primary))}.account-menu[_ngcontent-%COMP%]:hover .account-menu__icon[_ngcontent-%COMP%], .account-menu.isActive[_ngcontent-%COMP%] .account-menu__icon[_ngcontent-%COMP%]{border:2px solid rgb(var(--aui-color-primary));height:36px;width:36px;top:-2px;left:-18px}.account-menu__pointer[_ngcontent-%COMP%]{font-size:12px;margin-left:2px}.account-menu__display[_ngcontent-%COMP%]{max-width:175px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} .acl-page-header__tooltip{min-width:155px} .acl-page-header__tooltip .aui-menu-item:hover, .acl-page-header__tooltip .aui-submenu:hover{color:rgb(var(--aui-color-primary))} .acl-account-menu-item:not(:hover) .aui-icon{color:rgb(var(--aui-color-n-2))}"], changeDetection: 0 }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AccountMenuComponent, [{ type: Component, args: [{ selector: 'acl-account-menu', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"account-menu\"\n [auiDropdown]=\"menu\"\n [auiDropdownClass]=\"'acl-page-header__tooltip'\"\n>\n <img\n src=\"header/portrait.svg\"\n class=\"account-menu__icon\"\n alt=\"portrait\"\n />\n <div class=\"account-menu__display\">{{ displayName$ | async }}</div>\n <aui-icon\n class=\"account-menu__pointer\"\n icon=\"angle_down\"\n ></aui-icon>\n</div>\n\n<ng-template #menu>\n <aui-menu>\n <ng-content></ng-content>\n\n <aui-submenu\n *ngIf=\"themeMode !== 'custom'\"\n class=\"acl-account-menu-item\"\n >\n <div>\n <aui-icon\n [icon]=\"\n themeMode === 'system'\n ? 'computer'\n : themeMode === 'light'\n ? 'sun'\n : 'moon'\n \"\n ></aui-icon>\n <span>{{ 'appearance' | translate }}</span>\n </div>\n <aui-menu-item\n [actived]=\"themeMode === 'system'\"\n (click)=\"setThemeMode('system')\"\n >\n {{ 'follow_the_system' | translate }}\n </aui-menu-item>\n <aui-menu-item\n [actived]=\"themeMode === 'light'\"\n (click)=\"setThemeMode('light')\"\n >\n {{ 'light_theme' | translate }}\n </aui-menu-item>\n <aui-menu-item\n [actived]=\"themeMode === 'dark'\"\n (click)=\"setThemeMode('dark')\"\n >\n {{ 'dark_theme' | translate }}\n </aui-menu-item>\n </aui-submenu>\n\n <aui-submenu class=\"acl-account-menu-item\">\n <div>\n <aui-icon icon=\"prod:globe\"></aui-icon>\n <span>{{ 'language' | translate }}</span>\n </div>\n <aui-menu-item\n *ngFor=\"let lang of languages\"\n [actived]=\"lang.id === $currentLang()\"\n (click)=\"changeLanguage(lang.id)\"\n >\n {{ lang.name }}\n </aui-menu-item>\n </aui-submenu>\n\n <aui-menu-item\n class=\"acl-account-menu-item\"\n [divide]=\"true\"\n (click)=\"logout()\"\n >\n <aui-icon icon=\"sign_out\"></aui-icon>\n <span>{{ 'logout' | translate }}</span>\n </aui-menu-item>\n </aui-menu>\n</ng-template>\n", styles: [":host{display:block}.account-menu{display:flex;align-items:center;padding:0 8px 0 24px;height:32px;border-radius:2px;color:var(--acl-page-header-text-color);cursor:pointer;position:relative}.account-menu__icon{position:absolute;left:-16px;top:0;height:32px;width:32px;border-radius:50%;margin-right:8px}.account-menu:hover,.account-menu.isActive{color:#fff;background-color:rgb(var(--aui-color-primary))}.account-menu:hover .account-menu__icon,.account-menu.isActive .account-menu__icon{border:2px solid rgb(var(--aui-color-primary));height:36px;width:36px;top:-2px;left:-18px}.account-menu__pointer{font-size:12px;margin-left:2px}.account-menu__display{max-width:175px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}::ng-deep .acl-page-header__tooltip{min-width:155px}::ng-deep .acl-page-header__tooltip .aui-menu-item:hover,::ng-deep .acl-page-header__tooltip .aui-submenu:hover{color:rgb(var(--aui-color-primary))}::ng-deep .acl-account-menu-item:not(:hover) .aui-icon{color:rgb(var(--aui-color-n-2))}\n"] }] }], () => [{ type: i1.AuthorizationStateService }, { type: i2.TranslateService }, { type: i3.ThemeService }, { type: i4.AlaudaMonacoProviderService, decorators: [{ type: Optional }] }], null); })(); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AccountMenuComponent, { className: "AccountMenuComponent" }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL3BhZ2Utc2NhZmZvbGQvcGFnZS1oZWFkZXIvYWNjb3VudC1tZW51L2NvbXBvbmVudC9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvcGFnZS1zY2FmZm9sZC9wYWdlLWhlYWRlci9hY2NvdW50LW1lbnUvY29tcG9uZW50L3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFFBQVEsSUFBSSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEUsT0FBTyxFQUFhLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFMUMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDakYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0UsT0FBTyxFQUNMLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIscUJBQXFCLEdBQ3RCLE1BQU0sa0NBQWtDLENBQUM7Ozs7Ozs7OztJQ09wQyxBQUpGLHNDQUdDLFVBQ007SUFDSCwrQkFRWTtJQUNaLDRCQUFNO0lBQUEsWUFBOEI7O0lBQ3RDLEFBRHNDLGlCQUFPLEVBQ3ZDO0lBQ04seUNBR0M7SUFEQyw4TUFBUyxvQkFBYSxRQUFRLENBQUMsS0FBQztJQUVoQyxZQUNG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Q29udGVudCI6WyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICogQG1vZHVsZSBhY2NvdW50LW1lbnVcbiAqL1xuXG5pbXBvcnQgeyBzZXRUaGVtZSBhcyBzZXRDaGFydFRoZW1lIH0gZnJvbSAnQGFsYXVkYS9jaGFydCc7XG5pbXBvcnQgeyBBbGF1ZGFNb25hY29Qcm92aWRlclNlcnZpY2UgfSBmcm9tICdAYWxhdWRhL2NvZGUtZWRpdG9yJztcbmltcG9ydCB7IFRoZW1lTW9kZSwgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQXV0aG9yaXphdGlvblN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2F1dGhvcml6YXRpb24vcHVibGljLWFwaSc7XG5pbXBvcnQgeyBMT0NBTF9TVE9SQUdFX0tFWV9USEVNRV9NT0RFIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9wdWJsaWMtYXBpJztcbmltcG9ydCB7XG4gIExPQ0FMRV9TVE9SQUdFLFxuICBUcmFuc2xhdGVTZXJ2aWNlLFxuICBnZXRBdmFpbGFibGVMYW5ndWFnZXMsXG59IGZyb20gJy4uLy4uLy4uLy4uL3RyYW5zbGF0ZS9wdWJsaWMtYXBpJztcblxuZXhwb3J0IGludGVyZmFjZSBBY2NvdW50SW5mbyB7XG4gIGlzcz86IHN0cmluZztcbiAgc3ViPzogc3RyaW5nO1xuICBhdWQ/OiBzdHJpbmc7XG4gIGV4cD86IG51bWJlcjtcbiAgaWF0PzogbnVtYmVyO1xuICBhenA/OiBzdHJpbmc7XG4gIGF0X2hhc2g/OiBzdHJpbmc7XG4gIGVtYWlsPzogc3RyaW5nO1xuICBlbWFpbF92ZXJpZmllZD86IHRydWU7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHRva2VuPzogc3RyaW5nO1xuICBleHQ/OiB7XG4gICAgaXNfYWRtaW4/OiBib29sZWFuO1xuICAgIGNvbm5faWQ/OiBib29sZWFuO1xuICB9O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhY2wtYWNjb3VudC1tZW51JyxcbiAgdGVtcGxhdGVVcmw6ICd0ZW1wbGF0ZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3N0eWxlLnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFjY291bnRNZW51Q29tcG9uZW50IHtcbiAgZGlzcGxheU5hbWUkID0gdGhpcy5hdXRoXG4gICAgLmdldFRva2VuUGF5bG9hZDxBY2NvdW50SW5mbz4oKVxuICAgIC5waXBlKG1hcChhY2NvdW50ID0+IGFjY291bnQuZW1haWwgfHwgYWNjb3VudC5uYW1lKSk7XG5cbiAgdGhlbWVNb2RlOiBzdHJpbmc7XG5cbiAgbGFuZ3VhZ2VzID0gZ2V0QXZhaWxhYmxlTGFuZ3VhZ2VzKCk7XG5cbiAgJGN1cnJlbnRMYW5nID0gdG9TaWduYWwodGhpcy50cmFuc2xhdGUubG9jYWxlJCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBhdXRoOiBBdXRob3JpemF0aW9uU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGhlbWU6IFRoZW1lU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBtb25hY29TZXJ2aWNlOiBBbGF1ZGFNb25hY29Qcm92aWRlclNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuaW5pdFRoZW1lTW9kZSgpO1xuICAgIHRoaXMudGhlbWUuY3VycmVudFRoZW1lJC5zdWJzY3JpYmUodGhlbWUgPT4ge1xuICAgICAgc2V0Q2hhcnRUaGVtZSh0aGVtZSk7XG4gICAgfSk7XG5cbiAgICBpZiAobW9uYWNvU2VydmljZSkge1xuICAgICAgbW9uYWNvU2VydmljZS5pbml0TW9uYWNvKCkudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgIHRoaXMudGhlbWUuY3VycmVudFRoZW1lJCxcbiAgICAgICAgICBtb25hY29TZXJ2aWNlLnRoZW1lTW9kZSQsXG4gICAgICAgIF0pLnN1YnNjcmliZSgoW3RoZW1lLCBtb2RlXSkgPT4ge1xuICAgICAgICAgIG1vbmFjb1NlcnZpY2UuY2hhbmdlVGhlbWVNb2RlKG1vZGUsIHRoZW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBsb2dvdXQoKSB7XG4gICAgLy8g5a6h6K6h6K6w5b2V55m75Ye6XG4gICAgdGhpcy5hdXRoLmxvZ291dFdpdGhBdWRpdCgpO1xuICB9XG5cbiAgY2hhbmdlTGFuZ3VhZ2UobGFuZzogc3RyaW5nKSB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTE9DQUxFX1NUT1JBR0UsIGxhbmcpO1xuICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgfVxuXG4gIHNldFRoZW1lTW9kZSh2OiBUaGVtZU1vZGUpIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMT0NBTF9TVE9SQUdFX0tFWV9USEVNRV9NT0RFLCB2KTtcbiAgICB0aGlzLnRoZW1lTW9kZSA9IHY7XG4gICAgdGhpcy50aGVtZS5zZXRUaGVtZU1vZGUodik7XG4gIH1cblxuICBwcml2YXRlIGluaXRUaGVtZU1vZGUoKSB7XG4gICAgbGV0IGxvY2FsVGhlbWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMT0NBTF9TVE9SQUdFX0tFWV9USEVNRV9NT0RFKTtcblxuICAgIGlmICghbG9jYWxUaGVtZSkge1xuICAgICAgbG9jYWxUaGVtZSA9ICdzeXN0ZW0nO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTE9DQUxfU1RPUkFHRV9LRVlfVEhFTUVfTU9ERSwgbG9jYWxUaGVtZSk7XG4gICAgfVxuXG4gICAgdGhpcy50aGVtZU1vZGUgPSBsb2NhbFRoZW1lO1xuXG4gICAgaWYgKFsnc3lzdGVtJywgJ2xpZ2h0JywgJ2RhcmsnXS5pbmNsdWRlcyhsb2NhbFRoZW1lKSkge1xuICAgICAgdGhpcy50aGVtZS5zZXRUaGVtZU1vZGUobG9jYWxUaGVtZSBhcyBUaGVtZU1vZGUpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImFjY291bnQtbWVudVwiXG4gIFthdWlEcm9wZG93bl09XCJtZW51XCJcbiAgW2F1aURyb3Bkb3duQ2xhc3NdPVwiJ2FjbC1wYWdlLWhlYWRlcl9fdG9vbHRpcCdcIlxuPlxuICA8aW1nXG4gICAgc3JjPVwiaGVhZGVyL3BvcnRyYWl0LnN2Z1wiXG4gICAgY2xhc3M9XCJhY2NvdW50LW1lbnVfX2ljb25cIlxuICAgIGFsdD1cInBvcnRyYWl0XCJcbiAgLz5cbiAgPGRpdiBjbGFzcz1cImFjY291bnQtbWVudV9fZGlzcGxheVwiPnt7IGRpc3BsYXlOYW1lJCB8IGFzeW5jIH19PC9kaXY+XG4gIDxhdWktaWNvblxuICAgIGNsYXNzPVwiYWNjb3VudC1tZW51X19wb2ludGVyXCJcbiAgICBpY29uPVwiYW5nbGVfZG93blwiXG4gID48L2F1aS1pY29uPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjbWVudT5cbiAgPGF1aS1tZW51PlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuICAgIDxhdWktc3VibWVudVxuICAgICAgKm5nSWY9XCJ0aGVtZU1vZGUgIT09ICdjdXN0b20nXCJcbiAgICAgIGNsYXNzPVwiYWNsLWFjY291bnQtbWVudS1pdGVtXCJcbiAgICA+XG4gICAgICA8ZGl2PlxuICAgICAgICA8YXVpLWljb25cbiAgICAgICAgICBbaWNvbl09XCJcbiAgICAgICAgICAgIHRoZW1lTW9kZSA9PT0gJ3N5c3RlbSdcbiAgICAgICAgICAgICAgPyAnY29tcHV0ZXInXG4gICAgICAgICAgICAgIDogdGhlbWVNb2RlID09PSAnbGlnaHQnXG4gICAgICAgICAgICAgICAgPyAnc3VuJ1xuICAgICAgICAgICAgICAgIDogJ21vb24nXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvYXVpLWljb24+XG4gICAgICAgIDxzcGFuPnt7ICdhcHBlYXJhbmNlJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGF1aS1tZW51LWl0ZW1cbiAgICAgICAgW2FjdGl2ZWRdPVwidGhlbWVNb2RlID09PSAnc3lzdGVtJ1wiXG4gICAgICAgIChjbGljayk9XCJzZXRUaGVtZU1vZGUoJ3N5c3RlbScpXCJcbiAgICAgID5cbiAgICAgICAge3sgJ2ZvbGxvd190aGVfc3lzdGVtJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9hdWktbWVudS1pdGVtPlxuICAgICAgPGF1aS1tZW51LWl0ZW1cbiAgICAgICAgW2FjdGl2ZWRdPVwidGhlbWVNb2RlID09PSAnbGlnaHQnXCJcbiAgICAgICAgKGNsaWNrKT1cInNldFRoZW1lTW9kZSgnbGlnaHQnKVwiXG4gICAgICA+XG4gICAgICAgIHt7ICdsaWdodF90aGVtZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYXVpLW1lbnUtaXRlbT5cbiAgICAgIDxhdWktbWVudS1pdGVtXG4gICAgICAgIFthY3RpdmVkXT1cInRoZW1lTW9kZSA9PT0gJ2RhcmsnXCJcbiAgICAgICAgKGNsaWNrKT1cInNldFRoZW1lTW9kZSgnZGFyaycpXCJcbiAgICAgID5cbiAgICAgICAge3sgJ2RhcmtfdGhlbWUnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2F1aS1tZW51LWl0ZW0+XG4gICAgPC9hdWktc3VibWVudT5cblxuICAgIDxhdWktc3VibWVudSBjbGFzcz1cImFjbC1hY2NvdW50LW1lbnUtaXRlbVwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPGF1aS1pY29uIGljb249XCJwcm9kOmdsb2JlXCI+PC9hdWktaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgJ2xhbmd1YWdlJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGF1aS1tZW51LWl0ZW1cbiAgICAgICAgKm5nRm9yPVwibGV0IGxhbmcgb2YgbGFuZ3VhZ2VzXCJcbiAgICAgICAgW2FjdGl2ZWRdPVwibGFuZy5pZCA9PT0gJGN1cnJlbnRMYW5nKClcIlxuICAgICAgICAoY2xpY2spPVwiY2hhbmdlTGFuZ3VhZ2UobGFuZy5pZClcIlxuICAgICAgPlxuICAgICAgICB7eyBsYW5nLm5hbWUgfX1cbiAgICAgIDwvYXVpLW1lbnUtaXRlbT5cbiAgICA8L2F1aS1zdWJtZW51PlxuXG4gICAgPGF1aS1tZW51LWl0ZW1cbiAgICAgIGNsYXNzPVwiYWNsLWFjY291bnQtbWVudS1pdGVtXCJcbiAgICAgIFtkaXZpZGVdPVwidHJ1ZVwiXG4gICAgICAoY2xpY2spPVwibG9nb3V0KClcIlxuICAgID5cbiAgICAgIDxhdWktaWNvbiBpY29uPVwic2lnbl9vdXRcIj48L2F1aS1pY29uPlxuICAgICAgPHNwYW4+e3sgJ2xvZ291dCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9hdWktbWVudS1pdGVtPlxuICA8L2F1aS1tZW51PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==