@netgrif/components
Version:
Netgrif Application Engine frontend Angular components
35 lines • 27.7 kB
JavaScript
import { Component } from '@angular/core';
import { AbstractToolbarComponent } from '@netgrif/components-core';
import * as i0 from "@angular/core";
import * as i1 from "@ngx-translate/core";
import * as i2 from "@netgrif/components-core";
import * as i3 from "@angular/router";
import * as i4 from "@angular/common";
import * as i5 from "@ngbracket/ngx-layout";
import * as i6 from "@ngbracket/ngx-layout/extended";
import * as i7 from "@angular/material/button";
import * as i8 from "@angular/material/icon";
import * as i9 from "@angular/material/menu";
import * as i10 from "@angular/material/toolbar";
export class ToolbarComponent extends AbstractToolbarComponent {
translate;
selectLangService;
userService;
router;
redirectService;
constructor(translate, selectLangService, userService, router, redirectService) {
super(translate, selectLangService, userService, router, redirectService);
this.translate = translate;
this.selectLangService = selectLangService;
this.userService = userService;
this.router = router;
this.redirectService = redirectService;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ToolbarComponent, deps: [{ token: i1.TranslateService }, { token: i2.LanguageService }, { token: i2.UserService }, { token: i3.Router }, { token: i2.RedirectService }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ToolbarComponent, selector: "nc-toolbar", usesInheritance: true, ngImport: i0, template: "<mat-toolbar color=\"primary\">\n <mat-toolbar-row fxLayout=\"row\">\n <div class=\"main-toolbar-logo\" fxFlex fxLayout=\"row\">\n <a href=\"/\">\n <img [src]=\"toolbarConfig.toolbarLogo\" [alt]=\"getToolbarTitle()\">\n </a>\n </div>\n <div fxFlex fxHide.gt-xs=\"false\" fxHide.lt-md=\"true\" fxLayout=\"row\" fxLayoutAlign=\"center\">\n {{getToolbarTitle()}}\n </div>\n\n <ng-template [ngIf]=\"toolbarConfig.simpleToolbar\">\n <div class=\"main-toolbar-menu\" fxFlex fxLayout=\"row\" fxLayoutAlign=\"end center\">\n <ng-template [ngIf]=\"!isImpersonating()\">\n <span class=\"main-toolbar-logged-user\" fxHide.xs=\"true\">{{loggedUser.fullName}}</span>\n </ng-template>\n <ng-template [ngIf]=\"isImpersonating()\">\n <span class=\"main-toolbar-logged-user\" fxHide.xs=\"true\">{{loggedUser.fullName}}</span>\n <span\n class=\"info-text\">({{ 'side-menu.impersonation.impersonating' | translate }}</span> {{ loggedUser.getSelfOrImpersonated().fullName }}\n <span class=\"info-text\">)</span>\n </ng-template>\n <div fxLayoutAlign=\"end\" *ngIf=\"toolbarConfig.logoutEnabled\">\n <button class=\"menu-item-focus-overlay\" mat-button (click)=\"logout()\">\n <mat-icon>exit_to_app</mat-icon>\n <span>{{ 'toolbar.menu.logout' | translate }}</span>\n </button>\n </div>\n </div>\n </ng-template>\n <ng-template [ngIf]=\"!toolbarConfig.simpleToolbar\">\n <div class=\"main-toolbar-menu\" fxFlex fxLayout=\"row\" fxLayoutAlign=\"end\">\n <button mat-button [matMenuTriggerFor]=\"mainMenu\" class=\"main-toolbar-menu-button\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <ng-template [ngIf]=\"!isImpersonating()\">\n <span class=\"main-toolbar-logged-user\" fxHide.xs=\"true\">{{loggedUser.fullName}}</span>\n </ng-template>\n <ng-template [ngIf]=\"isImpersonating()\">\n <span class=\"main-toolbar-logged-user\" fxHide.xs=\"true\">{{loggedUser.fullName}}</span>\n <span\n class=\"info-text\">({{ 'side-menu.impersonation.impersonating' | translate }}</span> {{ loggedUser.getSelfOrImpersonated().fullName }}\n <span class=\"info-text\">)</span>\n </ng-template>\n <mat-icon class=\"main-toolbar-icon\" aria-hidden=\"false\" aria-label=\"Example home icon\">account_circle\n </mat-icon>\n <mat-menu #mainMenu=\"matMenu\" class=\"main-toolbar-opened-menu\">\n <button mat-menu-item [matMenuTriggerFor]=\"languages\" *ngIf=\"toolbarConfig.languageEnabled\">\n <mat-icon class=\"main-toolbar-menu-icon\" aria-hidden=\"false\" aria-label=\"Application language select\">\n language\n </mat-icon>\n {{ 'toolbar.menu.lang' | translate }}\n </button>\n <button mat-menu-item (click)=\"profile()\" *ngIf=\"toolbarConfig.profileEnabled\">\n <mat-icon class=\"main-toolbar-menu-icon\" aria-hidden=\"false\" aria-label=\"Go to profile\">\n account_circle\n </mat-icon>\n {{ 'toolbar.menu.profile' | translate }}\n </button>\n <button mat-menu-item (click)=\"logout()\" *ngIf=\"toolbarConfig.logoutEnabled\">\n <mat-icon class=\"main-toolbar-menu-icon\" aria-hidden=\"false\" aria-label=\"Logout\">\n exit_to_app\n </mat-icon>\n {{ 'toolbar.menu.logout' | translate }}\n </button>\n </mat-menu>\n <mat-menu #languages=\"matMenu\">\n <button mat-menu-item (click)=\"setLang('en')\">{{ 'toolbar.menu.en' | translate }}\n <mat-icon *ngIf=\"activeLang('en')\" class=\"main-toolbar-menu-icon\"\n aria-hidden=\"false\" aria-label=\"English\">keyboard_arrow_left\n </mat-icon>\n </button>\n <button mat-menu-item (click)=\"setLang('sk')\">{{ 'toolbar.menu.sk' | translate }}\n <mat-icon *ngIf=\"activeLang('sk')\" class=\"main-toolbar-menu-icon\"\n aria-hidden=\"false\" aria-label=\"Slovak\">keyboard_arrow_left\n </mat-icon>\n </button>\n <button mat-menu-item (click)=\"setLang('de')\">{{ 'toolbar.menu.de' | translate }}\n <mat-icon *ngIf=\"activeLang('de')\" class=\"main-toolbar-menu-icon\"\n aria-hidden=\"false\" aria-label=\"Deutsch\">keyboard_arrow_left\n </mat-icon>\n </button>\n </mat-menu>\n </button>\n </div>\n </ng-template>\n </mat-toolbar-row>\n</mat-toolbar>\n", styles: [".main-toolbar-logo{max-height:60%}.main-toolbar-logo img{width:120px}mat-icon.main-toolbar-icon{font-size:48px;height:100%;margin-right:15px}.main-toolbar-logged-user{margin-right:15px}.main-toolbar-menu,.main-toolbar-menu-button{font-size:20px;height:100%}.main-toolbar-menu-icon{font-size:23px}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i5.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i5.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i6.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i9.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i9.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i10.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: i10.MatToolbarRow, selector: "mat-toolbar-row", exportAs: ["matToolbarRow"] }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ToolbarComponent, decorators: [{
type: Component,
args: [{ selector: 'nc-toolbar', template: "<mat-toolbar color=\"primary\">\n <mat-toolbar-row fxLayout=\"row\">\n <div class=\"main-toolbar-logo\" fxFlex fxLayout=\"row\">\n <a href=\"/\">\n <img [src]=\"toolbarConfig.toolbarLogo\" [alt]=\"getToolbarTitle()\">\n </a>\n </div>\n <div fxFlex fxHide.gt-xs=\"false\" fxHide.lt-md=\"true\" fxLayout=\"row\" fxLayoutAlign=\"center\">\n {{getToolbarTitle()}}\n </div>\n\n <ng-template [ngIf]=\"toolbarConfig.simpleToolbar\">\n <div class=\"main-toolbar-menu\" fxFlex fxLayout=\"row\" fxLayoutAlign=\"end center\">\n <ng-template [ngIf]=\"!isImpersonating()\">\n <span class=\"main-toolbar-logged-user\" fxHide.xs=\"true\">{{loggedUser.fullName}}</span>\n </ng-template>\n <ng-template [ngIf]=\"isImpersonating()\">\n <span class=\"main-toolbar-logged-user\" fxHide.xs=\"true\">{{loggedUser.fullName}}</span>\n <span\n class=\"info-text\">({{ 'side-menu.impersonation.impersonating' | translate }}</span> {{ loggedUser.getSelfOrImpersonated().fullName }}\n <span class=\"info-text\">)</span>\n </ng-template>\n <div fxLayoutAlign=\"end\" *ngIf=\"toolbarConfig.logoutEnabled\">\n <button class=\"menu-item-focus-overlay\" mat-button (click)=\"logout()\">\n <mat-icon>exit_to_app</mat-icon>\n <span>{{ 'toolbar.menu.logout' | translate }}</span>\n </button>\n </div>\n </div>\n </ng-template>\n <ng-template [ngIf]=\"!toolbarConfig.simpleToolbar\">\n <div class=\"main-toolbar-menu\" fxFlex fxLayout=\"row\" fxLayoutAlign=\"end\">\n <button mat-button [matMenuTriggerFor]=\"mainMenu\" class=\"main-toolbar-menu-button\" fxLayout=\"row\" fxLayoutAlign=\"center center\">\n <ng-template [ngIf]=\"!isImpersonating()\">\n <span class=\"main-toolbar-logged-user\" fxHide.xs=\"true\">{{loggedUser.fullName}}</span>\n </ng-template>\n <ng-template [ngIf]=\"isImpersonating()\">\n <span class=\"main-toolbar-logged-user\" fxHide.xs=\"true\">{{loggedUser.fullName}}</span>\n <span\n class=\"info-text\">({{ 'side-menu.impersonation.impersonating' | translate }}</span> {{ loggedUser.getSelfOrImpersonated().fullName }}\n <span class=\"info-text\">)</span>\n </ng-template>\n <mat-icon class=\"main-toolbar-icon\" aria-hidden=\"false\" aria-label=\"Example home icon\">account_circle\n </mat-icon>\n <mat-menu #mainMenu=\"matMenu\" class=\"main-toolbar-opened-menu\">\n <button mat-menu-item [matMenuTriggerFor]=\"languages\" *ngIf=\"toolbarConfig.languageEnabled\">\n <mat-icon class=\"main-toolbar-menu-icon\" aria-hidden=\"false\" aria-label=\"Application language select\">\n language\n </mat-icon>\n {{ 'toolbar.menu.lang' | translate }}\n </button>\n <button mat-menu-item (click)=\"profile()\" *ngIf=\"toolbarConfig.profileEnabled\">\n <mat-icon class=\"main-toolbar-menu-icon\" aria-hidden=\"false\" aria-label=\"Go to profile\">\n account_circle\n </mat-icon>\n {{ 'toolbar.menu.profile' | translate }}\n </button>\n <button mat-menu-item (click)=\"logout()\" *ngIf=\"toolbarConfig.logoutEnabled\">\n <mat-icon class=\"main-toolbar-menu-icon\" aria-hidden=\"false\" aria-label=\"Logout\">\n exit_to_app\n </mat-icon>\n {{ 'toolbar.menu.logout' | translate }}\n </button>\n </mat-menu>\n <mat-menu #languages=\"matMenu\">\n <button mat-menu-item (click)=\"setLang('en')\">{{ 'toolbar.menu.en' | translate }}\n <mat-icon *ngIf=\"activeLang('en')\" class=\"main-toolbar-menu-icon\"\n aria-hidden=\"false\" aria-label=\"English\">keyboard_arrow_left\n </mat-icon>\n </button>\n <button mat-menu-item (click)=\"setLang('sk')\">{{ 'toolbar.menu.sk' | translate }}\n <mat-icon *ngIf=\"activeLang('sk')\" class=\"main-toolbar-menu-icon\"\n aria-hidden=\"false\" aria-label=\"Slovak\">keyboard_arrow_left\n </mat-icon>\n </button>\n <button mat-menu-item (click)=\"setLang('de')\">{{ 'toolbar.menu.de' | translate }}\n <mat-icon *ngIf=\"activeLang('de')\" class=\"main-toolbar-menu-icon\"\n aria-hidden=\"false\" aria-label=\"Deutsch\">keyboard_arrow_left\n </mat-icon>\n </button>\n </mat-menu>\n </button>\n </div>\n </ng-template>\n </mat-toolbar-row>\n</mat-toolbar>\n", styles: [".main-toolbar-logo{max-height:60%}.main-toolbar-logo img{width:120px}mat-icon.main-toolbar-icon{font-size:48px;height:100%;margin-right:15px}.main-toolbar-logged-user{margin-right:15px}.main-toolbar-menu,.main-toolbar-menu-button{font-size:20px;height:100%}.main-toolbar-menu-icon{font-size:23px}\n"] }]
}], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.LanguageService }, { type: i2.UserService }, { type: i3.Router }, { type: i2.RedirectService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMvc3JjL2xpYi90b29sYmFyL3Rvb2xiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzL3NyYy9saWIvdG9vbGJhci90b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFeEMsT0FBTyxFQUFDLHdCQUF3QixFQUFnRCxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7QUFRakgsTUFBTSxPQUFPLGdCQUFpQixTQUFRLHdCQUF3QjtJQUVwQztJQUF1QztJQUN2QztJQUFvQztJQUEwQjtJQURwRixZQUFzQixTQUEyQixFQUFZLGlCQUFrQyxFQUN6RSxXQUF3QixFQUFZLE1BQWMsRUFBWSxlQUFnQztRQUNoSCxLQUFLLENBQUMsU0FBUyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFGeEQsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFBWSxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWlCO1FBQ3pFLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVksV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFZLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtJQUVwSCxDQUFDO3dHQUxRLGdCQUFnQjs0RkFBaEIsZ0JBQWdCLHlFQ1Y3Qiw2K0tBc0ZBOzs0RkQ1RWEsZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNJLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBYnN0cmFjdFRvb2xiYXJDb21wb25lbnQsIExhbmd1YWdlU2VydmljZSwgUmVkaXJlY3RTZXJ2aWNlLCBVc2VyU2VydmljZX0gZnJvbSAnQG5ldGdyaWYvY29tcG9uZW50cy1jb3JlJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25jLXRvb2xiYXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90b29sYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90b29sYmFyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVG9vbGJhckNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0VG9vbGJhckNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBwcm90ZWN0ZWQgc2VsZWN0TGFuZ1NlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLCBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsIHByb3RlY3RlZCByZWRpcmVjdFNlcnZpY2U6IFJlZGlyZWN0U2VydmljZSkge1xuICAgICAgICBzdXBlcih0cmFuc2xhdGUsIHNlbGVjdExhbmdTZXJ2aWNlLCB1c2VyU2VydmljZSwgcm91dGVyLCByZWRpcmVjdFNlcnZpY2UpO1xuICAgIH1cbn1cbiIsIjxtYXQtdG9vbGJhciBjb2xvcj1cInByaW1hcnlcIj5cbiAgICA8bWF0LXRvb2xiYXItcm93IGZ4TGF5b3V0PVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLXRvb2xiYXItbG9nb1wiIGZ4RmxleCBmeExheW91dD1cInJvd1wiPlxuICAgICAgICAgICAgPGEgaHJlZj1cIi9cIj5cbiAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwidG9vbGJhckNvbmZpZy50b29sYmFyTG9nb1wiIFthbHRdPVwiZ2V0VG9vbGJhclRpdGxlKClcIj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgZnhGbGV4IGZ4SGlkZS5ndC14cz1cImZhbHNlXCIgZnhIaWRlLmx0LW1kPVwidHJ1ZVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlclwiPlxuICAgICAgICAgICAge3tnZXRUb29sYmFyVGl0bGUoKX19XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJ0b29sYmFyQ29uZmlnLnNpbXBsZVRvb2xiYXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLXRvb2xiYXItbWVudVwiIGZ4RmxleCBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJlbmQgY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFpc0ltcGVyc29uYXRpbmcoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1haW4tdG9vbGJhci1sb2dnZWQtdXNlclwiIGZ4SGlkZS54cz1cInRydWVcIj57e2xvZ2dlZFVzZXIuZnVsbE5hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJpc0ltcGVyc29uYXRpbmcoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1haW4tdG9vbGJhci1sb2dnZWQtdXNlclwiIGZ4SGlkZS54cz1cInRydWVcIj57e2xvZ2dlZFVzZXIuZnVsbE5hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5mby10ZXh0XCI+KHt7ICdzaWRlLW1lbnUuaW1wZXJzb25hdGlvbi5pbXBlcnNvbmF0aW5nJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj4ge3sgbG9nZ2VkVXNlci5nZXRTZWxmT3JJbXBlcnNvbmF0ZWQoKS5mdWxsTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tdGV4dFwiPik8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0QWxpZ249XCJlbmRcIiAqbmdJZj1cInRvb2xiYXJDb25maWcubG9nb3V0RW5hYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWVudS1pdGVtLWZvY3VzLW92ZXJsYXlcIiBtYXQtYnV0dG9uIChjbGljayk9XCJsb2dvdXQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmV4aXRfdG9fYXBwPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ICd0b29sYmFyLm1lbnUubG9nb3V0JyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiF0b29sYmFyQ29uZmlnLnNpbXBsZVRvb2xiYXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLXRvb2xiYXItbWVudVwiIGZ4RmxleCBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJlbmRcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1haW5NZW51XCIgY2xhc3M9XCJtYWluLXRvb2xiYXItbWVudS1idXR0b25cIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhaXNJbXBlcnNvbmF0aW5nKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFpbi10b29sYmFyLWxvZ2dlZC11c2VyXCIgZnhIaWRlLnhzPVwidHJ1ZVwiPnt7bG9nZ2VkVXNlci5mdWxsTmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiaXNJbXBlcnNvbmF0aW5nKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFpbi10b29sYmFyLWxvZ2dlZC11c2VyXCIgZnhIaWRlLnhzPVwidHJ1ZVwiPnt7bG9nZ2VkVXNlci5mdWxsTmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImluZm8tdGV4dFwiPih7eyAnc2lkZS1tZW51LmltcGVyc29uYXRpb24uaW1wZXJzb25hdGluZycgfCB0cmFuc2xhdGUgfX08L3NwYW4+IHt7IGxvZ2dlZFVzZXIuZ2V0U2VsZk9ySW1wZXJzb25hdGVkKCkuZnVsbE5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mby10ZXh0XCI+KTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWFpbi10b29sYmFyLWljb25cIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgYXJpYS1sYWJlbD1cIkV4YW1wbGUgaG9tZSBpY29uXCI+YWNjb3VudF9jaXJjbGVcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNtYWluTWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cIm1haW4tdG9vbGJhci1vcGVuZWQtbWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJsYW5ndWFnZXNcIiAqbmdJZj1cInRvb2xiYXJDb25maWcubGFuZ3VhZ2VFbmFibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWFpbi10b29sYmFyLW1lbnUtaWNvblwiIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBhcmlhLWxhYmVsPVwiQXBwbGljYXRpb24gbGFuZ3VhZ2Ugc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAndG9vbGJhci5tZW51LmxhbmcnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicHJvZmlsZSgpXCIgKm5nSWY9XCJ0b29sYmFyQ29uZmlnLnByb2ZpbGVFbmFibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWFpbi10b29sYmFyLW1lbnUtaWNvblwiIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBhcmlhLWxhYmVsPVwiR28gdG8gcHJvZmlsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NvdW50X2NpcmNsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3Rvb2xiYXIubWVudS5wcm9maWxlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImxvZ291dCgpXCIgKm5nSWY9XCJ0b29sYmFyQ29uZmlnLmxvZ291dEVuYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYWluLXRvb2xiYXItbWVudS1pY29uXCIgYXJpYS1oaWRkZW49XCJmYWxzZVwiIGFyaWEtbGFiZWw9XCJMb2dvdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdF90b19hcHBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICd0b29sYmFyLm1lbnUubG9nb3V0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbGFuZ3VhZ2VzPVwibWF0TWVudVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJzZXRMYW5nKCdlbicpXCI+e3sgJ3Rvb2xiYXIubWVudS5lbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJhY3RpdmVMYW5nKCdlbicpXCIgY2xhc3M9XCJtYWluLXRvb2xiYXItbWVudS1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJmYWxzZVwiIGFyaWEtbGFiZWw9XCJFbmdsaXNoXCI+a2V5Ym9hcmRfYXJyb3dfbGVmdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic2V0TGFuZygnc2snKVwiPnt7ICd0b29sYmFyLm1lbnUuc2snIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiYWN0aXZlTGFuZygnc2snKVwiIGNsYXNzPVwibWFpbi10b29sYmFyLW1lbnUtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBhcmlhLWxhYmVsPVwiU2xvdmFrXCI+a2V5Ym9hcmRfYXJyb3dfbGVmdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic2V0TGFuZygnZGUnKVwiPnt7ICd0b29sYmFyLm1lbnUuZGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiYWN0aXZlTGFuZygnZGUnKVwiIGNsYXNzPVwibWFpbi10b29sYmFyLW1lbnUtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBhcmlhLWxhYmVsPVwiRGV1dHNjaFwiPmtleWJvYXJkX2Fycm93X2xlZnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L21hdC10b29sYmFyLXJvdz5cbjwvbWF0LXRvb2xiYXI+XG4iXX0=