@onecx/shell-core 4.43.1 → 5.0.1

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.
@@ -1,74 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import { animate, style, transition, trigger } from '@angular/animations';
3
- import { Component, EventEmitter, Input, Output } from '@angular/core';
4
- import { UntilDestroy } from '@ngneat/until-destroy';
5
- import { AppStateService, ThemeService } from '@onecx/angular-integration-interface';
6
- import { ImageLogoUrlUtils } from '@onecx/portal-integration-angular';
7
- import { combineLatest, map } from 'rxjs';
8
- import { SHELL_BFF_PREFIX } from '../../model/constants';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@onecx/angular-integration-interface";
11
- import * as i2 from "@angular/common";
12
- import * as i3 from "@onecx/angular-remote-components";
13
- import * as i4 from "@onecx/angular-accelerator";
14
- import * as i5 from "primeng/skeleton";
15
- import * as i6 from "primeng/ripple";
16
- let HeaderComponent = class HeaderComponent {
17
- constructor(themeService, appStateService) {
18
- this.themeService = themeService;
19
- this.appStateService = appStateService;
20
- this.menuExpanded = false;
21
- this.fallbackImg = false;
22
- this.fullPortalLayout = true;
23
- this.homeNavUrl = '/';
24
- this.homeNavTitle = 'Home';
25
- this.menuButtonClick = new EventEmitter();
26
- this.logoUrl$ = combineLatest([
27
- this.themeService.currentTheme$.asObservable(),
28
- this.appStateService.currentWorkspace$.asObservable(),
29
- ]).pipe(map(([theme, portal]) => {
30
- return ImageLogoUrlUtils.createLogoUrl(SHELL_BFF_PREFIX, theme.logoUrl || portal.logoUrl);
31
- }));
32
- }
33
- onMenuButtonClick(e) {
34
- this.menuButtonClick.emit(e);
35
- }
36
- };
37
- HeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: HeaderComponent, deps: [{ token: i1.ThemeService }, { token: i1.AppStateService }], target: i0.ɵɵFactoryTarget.Component });
38
- HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: HeaderComponent, selector: "ocx-shell-header", inputs: { menuButtonTitle: "menuButtonTitle", fullPortalLayout: "fullPortalLayout", homeNavUrl: "homeNavUrl", homeNavTitle: "homeNavTitle" }, outputs: { menuButtonClick: "menuButtonClick" }, ngImport: i0, template: "<div class=\"layout-topbar shadow-4\" id=\"header\" role=\"banner\">\n <div class=\"layout-topbar-left\">\n <a class=\"layout-topbar-logo\">\n <img\n id=\"app-logo\"\n [ocxSrc]=\"(logoUrl$ | async) ?? ''\"\n alt=\"Logo\"\n style=\"max-height: 100%; max-width: 100%\"\n *ngIf=\"(logoUrl$ | async) && !fallbackImg\"\n (error)=\"fallbackImg=true\"\n />\n <svg *ngIf=\"((logoUrl$ | async) === null) || fallbackImg\" width=\"160\" viewBox=\"0 0 283 72\" class=\"default-logo\">\n <defs id=\"SvgjsDefs4962\"></defs>\n <g\n id=\"SvgjsG4963\"\n featurekey=\"symbolFeature-0\"\n transform=\"matrix(0.7555406501686023,0,0,0.7555406501686023,-4.883814572467361,-0.26595028490140254)\"\n >\n <path\n xmlns=\"http://www.w3.org/2000/svg\"\n d=\"M88.54,46.256L9.464,0.616c-0.616-0.352-1.384-0.352-2,0c-0.62,0.36-1,1.02-1,1.736v91.296c0,0.716,0.38,1.375,1,1.731 c0.308,0.185,0.656,0.269,1,0.269c0.344,0,0.692-0.084,1-0.269L88.54,49.729c0.616-0.36,1-1.021,1-1.736 C89.54,47.276,89.152,46.616,88.54,46.256z M60.08,49.771L21.388,69.805c-0.288,0.147-0.604,0.223-0.92,0.223 c-0.36,0-0.72-0.092-1.04-0.287c-0.596-0.364-0.96-1.008-0.96-1.713v-40.06c0-0.696,0.364-1.344,0.96-1.712 c0.596-0.36,1.336-0.392,1.96-0.068l38.696,20.028c0.664,0.344,1.084,1.032,1.084,1.772C61.164,48.74,60.744,49.428,60.08,49.771z\"\n ></path>\n <path xmlns=\"http://www.w3.org/2000/svg\" d=\"M22.464,64.744l32.345-16.748l-32.345-16.74V64.744z\"></path>\n </g>\n <g\n id=\"SvgjsG4964\"\n featurekey=\"nameFeature-0\"\n transform=\"matrix(1.0207331753701396,0,0,1.0207331753701396,81.5644404108694,15.72408377414908)\"\n >\n <path\n d=\"M17.344 32.6562 c-0.78125 -0.15625 -1.5105 -0.3907 -2.1876 -0.7032 c-1.4584 -0.67711 -2.7344 -1.6146 -3.8281 -2.8125 c-1.0416 -1.0938 -1.875 -2.4479 -2.5 -4.0625 c-0.57289 -1.6146 -0.85938 -3.2552 -0.85938 -4.9219 l0 -0.15625 l0 -0.23438 c0 -1.7188 0.28648 -3.3854 0.85938 -5 c0.67711 -1.6666 1.5105 -2.9948 2.5001 -3.9844 c1.0416 -1.1979 2.2916 -2.1094 3.75 -2.7344 c0.88539 -0.41664 1.6406 -0.67703 2.2656 -0.78117 l0 -5.8594 c-1.8229 0.26039 -3.4375 0.70313 -4.8438 1.3281 c-2.2916 0.98961 -4.2448 2.3177 -5.8594 3.9844 s-2.8906 3.6458 -3.8281 5.9374 s-1.4063 4.6875 -1.4063 7.1875 l0 0.15625 l0 0.23438 c0 2.5521 0.46875 4.948 1.4063 7.1876 c0.83336 2.2396 2.0834 4.1927 3.75 5.8594 c1.6666 1.7188 3.6198 3.0469 5.8594 3.9844 c1.4063 0.625 3.0469 1.0677 4.9219 1.3281 l0 -5.9375 z M38.594 20 l0.000076294 -0.23438 c0 -2.5521 -0.46875 -4.948 -1.4063 -7.1876 c-0.9375 -2.2916 -2.2135 -4.2708 -3.8281 -5.9374 c-1.5625 -1.6666 -3.4896 -2.9688 -5.7813 -3.9063 c-1.3021 -0.625 -2.8906 -1.0677 -4.7656 -1.3281 l0 5.9375 l0.9375 0.3125 c0.46875 0.15625 0.83336 0.28648 1.0938 0.39063 c1.4584 0.67711 2.7344 1.6146 3.8281 2.8125 c1.0416 1.0938 1.875 2.4479 2.5 4.0625 c0.57289 1.6146 0.85938 3.2552 0.85938 4.9219 l0 0.15625 l0 0.23438 c0 1.7188 -0.28648 3.3854 -0.85938 5 c-0.67711 1.6666 -1.5105 2.9948 -2.5001 3.9844 c-1.0416 1.1979 -2.2916 2.1094 -3.75 2.7344 c-0.67711 0.3125 -1.3802 0.54688 -2.1094 0.70313 l0 5.9375 c1.5625 -0.20836 3.125 -0.65109 4.6875 -1.3282 c2.1354 -0.88539 4.0885 -2.2135 5.8594 -3.9844 c1.7188 -1.8229 2.9948 -3.802 3.8281 -5.9374 c0.9375 -2.2916 1.4063 -4.6875 1.4063 -7.1875 l0 -0.15625 z M43.8281 38.5937 l6.4844 0 l0 -19.922 l-6.4844 -9.1406 l0 29.063 z M69.76599999999999 1.4059999999999988 l0 25.703 l-18.359 -25.703 l-7.0313 0 l26.406 37.188 l5.3906 0 l0 -37.188 l-6.4063 0 z M86.0938 1.4059999999999988 l27.813 0 l0 5.9375 l-27.813 0 l0 -5.9375 z M86.0938 32.6562 l27.734 0 l0 5.9375 l-27.734 0 l0 -5.9375 z M86.0938 16.875 l25.078 0 l0 5.8594 l-25.078 0 l0 -5.8594 z M127.2656 12.5 c0.9375 -2.2916 2.2916 -4.2447 4.0624 -5.8593 c1.6146 -1.6146 3.698 -2.9167 6.2501 -3.9063 s5.2344 -1.4844 8.0469 -1.4844 l8.6719 0 l0 5.9375 l-8.5938 0 c-2.0313 0 -3.8281 0.33852 -5.3906 1.0156 c-1.6666 0.67711 -3.0208 1.5625 -4.0624 2.6563 c-1.0938 1.0416 -1.9791 2.3958 -2.6563 4.0624 c-0.625 1.5104 -0.9375 3.2031 -0.9375 5.0781 s0.3125 3.5677 0.9375 5.0781 c0.625 1.5625 1.5104 2.9166 2.6563 4.0625 c1.0416 1.0416 2.3958 1.901 4.0624 2.5781 c1.6666 0.625 3.4635 0.9375 5.3906 0.9375 l8.5938 0 l0 5.9375 l-8.6719 0 c-2.9166 0 -5.5729 -0.46875 -7.9688 -1.4063 c-2.5 -1.0416 -4.6094 -2.3698 -6.3281 -3.9844 c-1.7709 -1.6666 -3.125 -3.6458 -4.0625 -5.9374 c-0.98961 -2.3959 -1.4844 -4.8438 -1.4844 -7.3438 c0 -2.6563 0.49477 -5.1302 1.4844 -7.4219 z M176.484 29.375 l3.5156 -4.6875 l-0.078125 -0.15625 z M196.875 1.4059999999999988 l-7.5 0 l-9.2969 13.359 l-9.2188 -13.359 l-7.7344 0 l13.047 18.281 l-13.516 18.906 l8.3594 0 z M197.344 38.5937 l-10.313 -14.609 l-3.9063 5.2344 l6.5625 9.375 l7.6563 0 z\"\n ></path>\n </g>\n </svg>\n </a>\n\n <a\n class=\"layout-menu-button shadow-6\"\n (click)=\"onMenuButtonClick($event)\"\n pRipple\n [title]=\"menuButtonTitle ?? ('OCX_HEADER.MENU_TOGGLE')\"\n >\n <i class=\"pi pi-chevron-right\"></i>\n </a>\n </div>\n\n <div class=\"layout-topbar-right\">\n <div class=\"layout-topbar-actions-left\">\n <ng-content></ng-content>\n </div>\n <div class=\"layout-topbar-actions-right\">\n <ocx-slot name=\"onecx-shell-header-right\" class=\"layout-topbar-items\">\n <ng-template #skeleton>\n <div class=\"flex align-items-center h-full justify-content-center\" style=\"width: 56px\">\n <p-skeleton shape=\"circle\" size=\"2.5rem\" class=\"h-full flex align-items-center\"></p-skeleton>\n </div>\n </ng-template>\n </ocx-slot>\n </div>\n </div>\n</div>\n", styles: [".http-progress-loader{margin-left:8px;padding-top:5px}@media screen and (max-width: 1024px){.http-progress-loader{margin-left:0;margin-right:8px}}.default-logo{color:var(--logo-color, #12abdb);fill:currentColor}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.SlotComponent, selector: "ocx-slot[name]", inputs: ["name"] }, { kind: "directive", type: i4.SrcDirective, selector: "[ocxSrc]", inputs: ["ocxSrc"], outputs: ["error"] }, { kind: "component", type: i5.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "directive", type: i6.Ripple, selector: "[pRipple]" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], animations: [
39
- trigger('topbarActionPanelAnimation', [
40
- transition(':enter', [
41
- style({ opacity: 0, transform: 'scaleY(0.8)' }),
42
- animate('.12s cubic-bezier(0, 0, 0.2, 1)', style({ opacity: 1, transform: '*' })),
43
- ]),
44
- transition(':leave', [animate('.1s linear', style({ opacity: 0 }))]),
45
- ]),
46
- ] });
47
- HeaderComponent = __decorate([
48
- UntilDestroy(),
49
- __metadata("design:paramtypes", [ThemeService, AppStateService])
50
- ], HeaderComponent);
51
- export { HeaderComponent };
52
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: HeaderComponent, decorators: [{
53
- type: Component,
54
- args: [{ selector: 'ocx-shell-header', animations: [
55
- trigger('topbarActionPanelAnimation', [
56
- transition(':enter', [
57
- style({ opacity: 0, transform: 'scaleY(0.8)' }),
58
- animate('.12s cubic-bezier(0, 0, 0.2, 1)', style({ opacity: 1, transform: '*' })),
59
- ]),
60
- transition(':leave', [animate('.1s linear', style({ opacity: 0 }))]),
61
- ]),
62
- ], template: "<div class=\"layout-topbar shadow-4\" id=\"header\" role=\"banner\">\n <div class=\"layout-topbar-left\">\n <a class=\"layout-topbar-logo\">\n <img\n id=\"app-logo\"\n [ocxSrc]=\"(logoUrl$ | async) ?? ''\"\n alt=\"Logo\"\n style=\"max-height: 100%; max-width: 100%\"\n *ngIf=\"(logoUrl$ | async) && !fallbackImg\"\n (error)=\"fallbackImg=true\"\n />\n <svg *ngIf=\"((logoUrl$ | async) === null) || fallbackImg\" width=\"160\" viewBox=\"0 0 283 72\" class=\"default-logo\">\n <defs id=\"SvgjsDefs4962\"></defs>\n <g\n id=\"SvgjsG4963\"\n featurekey=\"symbolFeature-0\"\n transform=\"matrix(0.7555406501686023,0,0,0.7555406501686023,-4.883814572467361,-0.26595028490140254)\"\n >\n <path\n xmlns=\"http://www.w3.org/2000/svg\"\n d=\"M88.54,46.256L9.464,0.616c-0.616-0.352-1.384-0.352-2,0c-0.62,0.36-1,1.02-1,1.736v91.296c0,0.716,0.38,1.375,1,1.731 c0.308,0.185,0.656,0.269,1,0.269c0.344,0,0.692-0.084,1-0.269L88.54,49.729c0.616-0.36,1-1.021,1-1.736 C89.54,47.276,89.152,46.616,88.54,46.256z M60.08,49.771L21.388,69.805c-0.288,0.147-0.604,0.223-0.92,0.223 c-0.36,0-0.72-0.092-1.04-0.287c-0.596-0.364-0.96-1.008-0.96-1.713v-40.06c0-0.696,0.364-1.344,0.96-1.712 c0.596-0.36,1.336-0.392,1.96-0.068l38.696,20.028c0.664,0.344,1.084,1.032,1.084,1.772C61.164,48.74,60.744,49.428,60.08,49.771z\"\n ></path>\n <path xmlns=\"http://www.w3.org/2000/svg\" d=\"M22.464,64.744l32.345-16.748l-32.345-16.74V64.744z\"></path>\n </g>\n <g\n id=\"SvgjsG4964\"\n featurekey=\"nameFeature-0\"\n transform=\"matrix(1.0207331753701396,0,0,1.0207331753701396,81.5644404108694,15.72408377414908)\"\n >\n <path\n d=\"M17.344 32.6562 c-0.78125 -0.15625 -1.5105 -0.3907 -2.1876 -0.7032 c-1.4584 -0.67711 -2.7344 -1.6146 -3.8281 -2.8125 c-1.0416 -1.0938 -1.875 -2.4479 -2.5 -4.0625 c-0.57289 -1.6146 -0.85938 -3.2552 -0.85938 -4.9219 l0 -0.15625 l0 -0.23438 c0 -1.7188 0.28648 -3.3854 0.85938 -5 c0.67711 -1.6666 1.5105 -2.9948 2.5001 -3.9844 c1.0416 -1.1979 2.2916 -2.1094 3.75 -2.7344 c0.88539 -0.41664 1.6406 -0.67703 2.2656 -0.78117 l0 -5.8594 c-1.8229 0.26039 -3.4375 0.70313 -4.8438 1.3281 c-2.2916 0.98961 -4.2448 2.3177 -5.8594 3.9844 s-2.8906 3.6458 -3.8281 5.9374 s-1.4063 4.6875 -1.4063 7.1875 l0 0.15625 l0 0.23438 c0 2.5521 0.46875 4.948 1.4063 7.1876 c0.83336 2.2396 2.0834 4.1927 3.75 5.8594 c1.6666 1.7188 3.6198 3.0469 5.8594 3.9844 c1.4063 0.625 3.0469 1.0677 4.9219 1.3281 l0 -5.9375 z M38.594 20 l0.000076294 -0.23438 c0 -2.5521 -0.46875 -4.948 -1.4063 -7.1876 c-0.9375 -2.2916 -2.2135 -4.2708 -3.8281 -5.9374 c-1.5625 -1.6666 -3.4896 -2.9688 -5.7813 -3.9063 c-1.3021 -0.625 -2.8906 -1.0677 -4.7656 -1.3281 l0 5.9375 l0.9375 0.3125 c0.46875 0.15625 0.83336 0.28648 1.0938 0.39063 c1.4584 0.67711 2.7344 1.6146 3.8281 2.8125 c1.0416 1.0938 1.875 2.4479 2.5 4.0625 c0.57289 1.6146 0.85938 3.2552 0.85938 4.9219 l0 0.15625 l0 0.23438 c0 1.7188 -0.28648 3.3854 -0.85938 5 c-0.67711 1.6666 -1.5105 2.9948 -2.5001 3.9844 c-1.0416 1.1979 -2.2916 2.1094 -3.75 2.7344 c-0.67711 0.3125 -1.3802 0.54688 -2.1094 0.70313 l0 5.9375 c1.5625 -0.20836 3.125 -0.65109 4.6875 -1.3282 c2.1354 -0.88539 4.0885 -2.2135 5.8594 -3.9844 c1.7188 -1.8229 2.9948 -3.802 3.8281 -5.9374 c0.9375 -2.2916 1.4063 -4.6875 1.4063 -7.1875 l0 -0.15625 z M43.8281 38.5937 l6.4844 0 l0 -19.922 l-6.4844 -9.1406 l0 29.063 z M69.76599999999999 1.4059999999999988 l0 25.703 l-18.359 -25.703 l-7.0313 0 l26.406 37.188 l5.3906 0 l0 -37.188 l-6.4063 0 z M86.0938 1.4059999999999988 l27.813 0 l0 5.9375 l-27.813 0 l0 -5.9375 z M86.0938 32.6562 l27.734 0 l0 5.9375 l-27.734 0 l0 -5.9375 z M86.0938 16.875 l25.078 0 l0 5.8594 l-25.078 0 l0 -5.8594 z M127.2656 12.5 c0.9375 -2.2916 2.2916 -4.2447 4.0624 -5.8593 c1.6146 -1.6146 3.698 -2.9167 6.2501 -3.9063 s5.2344 -1.4844 8.0469 -1.4844 l8.6719 0 l0 5.9375 l-8.5938 0 c-2.0313 0 -3.8281 0.33852 -5.3906 1.0156 c-1.6666 0.67711 -3.0208 1.5625 -4.0624 2.6563 c-1.0938 1.0416 -1.9791 2.3958 -2.6563 4.0624 c-0.625 1.5104 -0.9375 3.2031 -0.9375 5.0781 s0.3125 3.5677 0.9375 5.0781 c0.625 1.5625 1.5104 2.9166 2.6563 4.0625 c1.0416 1.0416 2.3958 1.901 4.0624 2.5781 c1.6666 0.625 3.4635 0.9375 5.3906 0.9375 l8.5938 0 l0 5.9375 l-8.6719 0 c-2.9166 0 -5.5729 -0.46875 -7.9688 -1.4063 c-2.5 -1.0416 -4.6094 -2.3698 -6.3281 -3.9844 c-1.7709 -1.6666 -3.125 -3.6458 -4.0625 -5.9374 c-0.98961 -2.3959 -1.4844 -4.8438 -1.4844 -7.3438 c0 -2.6563 0.49477 -5.1302 1.4844 -7.4219 z M176.484 29.375 l3.5156 -4.6875 l-0.078125 -0.15625 z M196.875 1.4059999999999988 l-7.5 0 l-9.2969 13.359 l-9.2188 -13.359 l-7.7344 0 l13.047 18.281 l-13.516 18.906 l8.3594 0 z M197.344 38.5937 l-10.313 -14.609 l-3.9063 5.2344 l6.5625 9.375 l7.6563 0 z\"\n ></path>\n </g>\n </svg>\n </a>\n\n <a\n class=\"layout-menu-button shadow-6\"\n (click)=\"onMenuButtonClick($event)\"\n pRipple\n [title]=\"menuButtonTitle ?? ('OCX_HEADER.MENU_TOGGLE')\"\n >\n <i class=\"pi pi-chevron-right\"></i>\n </a>\n </div>\n\n <div class=\"layout-topbar-right\">\n <div class=\"layout-topbar-actions-left\">\n <ng-content></ng-content>\n </div>\n <div class=\"layout-topbar-actions-right\">\n <ocx-slot name=\"onecx-shell-header-right\" class=\"layout-topbar-items\">\n <ng-template #skeleton>\n <div class=\"flex align-items-center h-full justify-content-center\" style=\"width: 56px\">\n <p-skeleton shape=\"circle\" size=\"2.5rem\" class=\"h-full flex align-items-center\"></p-skeleton>\n </div>\n </ng-template>\n </ocx-slot>\n </div>\n </div>\n</div>\n", styles: [".http-progress-loader{margin-left:8px;padding-top:5px}@media screen and (max-width: 1024px){.http-progress-loader{margin-left:0;margin-right:8px}}.default-logo{color:var(--logo-color, #12abdb);fill:currentColor}\n"] }]
63
- }], ctorParameters: function () { return [{ type: i1.ThemeService }, { type: i1.AppStateService }]; }, propDecorators: { menuButtonTitle: [{
64
- type: Input
65
- }], fullPortalLayout: [{
66
- type: Input
67
- }], homeNavUrl: [{
68
- type: Input
69
- }], homeNavTitle: [{
70
- type: Input
71
- }], menuButtonClick: [{
72
- type: Output
73
- }] } });
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2hlbGwtY29yZS9zcmMvbGliL2NvbXBvbmVudHMvcG9ydGFsLWhlYWRlci9oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zaGVsbC1jb3JlL3NyYy9saWIvY29tcG9uZW50cy9wb3J0YWwtaGVhZGVyL2hlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUE7QUFDcEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQWMsTUFBTSxNQUFNLENBQUE7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUE7Ozs7Ozs7O0FBaUJqRCxJQUFNLGVBQWUsR0FBckIsTUFBTSxlQUFlO0lBa0IxQixZQUFvQixZQUEwQixFQUFVLGVBQWdDO1FBQXBFLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBakJ4RixpQkFBWSxHQUFHLEtBQUssQ0FBQTtRQUNwQixnQkFBVyxHQUFHLEtBQUssQ0FBQTtRQUtuQixxQkFBZ0IsR0FBRyxJQUFJLENBQUE7UUFFdkIsZUFBVSxHQUFHLEdBQUcsQ0FBQTtRQUVoQixpQkFBWSxHQUFHLE1BQU0sQ0FBQTtRQUdyQixvQkFBZSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFBO1FBS3JELElBQUksQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRTtZQUM5QyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRTtTQUN0RCxDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7WUFDdEIsT0FBTyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDM0YsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxDQUFRO1FBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzlCLENBQUM7OzZHQS9CVSxlQUFlO2lHQUFmLGVBQWUsdVBDdkI1QiwrbkxBNkRBLHMwQkRqRGM7UUFDVixPQUFPLENBQUMsNEJBQTRCLEVBQUU7WUFDcEMsVUFBVSxDQUFDLFFBQVEsRUFBRTtnQkFDbkIsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLENBQUM7Z0JBQy9DLE9BQU8sQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO2FBQ2xGLENBQUM7WUFDRixVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckUsQ0FBQztLQUNIO0FBR1UsZUFBZTtJQUQzQixZQUFZLEVBQUU7cUNBbUJxQixZQUFZLEVBQTJCLGVBQWU7R0FsQjdFLGVBQWUsQ0FnQzNCO1NBaENZLGVBQWU7NEZBQWYsZUFBZTtrQkFmM0IsU0FBUzsrQkFDRSxrQkFBa0IsY0FHaEI7d0JBQ1YsT0FBTyxDQUFDLDRCQUE0QixFQUFFOzRCQUNwQyxVQUFVLENBQUMsUUFBUSxFQUFFO2dDQUNuQixLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsQ0FBQztnQ0FDL0MsT0FBTyxDQUFDLGlDQUFpQyxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7NkJBQ2xGLENBQUM7NEJBQ0YsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUNyRSxDQUFDO3FCQUNIO2lJQVFELGVBQWU7c0JBRGQsS0FBSztnQkFHTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFHTixVQUFVO3NCQURULEtBQUs7Z0JBR04sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLGVBQWU7c0JBRGQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucydcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IFVudGlsRGVzdHJveSB9IGZyb20gJ0BuZ25lYXQvdW50aWwtZGVzdHJveSdcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSwgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnQG9uZWN4L2FuZ3VsYXItaW50ZWdyYXRpb24taW50ZXJmYWNlJ1xuaW1wb3J0IHsgSW1hZ2VMb2dvVXJsVXRpbHMgfSBmcm9tICdAb25lY3gvcG9ydGFsLWludGVncmF0aW9uLWFuZ3VsYXInXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgU0hFTExfQkZGX1BSRUZJWCB9IGZyb20gJy4uLy4uL21vZGVsL2NvbnN0YW50cydcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2N4LXNoZWxsLWhlYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9oZWFkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ3RvcGJhckFjdGlvblBhbmVsQW5pbWF0aW9uJywgW1xuICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xuICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3NjYWxlWSgwLjgpJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnLjEycyBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKScsIHN0eWxlKHsgb3BhY2l0eTogMSwgdHJhbnNmb3JtOiAnKicgfSkpLFxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbYW5pbWF0ZSgnLjFzIGxpbmVhcicsIHN0eWxlKHsgb3BhY2l0eTogMCB9KSldKSxcbiAgICBdKSxcbiAgXSxcbn0pXG5AVW50aWxEZXN0cm95KClcbmV4cG9ydCBjbGFzcyBIZWFkZXJDb21wb25lbnQge1xuICBtZW51RXhwYW5kZWQgPSBmYWxzZVxuICBmYWxsYmFja0ltZyA9IGZhbHNlXG5cbiAgQElucHV0KClcbiAgbWVudUJ1dHRvblRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgQElucHV0KClcbiAgZnVsbFBvcnRhbExheW91dCA9IHRydWVcbiAgQElucHV0KClcbiAgaG9tZU5hdlVybCA9ICcvJ1xuICBASW5wdXQoKVxuICBob21lTmF2VGl0bGUgPSAnSG9tZSdcblxuICBAT3V0cHV0KClcbiAgbWVudUJ1dHRvbkNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuXG4gIGxvZ29VcmwkOiBPYnNlcnZhYmxlPHN0cmluZyB8IHVuZGVmaW5lZD5cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRoZW1lU2VydmljZTogVGhlbWVTZXJ2aWNlLCBwcml2YXRlIGFwcFN0YXRlU2VydmljZTogQXBwU3RhdGVTZXJ2aWNlKSB7XG4gICAgdGhpcy5sb2dvVXJsJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy50aGVtZVNlcnZpY2UuY3VycmVudFRoZW1lJC5hc09ic2VydmFibGUoKSxcbiAgICAgIHRoaXMuYXBwU3RhdGVTZXJ2aWNlLmN1cnJlbnRXb3Jrc3BhY2UkLmFzT2JzZXJ2YWJsZSgpLFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFt0aGVtZSwgcG9ydGFsXSkgPT4ge1xuICAgICAgICByZXR1cm4gSW1hZ2VMb2dvVXJsVXRpbHMuY3JlYXRlTG9nb1VybChTSEVMTF9CRkZfUFJFRklYLCB0aGVtZS5sb2dvVXJsIHx8IHBvcnRhbC5sb2dvVXJsKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBvbk1lbnVCdXR0b25DbGljayhlOiBFdmVudCkge1xuICAgIHRoaXMubWVudUJ1dHRvbkNsaWNrLmVtaXQoZSlcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImxheW91dC10b3BiYXIgc2hhZG93LTRcIiBpZD1cImhlYWRlclwiIHJvbGU9XCJiYW5uZXJcIj5cbiAgPGRpdiBjbGFzcz1cImxheW91dC10b3BiYXItbGVmdFwiPlxuICAgIDxhIGNsYXNzPVwibGF5b3V0LXRvcGJhci1sb2dvXCI+XG4gICAgICA8aW1nXG4gICAgICAgIGlkPVwiYXBwLWxvZ29cIlxuICAgICAgICBbb2N4U3JjXT1cIihsb2dvVXJsJCB8IGFzeW5jKSA/PyAnJ1wiXG4gICAgICAgIGFsdD1cIkxvZ29cIlxuICAgICAgICBzdHlsZT1cIm1heC1oZWlnaHQ6IDEwMCU7IG1heC13aWR0aDogMTAwJVwiXG4gICAgICAgICpuZ0lmPVwiKGxvZ29VcmwkIHwgYXN5bmMpICYmICFmYWxsYmFja0ltZ1wiXG4gICAgICAgIChlcnJvcik9XCJmYWxsYmFja0ltZz10cnVlXCJcbiAgICAgIC8+XG4gICAgICA8c3ZnICpuZ0lmPVwiKChsb2dvVXJsJCB8IGFzeW5jKSA9PT0gbnVsbCkgfHwgZmFsbGJhY2tJbWdcIiB3aWR0aD1cIjE2MFwiIHZpZXdCb3g9XCIwIDAgMjgzIDcyXCIgY2xhc3M9XCJkZWZhdWx0LWxvZ29cIj5cbiAgICAgICAgPGRlZnMgaWQ9XCJTdmdqc0RlZnM0OTYyXCI+PC9kZWZzPlxuICAgICAgICA8Z1xuICAgICAgICAgIGlkPVwiU3ZnanNHNDk2M1wiXG4gICAgICAgICAgZmVhdHVyZWtleT1cInN5bWJvbEZlYXR1cmUtMFwiXG4gICAgICAgICAgdHJhbnNmb3JtPVwibWF0cml4KDAuNzU1NTQwNjUwMTY4NjAyMywwLDAsMC43NTU1NDA2NTAxNjg2MDIzLC00Ljg4MzgxNDU3MjQ2NzM2MSwtMC4yNjU5NTAyODQ5MDE0MDI1NClcIlxuICAgICAgICA+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgZD1cIk04OC41NCw0Ni4yNTZMOS40NjQsMC42MTZjLTAuNjE2LTAuMzUyLTEuMzg0LTAuMzUyLTIsMGMtMC42MiwwLjM2LTEsMS4wMi0xLDEuNzM2djkxLjI5NmMwLDAuNzE2LDAuMzgsMS4zNzUsMSwxLjczMSAgYzAuMzA4LDAuMTg1LDAuNjU2LDAuMjY5LDEsMC4yNjljMC4zNDQsMCwwLjY5Mi0wLjA4NCwxLTAuMjY5TDg4LjU0LDQ5LjcyOWMwLjYxNi0wLjM2LDEtMS4wMjEsMS0xLjczNiAgQzg5LjU0LDQ3LjI3Niw4OS4xNTIsNDYuNjE2LDg4LjU0LDQ2LjI1NnogTTYwLjA4LDQ5Ljc3MUwyMS4zODgsNjkuODA1Yy0wLjI4OCwwLjE0Ny0wLjYwNCwwLjIyMy0wLjkyLDAuMjIzICBjLTAuMzYsMC0wLjcyLTAuMDkyLTEuMDQtMC4yODdjLTAuNTk2LTAuMzY0LTAuOTYtMS4wMDgtMC45Ni0xLjcxM3YtNDAuMDZjMC0wLjY5NiwwLjM2NC0xLjM0NCwwLjk2LTEuNzEyICBjMC41OTYtMC4zNiwxLjMzNi0wLjM5MiwxLjk2LTAuMDY4bDM4LjY5NiwyMC4wMjhjMC42NjQsMC4zNDQsMS4wODQsMS4wMzIsMS4wODQsMS43NzJDNjEuMTY0LDQ4Ljc0LDYwLjc0NCw0OS40MjgsNjAuMDgsNDkuNzcxelwiXG4gICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICA8cGF0aCB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZD1cIk0yMi40NjQsNjQuNzQ0bDMyLjM0NS0xNi43NDhsLTMyLjM0NS0xNi43NFY2NC43NDR6XCI+PC9wYXRoPlxuICAgICAgICA8L2c+XG4gICAgICAgIDxnXG4gICAgICAgICAgaWQ9XCJTdmdqc0c0OTY0XCJcbiAgICAgICAgICBmZWF0dXJla2V5PVwibmFtZUZlYXR1cmUtMFwiXG4gICAgICAgICAgdHJhbnNmb3JtPVwibWF0cml4KDEuMDIwNzMzMTc1MzcwMTM5NiwwLDAsMS4wMjA3MzMxNzUzNzAxMzk2LDgxLjU2NDQ0MDQxMDg2OTQsMTUuNzI0MDgzNzc0MTQ5MDgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBkPVwiTTE3LjM0NCAzMi42NTYyIGMtMC43ODEyNSAtMC4xNTYyNSAtMS41MTA1IC0wLjM5MDcgLTIuMTg3NiAtMC43MDMyIGMtMS40NTg0IC0wLjY3NzExIC0yLjczNDQgLTEuNjE0NiAtMy44MjgxIC0yLjgxMjUgYy0xLjA0MTYgLTEuMDkzOCAtMS44NzUgLTIuNDQ3OSAtMi41IC00LjA2MjUgYy0wLjU3Mjg5IC0xLjYxNDYgLTAuODU5MzggLTMuMjU1MiAtMC44NTkzOCAtNC45MjE5IGwwIC0wLjE1NjI1IGwwIC0wLjIzNDM4IGMwIC0xLjcxODggMC4yODY0OCAtMy4zODU0IDAuODU5MzggLTUgYzAuNjc3MTEgLTEuNjY2NiAxLjUxMDUgLTIuOTk0OCAyLjUwMDEgLTMuOTg0NCBjMS4wNDE2IC0xLjE5NzkgMi4yOTE2IC0yLjEwOTQgMy43NSAtMi43MzQ0IGMwLjg4NTM5IC0wLjQxNjY0IDEuNjQwNiAtMC42NzcwMyAyLjI2NTYgLTAuNzgxMTcgbDAgLTUuODU5NCBjLTEuODIyOSAwLjI2MDM5IC0zLjQzNzUgMC43MDMxMyAtNC44NDM4IDEuMzI4MSBjLTIuMjkxNiAwLjk4OTYxIC00LjI0NDggMi4zMTc3IC01Ljg1OTQgMy45ODQ0IHMtMi44OTA2IDMuNjQ1OCAtMy44MjgxIDUuOTM3NCBzLTEuNDA2MyA0LjY4NzUgLTEuNDA2MyA3LjE4NzUgbDAgMC4xNTYyNSBsMCAwLjIzNDM4IGMwIDIuNTUyMSAwLjQ2ODc1IDQuOTQ4IDEuNDA2MyA3LjE4NzYgYzAuODMzMzYgMi4yMzk2IDIuMDgzNCA0LjE5MjcgMy43NSA1Ljg1OTQgYzEuNjY2NiAxLjcxODggMy42MTk4IDMuMDQ2OSA1Ljg1OTQgMy45ODQ0IGMxLjQwNjMgMC42MjUgMy4wNDY5IDEuMDY3NyA0LjkyMTkgMS4zMjgxIGwwIC01LjkzNzUgeiBNMzguNTk0IDIwIGwwLjAwMDA3NjI5NCAtMC4yMzQzOCBjMCAtMi41NTIxIC0wLjQ2ODc1IC00Ljk0OCAtMS40MDYzIC03LjE4NzYgYy0wLjkzNzUgLTIuMjkxNiAtMi4yMTM1IC00LjI3MDggLTMuODI4MSAtNS45Mzc0IGMtMS41NjI1IC0xLjY2NjYgLTMuNDg5NiAtMi45Njg4IC01Ljc4MTMgLTMuOTA2MyBjLTEuMzAyMSAtMC42MjUgLTIuODkwNiAtMS4wNjc3IC00Ljc2NTYgLTEuMzI4MSBsMCA1LjkzNzUgbDAuOTM3NSAwLjMxMjUgYzAuNDY4NzUgMC4xNTYyNSAwLjgzMzM2IDAuMjg2NDggMS4wOTM4IDAuMzkwNjMgYzEuNDU4NCAwLjY3NzExIDIuNzM0NCAxLjYxNDYgMy44MjgxIDIuODEyNSBjMS4wNDE2IDEuMDkzOCAxLjg3NSAyLjQ0NzkgMi41IDQuMDYyNSBjMC41NzI4OSAxLjYxNDYgMC44NTkzOCAzLjI1NTIgMC44NTkzOCA0LjkyMTkgbDAgMC4xNTYyNSBsMCAwLjIzNDM4IGMwIDEuNzE4OCAtMC4yODY0OCAzLjM4NTQgLTAuODU5MzggNSBjLTAuNjc3MTEgMS42NjY2IC0xLjUxMDUgMi45OTQ4IC0yLjUwMDEgMy45ODQ0IGMtMS4wNDE2IDEuMTk3OSAtMi4yOTE2IDIuMTA5NCAtMy43NSAyLjczNDQgYy0wLjY3NzExIDAuMzEyNSAtMS4zODAyIDAuNTQ2ODggLTIuMTA5NCAwLjcwMzEzIGwwIDUuOTM3NSBjMS41NjI1IC0wLjIwODM2IDMuMTI1IC0wLjY1MTA5IDQuNjg3NSAtMS4zMjgyIGMyLjEzNTQgLTAuODg1MzkgNC4wODg1IC0yLjIxMzUgNS44NTk0IC0zLjk4NDQgYzEuNzE4OCAtMS44MjI5IDIuOTk0OCAtMy44MDIgMy44MjgxIC01LjkzNzQgYzAuOTM3NSAtMi4yOTE2IDEuNDA2MyAtNC42ODc1IDEuNDA2MyAtNy4xODc1IGwwIC0wLjE1NjI1IHogTTQzLjgyODEgMzguNTkzNyBsNi40ODQ0IDAgbDAgLTE5LjkyMiBsLTYuNDg0NCAtOS4xNDA2IGwwIDI5LjA2MyB6IE02OS43NjU5OTk5OTk5OTk5OSAxLjQwNTk5OTk5OTk5OTk5ODggbDAgMjUuNzAzIGwtMTguMzU5IC0yNS43MDMgbC03LjAzMTMgMCBsMjYuNDA2IDM3LjE4OCBsNS4zOTA2IDAgbDAgLTM3LjE4OCBsLTYuNDA2MyAwIHogTTg2LjA5MzggMS40MDU5OTk5OTk5OTk5OTg4IGwyNy44MTMgMCBsMCA1LjkzNzUgbC0yNy44MTMgMCBsMCAtNS45Mzc1IHogTTg2LjA5MzggMzIuNjU2MiBsMjcuNzM0IDAgbDAgNS45Mzc1IGwtMjcuNzM0IDAgbDAgLTUuOTM3NSB6IE04Ni4wOTM4IDE2Ljg3NSBsMjUuMDc4IDAgbDAgNS44NTk0IGwtMjUuMDc4IDAgbDAgLTUuODU5NCB6IE0xMjcuMjY1NiAxMi41IGMwLjkzNzUgLTIuMjkxNiAyLjI5MTYgLTQuMjQ0NyA0LjA2MjQgLTUuODU5MyBjMS42MTQ2IC0xLjYxNDYgMy42OTggLTIuOTE2NyA2LjI1MDEgLTMuOTA2MyBzNS4yMzQ0IC0xLjQ4NDQgOC4wNDY5IC0xLjQ4NDQgbDguNjcxOSAwIGwwIDUuOTM3NSBsLTguNTkzOCAwIGMtMi4wMzEzIDAgLTMuODI4MSAwLjMzODUyIC01LjM5MDYgMS4wMTU2IGMtMS42NjY2IDAuNjc3MTEgLTMuMDIwOCAxLjU2MjUgLTQuMDYyNCAyLjY1NjMgYy0xLjA5MzggMS4wNDE2IC0xLjk3OTEgMi4zOTU4IC0yLjY1NjMgNC4wNjI0IGMtMC42MjUgMS41MTA0IC0wLjkzNzUgMy4yMDMxIC0wLjkzNzUgNS4wNzgxIHMwLjMxMjUgMy41Njc3IDAuOTM3NSA1LjA3ODEgYzAuNjI1IDEuNTYyNSAxLjUxMDQgMi45MTY2IDIuNjU2MyA0LjA2MjUgYzEuMDQxNiAxLjA0MTYgMi4zOTU4IDEuOTAxIDQuMDYyNCAyLjU3ODEgYzEuNjY2NiAwLjYyNSAzLjQ2MzUgMC45Mzc1IDUuMzkwNiAwLjkzNzUgbDguNTkzOCAwIGwwIDUuOTM3NSBsLTguNjcxOSAwIGMtMi45MTY2IDAgLTUuNTcyOSAtMC40Njg3NSAtNy45Njg4IC0xLjQwNjMgYy0yLjUgLTEuMDQxNiAtNC42MDk0IC0yLjM2OTggLTYuMzI4MSAtMy45ODQ0IGMtMS43NzA5IC0xLjY2NjYgLTMuMTI1IC0zLjY0NTggLTQuMDYyNSAtNS45Mzc0IGMtMC45ODk2MSAtMi4zOTU5IC0xLjQ4NDQgLTQuODQzOCAtMS40ODQ0IC03LjM0MzggYzAgLTIuNjU2MyAwLjQ5NDc3IC01LjEzMDIgMS40ODQ0IC03LjQyMTkgeiBNMTc2LjQ4NCAyOS4zNzUgbDMuNTE1NiAtNC42ODc1IGwtMC4wNzgxMjUgLTAuMTU2MjUgeiBNMTk2Ljg3NSAxLjQwNTk5OTk5OTk5OTk5ODggbC03LjUgMCBsLTkuMjk2OSAxMy4zNTkgbC05LjIxODggLTEzLjM1OSBsLTcuNzM0NCAwIGwxMy4wNDcgMTguMjgxIGwtMTMuNTE2IDE4LjkwNiBsOC4zNTk0IDAgeiBNMTk3LjM0NCAzOC41OTM3IGwtMTAuMzEzIC0xNC42MDkgbC0zLjkwNjMgNS4yMzQ0IGw2LjU2MjUgOS4zNzUgbDcuNjU2MyAwIHpcIlxuICAgICAgICAgID48L3BhdGg+XG4gICAgICAgIDwvZz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvYT5cblxuICAgIDxhXG4gICAgICBjbGFzcz1cImxheW91dC1tZW51LWJ1dHRvbiBzaGFkb3ctNlwiXG4gICAgICAoY2xpY2spPVwib25NZW51QnV0dG9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICBwUmlwcGxlXG4gICAgICBbdGl0bGVdPVwibWVudUJ1dHRvblRpdGxlID8/ICgnT0NYX0hFQURFUi5NRU5VX1RPR0dMRScpXCJcbiAgICA+XG4gICAgICA8aSBjbGFzcz1cInBpIHBpLWNoZXZyb24tcmlnaHRcIj48L2k+XG4gICAgPC9hPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibGF5b3V0LXRvcGJhci1yaWdodFwiPlxuICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtdG9wYmFyLWFjdGlvbnMtbGVmdFwiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtdG9wYmFyLWFjdGlvbnMtcmlnaHRcIj5cbiAgICAgIDxvY3gtc2xvdCBuYW1lPVwib25lY3gtc2hlbGwtaGVhZGVyLXJpZ2h0XCIgY2xhc3M9XCJsYXlvdXQtdG9wYmFyLWl0ZW1zXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc2tlbGV0b24+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGgtZnVsbCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgc3R5bGU9XCJ3aWR0aDogNTZweFwiPlxuICAgICAgICAgICAgPHAtc2tlbGV0b24gc2hhcGU9XCJjaXJjbGVcIiBzaXplPVwiMi41cmVtXCIgY2xhc3M9XCJoLWZ1bGwgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj48L3Atc2tlbGV0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L29jeC1zbG90PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -1,137 +0,0 @@
1
- import { __decorate, __metadata } from "tslib";
2
- import { HttpClient } from '@angular/common/http';
3
- import { Component, HostListener, Inject, InjectionToken, Optional, Renderer2 } from '@angular/core';
4
- import { Router } from '@angular/router';
5
- import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
6
- import { AppStateService, PortalMessageService, ThemeService, UserService, } from '@onecx/angular-integration-interface';
7
- import { MessageService, PrimeNGConfig } from 'primeng/api';
8
- import { filter, first, from, mergeMap, of } from 'rxjs';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "primeng/api";
11
- import * as i2 from "@onecx/angular-integration-interface";
12
- import * as i3 from "@angular/common/http";
13
- import * as i4 from "@angular/router";
14
- import * as i5 from "@angular/common";
15
- import * as i6 from "@onecx/angular-remote-components";
16
- import * as i7 from "primeng/toast";
17
- import * as i8 from "primeng/skeleton";
18
- import * as i9 from "@onecx/portal-integration-angular";
19
- import * as i10 from "../portal-header/header.component";
20
- import * as i11 from "../portal-footer/portal-footer.component";
21
- import * as i12 from "../error-component/global-error.component";
22
- export const SHOW_CONTENT_PROVIDER = new InjectionToken('SHOW_CONTENT_PROVIDER');
23
- let PortalViewportComponent = class PortalViewportComponent {
24
- constructor(renderer, primengConfig, messageService, appStateService, portalMessageService, userService, themeService, httpClient, router, showContentProvider) {
25
- this.renderer = renderer;
26
- this.primengConfig = primengConfig;
27
- this.messageService = messageService;
28
- this.appStateService = appStateService;
29
- this.portalMessageService = portalMessageService;
30
- this.userService = userService;
31
- this.themeService = themeService;
32
- this.httpClient = httpClient;
33
- this.router = router;
34
- this.showContentProvider = showContentProvider;
35
- this.menuButtonTitle = '';
36
- this.menuActive = true;
37
- this.topbarTheme = 'var';
38
- this.colorScheme = 'light';
39
- this.layoutMode = 'light';
40
- this.menuMode = 'static';
41
- this.inputStyle = 'outline';
42
- this.ripple = true;
43
- this.isMobile = false;
44
- this.portalMessageService.message$.subscribe((message) => this.messageService.add(message));
45
- this.userService.profile$.pipe(untilDestroyed(this)).subscribe((profile) => {
46
- this.menuMode =
47
- profile?.accountSettings?.layoutAndThemeSettings?.menuMode?.toLowerCase() || this.menuMode;
48
- this.colorScheme =
49
- profile?.accountSettings?.layoutAndThemeSettings?.colorScheme?.toLowerCase() || this.colorScheme;
50
- });
51
- this.themeService.currentTheme$
52
- .pipe(first(), mergeMap((theme) => {
53
- return theme.faviconUrl
54
- ? this.httpClient.get(theme.faviconUrl, { responseType: 'blob' }).pipe(mergeMap((blob) => {
55
- return from(new Promise((resolve) => {
56
- const reader = new FileReader();
57
- reader.onload = (e) => resolve(e.target?.result);
58
- reader.readAsDataURL(blob);
59
- }));
60
- }))
61
- : of('');
62
- }))
63
- .subscribe((url) => {
64
- let link = document.querySelector("link[rel~='icon']");
65
- if (!link) {
66
- link = document.createElement('link');
67
- link.rel = 'icon';
68
- document.head.appendChild(link);
69
- }
70
- link.href = url;
71
- });
72
- }
73
- ngOnInit() {
74
- this.primengConfig.ripple = true;
75
- this.appStateService.globalError$
76
- .pipe(untilDestroyed(this))
77
- .pipe(filter((i) => i !== undefined))
78
- .subscribe((err) => {
79
- this.globalErrMsg = err;
80
- });
81
- this.onResize();
82
- }
83
- ngOnDestroy() {
84
- this.removeDocumentClickListener?.();
85
- }
86
- onMenuButtonClick(event) {
87
- this.activeTopbarItem = undefined;
88
- this.menuActive = !this.menuActive;
89
- event.preventDefault();
90
- event.stopPropagation();
91
- }
92
- onResize() {
93
- const mobileBreakpointVar = getComputedStyle(document.documentElement).getPropertyValue('--mobile-break-point');
94
- const isMobile = window.matchMedia(`(max-width: ${mobileBreakpointVar})`).matches;
95
- // auto show sidebar when changing to desktop, hide when changing to mobile
96
- if (isMobile !== this.isMobile)
97
- this.menuActive = !isMobile;
98
- this.isMobile = isMobile;
99
- }
100
- isHorizontalMenuMode() {
101
- return this.menuMode === 'horizontal' && !this.isMobile;
102
- }
103
- isStaticalMenuVisible() {
104
- return this.menuActive && !this.isHorizontalMenuMode();
105
- }
106
- isHorizontalMenuVisible() {
107
- return this.isHorizontalMenuMode();
108
- }
109
- };
110
- PortalViewportComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PortalViewportComponent, deps: [{ token: i0.Renderer2 }, { token: i1.PrimeNGConfig }, { token: i1.MessageService }, { token: i2.AppStateService }, { token: i2.PortalMessageService }, { token: i2.UserService }, { token: i2.ThemeService }, { token: i3.HttpClient }, { token: i4.Router }, { token: SHOW_CONTENT_PROVIDER, optional: true }], target: i0.ɵɵFactoryTarget.Component });
111
- PortalViewportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: PortalViewportComponent, selector: "ocx-shell-portal-viewport", host: { listeners: { "window:resize": "onResize()" } }, ngImport: i0, template: "<div\n *ngIf=\"!globalErrMsg; else globalError\"\n class=\"layout-wrapper\"\n [ngClass]=\"{\n 'p-input-filled': inputStyle === 'filled', \n 'p-ripple-disabled': !ripple,\n 'layout-menu-active': isStaticalMenuVisible(),\n 'layout-menu-button-hidden': isHorizontalMenuMode()\n }\"\n [class]=\"'layout-menu-' + colorScheme + ' layout-topbar-' + topbarTheme\"\n>\n <ocx-shell-header [menuButtonTitle]=\"menuButtonTitle\" (menuButtonClick)=\"onMenuButtonClick($event)\">\n <div *ngIf=\"isHorizontalMenuVisible()\">\n <ocx-slot name=\"onecx-shell-horizontal-menu\">\n <ng-template #skeleton>\n <div class=\"ml-4 flex flex-row gap-4\">\n <p-skeleton class=\"w-full h-full inline-block\" height=\"35px\" width=\"120px\"></p-skeleton>\n <p-skeleton class=\"w-full h-full inline-block\" height=\"35px\" width=\"120px\"></p-skeleton>\n </div>\n </ng-template>\n </ocx-slot>\n </div>\n </ocx-shell-header>\n\n <p-toast></p-toast>\n\n <div class=\"menu-wrapper\">\n <div class=\"layout-menu-container overflow-auto\" *ngIf=\"isStaticalMenuVisible()\">\n <ocx-slot name=\"onecx-shell-vertical-menu\">\n <ng-template #skeleton>\n <p-skeleton class=\"w-full h-full inline-block p-2\" height=\"35px\"></p-skeleton>\n </ng-template>\n </ocx-slot>\n </div>\n </div>\n\n <div class=\"layout-main\">\n <div class=\"layout-content relative\">\n <ocx-slot name=\"onecx-shell-sub-header\"></ocx-slot>\n <ng-container *ngIf=\"!showContentProvider || (showContentProvider.showContent$ | async); else appLoading\">\n <ng-content></ng-content>\n <router-outlet></router-outlet>\n </ng-container>\n </div>\n\n <ocx-shell-footer></ocx-shell-footer>\n </div>\n\n <div *ngIf=\"menuActive || !!activeTopbarItem\" class=\"layout-mask modal-in\"></div>\n</div>\n\n<ng-template #globalError>\n <ocx-shell-error [errCode]=\"globalErrMsg\"></ocx-shell-error>\n</ng-template>\n\n<ng-template #appLoading>\n <div [ocxLoadingIndicator]=\"true\" class=\"w-full h-full absolute top-0 left-0\"></div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: i6.SlotComponent, selector: "ocx-slot[name]", inputs: ["name"] }, { kind: "component", type: i7.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "component", type: i8.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "directive", type: i9.LoadingIndicatorDirective, selector: "[ocxLoadingIndicator]", inputs: ["ocxLoadingIndicator", "overlayFullPage", "isLoaderSmall"] }, { kind: "component", type: i10.HeaderComponent, selector: "ocx-shell-header", inputs: ["menuButtonTitle", "fullPortalLayout", "homeNavUrl", "homeNavTitle"], outputs: ["menuButtonClick"] }, { kind: "component", type: i11.PortalFooterComponent, selector: "ocx-shell-footer" }, { kind: "component", type: i12.GlobalErrorComponent, selector: "ocx-shell-error", inputs: ["errCode"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }] });
112
- PortalViewportComponent = __decorate([
113
- UntilDestroy(),
114
- __metadata("design:paramtypes", [Renderer2,
115
- PrimeNGConfig,
116
- MessageService,
117
- AppStateService,
118
- PortalMessageService,
119
- UserService,
120
- ThemeService,
121
- HttpClient,
122
- Router, Object])
123
- ], PortalViewportComponent);
124
- export { PortalViewportComponent };
125
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PortalViewportComponent, decorators: [{
126
- type: Component,
127
- args: [{ selector: 'ocx-shell-portal-viewport', template: "<div\n *ngIf=\"!globalErrMsg; else globalError\"\n class=\"layout-wrapper\"\n [ngClass]=\"{\n 'p-input-filled': inputStyle === 'filled', \n 'p-ripple-disabled': !ripple,\n 'layout-menu-active': isStaticalMenuVisible(),\n 'layout-menu-button-hidden': isHorizontalMenuMode()\n }\"\n [class]=\"'layout-menu-' + colorScheme + ' layout-topbar-' + topbarTheme\"\n>\n <ocx-shell-header [menuButtonTitle]=\"menuButtonTitle\" (menuButtonClick)=\"onMenuButtonClick($event)\">\n <div *ngIf=\"isHorizontalMenuVisible()\">\n <ocx-slot name=\"onecx-shell-horizontal-menu\">\n <ng-template #skeleton>\n <div class=\"ml-4 flex flex-row gap-4\">\n <p-skeleton class=\"w-full h-full inline-block\" height=\"35px\" width=\"120px\"></p-skeleton>\n <p-skeleton class=\"w-full h-full inline-block\" height=\"35px\" width=\"120px\"></p-skeleton>\n </div>\n </ng-template>\n </ocx-slot>\n </div>\n </ocx-shell-header>\n\n <p-toast></p-toast>\n\n <div class=\"menu-wrapper\">\n <div class=\"layout-menu-container overflow-auto\" *ngIf=\"isStaticalMenuVisible()\">\n <ocx-slot name=\"onecx-shell-vertical-menu\">\n <ng-template #skeleton>\n <p-skeleton class=\"w-full h-full inline-block p-2\" height=\"35px\"></p-skeleton>\n </ng-template>\n </ocx-slot>\n </div>\n </div>\n\n <div class=\"layout-main\">\n <div class=\"layout-content relative\">\n <ocx-slot name=\"onecx-shell-sub-header\"></ocx-slot>\n <ng-container *ngIf=\"!showContentProvider || (showContentProvider.showContent$ | async); else appLoading\">\n <ng-content></ng-content>\n <router-outlet></router-outlet>\n </ng-container>\n </div>\n\n <ocx-shell-footer></ocx-shell-footer>\n </div>\n\n <div *ngIf=\"menuActive || !!activeTopbarItem\" class=\"layout-mask modal-in\"></div>\n</div>\n\n<ng-template #globalError>\n <ocx-shell-error [errCode]=\"globalErrMsg\"></ocx-shell-error>\n</ng-template>\n\n<ng-template #appLoading>\n <div [ocxLoadingIndicator]=\"true\" class=\"w-full h-full absolute top-0 left-0\"></div>\n</ng-template>\n" }]
128
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.PrimeNGConfig }, { type: i1.MessageService }, { type: i2.AppStateService }, { type: i2.PortalMessageService }, { type: i2.UserService }, { type: i2.ThemeService }, { type: i3.HttpClient }, { type: i4.Router }, { type: undefined, decorators: [{
129
- type: Optional
130
- }, {
131
- type: Inject,
132
- args: [SHOW_CONTENT_PROVIDER]
133
- }] }]; }, propDecorators: { onResize: [{
134
- type: HostListener,
135
- args: ['window:resize']
136
- }] } });
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFsLXZpZXdwb3J0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2hlbGwtY29yZS9zcmMvbGliL2NvbXBvbmVudHMvcG9ydGFsLXZpZXdwb3J0L3BvcnRhbC12aWV3cG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NoZWxsLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL3BvcnRhbC12aWV3cG9ydC9wb3J0YWwtdmlld3BvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFxQixRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ3ZILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQ3BFLE9BQU8sRUFDTCxlQUFlLEVBRWYsb0JBQW9CLEVBQ3BCLFlBQVksRUFDWixXQUFXLEdBQ1osTUFBTSxzQ0FBc0MsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUMzRCxPQUFPLEVBQW1CLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUE7Ozs7Ozs7Ozs7Ozs7O0FBRXpFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFzQix1QkFBdUIsQ0FBQyxDQUFBO0FBWTlGLElBQU0sdUJBQXVCLEdBQTdCLE1BQU0sdUJBQXVCO0lBaUJsQyxZQUNVLFFBQW1CLEVBQ25CLGFBQTRCLEVBQzVC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UUFBUSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsZUFBZSxtQkFBbUIsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFBO1FBQ2pGLDJFQUEyRTtRQUMzRSxJQUFJLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxRQUFRLENBQUE7UUFDM0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7SUFDMUIsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQTtJQUN6RCxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO0lBQ3hELENBQUM7SUFFRCx1QkFBdUI7UUFDckIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtJQUNwQyxDQUFDOztxSEFuSFUsdUJBQXVCLGdSQTJCWixxQkFBcUI7eUdBM0JoQyx1QkFBdUIseUhDMUJwQyxzbUVBMERBO0FEaENhLHVCQUF1QjtJQURuQyxZQUFZLEVBQUU7cUNBbUJPLFNBQVM7UUFDSixhQUFhO1FBQ1osY0FBYztRQUNkLGVBQWU7UUFDVCxvQkFBb0I7UUFDN0IsV0FBVztRQUNWLFlBQVk7UUFDZCxVQUFVO1FBQ2QsTUFBTTtHQTFCYix1QkFBdUIsQ0FvSG5DO1NBcEhZLHVCQUF1Qjs0RkFBdkIsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUNFLDJCQUEyQjs7MEJBZ0NsQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLHFCQUFxQjs0Q0FzRTNDLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5qZWN0aW9uVG9rZW4sIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcidcbmltcG9ydCB7IFVudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAbmduZWF0L3VudGlsLWRlc3Ryb3knXG5pbXBvcnQge1xuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIE1lc3NhZ2UsXG4gIFBvcnRhbE1lc3NhZ2VTZXJ2aWNlLFxuICBUaGVtZVNlcnZpY2UsXG4gIFVzZXJTZXJ2aWNlLFxufSBmcm9tICdAb25lY3gvYW5ndWxhci1pbnRlZ3JhdGlvbi1pbnRlcmZhY2UnXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSwgUHJpbWVOR0NvbmZpZyB9IGZyb20gJ3ByaW1lbmcvYXBpJ1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaWx0ZXIsIGZpcnN0LCBmcm9tLCBtZXJnZU1hcCwgb2YgfSBmcm9tICdyeGpzJ1xuXG5leHBvcnQgY29uc3QgU0hPV19DT05URU5UX1BST1ZJREVSID0gbmV3IEluamVjdGlvblRva2VuPFNob3dDb250ZW50UHJvdmlkZXI+KCdTSE9XX0NPTlRFTlRfUFJPVklERVInKVxuXG5leHBvcnQgaW50ZXJmYWNlIFNob3dDb250ZW50UHJvdmlkZXIge1xuICBzaG93Q29udGVudCQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPlxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvY3gtc2hlbGwtcG9ydGFsLXZpZXdwb3J0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvcnRhbC12aWV3cG9ydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BvcnRhbC12aWV3cG9ydC5jb21wb25lbnQuc2NzcyddLFxufSlcbkBVbnRpbERlc3Ryb3koKVxuZXhwb3J0IGNsYXNzIFBvcnRhbFZpZXdwb3J0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBtZW51QnV0dG9uVGl0bGUgPSAnJ1xuICBtZW51QWN0aXZlID0gdHJ1ZVxuICBhY3RpdmVUb3BiYXJJdGVtOiBzdHJpbmcgfCB1bmRlZmluZWRcblxuICByZW1vdmVEb2N1bWVudENsaWNrTGlzdGVuZXI6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZFxuXG4gIHRvcGJhclRoZW1lID0gJ3ZhcidcbiAgY29sb3JTY2hlbWU6ICdhdXRvJyB8ICdsaWdodCcgfCAnZGFyaycgPSAnbGlnaHQnXG4gIGxheW91dE1vZGU6ICdhdXRvJyB8ICdsaWdodCcgfCAnZGFyaycgPSAnbGlnaHQnXG4gIG1lbnVNb2RlOiAnaG9yaXpvbnRhbCcgfCAnc3RhdGljJyB8ICdvdmVybGF5JyB8ICdzbGltJyB8ICdzbGltcGx1cycgPSAnc3RhdGljJ1xuICBpbnB1dFN0eWxlID0gJ291dGxpbmUnXG4gIHJpcHBsZSA9IHRydWVcbiAgaXNNb2JpbGUgPSBmYWxzZVxuXG4gIGdsb2JhbEVyck1zZzogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgcHJpbWVuZ0NvbmZpZzogUHJpbWVOR0NvbmZpZyxcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICBwdWJsaWMgYXBwU3RhdGVTZXJ2aWNlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwb3J0YWxNZXNzYWdlU2VydmljZTogUG9ydGFsTWVzc2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0aGVtZVNlcnZpY2U6IFRoZW1lU2VydmljZSxcbiAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFNIT1dfQ09OVEVOVF9QUk9WSURFUikgcHVibGljIHNob3dDb250ZW50UHJvdmlkZXI6IFNob3dDb250ZW50UHJvdmlkZXIgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgdGhpcy5wb3J0YWxNZXNzYWdlU2VydmljZS5tZXNzYWdlJC5zdWJzY3JpYmUoKG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKG1lc3NhZ2UpKVxuICAgIHRoaXMudXNlclNlcnZpY2UucHJvZmlsZSQucGlwZSh1bnRpbERlc3Ryb3llZCh0aGlzKSkuc3Vic2NyaWJlKChwcm9maWxlKSA9PiB7XG4gICAgICB0aGlzLm1lbnVNb2RlID1cbiAgICAgICAgKHByb2ZpbGU/LmFjY291bnRTZXR0aW5ncz8ubGF5b3V0QW5kVGhlbWVTZXR0aW5ncz8ubWVudU1vZGU/LnRvTG93ZXJDYXNlKCkgYXNcbiAgICAgICAgICB8IHR5cGVvZiB0aGlzLm1lbnVNb2RlXG4gICAgICAgICAgfCB1bmRlZmluZWQpIHx8IHRoaXMubWVudU1vZGVcblxuICAgICAgdGhpcy5jb2xvclNjaGVtZSA9XG4gICAgICAgIChwcm9maWxlPy5hY2NvdW50U2V0dGluZ3M/LmxheW91dEFuZFRoZW1lU2V0dGluZ3M/LmNvbG9yU2NoZW1lPy50b0xvd2VyQ2FzZSgpIGFzXG4gICAgICAgICAgfCB0eXBlb2YgdGhpcy5jb2xvclNjaGVtZVxuICAgICAgICAgIHwgdW5kZWZpbmVkKSB8fCB0aGlzLmNvbG9yU2NoZW1lXG4gICAgfSlcblxuICAgIHRoaXMudGhlbWVTZXJ2aWNlLmN1cnJlbnRUaGVtZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaXJzdCgpLFxuICAgICAgICBtZXJnZU1hcCgodGhlbWUpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhlbWUuZmF2aWNvblVybFxuICAgICAgICAgICAgPyB0aGlzLmh0dHBDbGllbnQuZ2V0KHRoZW1lLmZhdmljb25VcmwsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfSkucGlwZShcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoYmxvYikgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyb20oXG4gICAgICAgICAgICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoZSkgPT4gcmVzb2x2ZShlLnRhcmdldD8ucmVzdWx0KVxuICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBvZignJylcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHVybCkgPT4ge1xuICAgICAgICBsZXQgbGluayA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJsaW5rW3JlbH49J2ljb24nXVwiKSBhcyBhbnlcbiAgICAgICAgaWYgKCFsaW5rKSB7XG4gICAgICAgICAgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKVxuICAgICAgICAgIGxpbmsucmVsID0gJ2ljb24nXG4gICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKVxuICAgICAgICB9XG4gICAgICAgIGxpbmsuaHJlZiA9IHVybFxuICAgICAgfSlcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucHJpbWVuZ0NvbmZpZy5yaXBwbGUgPSB0cnVlXG5cbiAgICB0aGlzLmFwcFN0YXRlU2VydmljZS5nbG9iYWxFcnJvciRcbiAgICAgIC5waXBlKHVudGlsRGVzdHJveWVkKHRoaXMpKVxuICAgICAgLnBpcGUoZmlsdGVyKChpKSA9PiBpICE9PSB1bmRlZmluZWQpKVxuICAgICAgLnN1YnNjcmliZSgoZXJyOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgdGhpcy5nbG9iYWxFcnJNc2cgPSBlcnJcbiAgICAgIH0pXG5cbiAgICB0aGlzLm9uUmVzaXplKClcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucmVtb3ZlRG9jdW1lbnRDbGlja0xpc3RlbmVyPy4oKVxuICB9XG5cbiAgb25NZW51QnV0dG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmFjdGl2ZVRvcGJhckl0ZW0gPSB1bmRlZmluZWRcbiAgICB0aGlzLm1lbnVBY3RpdmUgPSAhdGhpcy5tZW51QWN0aXZlXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcbiAgb25SZXNpemUoKSB7XG4gICAgY29uc3QgbW9iaWxlQnJlYWtwb2ludFZhciA9IGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCctLW1vYmlsZS1icmVhay1wb2ludCcpXG4gICAgY29uc3QgaXNNb2JpbGUgPSB3aW5kb3cubWF0Y2hNZWRpYShgKG1heC13aWR0aDogJHttb2JpbGVCcmVha3BvaW50VmFyfSlgKS5tYXRjaGVzXG4gICAgLy8gYXV0byBzaG93IHNpZGViYXIgd2hlbiBjaGFuZ2luZyB0byBkZXNrdG9wLCBoaWRlIHdoZW4gY2hhbmdpbmcgdG8gbW9iaWxlXG4gICAgaWYgKGlzTW9iaWxlICE9PSB0aGlzLmlzTW9iaWxlKSB0aGlzLm1lbnVBY3RpdmUgPSAhaXNNb2JpbGVcbiAgICB0aGlzLmlzTW9iaWxlID0gaXNNb2JpbGVcbiAgfVxuXG4gIGlzSG9yaXpvbnRhbE1lbnVNb2RlKCkge1xuICAgIHJldHVybiB0aGlzLm1lbnVNb2RlID09PSAnaG9yaXpvbnRhbCcgJiYgIXRoaXMuaXNNb2JpbGVcbiAgfVxuXG4gIGlzU3RhdGljYWxNZW51VmlzaWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZW51QWN0aXZlICYmICF0aGlzLmlzSG9yaXpvbnRhbE1lbnVNb2RlKClcbiAgfVxuXG4gIGlzSG9yaXpvbnRhbE1lbnVWaXNpYmxlKCkge1xuICAgIHJldHVybiB0aGlzLmlzSG9yaXpvbnRhbE1lbnVNb2RlKClcbiAgfVxufVxuIiwiPGRpdlxuICAqbmdJZj1cIiFnbG9iYWxFcnJNc2c7IGVsc2UgZ2xvYmFsRXJyb3JcIlxuICBjbGFzcz1cImxheW91dC13cmFwcGVyXCJcbiAgW25nQ2xhc3NdPVwie1xuICAgICdwLWlucHV0LWZpbGxlZCc6IGlucHV0U3R5bGUgPT09ICdmaWxsZWQnLCBcbiAgICAncC1yaXBwbGUtZGlzYWJsZWQnOiAhcmlwcGxlLFxuICAgICdsYXlvdXQtbWVudS1hY3RpdmUnOiBpc1N0YXRpY2FsTWVudVZpc2libGUoKSxcbiAgICAnbGF5b3V0LW1lbnUtYnV0dG9uLWhpZGRlbic6IGlzSG9yaXpvbnRhbE1lbnVNb2RlKClcbiAgfVwiXG4gIFtjbGFzc109XCInbGF5b3V0LW1lbnUtJyArIGNvbG9yU2NoZW1lICsgJyBsYXlvdXQtdG9wYmFyLScgKyB0b3BiYXJUaGVtZVwiXG4+XG4gIDxvY3gtc2hlbGwtaGVhZGVyIFttZW51QnV0dG9uVGl0bGVdPVwibWVudUJ1dHRvblRpdGxlXCIgKG1lbnVCdXR0b25DbGljayk9XCJvbk1lbnVCdXR0b25DbGljaygkZXZlbnQpXCI+XG4gICAgPGRpdiAqbmdJZj1cImlzSG9yaXpvbnRhbE1lbnVWaXNpYmxlKClcIj5cbiAgICAgIDxvY3gtc2xvdCBuYW1lPVwib25lY3gtc2hlbGwtaG9yaXpvbnRhbC1tZW51XCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc2tlbGV0b24+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTQgZmxleCBmbGV4LXJvdyBnYXAtNFwiPlxuICAgICAgICAgICAgPHAtc2tlbGV0b24gY2xhc3M9XCJ3LWZ1bGwgaC1mdWxsIGlubGluZS1ibG9ja1wiIGhlaWdodD1cIjM1cHhcIiB3aWR0aD1cIjEyMHB4XCI+PC9wLXNrZWxldG9uPlxuICAgICAgICAgICAgPHAtc2tlbGV0b24gY2xhc3M9XCJ3LWZ1bGwgaC1mdWxsIGlubGluZS1ibG9ja1wiIGhlaWdodD1cIjM1cHhcIiB3aWR0aD1cIjEyMHB4XCI+PC9wLXNrZWxldG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9vY3gtc2xvdD5cbiAgICA8L2Rpdj5cbiAgPC9vY3gtc2hlbGwtaGVhZGVyPlxuXG4gIDxwLXRvYXN0PjwvcC10b2FzdD5cblxuICA8ZGl2IGNsYXNzPVwibWVudS13cmFwcGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImxheW91dC1tZW51LWNvbnRhaW5lciBvdmVyZmxvdy1hdXRvXCIgKm5nSWY9XCJpc1N0YXRpY2FsTWVudVZpc2libGUoKVwiPlxuICAgICAgPG9jeC1zbG90IG5hbWU9XCJvbmVjeC1zaGVsbC12ZXJ0aWNhbC1tZW51XCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjc2tlbGV0b24+XG4gICAgICAgICAgPHAtc2tlbGV0b24gY2xhc3M9XCJ3LWZ1bGwgaC1mdWxsIGlubGluZS1ibG9jayBwLTJcIiBoZWlnaHQ9XCIzNXB4XCI+PC9wLXNrZWxldG9uPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9vY3gtc2xvdD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImxheW91dC1tYWluXCI+XG4gICAgPGRpdiBjbGFzcz1cImxheW91dC1jb250ZW50IHJlbGF0aXZlXCI+XG4gICAgICA8b2N4LXNsb3QgbmFtZT1cIm9uZWN4LXNoZWxsLXN1Yi1oZWFkZXJcIj48L29jeC1zbG90PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzaG93Q29udGVudFByb3ZpZGVyIHx8IChzaG93Q29udGVudFByb3ZpZGVyLnNob3dDb250ZW50JCB8IGFzeW5jKTsgZWxzZSBhcHBMb2FkaW5nXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8b2N4LXNoZWxsLWZvb3Rlcj48L29jeC1zaGVsbC1mb290ZXI+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJtZW51QWN0aXZlIHx8ICEhYWN0aXZlVG9wYmFySXRlbVwiIGNsYXNzPVwibGF5b3V0LW1hc2sgbW9kYWwtaW5cIj48L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2dsb2JhbEVycm9yPlxuICA8b2N4LXNoZWxsLWVycm9yIFtlcnJDb2RlXT1cImdsb2JhbEVyck1zZ1wiPjwvb2N4LXNoZWxsLWVycm9yPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhcHBMb2FkaW5nPlxuICA8ZGl2IFtvY3hMb2FkaW5nSW5kaWNhdG9yXT1cInRydWVcIiBjbGFzcz1cInctZnVsbCBoLWZ1bGwgYWJzb2x1dGUgdG9wLTAgbGVmdC0wXCI+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -1,22 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { shareReplay } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- export class PermissionsCacheService {
5
- constructor() {
6
- this.permissions = {};
7
- }
8
- getPermissions(appId, productName, cacheMissFkt) {
9
- const key = appId + '|' + productName;
10
- if (!this.permissions[key]) {
11
- this.permissions[key] = cacheMissFkt(appId, productName).pipe(shareReplay());
12
- }
13
- return this.permissions[key];
14
- }
15
- }
16
- PermissionsCacheService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PermissionsCacheService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17
- PermissionsCacheService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PermissionsCacheService, providedIn: 'root' });
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PermissionsCacheService, decorators: [{
19
- type: Injectable,
20
- args: [{ providedIn: 'root' }]
21
- }] });
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMtY2FjaGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2hlbGwtY29yZS9zcmMvbGliL3NlcnZpY2VzL3Blcm1pc3Npb25zLWNhY2hlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQWMsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFBOztBQUc5QyxNQUFNLE9BQU8sdUJBQXVCO0lBRHBDO1FBRUUsZ0JBQVcsR0FBeUMsRUFBRSxDQUFBO0tBYXZEO0lBWEMsY0FBYyxDQUNaLEtBQWEsRUFDYixXQUFtQixFQUNuQixZQUEwRTtRQUUxRSxNQUFNLEdBQUcsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLFdBQVcsQ0FBQTtRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUE7U0FDN0U7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDOUIsQ0FBQzs7cUhBYlUsdUJBQXVCO3lIQUF2Qix1QkFBdUIsY0FEVixNQUFNOzRGQUNuQix1QkFBdUI7a0JBRG5DLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMnXG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbnNDYWNoZVNlcnZpY2Uge1xuICBwZXJtaXNzaW9uczogUmVjb3JkPHN0cmluZywgT2JzZXJ2YWJsZTxzdHJpbmdbXT4+ID0ge31cblxuICBnZXRQZXJtaXNzaW9ucyhcbiAgICBhcHBJZDogc3RyaW5nLFxuICAgIHByb2R1Y3ROYW1lOiBzdHJpbmcsXG4gICAgY2FjaGVNaXNzRmt0OiAoYXBwSWQ6IHN0cmluZywgcHJvZHVjdE5hbWU6IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxzdHJpbmdbXT5cbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IGtleSA9IGFwcElkICsgJ3wnICsgcHJvZHVjdE5hbWVcbiAgICBpZiAoIXRoaXMucGVybWlzc2lvbnNba2V5XSkge1xuICAgICAgdGhpcy5wZXJtaXNzaW9uc1trZXldID0gY2FjaGVNaXNzRmt0KGFwcElkLCBwcm9kdWN0TmFtZSkucGlwZShzaGFyZVJlcGxheSgpKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uc1trZXldXG4gIH1cbn1cbiJdfQ==