@sumaris-net/ngx-components 2.4.119 → 2.4.120

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.
@@ -97,12 +97,12 @@ export class MenuComponent {
97
97
  this.detectChanges();
98
98
  }
99
99
  async logout() {
100
- const translations = await this.translate.get([
100
+ const translations = await this.translate.instant([
101
101
  'AUTH.LOGOUT.CONFIRM_TITLE',
102
102
  'AUTH.LOGOUT.CONFIRM_MESSAGE',
103
103
  'COMMON.BTN_CANCEL',
104
104
  'AUTH.LOGOUT.BTN_CONFIRM'
105
- ]).toPromise();
105
+ ]);
106
106
  const alert = await this.alertController.create({
107
107
  header: translations['AUTH.LOGOUT.CONFIRM_TITLE'],
108
108
  message: translations['AUTH.LOGOUT.CONFIRM_MESSAGE'],
@@ -125,8 +125,8 @@ export class MenuComponent {
125
125
  });
126
126
  await alert.present();
127
127
  }
128
- trackByFn(index, menu) {
129
- return menu?.path;
128
+ trackByFn(index, item) {
129
+ return item.id?.toString() || item.path || item.title;
130
130
  }
131
131
  async enable(value) {
132
132
  const enabled = await this.menu.isEnabled(this.menuId);
@@ -220,10 +220,10 @@ export class MenuComponent {
220
220
  }
221
221
  }
222
222
  MenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MenuComponent, deps: [{ token: i1.PlatformService }, { token: i2.AccountService }, { token: i3.NavController }, { token: i3.MenuController }, { token: i3.ModalController }, { token: i3.AlertController }, { token: i4.TranslateService }, { token: i5.ConfigService }, { token: i0.ChangeDetectorRef }, { token: i6.MenuService }, { token: ENVIRONMENT }, { token: i7.ActivatedRoute, optional: true }, { token: APP_MENU_OPTIONS, optional: true }, { token: APP_MENU_ITEMS, optional: true }], target: i0.ɵɵFactoryTarget.Component });
223
- MenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: MenuComponent, selector: "app-menu", inputs: { id: "id", menuId: "menuId", side: "side", contentId: "contentId", logo: "logo", appName: "appName", appVersion: "appVersion" }, viewQueries: [{ propertyName: "splitPane", first: true, predicate: ["splitPane"], descendants: true, static: true }], ngImport: i0, template: "<ion-split-pane #splitPane [contentId]=\"contentId\" (swiperight)=\"onSwipeRight($event)\">\n\n <ion-menu [id]=\"id\" [menuId]=\"menuId\" [contentId]=\"contentId\">\n <ion-header>\n\n <ion-toolbar @fadeInAnimation *ngIf=\"isLogin; else notLogin\" class=\"ion-toolbar-top\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <button type=\"button\" mat-flat-button\n class=\"user-avatar\" [class.primary]=\"!accountAvatar\"\n [style.background-image]=\"'url('+(accountAvatar||'./assets/img/person.png')+')'\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT'|translate\">\n </button>\n </ion-col>\n <ion-col size=\"8\" class=\"user-logo\">\n <img *ngIf=\"logo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"108px\"/>\n <span *ngIf=\"!logo\" style=\"width: 108px;\">{{appName}}</span>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col>\n <button mat-button type=\"button\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT'|translate\">\n <ion-label color=\"primary\" class=\"ion-text-wrap ion-text-start\">\n <h3 class=\"no-margin username\">\n <b>{{accountName}}</b>\n </h3>\n <h4>{{accountEmail}}</h4>\n </ion-label>\n </button>\n </ion-col>\n\n <!-- Insertion headerBottomRight -->\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"headerBottomRight\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-toolbar>\n\n <!-- User not logged -->\n <ng-template #notLogin>\n <mat-toolbar class=\"ion-padding\" @fadeInAnimation\n style=\"height: unset; display: block; margin: auto; text-align: center;\">\n <img *ngIf=\"logo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"150px;\">\n <span *ngIf=\"!logo\" style=\"width: 150px\">{{appName}}</span>\n </mat-toolbar>\n </ng-template>\n </ion-header>\n\n <ion-content [class.has-user-header]=\"isLogin\">\n\n <ion-list lines=\"none\">\n <ng-container *ngFor=\"let item of menuService.$items | async\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: {$implicit: item, level: 0}\"></ng-container>\n </ng-container>\n </ion-list>\n </ion-content>\n\n <ion-footer class=\"hidden-xs hidden-sm\">\n <ion-toolbar>\n\n <ion-buttons slot=\"start\">\n <ion-button mat-icon-button color=\"accent\" (click)=\"openAboutModal($event)\">\n <mat-icon slot=\"icon-only\">help_outline</mat-icon>\n </ion-button>\n </ion-buttons>\n\n <ion-title (click)=\"openAboutModal($event)\" color=\"medium\">\n {{'MENU.FOOTER_VERSION_ABOUT'| translate: {version: appVersion} }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <button mat-icon-button color=\"accent\" (click)=\"toggleSplitPaneShow($event)\"\n class=\"hidden-xs hidden-sm hidden-md\"\n [title]=\"(splitPane.when ? 'COMMON.BTN_HIDE_MENU' : 'COMMON.BTN_SHOW_MENU') |translate\">\n <mat-icon><span>{{splitPane.when ? '&#xab;' : '&#xbb;'}}</span></mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n\n </ion-menu>\n\n <ng-content></ng-content>\n\n</ion-split-pane>\n\n<ng-template #headerBottomRight>\n <ng-content select=\"[headerBottomRight]\"></ng-content>\n</ng-template>\n\n<ng-template #menuItem let-item let-level=\"level\">\n <!-- link -->\n <!-- TODO : better to set padding with css varirable ? (style=\"$menu-item-level:{{ level }})\"-->\n <ion-item *ngIf=\"item.path\"\n @fadeInAnimation\n style=\"padding-left:{{level * 15}}px\"\n class=\"{{item.cssClass}} {{item.color}} text-1x\"\n tappable\n [routerLink]=\"item.path\"\n [queryParams]=\"item.pathParams\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n [routerLinkActiveOptions]=\"{exact: (item.path === '/' || level != 0)}\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label translate>{{item.title}}</ion-label>\n </ion-item>\n\n <!-- action -->\n <ion-item *ngIf=\"item.action\"\n @fadeInAnimation\n class=\"{{item.cssClass}} {{item.color}} text-1x\"\n tappable\n (click)=\"doAction(item.action, $event)\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label translate>{{item.title}}</ion-label>\n </ion-item>\n\n <!-- divider -->\n <ion-item-divider @fadeInAnimation\n class=\"{{item.cssClass}} {{item.color}}\"\n *ngIf=\"!item.path && !item.action\">\n <ion-label translate>{{item.title}}</ion-label>\n </ion-item-divider>\n\n <!-- children -->\n <ng-container *ngIf=\"item?.$children\">\n <ng-container *ngFor=\"let child of item.$children | async\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: {$implicit: child, level: level+1}\"></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: ["ion-menu{--ion-item-background: transparent;--ion-item-divider-background: transparent;--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint);--ion-item-background-selected: var(--ion-color-secondary100);--ion-item-text-color-selected: var(--ion-color-primary);--ion-item-icon-color-selected: var(--ion-color-primary);--ion-item-text-color-disable: var(--ion-color-medium);--ion-item-icon-color-disable: var(--ion-color-medium)}ion-menu ion-header ion-text{color:var(--ion-color-primary)}ion-menu ion-header .user-avatar{background-size:cover;background-repeat:no-repeat;background-position:center;background-color:var(--ion-color-secondary);border:solid 1px rgba(var(--ion-color-secondary-rgb),.5);overflow:hidden!important;font-size:var(--avatar-size, 60px)!important;line-height:var(--avatar-size, 60px);height:var(--avatar-size, 60px)!important;width:var(--avatar-size, 60px)!important;border-radius:50%;display:inline-block}ion-menu ion-header .user-avatar:hover{background-color:var(--ion-color-secondary-shade);border:solid 2px var(--ion-color-secondary-shade)}ion-menu ion-header .user-logo{text-align:right}ion-menu ion-header .user-logo img{max-width:120px;max-height:var(--avatar-size, 60px);width:auto}ion-menu ion-header .username{padding-top:0;margin-top:0;margin-bottom:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}ion-menu ion-header button[mat-button]{padding:0;text-align:start!important;width:100%}ion-menu .scroll-content{margin-top:79px!important}ion-menu .has-user-header .scroll-content{margin-top:188px!important}ion-menu ion-content.has-profile-header{--offset-top: 188px}ion-menu ion-content.no-profile-header{--offset-top: 79px}ion-menu ion-content ion-list{min-height:100%;display:flex;flex-direction:column;justify-content:flex-start}ion-menu ion-content ion-list ion-menu-toggle.flex-spacer{flex:1 1 auto;display:flex;flex-direction:column;justify-content:flex-end}ion-menu ion-content ion-list ion-item.primary{--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint)}ion-menu ion-content ion-list ion-item.secondary{--ion-item-icon-color: var(--ion-color-secondary-tint);--ion-item-text-color: var(--ion-color-secondary-tint)}ion-menu ion-content ion-list ion-item.tertiary{--ion-item-icon-color: var(--ion-color-tertiary-tint);--ion-item-text-color: var(--ion-color-tertiary-tint)}ion-menu ion-content ion-list ion-item.danger{--ion-item-icon-color: var(--ion-color-danger-tint);--ion-item-text-color: var(--ion-color-danger-tint)}ion-menu ion-content ion-list ion-item.medium{--ion-item-icon-color: var(--ion-color-medium-shade);--ion-item-text-color: var(--ion-color-medium-shade)}ion-menu ion-content ion-list ion-item.dark{--ion-item-icon-color: var(--ion-color-dark-tint);--ion-item-text-color: var(--ion-color-dark-tint)}ion-menu ion-content ion-list ion-item mat-icon,ion-menu ion-content ion-list ion-item ion-icon{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item ion-text,ion-menu ion-content ion-list ion-item ion-label{color:var(--ion-item-text-color)!important}ion-menu ion-content ion-list ion-item.selected{background-color:var(--ion-item-background-selected)!important;--color-hover: var(--ion-item-background-selected) !important}ion-menu ion-content ion-list ion-item.selected mat-icon,ion-menu ion-content ion-list ion-item.selected ion-icon{color:var(--ion-item-icon-color-selected)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item.selected ion-text,ion-menu ion-content ion-list ion-item.selected ion-label{color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list ion-item.selected:hover{--color-hover: var(--ion-item-background-selected) !important;--ion-item-icon-color-selected: var(--ion-item-icon-color) !important;--ion-item-text-color-selected: var(--ion-item-text-color) !important}ion-menu ion-footer{display:block!important}ion-menu ion-footer ion-toolbar ion-title{cursor:pointer;font-size:12pt;font-weight:400;text-align:center;padding:0 8px}ion-menu ion-footer ion-toolbar ion-button{--width: 40px}@media screen and (max-width: 767px){ion-menu ion-footer{display:none!important;visibility:hidden!important}}@media screen and (min-width: 768px){ion-menu ion-scroll{overflow-y:auto!important}ion-menu .user-avatar{font-size:var(--avatar-size, 80px)!important;line-height:var(--avatar-size, 80px);height:var(--avatar-size, 80px)!important;width:var(--avatar-size, 80px)!important}ion-menu .user-logo img{max-height:var(--avatar-size, 80px)}}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i3.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i3.IonItemDivider, selector: "ion-item-divider", inputs: ["color", "mode", "sticky"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i3.IonMenu, selector: "ion-menu", inputs: ["contentId", "disabled", "maxEdgeStart", "menuId", "side", "swipeGesture", "type"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonSplitPane, selector: "ion-split-pane", inputs: ["contentId", "disabled", "when"] }, { kind: "component", type: i3.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i3.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i3.RouterLinkDelegate, selector: ":not(a):not(area)[routerLink]", inputs: ["routerDirection", "routerAnimation"] }, { kind: "directive", type: i4.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i9.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i7.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i7.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], animations: [fadeInAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
223
+ MenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: MenuComponent, selector: "app-menu", inputs: { id: "id", menuId: "menuId", side: "side", contentId: "contentId", logo: "logo", appName: "appName", appVersion: "appVersion" }, viewQueries: [{ propertyName: "splitPane", first: true, predicate: ["splitPane"], descendants: true, static: true }], ngImport: i0, template: "<ion-split-pane #splitPane [contentId]=\"contentId\" (swiperight)=\"onSwipeRight($event)\">\n\n <ion-menu [id]=\"id\" [menuId]=\"menuId\" [contentId]=\"contentId\">\n <ion-header>\n\n <ion-toolbar @fadeInAnimation *ngIf=\"isLogin; else notLogin\" class=\"ion-toolbar-top\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <button type=\"button\" mat-flat-button\n class=\"user-avatar\" [class.primary]=\"!accountAvatar\"\n [style.background-image]=\"'url('+(accountAvatar||'./assets/img/person.png')+')'\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT'|translate\">\n </button>\n </ion-col>\n <ion-col size=\"8\" class=\"user-logo\">\n <img *ngIf=\"logo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"108px\"/>\n <span *ngIf=\"!logo\" style=\"width: 108px;\">{{appName}}</span>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col>\n <button mat-button type=\"button\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT'|translate\">\n <ion-label color=\"primary\" class=\"ion-text-wrap ion-text-start\">\n <h3 class=\"no-margin username\">\n <b>{{accountName}}</b>\n </h3>\n <h4>{{accountEmail}}</h4>\n </ion-label>\n </button>\n </ion-col>\n\n <!-- Insertion headerBottomRight -->\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"headerBottomRight\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-toolbar>\n\n <!-- User not logged -->\n <ng-template #notLogin>\n <mat-toolbar class=\"ion-padding\" @fadeInAnimation\n style=\"height: unset; display: block; margin: auto; text-align: center;\">\n <img *ngIf=\"logo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"150px;\">\n <span *ngIf=\"!logo\" style=\"width: 150px\">{{appName}}</span>\n </mat-toolbar>\n </ng-template>\n </ion-header>\n\n <ion-content [class.has-user-header]=\"isLogin\">\n\n <ion-list lines=\"none\">\n <ng-container *ngFor=\"let item of menuService.dataSubject | async; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: {$implicit: item, level: 0}\"></ng-container>\n </ng-container>\n </ion-list>\n </ion-content>\n\n <ion-footer class=\"hidden-xs hidden-sm\">\n <ion-toolbar>\n\n <ion-buttons slot=\"start\">\n <ion-button mat-icon-button color=\"accent\" (click)=\"openAboutModal($event)\">\n <mat-icon slot=\"icon-only\">help_outline</mat-icon>\n </ion-button>\n </ion-buttons>\n\n <ion-title (click)=\"openAboutModal($event)\" color=\"medium\">\n {{'MENU.FOOTER_VERSION_ABOUT'| translate: {version: appVersion} }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <button mat-icon-button color=\"accent\" (click)=\"toggleSplitPaneShow($event)\"\n class=\"hidden-xs hidden-sm hidden-md\"\n [title]=\"(splitPane.when ? 'COMMON.BTN_HIDE_MENU' : 'COMMON.BTN_SHOW_MENU') |translate\">\n <mat-icon><span>{{splitPane.when ? '&#xab;' : '&#xbb;'}}</span></mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n\n </ion-menu>\n\n <ng-content></ng-content>\n\n</ion-split-pane>\n\n<ng-template #headerBottomRight>\n <ng-content select=\"[headerBottomRight]\"></ng-content>\n</ng-template>\n\n<ng-template #menuItem let-item let-level=\"level\">\n <!-- link -->\n <!-- TODO : better to set padding with css varirable ? (style=\"$menu-item-level:{{ level }})\"-->\n <ion-item *ngIf=\"item.path\"\n @fadeInAnimation\n style=\"padding-left:{{level * 15}}px\"\n class=\"{{item.cssClass}} {{item.color}} text-1x\"\n tappable\n [routerLink]=\"item.path\"\n [queryParams]=\"item.pathParams\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n [routerLinkActiveOptions]=\"{exact: (item.path === '/' || level != 0)}\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label translate>{{item.title}}</ion-label>\n </ion-item>\n\n <!-- action -->\n <ion-item *ngIf=\"item.action\"\n @fadeInAnimation\n class=\"{{item.cssClass}} {{item.color}} text-1x\"\n tappable\n (click)=\"doAction(item.action, $event)\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label translate>{{item.title}}</ion-label>\n </ion-item>\n\n <!-- divider -->\n <ion-item-divider @fadeInAnimation\n class=\"{{item.cssClass}} {{item.color}}\"\n *ngIf=\"!item.path && !item.action\">\n <ion-label translate>{{item.title}}</ion-label>\n </ion-item-divider>\n\n <!-- children -->\n <ng-container *ngIf=\"item?.$children\">\n <ng-container *ngFor=\"let child of item.$children | async; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: {$implicit: child, level: level+1}\"></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: ["ion-menu{--ion-item-background: transparent;--ion-item-divider-background: transparent;--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint);--ion-item-background-selected: var(--ion-color-secondary100);--ion-item-text-color-selected: var(--ion-color-primary);--ion-item-icon-color-selected: var(--ion-color-primary);--ion-item-text-color-disable: var(--ion-color-medium);--ion-item-icon-color-disable: var(--ion-color-medium)}ion-menu ion-header ion-text{color:var(--ion-color-primary)}ion-menu ion-header .user-avatar{background-size:cover;background-repeat:no-repeat;background-position:center;background-color:var(--ion-color-secondary);border:solid 1px rgba(var(--ion-color-secondary-rgb),.5);overflow:hidden!important;font-size:var(--avatar-size, 60px)!important;line-height:var(--avatar-size, 60px);height:var(--avatar-size, 60px)!important;width:var(--avatar-size, 60px)!important;border-radius:50%;display:inline-block}ion-menu ion-header .user-avatar:hover{background-color:var(--ion-color-secondary-shade);border:solid 2px var(--ion-color-secondary-shade)}ion-menu ion-header .user-logo{text-align:right}ion-menu ion-header .user-logo img{max-width:120px;max-height:var(--avatar-size, 60px);width:auto}ion-menu ion-header .username{padding-top:0;margin-top:0;margin-bottom:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}ion-menu ion-header button[mat-button]{padding:0;text-align:start!important;width:100%}ion-menu .scroll-content{margin-top:79px!important}ion-menu .has-user-header .scroll-content{margin-top:188px!important}ion-menu ion-content.has-profile-header{--offset-top: 188px}ion-menu ion-content.no-profile-header{--offset-top: 79px}ion-menu ion-content ion-list{min-height:100%;display:flex;flex-direction:column;justify-content:flex-start}ion-menu ion-content ion-list ion-menu-toggle.flex-spacer{flex:1 1 auto;display:flex;flex-direction:column;justify-content:flex-end}ion-menu ion-content ion-list ion-item.primary{--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint)}ion-menu ion-content ion-list ion-item.secondary{--ion-item-icon-color: var(--ion-color-secondary-tint);--ion-item-text-color: var(--ion-color-secondary-tint)}ion-menu ion-content ion-list ion-item.tertiary{--ion-item-icon-color: var(--ion-color-tertiary-tint);--ion-item-text-color: var(--ion-color-tertiary-tint)}ion-menu ion-content ion-list ion-item.danger{--ion-item-icon-color: var(--ion-color-danger-tint);--ion-item-text-color: var(--ion-color-danger-tint)}ion-menu ion-content ion-list ion-item.medium{--ion-item-icon-color: var(--ion-color-medium-shade);--ion-item-text-color: var(--ion-color-medium-shade)}ion-menu ion-content ion-list ion-item.dark{--ion-item-icon-color: var(--ion-color-dark-tint);--ion-item-text-color: var(--ion-color-dark-tint)}ion-menu ion-content ion-list ion-item mat-icon,ion-menu ion-content ion-list ion-item ion-icon{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item ion-text,ion-menu ion-content ion-list ion-item ion-label{color:var(--ion-item-text-color)!important}ion-menu ion-content ion-list ion-item.selected{background-color:var(--ion-item-background-selected)!important;--color-hover: var(--ion-item-background-selected) !important}ion-menu ion-content ion-list ion-item.selected mat-icon,ion-menu ion-content ion-list ion-item.selected ion-icon{color:var(--ion-item-icon-color-selected)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item.selected ion-text,ion-menu ion-content ion-list ion-item.selected ion-label{color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list ion-item.selected:hover{--color-hover: var(--ion-item-background-selected) !important;--ion-item-icon-color-selected: var(--ion-item-icon-color) !important;--ion-item-text-color-selected: var(--ion-item-text-color) !important}ion-menu ion-footer{display:block!important}ion-menu ion-footer ion-toolbar ion-title{cursor:pointer;font-size:12pt;font-weight:400;text-align:center;padding:0 8px}ion-menu ion-footer ion-toolbar ion-button{--width: 40px}@media screen and (max-width: 767px){ion-menu ion-footer{display:none!important;visibility:hidden!important}}@media screen and (min-width: 768px){ion-menu ion-scroll{overflow-y:auto!important}ion-menu .user-avatar{font-size:var(--avatar-size, 80px)!important;line-height:var(--avatar-size, 80px);height:var(--avatar-size, 80px)!important;width:var(--avatar-size, 80px)!important}ion-menu .user-logo img{max-height:var(--avatar-size, 80px)}}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i3.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i3.IonItemDivider, selector: "ion-item-divider", inputs: ["color", "mode", "sticky"] }, { kind: "component", type: i3.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i3.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i3.IonMenu, selector: "ion-menu", inputs: ["contentId", "disabled", "maxEdgeStart", "menuId", "side", "swipeGesture", "type"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonSplitPane, selector: "ion-split-pane", inputs: ["contentId", "disabled", "when"] }, { kind: "component", type: i3.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i3.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i3.RouterLinkDelegate, selector: ":not(a):not(area)[routerLink]", inputs: ["routerDirection", "routerAnimation"] }, { kind: "directive", type: i4.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i9.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i7.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i7.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], animations: [fadeInAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
224
224
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MenuComponent, decorators: [{
225
225
  type: Component,
226
- args: [{ selector: 'app-menu', animations: [fadeInAnimation], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-split-pane #splitPane [contentId]=\"contentId\" (swiperight)=\"onSwipeRight($event)\">\n\n <ion-menu [id]=\"id\" [menuId]=\"menuId\" [contentId]=\"contentId\">\n <ion-header>\n\n <ion-toolbar @fadeInAnimation *ngIf=\"isLogin; else notLogin\" class=\"ion-toolbar-top\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <button type=\"button\" mat-flat-button\n class=\"user-avatar\" [class.primary]=\"!accountAvatar\"\n [style.background-image]=\"'url('+(accountAvatar||'./assets/img/person.png')+')'\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT'|translate\">\n </button>\n </ion-col>\n <ion-col size=\"8\" class=\"user-logo\">\n <img *ngIf=\"logo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"108px\"/>\n <span *ngIf=\"!logo\" style=\"width: 108px;\">{{appName}}</span>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col>\n <button mat-button type=\"button\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT'|translate\">\n <ion-label color=\"primary\" class=\"ion-text-wrap ion-text-start\">\n <h3 class=\"no-margin username\">\n <b>{{accountName}}</b>\n </h3>\n <h4>{{accountEmail}}</h4>\n </ion-label>\n </button>\n </ion-col>\n\n <!-- Insertion headerBottomRight -->\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"headerBottomRight\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-toolbar>\n\n <!-- User not logged -->\n <ng-template #notLogin>\n <mat-toolbar class=\"ion-padding\" @fadeInAnimation\n style=\"height: unset; display: block; margin: auto; text-align: center;\">\n <img *ngIf=\"logo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"150px;\">\n <span *ngIf=\"!logo\" style=\"width: 150px\">{{appName}}</span>\n </mat-toolbar>\n </ng-template>\n </ion-header>\n\n <ion-content [class.has-user-header]=\"isLogin\">\n\n <ion-list lines=\"none\">\n <ng-container *ngFor=\"let item of menuService.$items | async\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: {$implicit: item, level: 0}\"></ng-container>\n </ng-container>\n </ion-list>\n </ion-content>\n\n <ion-footer class=\"hidden-xs hidden-sm\">\n <ion-toolbar>\n\n <ion-buttons slot=\"start\">\n <ion-button mat-icon-button color=\"accent\" (click)=\"openAboutModal($event)\">\n <mat-icon slot=\"icon-only\">help_outline</mat-icon>\n </ion-button>\n </ion-buttons>\n\n <ion-title (click)=\"openAboutModal($event)\" color=\"medium\">\n {{'MENU.FOOTER_VERSION_ABOUT'| translate: {version: appVersion} }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <button mat-icon-button color=\"accent\" (click)=\"toggleSplitPaneShow($event)\"\n class=\"hidden-xs hidden-sm hidden-md\"\n [title]=\"(splitPane.when ? 'COMMON.BTN_HIDE_MENU' : 'COMMON.BTN_SHOW_MENU') |translate\">\n <mat-icon><span>{{splitPane.when ? '&#xab;' : '&#xbb;'}}</span></mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n\n </ion-menu>\n\n <ng-content></ng-content>\n\n</ion-split-pane>\n\n<ng-template #headerBottomRight>\n <ng-content select=\"[headerBottomRight]\"></ng-content>\n</ng-template>\n\n<ng-template #menuItem let-item let-level=\"level\">\n <!-- link -->\n <!-- TODO : better to set padding with css varirable ? (style=\"$menu-item-level:{{ level }})\"-->\n <ion-item *ngIf=\"item.path\"\n @fadeInAnimation\n style=\"padding-left:{{level * 15}}px\"\n class=\"{{item.cssClass}} {{item.color}} text-1x\"\n tappable\n [routerLink]=\"item.path\"\n [queryParams]=\"item.pathParams\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n [routerLinkActiveOptions]=\"{exact: (item.path === '/' || level != 0)}\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label translate>{{item.title}}</ion-label>\n </ion-item>\n\n <!-- action -->\n <ion-item *ngIf=\"item.action\"\n @fadeInAnimation\n class=\"{{item.cssClass}} {{item.color}} text-1x\"\n tappable\n (click)=\"doAction(item.action, $event)\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label translate>{{item.title}}</ion-label>\n </ion-item>\n\n <!-- divider -->\n <ion-item-divider @fadeInAnimation\n class=\"{{item.cssClass}} {{item.color}}\"\n *ngIf=\"!item.path && !item.action\">\n <ion-label translate>{{item.title}}</ion-label>\n </ion-item-divider>\n\n <!-- children -->\n <ng-container *ngIf=\"item?.$children\">\n <ng-container *ngFor=\"let child of item.$children | async\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: {$implicit: child, level: level+1}\"></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: ["ion-menu{--ion-item-background: transparent;--ion-item-divider-background: transparent;--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint);--ion-item-background-selected: var(--ion-color-secondary100);--ion-item-text-color-selected: var(--ion-color-primary);--ion-item-icon-color-selected: var(--ion-color-primary);--ion-item-text-color-disable: var(--ion-color-medium);--ion-item-icon-color-disable: var(--ion-color-medium)}ion-menu ion-header ion-text{color:var(--ion-color-primary)}ion-menu ion-header .user-avatar{background-size:cover;background-repeat:no-repeat;background-position:center;background-color:var(--ion-color-secondary);border:solid 1px rgba(var(--ion-color-secondary-rgb),.5);overflow:hidden!important;font-size:var(--avatar-size, 60px)!important;line-height:var(--avatar-size, 60px);height:var(--avatar-size, 60px)!important;width:var(--avatar-size, 60px)!important;border-radius:50%;display:inline-block}ion-menu ion-header .user-avatar:hover{background-color:var(--ion-color-secondary-shade);border:solid 2px var(--ion-color-secondary-shade)}ion-menu ion-header .user-logo{text-align:right}ion-menu ion-header .user-logo img{max-width:120px;max-height:var(--avatar-size, 60px);width:auto}ion-menu ion-header .username{padding-top:0;margin-top:0;margin-bottom:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}ion-menu ion-header button[mat-button]{padding:0;text-align:start!important;width:100%}ion-menu .scroll-content{margin-top:79px!important}ion-menu .has-user-header .scroll-content{margin-top:188px!important}ion-menu ion-content.has-profile-header{--offset-top: 188px}ion-menu ion-content.no-profile-header{--offset-top: 79px}ion-menu ion-content ion-list{min-height:100%;display:flex;flex-direction:column;justify-content:flex-start}ion-menu ion-content ion-list ion-menu-toggle.flex-spacer{flex:1 1 auto;display:flex;flex-direction:column;justify-content:flex-end}ion-menu ion-content ion-list ion-item.primary{--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint)}ion-menu ion-content ion-list ion-item.secondary{--ion-item-icon-color: var(--ion-color-secondary-tint);--ion-item-text-color: var(--ion-color-secondary-tint)}ion-menu ion-content ion-list ion-item.tertiary{--ion-item-icon-color: var(--ion-color-tertiary-tint);--ion-item-text-color: var(--ion-color-tertiary-tint)}ion-menu ion-content ion-list ion-item.danger{--ion-item-icon-color: var(--ion-color-danger-tint);--ion-item-text-color: var(--ion-color-danger-tint)}ion-menu ion-content ion-list ion-item.medium{--ion-item-icon-color: var(--ion-color-medium-shade);--ion-item-text-color: var(--ion-color-medium-shade)}ion-menu ion-content ion-list ion-item.dark{--ion-item-icon-color: var(--ion-color-dark-tint);--ion-item-text-color: var(--ion-color-dark-tint)}ion-menu ion-content ion-list ion-item mat-icon,ion-menu ion-content ion-list ion-item ion-icon{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item ion-text,ion-menu ion-content ion-list ion-item ion-label{color:var(--ion-item-text-color)!important}ion-menu ion-content ion-list ion-item.selected{background-color:var(--ion-item-background-selected)!important;--color-hover: var(--ion-item-background-selected) !important}ion-menu ion-content ion-list ion-item.selected mat-icon,ion-menu ion-content ion-list ion-item.selected ion-icon{color:var(--ion-item-icon-color-selected)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item.selected ion-text,ion-menu ion-content ion-list ion-item.selected ion-label{color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list ion-item.selected:hover{--color-hover: var(--ion-item-background-selected) !important;--ion-item-icon-color-selected: var(--ion-item-icon-color) !important;--ion-item-text-color-selected: var(--ion-item-text-color) !important}ion-menu ion-footer{display:block!important}ion-menu ion-footer ion-toolbar ion-title{cursor:pointer;font-size:12pt;font-weight:400;text-align:center;padding:0 8px}ion-menu ion-footer ion-toolbar ion-button{--width: 40px}@media screen and (max-width: 767px){ion-menu ion-footer{display:none!important;visibility:hidden!important}}@media screen and (min-width: 768px){ion-menu ion-scroll{overflow-y:auto!important}ion-menu .user-avatar{font-size:var(--avatar-size, 80px)!important;line-height:var(--avatar-size, 80px);height:var(--avatar-size, 80px)!important;width:var(--avatar-size, 80px)!important}ion-menu .user-logo img{max-height:var(--avatar-size, 80px)}}\n"] }]
226
+ args: [{ selector: 'app-menu', animations: [fadeInAnimation], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-split-pane #splitPane [contentId]=\"contentId\" (swiperight)=\"onSwipeRight($event)\">\n\n <ion-menu [id]=\"id\" [menuId]=\"menuId\" [contentId]=\"contentId\">\n <ion-header>\n\n <ion-toolbar @fadeInAnimation *ngIf=\"isLogin; else notLogin\" class=\"ion-toolbar-top\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"4\">\n <button type=\"button\" mat-flat-button\n class=\"user-avatar\" [class.primary]=\"!accountAvatar\"\n [style.background-image]=\"'url('+(accountAvatar||'./assets/img/person.png')+')'\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT'|translate\">\n </button>\n </ion-col>\n <ion-col size=\"8\" class=\"user-logo\">\n <img *ngIf=\"logo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"108px\"/>\n <span *ngIf=\"!logo\" style=\"width: 108px;\">{{appName}}</span>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-no-padding\">\n <ion-col>\n <button mat-button type=\"button\"\n [routerLink]=\"['/account']\"\n routerDirection=\"root\"\n routerLinkActive=\"ion-color-primary\"\n (click)=\"close()\"\n [title]=\"'MENU.BTN_MY_ACCOUNT'|translate\">\n <ion-label color=\"primary\" class=\"ion-text-wrap ion-text-start\">\n <h3 class=\"no-margin username\">\n <b>{{accountName}}</b>\n </h3>\n <h4>{{accountEmail}}</h4>\n </ion-label>\n </button>\n </ion-col>\n\n <!-- Insertion headerBottomRight -->\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"headerBottomRight\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n </ion-toolbar>\n\n <!-- User not logged -->\n <ng-template #notLogin>\n <mat-toolbar class=\"ion-padding\" @fadeInAnimation\n style=\"height: unset; display: block; margin: auto; text-align: center;\">\n <img *ngIf=\"logo\" src=\"{{logo}}\" [title]=\"'APP_NAME'|translate: {appName: appName}\" width=\"150px;\">\n <span *ngIf=\"!logo\" style=\"width: 150px\">{{appName}}</span>\n </mat-toolbar>\n </ng-template>\n </ion-header>\n\n <ion-content [class.has-user-header]=\"isLogin\">\n\n <ion-list lines=\"none\">\n <ng-container *ngFor=\"let item of menuService.dataSubject | async; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: {$implicit: item, level: 0}\"></ng-container>\n </ng-container>\n </ion-list>\n </ion-content>\n\n <ion-footer class=\"hidden-xs hidden-sm\">\n <ion-toolbar>\n\n <ion-buttons slot=\"start\">\n <ion-button mat-icon-button color=\"accent\" (click)=\"openAboutModal($event)\">\n <mat-icon slot=\"icon-only\">help_outline</mat-icon>\n </ion-button>\n </ion-buttons>\n\n <ion-title (click)=\"openAboutModal($event)\" color=\"medium\">\n {{'MENU.FOOTER_VERSION_ABOUT'| translate: {version: appVersion} }}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <button mat-icon-button color=\"accent\" (click)=\"toggleSplitPaneShow($event)\"\n class=\"hidden-xs hidden-sm hidden-md\"\n [title]=\"(splitPane.when ? 'COMMON.BTN_HIDE_MENU' : 'COMMON.BTN_SHOW_MENU') |translate\">\n <mat-icon><span>{{splitPane.when ? '&#xab;' : '&#xbb;'}}</span></mat-icon>\n </button>\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n\n </ion-menu>\n\n <ng-content></ng-content>\n\n</ion-split-pane>\n\n<ng-template #headerBottomRight>\n <ng-content select=\"[headerBottomRight]\"></ng-content>\n</ng-template>\n\n<ng-template #menuItem let-item let-level=\"level\">\n <!-- link -->\n <!-- TODO : better to set padding with css varirable ? (style=\"$menu-item-level:{{ level }})\"-->\n <ion-item *ngIf=\"item.path\"\n @fadeInAnimation\n style=\"padding-left:{{level * 15}}px\"\n class=\"{{item.cssClass}} {{item.color}} text-1x\"\n tappable\n [routerLink]=\"item.path\"\n [queryParams]=\"item.pathParams\"\n routerDirection=\"root\"\n routerLinkActive=\"selected\"\n [routerLinkActiveOptions]=\"{exact: (item.path === '/' || level != 0)}\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label translate>{{item.title}}</ion-label>\n </ion-item>\n\n <!-- action -->\n <ion-item *ngIf=\"item.action\"\n @fadeInAnimation\n class=\"{{item.cssClass}} {{item.color}} text-1x\"\n tappable\n (click)=\"doAction(item.action, $event)\">\n <ion-icon slot=\"start\" *ngIf=\"item.icon\" [name]=\"item.icon\"></ion-icon>\n <mat-icon slot=\"start\" *ngIf=\"item.matIcon\">{{item.matIcon}}</mat-icon>\n <ion-label translate>{{item.title}}</ion-label>\n </ion-item>\n\n <!-- divider -->\n <ion-item-divider @fadeInAnimation\n class=\"{{item.cssClass}} {{item.color}}\"\n *ngIf=\"!item.path && !item.action\">\n <ion-label translate>{{item.title}}</ion-label>\n </ion-item-divider>\n\n <!-- children -->\n <ng-container *ngIf=\"item?.$children\">\n <ng-container *ngFor=\"let child of item.$children | async; trackBy: trackByFn\">\n <ng-container *ngTemplateOutlet=\"menuItem; context: {$implicit: child, level: level+1}\"></ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: ["ion-menu{--ion-item-background: transparent;--ion-item-divider-background: transparent;--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint);--ion-item-background-selected: var(--ion-color-secondary100);--ion-item-text-color-selected: var(--ion-color-primary);--ion-item-icon-color-selected: var(--ion-color-primary);--ion-item-text-color-disable: var(--ion-color-medium);--ion-item-icon-color-disable: var(--ion-color-medium)}ion-menu ion-header ion-text{color:var(--ion-color-primary)}ion-menu ion-header .user-avatar{background-size:cover;background-repeat:no-repeat;background-position:center;background-color:var(--ion-color-secondary);border:solid 1px rgba(var(--ion-color-secondary-rgb),.5);overflow:hidden!important;font-size:var(--avatar-size, 60px)!important;line-height:var(--avatar-size, 60px);height:var(--avatar-size, 60px)!important;width:var(--avatar-size, 60px)!important;border-radius:50%;display:inline-block}ion-menu ion-header .user-avatar:hover{background-color:var(--ion-color-secondary-shade);border:solid 2px var(--ion-color-secondary-shade)}ion-menu ion-header .user-logo{text-align:right}ion-menu ion-header .user-logo img{max-width:120px;max-height:var(--avatar-size, 60px);width:auto}ion-menu ion-header .username{padding-top:0;margin-top:0;margin-bottom:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}ion-menu ion-header button[mat-button]{padding:0;text-align:start!important;width:100%}ion-menu .scroll-content{margin-top:79px!important}ion-menu .has-user-header .scroll-content{margin-top:188px!important}ion-menu ion-content.has-profile-header{--offset-top: 188px}ion-menu ion-content.no-profile-header{--offset-top: 79px}ion-menu ion-content ion-list{min-height:100%;display:flex;flex-direction:column;justify-content:flex-start}ion-menu ion-content ion-list ion-menu-toggle.flex-spacer{flex:1 1 auto;display:flex;flex-direction:column;justify-content:flex-end}ion-menu ion-content ion-list ion-item.primary{--ion-item-icon-color: var(--ion-color-primary-tint);--ion-item-text-color: var(--ion-color-primary-tint)}ion-menu ion-content ion-list ion-item.secondary{--ion-item-icon-color: var(--ion-color-secondary-tint);--ion-item-text-color: var(--ion-color-secondary-tint)}ion-menu ion-content ion-list ion-item.tertiary{--ion-item-icon-color: var(--ion-color-tertiary-tint);--ion-item-text-color: var(--ion-color-tertiary-tint)}ion-menu ion-content ion-list ion-item.danger{--ion-item-icon-color: var(--ion-color-danger-tint);--ion-item-text-color: var(--ion-color-danger-tint)}ion-menu ion-content ion-list ion-item.medium{--ion-item-icon-color: var(--ion-color-medium-shade);--ion-item-text-color: var(--ion-color-medium-shade)}ion-menu ion-content ion-list ion-item.dark{--ion-item-icon-color: var(--ion-color-dark-tint);--ion-item-text-color: var(--ion-color-dark-tint)}ion-menu ion-content ion-list ion-item mat-icon,ion-menu ion-content ion-list ion-item ion-icon{color:var(--ion-item-icon-color)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item ion-text,ion-menu ion-content ion-list ion-item ion-label{color:var(--ion-item-text-color)!important}ion-menu ion-content ion-list ion-item.selected{background-color:var(--ion-item-background-selected)!important;--color-hover: var(--ion-item-background-selected) !important}ion-menu ion-content ion-list ion-item.selected mat-icon,ion-menu ion-content ion-list ion-item.selected ion-icon{color:var(--ion-item-icon-color-selected)!important;fill:currentColor;stroke:currentColor}ion-menu ion-content ion-list ion-item.selected ion-text,ion-menu ion-content ion-list ion-item.selected ion-label{color:var(--ion-item-text-color-selected)!important}ion-menu ion-content ion-list ion-item.selected:hover{--color-hover: var(--ion-item-background-selected) !important;--ion-item-icon-color-selected: var(--ion-item-icon-color) !important;--ion-item-text-color-selected: var(--ion-item-text-color) !important}ion-menu ion-footer{display:block!important}ion-menu ion-footer ion-toolbar ion-title{cursor:pointer;font-size:12pt;font-weight:400;text-align:center;padding:0 8px}ion-menu ion-footer ion-toolbar ion-button{--width: 40px}@media screen and (max-width: 767px){ion-menu ion-footer{display:none!important;visibility:hidden!important}}@media screen and (min-width: 768px){ion-menu ion-scroll{overflow-y:auto!important}ion-menu .user-avatar{font-size:var(--avatar-size, 80px)!important;line-height:var(--avatar-size, 80px);height:var(--avatar-size, 80px)!important;width:var(--avatar-size, 80px)!important}ion-menu .user-logo img{max-height:var(--avatar-size, 80px)}}\n"] }]
227
227
  }], ctorParameters: function () { return [{ type: i1.PlatformService }, { type: i2.AccountService }, { type: i3.NavController }, { type: i3.MenuController }, { type: i3.ModalController }, { type: i3.AlertController }, { type: i4.TranslateService }, { type: i5.ConfigService }, { type: i0.ChangeDetectorRef }, { type: i6.MenuService }, { type: undefined, decorators: [{
228
228
  type: Inject,
229
229
  args: [ENVIRONMENT]
@@ -257,4 +257,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
257
257
  type: ViewChild,
258
258
  args: ['splitPane', { static: true }]
259
259
  }] } });
260
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvbWVudS9tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9tZW51L21lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQVUsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUtoSixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFaEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBRTFFLE9BQU8sRUFBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU1RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDcEUsT0FBTyxFQUFDLHNCQUFzQixFQUFpQyxNQUFNLGdCQUFnQixDQUFDO0FBRXRGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQUc1RCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQWEsV0FBVyxDQUFDLENBQUM7QUFDMUUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQWMsYUFBYSxDQUFDLENBQUM7QUFlL0UsTUFBTSxPQUFPLGFBQWE7SUEwQnhCLFlBQ1ksZUFBZ0MsRUFDaEMsY0FBOEIsRUFDOUIsYUFBNEIsRUFDNUIsSUFBb0IsRUFDcEIsU0FBMEIsRUFDMUIsZUFBZ0MsRUFDaEMsU0FBMkIsRUFDM0IsYUFBNEIsRUFDNUIs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QyxtQkFDWix1QkFBdUIsQ0FBQyxNQUFNOzswQkF1QzVDLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFDbkMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxjQUFjOzRDQXRDM0IsRUFBRTtzQkFBVixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRWtDLFNBQVM7c0JBQWhELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdCwgSW5qZWN0aW9uVG9rZW4sIElucHV0LCBPbkluaXQsIE9wdGlvbmFsLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBbGVydENvbnRyb2xsZXIsIElvblNwbGl0UGFuZSwgTWVudUNvbnRyb2xsZXIsIE1vZGFsQ29udHJvbGxlciwgTmF2Q29udHJvbGxlcn0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuXG5pbXBvcnQge0FjY291bnR9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2FjY291bnQubW9kZWwnO1xuaW1wb3J0IHtBY2NvdW50U2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7QWJvdXRNb2RhbH0gZnJvbSAnLi4vYWJvdXQvYWJvdXQubW9kYWwnO1xuXG5pbXBvcnQge2ZhZGVJbkFuaW1hdGlvbn0gZnJvbSAnLi4vLi4vc2hhcmVkL21hdGVyaWFsL21hdGVyaWFsLmFuaW1hdGlvbnMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtDb25maWdTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcuc2VydmljZSc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1BsYXRmb3JtU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvcGxhdGZvcm0uc2VydmljZSc7XG5pbXBvcnQge0VOVklST05NRU5UfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHtERUZBVUxUX01FTlVfU0hPV19XSEVOLCBNZW51U2VydmljZSwgU3BsaXRQYW5lU2hvd1doZW59IGZyb20gJy4vbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7TWVudUl0ZW0sIE1lbnVPcHRpb25zfSBmcm9tICcuL21lbnUubW9kZWwnO1xuaW1wb3J0IHtmaXJzdE5vdE5pbFByb21pc2V9IGZyb20gJy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5leHBvcnQgY29uc3QgQVBQX01FTlVfSVRFTVMgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWVudUl0ZW1bXT4oJ21lbnVJdGVtcycpO1xuZXhwb3J0IGNvbnN0IEFQUF9NRU5VX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWVudU9wdGlvbnM+KCdtZW51T3B0aW9ucycpO1xuXG5pbnRlcmZhY2UgTWVudUZsYXROb2RlIHtcbiAgZXhwYW5kYWJsZTogYm9vbGVhbjtcbiAgbmFtZTogc3RyaW5nO1xuICBsZXZlbDogbnVtYmVyO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21lbnUuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW2ZhZGVJbkFuaW1hdGlvbl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIGlkID0gJ21lbnUnO1xuICBASW5wdXQoKSBtZW51SWQgPSAnbGVmdCc7XG4gIEBJbnB1dCgpIHNpZGUgPSAnbGVmdCc7XG4gIEBJbnB1dCgpIGNvbnRlbnRJZCA9ICdtZW51LWNvbnRlbnQnO1xuICBASW5wdXQoKSBsb2dvOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFwcE5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgYXBwVmVyc2lvbjogc3RyaW5nID0gdGhpcy5lbnZpcm9ubWVudC52ZXJzaW9uO1xuXG4gIEBWaWV3Q2hpbGQoJ3NwbGl0UGFuZScsIHtzdGF0aWM6IHRydWV9KSBzcGxpdFBhbmU6IElvblNwbGl0UGFuZTtcblxuICBwdWJsaWMgbG9hZGluZyA9IHRydWU7XG4gIHB1YmxpYyBpc0xvZ2luID0gZmFsc2U7XG4gIHB1YmxpYyBhY2NvdW50TmFtZTogc3RyaW5nO1xuICBwdWJsaWMgYWNjb3VudEF2YXRhcjogc3RyaW5nO1xuICBwdWJsaWMgYWNjb3VudEVtYWlsOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfJHRvZ2dsZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF8kb3BlbmVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfJHNwbGl0UGFuZVdoZW4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNwbGl0UGFuZVNob3dXaGVuPihERUZBVUxUX01FTlVfU0hPV19XSEVOKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfJGVuYWJsZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlYnVnOiBib29sZWFuO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHBsYXRmb3JtU2VydmljZTogUGxhdGZvcm1TZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIG1lbnU6IE1lbnVDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgYWxlcnRDb250cm9sbGVyOiBBbGVydENvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCBtZW51U2VydmljZTogTWVudVNlcnZpY2UsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCByb3V0ZTogQWN0aXZhdGVkUm91dGUsIC8vIE1vZGFsIGVkaXRvciBnaXZlICdudWxsJ1xuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX01FTlVfT1BUSU9OUykgcHJvdGVjdGVkIG9wdGlvbnM6IE1lbnVPcHRpb25zLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX01FTlVfSVRFTVMpIHByb3RlY3RlZCBpdGVtczogTWVudUl0ZW1bXVxuICApIHtcbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG5cbiAgICB0aGlzLnNwbGl0UGFuZS53aGVuID0gYXdhaXQgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMubWVudVNlcnZpY2Uuc3BsaXRQYW5lV2hlbik7XG5cbiAgICAvLyBXYWl0IHBsYXRmb3JtIHN0YXJ0ZWRcbiAgICBhd2FpdCB0aGlzLm1lbnVTZXJ2aWNlLnJlYWR5KCk7XG5cbiAgICAvLyBMaXN0ZW4gdG8gbWVudSBzZXJ2aWNlIGV2ZW50XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMubWVudVNlcnZpY2Uuc3BsaXRQYW5lV2hlblxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5zZXRTcGxpdFBhbmVXaGVuKHZhbHVlKSlcbiAgICApO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlLmVuYWJsZWRcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHRoaXMuZW5hYmxlKHZhbHVlKSlcbiAgICApO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlLm9wZW5lZFxuICAgICAgICAvLyBBdm9pZCBkdXBsaWNhdGVkIGV2ZW50c1xuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdmFsdWUgPyB0aGlzLm9wZW4oKSA6IHRoaXMuY2xvc2UoKSlcbiAgICApO1xuXG4gICAgLy8gVE9ETzogZGVsZXRlIHRoaXNcbiAgICAvL3RoaXMubWVudVNlcnZpY2Uub25VcGRhdGVNZW51LnN1YnNjcmliZSgoXykgPT4gdGhpcy5jZC5tYXJrRm9yQ2hlY2soKSk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5hY2NvdW50U2VydmljZS5vbkxvZ2luLnN1YnNjcmliZShhY2NvdW50ID0+IHRoaXMub25Mb2dpbihhY2NvdW50KSlcbiAgICApO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9nb3V0LnN1YnNjcmliZShfID0+IHRoaXMub25Mb2dvdXQodHJ1ZSkpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIG9uTG9naW4oYWNjb3VudDogQWNjb3VudCkge1xuICAgIGNvbnNvbGUuaW5mbygnW21lbnVdIFVwZGF0ZSAob24gbG9naW4pJyk7XG4gICAgdGhpcy5hY2NvdW50QXZhdGFyID0gYWNjb3VudC5hdmF0YXI7XG4gICAgdGhpcy5hY2NvdW50TmFtZSA9IGFjY291bnQuZGlzcGxheU5hbWU7XG4gICAgdGhpcy5hY2NvdW50RW1haWwgPSBhY2NvdW50LmVtYWlsO1xuICAgIHRoaXMuaXNMb2dpbiA9IHRydWU7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGFzeW5jIG9uTG9nb3V0KHNraXBSZWRpcmVjdD86IGJvb2xlYW4pIHtcbiAgICBpZiAoIXNraXBSZWRpcmVjdCkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIExvZ291dCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbbWVudV0gVXBkYXRlIChvbiBsb2dvdXQpJyk7XG4gICAgfVxuICAgIHRoaXMuaXNMb2dpbiA9IGZhbHNlO1xuICAgIHRoaXMuYWNjb3VudEF2YXRhciA9IG51bGw7XG4gICAgdGhpcy5hY2NvdW50RW1haWwgPSBudWxsO1xuICAgIHRoaXMuYWNjb3VudE5hbWUgPSBudWxsO1xuXG4gICAgLy8gV2FpdCB0aGUgZW5kIG9mIGZhZGVvdXQsIHRvIHJlc2V0IHRoZSBhY2NvdW50XG4gICAgaWYgKCFza2lwUmVkaXJlY3QpIHtcbiAgICAgIGF3YWl0IHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZVJvb3QoJy8nKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFzeW5jIGxvZ291dCgpIHtcblxuICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmdldChbXG4gICAgICAnQVVUSC5MT0dPVVQuQ09ORklSTV9USVRMRScsXG4gICAgICAnQVVUSC5MT0dPVVQuQ09ORklSTV9NRVNTQUdFJyxcbiAgICAgICdDT01NT04uQlROX0NBTkNFTCcsXG4gICAgICAnQVVUSC5MT0dPVVQuQlROX0NPTkZJUk0nXG4gICAgXSkudG9Qcm9taXNlKCk7XG4gICAgY29uc3QgYWxlcnQgPSBhd2FpdCB0aGlzLmFsZXJ0Q29udHJvbGxlci5jcmVhdGUoe1xuICAgICAgaGVhZGVyOiB0cmFuc2xhdGlvbnNbJ0FVVEguTE9HT1VULkNPTkZJUk1fVElUTEUnXSxcbiAgICAgIG1lc3NhZ2U6IHRyYW5zbGF0aW9uc1snQVVUSC5MT0dPVVQuQ09ORklSTV9NRVNTQUdFJ10sXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiB0cmFuc2xhdGlvbnNbJ0NPTU1PTi5CVE5fQ0FOQ0VMJ10sXG4gICAgICAgICAgcm9sZTogJ2NhbmNlbCcsXG4gICAgICAgICAgY3NzQ2xhc3M6ICdzZWNvbmRhcnknXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiB0cmFuc2xhdGlvbnNbJ0FVVEguTE9HT1VULkJUTl9DT05GSVJNJ10sXG4gICAgICAgICAgY3NzQ2xhc3M6ICdpb24tY29sb3ItcHJpbWFyeScsXG4gICAgICAgICAgaGFuZGxlcjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hY2NvdW50U2VydmljZS5sb2dvdXQoKTtcblxuICAgICAgICAgICAgLy8gQmFjayB0byBob21lXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+dGhpcy5uYXZDb250cm9sbGVyLm5hdmlnYXRlUm9vdCgnLycpLCAxMDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgYXdhaXQgYWxlcnQucHJlc2VudCgpO1xuICB9XG5cbiAgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIG1lbnU6IE1lbnVJdGVtKSB7XG4gICAgcmV0dXJuIG1lbnU/LnBhdGg7XG4gIH1cblxuICBhc3luYyBlbmFibGUodmFsdWU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBlbmFibGVkID0gYXdhaXQgdGhpcy5tZW51LmlzRW5hYmxlZCh0aGlzLm1lbnVJZCk7XG4gICAgaWYgKGVuYWJsZWQgIT09IHZhbHVlKSB7XG4gICAgICBhd2FpdCB0aGlzLm1lbnUuZW5hYmxlKHZhbHVlLCB0aGlzLm1lbnVJZCk7XG4gICAgICBpZiAoIXZhbHVlKSBhd2FpdCB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb3BlbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zb2xlLmRlYnVnKCdbbWVudV0gQ2hlY2tpbmcgb3BlbiBldmVudC4uLicpO1xuICAgIGNvbnN0IG9wZW5lZCA9IGF3YWl0IHRoaXMubWVudS5pc09wZW4odGhpcy5tZW51SWQpO1xuICAgIGlmICghb3BlbmVkKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbbWVudV0gT3BlbmluZyBtZW51Jyk7XG4gICAgICBhd2FpdCB0aGlzLm1lbnUub3Blbih0aGlzLm1lbnVJZCk7XG4gICAgICAvLyBQcm9wYWdlIHRvIHNlcnZpY2VcbiAgICAgIHRoaXMubWVudVNlcnZpY2UuX21hcmtBc09wZW5lZCgpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGNsb3NlKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBDaGVja2luZyBjbG9zZSBldmVudC4uLicpO1xuICAgIGNvbnN0IG9wZW5lZCA9IGF3YWl0IHRoaXMubWVudS5pc09wZW4odGhpcy5tZW51SWQpO1xuICAgIGlmIChvcGVuZWQpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBDbG9zaW5nIG1lbnUnKTtcbiAgICAgIGF3YWl0IHRoaXMubWVudS5jbG9zZSh0aGlzLm1lbnVJZCk7XG4gICAgICAvLyBQcm9wYWdlIHRvIHNlcnZpY2VcbiAgICAgIHRoaXMubWVudVNlcnZpY2UuX21hcmtBc0Nsb3NlZCgpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIG9wZW5BYm91dE1vZGFsKGV2ZW50PzogRXZlbnQpIHtcbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxDdHJsLmNyZWF0ZSh7Y29tcG9uZW50OiBBYm91dE1vZGFsfSk7XG4gICAgcmV0dXJuIG1vZGFsLnByZXNlbnQoKTtcbiAgfVxuXG4gIGFzeW5jIHNldFNwbGl0UGFuZVdoZW4odmFsdWU6IFNwbGl0UGFuZVNob3dXaGVuKSB7XG4gICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIENoZWNraW5nIHNwbGl0UGFuZSB3aGVuLi4uJyk7XG4gICAgaWYgKHRoaXMuc3BsaXRQYW5lLndoZW4gIT09IHZhbHVlKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbbWVudV0gU2V0IHNwbGl0UGFuZSB3aGVuIHRvICcgKyB2YWx1ZSk7XG4gICAgICB0aGlzLnNwbGl0UGFuZS53aGVuID0gdmFsdWU7XG4gICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgLy8gUHJvcGFnYXRlIHRvIHRoZSBtZW51IHNlcnZpY2VcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5tZW51U2VydmljZS5zZXRTcGxpdFBhbmVTaG93V2hlbih2YWx1ZSksIDIwMCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlU3BsaXRQYW5lU2hvdyhldmVudD86IEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICBpZiAoZXZlbnQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAodGhpcy5zcGxpdFBhbmUud2hlbiA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnNldFNwbGl0UGFuZVdoZW4oREVGQVVMVF9NRU5VX1NIT1dfV0hFTik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnNldFNwbGl0UGFuZVdoZW4oZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRvQWN0aW9uKGFjdGlvbjogc3RyaW5nLCBldmVudDogRXZlbnQpIHtcbiAgICB0aGlzLmNsb3NlKCk7XG5cbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dvdXQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhYm91dCc6XG4gICAgICAgIGF3YWl0IHRoaXMub3BlbkFib3V0TW9kYWwoZXZlbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBhY3Rpb246ICcgKyBhY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIG9uU3dpcGVSaWdodChldmVudCkge1xuICAgIC8vIFNraXAsIGlmIG5vdCBhIHZhbGlkIHN3aXBlIGV2ZW50XG4gICAgaWYgKCFldmVudCB8fCBldmVudC5wb2ludGVyVHlwZSAhPT0gJ3RvdWNoJyB8fCBldmVudC52ZWxvY2l0eSA8IDAuNCkge1xuICAgICAgLy9ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFdpbGwgb3BlbiB0aGUgbGVmdCBtZW51LCBzbyBjYW5jZWxsZWQgdGhpcyBzd2lwZSBldmVudFxuICAgIGNvbnN0IHN0YXJ0WCA9IGV2ZW50LmNlbnRlci54IC0gZXZlbnQuZGlzdGFuY2U7XG4gICAgaWYgKHN0YXJ0WCA8PSA1MCkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlttZW51XSBDYW5jZWwgc3dpcGUgcmlnaHQsIGJlY2F1c2UgbmVhciB0aGUgbGVmdCBtZW51IHt4OiBcIiArIHN0YXJ0WCArIFwiLCB2ZWxvY2l0eTogXCIgKyBldmVudC52ZWxvY2l0eSArIFwifVwiKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gT0s6IGNvbnRpbnVlXG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZyhcIlttZW51XSBSZWNlaXZlZCBzd2lwZSByaWdodCB7eDogXCIgKyBzdGFydFggKyBcIiwgdmVsb2NpdHk6IFwiICsgZXZlbnQudmVsb2NpdHkgKyBcIn1cIik7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGV0ZWN0Q2hhbmdlcygpIHtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxufVxuIiwiPGlvbi1zcGxpdC1wYW5lICNzcGxpdFBhbmUgW2NvbnRlbnRJZF09XCJjb250ZW50SWRcIiAoc3dpcGVyaWdodCk9XCJvblN3aXBlUmlnaHQoJGV2ZW50KVwiPlxuXG4gIDxpb24tbWVudSBbaWRdPVwiaWRcIiBbbWVudUlkXT1cIm1lbnVJZFwiIFtjb250ZW50SWRdPVwiY29udGVudElkXCI+XG4gICAgPGlvbi1oZWFkZXI+XG5cbiAgICAgIDxpb24tdG9vbGJhciBAZmFkZUluQW5pbWF0aW9uICpuZ0lmPVwiaXNMb2dpbjsgZWxzZSBub3RMb2dpblwiIGNsYXNzPVwiaW9uLXRvb2xiYXItdG9wXCI+XG4gICAgICAgIDxpb24tZ3JpZD5cbiAgICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCI0XCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1mbGF0LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXNlci1hdmF0YXJcIiBbY2xhc3MucHJpbWFyeV09XCIhYWNjb3VudEF2YXRhclwiXG4gICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtaW1hZ2VdPVwiJ3VybCgnKyhhY2NvdW50QXZhdGFyfHwnLi9hc3NldHMvaW1nL3BlcnNvbi5wbmcnKSsnKSdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL2FjY291bnQnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgcm91dGVyRGlyZWN0aW9uPVwicm9vdFwiXG4gICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cImlvbi1jb2xvci1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidNRU5VLkJUTl9NWV9BQ0NPVU5UJ3x0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiOFwiIGNsYXNzPVwidXNlci1sb2dvXCI+XG4gICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJsb2dvXCIgc3JjPVwie3tsb2dvfX1cIiBbdGl0bGVdPVwiJ0FQUF9OQU1FJ3x0cmFuc2xhdGU6IHthcHBOYW1lOiBhcHBOYW1lfVwiIHdpZHRoPVwiMTA4cHhcIi8+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWxvZ29cIiBzdHlsZT1cIndpZHRoOiAxMDhweDtcIj57e2FwcE5hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9hY2NvdW50J11cIlxuICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckRpcmVjdGlvbj1cInJvb3RcIlxuICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJpb24tY29sb3ItcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInTUVOVS5CVE5fTVlfQUNDT1VOVCd8dHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImlvbi10ZXh0LXdyYXAgaW9uLXRleHQtc3RhcnRcIj5cbiAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIm5vLW1hcmdpbiB1c2VybmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICA8Yj57e2FjY291bnROYW1lfX08L2I+XG4gICAgICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgICAgICAgPGg0Pnt7YWNjb3VudEVtYWlsfX08L2g0PlxuICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgICAgICAgPCEtLSBJbnNlcnRpb24gaGVhZGVyQm90dG9tUmlnaHQgLS0+XG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyQm90dG9tUmlnaHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgIDwvaW9uLWdyaWQ+XG5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG5cbiAgICAgIDwhLS0gVXNlciBub3QgbG9nZ2VkIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlICNub3RMb2dpbj5cbiAgICAgICAgPG1hdC10b29sYmFyIGNsYXNzPVwiaW9uLXBhZGRpbmdcIiBAZmFkZUluQW5pbWF0aW9uXG4gICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogdW5zZXQ7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IGF1dG87IHRleHQtYWxpZ246IGNlbnRlcjtcIj5cbiAgICAgICAgICA8aW1nICpuZ0lmPVwibG9nb1wiIHNyYz1cInt7bG9nb319XCIgW3RpdGxlXT1cIidBUFBfTkFNRSd8dHJhbnNsYXRlOiB7YXBwTmFtZTogYXBwTmFtZX1cIiB3aWR0aD1cIjE1MHB4O1wiPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWxvZ29cIiBzdHlsZT1cIndpZHRoOiAxNTBweFwiPnt7YXBwTmFtZX19PC9zcGFuPlxuICAgICAgICA8L21hdC10b29sYmFyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2lvbi1oZWFkZXI+XG5cbiAgICA8aW9uLWNvbnRlbnQgW2NsYXNzLmhhcy11c2VyLWhlYWRlcl09XCJpc0xvZ2luXCI+XG5cbiAgICAgIDxpb24tbGlzdCBsaW5lcz1cIm5vbmVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBtZW51U2VydmljZS4kaXRlbXMgfCBhc3luY1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZW51SXRlbTsgY29udGV4dDogeyRpbXBsaWNpdDogaXRlbSwgbGV2ZWw6IDB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9pb24tbGlzdD5cbiAgICA8L2lvbi1jb250ZW50PlxuXG4gICAgPGlvbi1mb290ZXIgY2xhc3M9XCJoaWRkZW4teHMgaGlkZGVuLXNtXCI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG5cbiAgICAgICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cImFjY2VudFwiIChjbGljayk9XCJvcGVuQWJvdXRNb2RhbCgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gc2xvdD1cImljb24tb25seVwiPmhlbHBfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuXG4gICAgICAgIDxpb24tdGl0bGUgKGNsaWNrKT1cIm9wZW5BYm91dE1vZGFsKCRldmVudClcIiBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgIHt7J01FTlUuRk9PVEVSX1ZFUlNJT05fQUJPVVQnfCB0cmFuc2xhdGU6IHt2ZXJzaW9uOiBhcHBWZXJzaW9ufSB9fVxuICAgICAgICA8L2lvbi10aXRsZT5cblxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgKGNsaWNrKT1cInRvZ2dsZVNwbGl0UGFuZVNob3coJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImhpZGRlbi14cyBoaWRkZW4tc20gaGlkZGVuLW1kXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoc3BsaXRQYW5lLndoZW4gPyAnQ09NTU9OLkJUTl9ISURFX01FTlUnIDogJ0NPTU1PTi5CVE5fU0hPV19NRU5VJykgfHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPjxzcGFuPnt7c3BsaXRQYW5lLndoZW4gPyAnJiN4YWI7JyA6ICcmI3hiYjsnfX08L3NwYW4+PC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24tZm9vdGVyPlxuXG4gIDwvaW9uLW1lbnU+XG5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG48L2lvbi1zcGxpdC1wYW5lPlxuXG48bmctdGVtcGxhdGUgI2hlYWRlckJvdHRvbVJpZ2h0PlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbaGVhZGVyQm90dG9tUmlnaHRdXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtZW51SXRlbSBsZXQtaXRlbSBsZXQtbGV2ZWw9XCJsZXZlbFwiPlxuICA8IS0tIGxpbmsgLS0+XG4gIDwhLS0gVE9ETyA6IGJldHRlciB0byBzZXQgcGFkZGluZyB3aXRoIGNzcyB2YXJpcmFibGUgPyAoc3R5bGU9XCIkbWVudS1pdGVtLWxldmVsOnt7IGxldmVsIH19KVwiLS0+XG4gIDxpb24taXRlbSAqbmdJZj1cIml0ZW0ucGF0aFwiXG4gICAgICAgICAgICBAZmFkZUluQW5pbWF0aW9uXG4gICAgICAgICAgICBzdHlsZT1cInBhZGRpbmctbGVmdDp7e2xldmVsICogMTV9fXB4XCJcbiAgICAgICAgICAgIGNsYXNzPVwie3tpdGVtLmNzc0NsYXNzfX0ge3tpdGVtLmNvbG9yfX0gdGV4dC0xeFwiXG4gICAgICAgICAgICB0YXBwYWJsZVxuICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5wYXRoXCJcbiAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJpdGVtLnBhdGhQYXJhbXNcIlxuICAgICAgICAgICAgcm91dGVyRGlyZWN0aW9uPVwicm9vdFwiXG4gICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVPcHRpb25zXT1cIntleGFjdDogKGl0ZW0ucGF0aCA9PT0gJy8nIHx8IGxldmVsICE9IDApfVwiPlxuICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiAqbmdJZj1cIml0ZW0uaWNvblwiIFtuYW1lXT1cIml0ZW0uaWNvblwiPjwvaW9uLWljb24+XG4gICAgPG1hdC1pY29uIHNsb3Q9XCJzdGFydFwiICpuZ0lmPVwiaXRlbS5tYXRJY29uXCI+e3tpdGVtLm1hdEljb259fTwvbWF0LWljb24+XG4gICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+e3tpdGVtLnRpdGxlfX08L2lvbi1sYWJlbD5cbiAgPC9pb24taXRlbT5cblxuICA8IS0tIGFjdGlvbiAtLT5cbiAgPGlvbi1pdGVtICpuZ0lmPVwiaXRlbS5hY3Rpb25cIlxuICAgICAgICAgICAgQGZhZGVJbkFuaW1hdGlvblxuICAgICAgICAgICAgY2xhc3M9XCJ7e2l0ZW0uY3NzQ2xhc3N9fSB7e2l0ZW0uY29sb3J9fSB0ZXh0LTF4XCJcbiAgICAgICAgICAgIHRhcHBhYmxlXG4gICAgICAgICAgICAoY2xpY2spPVwiZG9BY3Rpb24oaXRlbS5hY3Rpb24sICRldmVudClcIj5cbiAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgKm5nSWY9XCJpdGVtLmljb25cIiBbbmFtZV09XCJpdGVtLmljb25cIj48L2lvbi1pY29uPlxuICAgIDxtYXQtaWNvbiBzbG90PVwic3RhcnRcIiAqbmdJZj1cIml0ZW0ubWF0SWNvblwiPnt7aXRlbS5tYXRJY29ufX08L21hdC1pY29uPlxuICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPnt7aXRlbS50aXRsZX19PC9pb24tbGFiZWw+XG4gIDwvaW9uLWl0ZW0+XG5cbiAgPCEtLSBkaXZpZGVyIC0tPlxuICA8aW9uLWl0ZW0tZGl2aWRlciBAZmFkZUluQW5pbWF0aW9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tpdGVtLmNzc0NsYXNzfX0ge3tpdGVtLmNvbG9yfX1cIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFpdGVtLnBhdGggJiYgIWl0ZW0uYWN0aW9uXCI+XG4gICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+e3tpdGVtLnRpdGxlfX08L2lvbi1sYWJlbD5cbiAgPC9pb24taXRlbS1kaXZpZGVyPlxuXG4gIDwhLS0gY2hpbGRyZW4gLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtPy4kY2hpbGRyZW5cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaGlsZCBvZiBpdGVtLiRjaGlsZHJlbiB8IGFzeW5jXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVudUl0ZW07IGNvbnRleHQ6IHskaW1wbGljaXQ6IGNoaWxkLCBsZXZlbDogbGV2ZWwrMX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvbWVudS9tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9tZW51L21lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQVUsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUtoSixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFaEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBRTFFLE9BQU8sRUFBQyxlQUFlLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU1RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDcEUsT0FBTyxFQUFDLHNCQUFzQixFQUFpQyxNQUFNLGdCQUFnQixDQUFDO0FBRXRGLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQUk1RCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQWEsV0FBVyxDQUFDLENBQUM7QUFDMUUsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQWMsYUFBYSxDQUFDLENBQUM7QUFlL0UsTUFBTSxPQUFPLGFBQWE7SUEwQnhCLFlBQ1ksZUFBZ0MsRUFDaEMsY0FBOEIsRUFDOUIsYUFBNEIsRUFDNUIsSUFBb0IsRUFDcEIsU0FBMEIsRUFDMUIsZUFBZ0MsRUFDaEMsU0FBMkIsRUFDM0IsYUFBNEIsRUFDNUIs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QkFQekIsU0FBUzsrQkFDRSxVQUFVLGNBR1IsQ0FBQyxlQUFlLENBQUMsbUJBQ1osdUJBQXVCLENBQUMsTUFBTTs7MEJBdUM1QyxNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixRQUFROzswQkFDUixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGdCQUFnQjs7MEJBQ25DLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsY0FBYzs0Q0F0QzNCLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVrQyxTQUFTO3NCQUFoRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3QsIEluamVjdGlvblRva2VuLCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWxlcnRDb250cm9sbGVyLCBJb25TcGxpdFBhbmUsIE1lbnVDb250cm9sbGVyLCBNb2RhbENvbnRyb2xsZXIsIE5hdkNvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcblxuaW1wb3J0IHtBY2NvdW50fSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9hY2NvdW50Lm1vZGVsJztcbmltcG9ydCB7QWNjb3VudFNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL2FjY291bnQuc2VydmljZSc7XG5pbXBvcnQge0Fib3V0TW9kYWx9IGZyb20gJy4uL2Fib3V0L2Fib3V0Lm1vZGFsJztcblxuaW1wb3J0IHtmYWRlSW5BbmltYXRpb259IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9tYXRlcmlhbC5hbmltYXRpb25zJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7Q29uZmlnU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHtkaXN0aW5jdFVudGlsQ2hhbmdlZH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtQbGF0Zm9ybVNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL3BsYXRmb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHtFTlZJUk9OTUVOVH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7REVGQVVMVF9NRU5VX1NIT1dfV0hFTiwgTWVudVNlcnZpY2UsIFNwbGl0UGFuZVNob3dXaGVufSBmcm9tICcuL21lbnUuc2VydmljZSc7XG5pbXBvcnQge01lbnVJdGVtLCBNZW51T3B0aW9uc30gZnJvbSAnLi9tZW51Lm1vZGVsJztcbmltcG9ydCB7Zmlyc3ROb3ROaWxQcm9taXNlfSBmcm9tICcuLi8uLi9zaGFyZWQvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VGFibGVFbGVtZW50fSBmcm9tICdAZS1pcy9uZ3gtbWF0ZXJpYWwtdGFibGUnO1xuXG5leHBvcnQgY29uc3QgQVBQX01FTlVfSVRFTVMgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWVudUl0ZW1bXT4oJ21lbnVJdGVtcycpO1xuZXhwb3J0IGNvbnN0IEFQUF9NRU5VX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48TWVudU9wdGlvbnM+KCdtZW51T3B0aW9ucycpO1xuXG5pbnRlcmZhY2UgTWVudUZsYXROb2RlIHtcbiAgZXhwYW5kYWJsZTogYm9vbGVhbjtcbiAgbmFtZTogc3RyaW5nO1xuICBsZXZlbDogbnVtYmVyO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21lbnUuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW2ZhZGVJbkFuaW1hdGlvbl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIGlkID0gJ21lbnUnO1xuICBASW5wdXQoKSBtZW51SWQgPSAnbGVmdCc7XG4gIEBJbnB1dCgpIHNpZGUgPSAnbGVmdCc7XG4gIEBJbnB1dCgpIGNvbnRlbnRJZCA9ICdtZW51LWNvbnRlbnQnO1xuICBASW5wdXQoKSBsb2dvOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFwcE5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgYXBwVmVyc2lvbjogc3RyaW5nID0gdGhpcy5lbnZpcm9ubWVudC52ZXJzaW9uO1xuXG4gIEBWaWV3Q2hpbGQoJ3NwbGl0UGFuZScsIHtzdGF0aWM6IHRydWV9KSBzcGxpdFBhbmU6IElvblNwbGl0UGFuZTtcblxuICBwdWJsaWMgbG9hZGluZyA9IHRydWU7XG4gIHB1YmxpYyBpc0xvZ2luID0gZmFsc2U7XG4gIHB1YmxpYyBhY2NvdW50TmFtZTogc3RyaW5nO1xuICBwdWJsaWMgYWNjb3VudEF2YXRhcjogc3RyaW5nO1xuICBwdWJsaWMgYWNjb3VudEVtYWlsOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfJHRvZ2dsZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF8kb3BlbmVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfJHNwbGl0UGFuZVdoZW4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNwbGl0UGFuZVNob3dXaGVuPihERUZBVUxUX01FTlVfU0hPV19XSEVOKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfJGVuYWJsZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlYnVnOiBib29sZWFuO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHBsYXRmb3JtU2VydmljZTogUGxhdGZvcm1TZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG5hdkNvbnRyb2xsZXI6IE5hdkNvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIG1lbnU6IE1lbnVDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgYWxlcnRDb250cm9sbGVyOiBBbGVydENvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCBtZW51U2VydmljZTogTWVudVNlcnZpY2UsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCByb3V0ZTogQWN0aXZhdGVkUm91dGUsIC8vIE1vZGFsIGVkaXRvciBnaXZlICdudWxsJ1xuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX01FTlVfT1BUSU9OUykgcHJvdGVjdGVkIG9wdGlvbnM6IE1lbnVPcHRpb25zLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX01FTlVfSVRFTVMpIHByb3RlY3RlZCBpdGVtczogTWVudUl0ZW1bXVxuICApIHtcbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG5cbiAgICB0aGlzLnNwbGl0UGFuZS53aGVuID0gYXdhaXQgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMubWVudVNlcnZpY2Uuc3BsaXRQYW5lV2hlbik7XG5cbiAgICAvLyBXYWl0IHBsYXRmb3JtIHN0YXJ0ZWRcbiAgICBhd2FpdCB0aGlzLm1lbnVTZXJ2aWNlLnJlYWR5KCk7XG5cbiAgICAvLyBMaXN0ZW4gdG8gbWVudSBzZXJ2aWNlIGV2ZW50XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMubWVudVNlcnZpY2Uuc3BsaXRQYW5lV2hlblxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5zZXRTcGxpdFBhbmVXaGVuKHZhbHVlKSlcbiAgICApO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlLmVuYWJsZWRcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHRoaXMuZW5hYmxlKHZhbHVlKSlcbiAgICApO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlLm9wZW5lZFxuICAgICAgICAvLyBBdm9pZCBkdXBsaWNhdGVkIGV2ZW50c1xuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdmFsdWUgPyB0aGlzLm9wZW4oKSA6IHRoaXMuY2xvc2UoKSlcbiAgICApO1xuXG4gICAgLy8gVE9ETzogZGVsZXRlIHRoaXNcbiAgICAvL3RoaXMubWVudVNlcnZpY2Uub25VcGRhdGVNZW51LnN1YnNjcmliZSgoXykgPT4gdGhpcy5jZC5tYXJrRm9yQ2hlY2soKSk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5hY2NvdW50U2VydmljZS5vbkxvZ2luLnN1YnNjcmliZShhY2NvdW50ID0+IHRoaXMub25Mb2dpbihhY2NvdW50KSlcbiAgICApO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9nb3V0LnN1YnNjcmliZShfID0+IHRoaXMub25Mb2dvdXQodHJ1ZSkpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIG9uTG9naW4oYWNjb3VudDogQWNjb3VudCkge1xuICAgIGNvbnNvbGUuaW5mbygnW21lbnVdIFVwZGF0ZSAob24gbG9naW4pJyk7XG4gICAgdGhpcy5hY2NvdW50QXZhdGFyID0gYWNjb3VudC5hdmF0YXI7XG4gICAgdGhpcy5hY2NvdW50TmFtZSA9IGFjY291bnQuZGlzcGxheU5hbWU7XG4gICAgdGhpcy5hY2NvdW50RW1haWwgPSBhY2NvdW50LmVtYWlsO1xuICAgIHRoaXMuaXNMb2dpbiA9IHRydWU7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGFzeW5jIG9uTG9nb3V0KHNraXBSZWRpcmVjdD86IGJvb2xlYW4pIHtcbiAgICBpZiAoIXNraXBSZWRpcmVjdCkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIExvZ291dCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbbWVudV0gVXBkYXRlIChvbiBsb2dvdXQpJyk7XG4gICAgfVxuICAgIHRoaXMuaXNMb2dpbiA9IGZhbHNlO1xuICAgIHRoaXMuYWNjb3VudEF2YXRhciA9IG51bGw7XG4gICAgdGhpcy5hY2NvdW50RW1haWwgPSBudWxsO1xuICAgIHRoaXMuYWNjb3VudE5hbWUgPSBudWxsO1xuXG4gICAgLy8gV2FpdCB0aGUgZW5kIG9mIGZhZGVvdXQsIHRvIHJlc2V0IHRoZSBhY2NvdW50XG4gICAgaWYgKCFza2lwUmVkaXJlY3QpIHtcbiAgICAgIGF3YWl0IHRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZVJvb3QoJy8nKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFzeW5jIGxvZ291dCgpIHtcblxuICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoW1xuICAgICAgJ0FVVEguTE9HT1VULkNPTkZJUk1fVElUTEUnLFxuICAgICAgJ0FVVEguTE9HT1VULkNPTkZJUk1fTUVTU0FHRScsXG4gICAgICAnQ09NTU9OLkJUTl9DQU5DRUwnLFxuICAgICAgJ0FVVEguTE9HT1VULkJUTl9DT05GSVJNJ1xuICAgIF0pO1xuICAgIGNvbnN0IGFsZXJ0ID0gYXdhaXQgdGhpcy5hbGVydENvbnRyb2xsZXIuY3JlYXRlKHtcbiAgICAgIGhlYWRlcjogdHJhbnNsYXRpb25zWydBVVRILkxPR09VVC5DT05GSVJNX1RJVExFJ10sXG4gICAgICBtZXNzYWdlOiB0cmFuc2xhdGlvbnNbJ0FVVEguTE9HT1VULkNPTkZJUk1fTUVTU0FHRSddLFxuICAgICAgYnV0dG9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogdHJhbnNsYXRpb25zWydDT01NT04uQlROX0NBTkNFTCddLFxuICAgICAgICAgIHJvbGU6ICdjYW5jZWwnLFxuICAgICAgICAgIGNzc0NsYXNzOiAnc2Vjb25kYXJ5J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogdHJhbnNsYXRpb25zWydBVVRILkxPR09VVC5CVE5fQ09ORklSTSddLFxuICAgICAgICAgIGNzc0NsYXNzOiAnaW9uLWNvbG9yLXByaW1hcnknLFxuICAgICAgICAgIGhhbmRsZXI6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2UubG9nb3V0KCk7XG5cbiAgICAgICAgICAgIC8vIEJhY2sgdG8gaG9tZVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PnRoaXMubmF2Q29udHJvbGxlci5uYXZpZ2F0ZVJvb3QoJy8nKSwgMTAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGF3YWl0IGFsZXJ0LnByZXNlbnQoKTtcbiAgfVxuXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBNZW51SXRlbSkge1xuICAgIHJldHVybiBpdGVtLmlkPy50b1N0cmluZygpIHx8IGl0ZW0ucGF0aCB8fCBpdGVtLnRpdGxlO1xuICB9XG5cbiAgYXN5bmMgZW5hYmxlKHZhbHVlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW5hYmxlZCA9IGF3YWl0IHRoaXMubWVudS5pc0VuYWJsZWQodGhpcy5tZW51SWQpO1xuICAgIGlmIChlbmFibGVkICE9PSB2YWx1ZSkge1xuICAgICAgYXdhaXQgdGhpcy5tZW51LmVuYWJsZSh2YWx1ZSwgdGhpcy5tZW51SWQpO1xuICAgICAgaWYgKCF2YWx1ZSkgYXdhaXQgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW4oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIENoZWNraW5nIG9wZW4gZXZlbnQuLi4nKTtcbiAgICBjb25zdCBvcGVuZWQgPSBhd2FpdCB0aGlzLm1lbnUuaXNPcGVuKHRoaXMubWVudUlkKTtcbiAgICBpZiAoIW9wZW5lZCkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIE9wZW5pbmcgbWVudScpO1xuICAgICAgYXdhaXQgdGhpcy5tZW51Lm9wZW4odGhpcy5tZW51SWQpO1xuICAgICAgLy8gUHJvcGFnZSB0byBzZXJ2aWNlXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlLl9tYXJrQXNPcGVuZWQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBjbG9zZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zb2xlLmRlYnVnKCdbbWVudV0gQ2hlY2tpbmcgY2xvc2UgZXZlbnQuLi4nKTtcbiAgICBjb25zdCBvcGVuZWQgPSBhd2FpdCB0aGlzLm1lbnUuaXNPcGVuKHRoaXMubWVudUlkKTtcbiAgICBpZiAob3BlbmVkKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbbWVudV0gQ2xvc2luZyBtZW51Jyk7XG4gICAgICBhd2FpdCB0aGlzLm1lbnUuY2xvc2UodGhpcy5tZW51SWQpO1xuICAgICAgLy8gUHJvcGFnZSB0byBzZXJ2aWNlXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlLl9tYXJrQXNDbG9zZWQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBvcGVuQWJvdXRNb2RhbChldmVudD86IEV2ZW50KSB7XG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe2NvbXBvbmVudDogQWJvdXRNb2RhbH0pO1xuICAgIHJldHVybiBtb2RhbC5wcmVzZW50KCk7XG4gIH1cblxuICBhc3luYyBzZXRTcGxpdFBhbmVXaGVuKHZhbHVlOiBTcGxpdFBhbmVTaG93V2hlbikge1xuICAgIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBDaGVja2luZyBzcGxpdFBhbmUgd2hlbi4uLicpO1xuICAgIGlmICh0aGlzLnNwbGl0UGFuZS53aGVuICE9PSB2YWx1ZSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW21lbnVdIFNldCBzcGxpdFBhbmUgd2hlbiB0byAnICsgdmFsdWUpO1xuICAgICAgdGhpcy5zcGxpdFBhbmUud2hlbiA9IHZhbHVlO1xuICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgIC8vIFByb3BhZ2F0ZSB0byB0aGUgbWVudSBzZXJ2aWNlXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubWVudVNlcnZpY2Uuc2V0U3BsaXRQYW5lU2hvd1doZW4odmFsdWUpLCAyMDApO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVNwbGl0UGFuZVNob3coZXZlbnQ/OiBFdmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKGV2ZW50KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgaWYgKHRoaXMuc3BsaXRQYW5lLndoZW4gPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRTcGxpdFBhbmVXaGVuKERFRkFVTFRfTUVOVV9TSE9XX1dIRU4pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRTcGxpdFBhbmVXaGVuKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkb0FjdGlvbihhY3Rpb246IHN0cmluZywgZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuXG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2xvZ291dCc6XG4gICAgICAgIGF3YWl0IHRoaXMubG9nb3V0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYWJvdXQnOlxuICAgICAgICBhd2FpdCB0aGlzLm9wZW5BYm91dE1vZGFsKGV2ZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gYWN0aW9uOiAnICsgYWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICBvblN3aXBlUmlnaHQoZXZlbnQpIHtcbiAgICAvLyBTa2lwLCBpZiBub3QgYSB2YWxpZCBzd2lwZSBldmVudFxuICAgIGlmICghZXZlbnQgfHwgZXZlbnQucG9pbnRlclR5cGUgIT09ICd0b3VjaCcgfHwgZXZlbnQudmVsb2NpdHkgPCAwLjQpIHtcbiAgICAgIC8vZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBXaWxsIG9wZW4gdGhlIGxlZnQgbWVudSwgc28gY2FuY2VsbGVkIHRoaXMgc3dpcGUgZXZlbnRcbiAgICBjb25zdCBzdGFydFggPSBldmVudC5jZW50ZXIueCAtIGV2ZW50LmRpc3RhbmNlO1xuICAgIGlmIChzdGFydFggPD0gNTApIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJbbWVudV0gQ2FuY2VsIHN3aXBlIHJpZ2h0LCBiZWNhdXNlIG5lYXIgdGhlIGxlZnQgbWVudSB7eDogXCIgKyBzdGFydFggKyBcIiwgdmVsb2NpdHk6IFwiICsgZXZlbnQudmVsb2NpdHkgKyBcIn1cIik7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIE9LOiBjb250aW51ZVxuXG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoXCJbbWVudV0gUmVjZWl2ZWQgc3dpcGUgcmlnaHQge3g6IFwiICsgc3RhcnRYICsgXCIsIHZlbG9jaXR5OiBcIiArIGV2ZW50LnZlbG9jaXR5ICsgXCJ9XCIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRldGVjdENoYW5nZXMoKSB7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbn1cbiIsIjxpb24tc3BsaXQtcGFuZSAjc3BsaXRQYW5lIFtjb250ZW50SWRdPVwiY29udGVudElkXCIgKHN3aXBlcmlnaHQpPVwib25Td2lwZVJpZ2h0KCRldmVudClcIj5cblxuICA8aW9uLW1lbnUgW2lkXT1cImlkXCIgW21lbnVJZF09XCJtZW51SWRcIiBbY29udGVudElkXT1cImNvbnRlbnRJZFwiPlxuICAgIDxpb24taGVhZGVyPlxuXG4gICAgICA8aW9uLXRvb2xiYXIgQGZhZGVJbkFuaW1hdGlvbiAqbmdJZj1cImlzTG9naW47IGVsc2Ugbm90TG9naW5cIiBjbGFzcz1cImlvbi10b29sYmFyLXRvcFwiPlxuICAgICAgICA8aW9uLWdyaWQ+XG4gICAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiNFwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtZmxhdC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVzZXItYXZhdGFyXCIgW2NsYXNzLnByaW1hcnldPVwiIWFjY291bnRBdmF0YXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWltYWdlXT1cIid1cmwoJysoYWNjb3VudEF2YXRhcnx8Jy4vYXNzZXRzL2ltZy9wZXJzb24ucG5nJykrJyknXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9hY2NvdW50J11cIlxuICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckRpcmVjdGlvbj1cInJvb3RcIlxuICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJpb24tY29sb3ItcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInTUVOVS5CVE5fTVlfQUNDT1VOVCd8dHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjhcIiBjbGFzcz1cInVzZXItbG9nb1wiPlxuICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwibG9nb1wiIHNyYz1cInt7bG9nb319XCIgW3RpdGxlXT1cIidBUFBfTkFNRSd8dHJhbnNsYXRlOiB7YXBwTmFtZTogYXBwTmFtZX1cIiB3aWR0aD1cIjEwOHB4XCIvPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFsb2dvXCIgc3R5bGU9XCJ3aWR0aDogMTA4cHg7XCI+e3thcHBOYW1lfX08L3NwYW4+XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgIDxpb24tcm93IGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgIDxpb24tY29sPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvYWNjb3VudCddXCJcbiAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJEaXJlY3Rpb249XCJyb290XCJcbiAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiaW9uLWNvbG9yLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbG9zZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ01FTlUuQlROX01ZX0FDQ09VTlQnfHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCIgY2xhc3M9XCJpb24tdGV4dC13cmFwIGlvbi10ZXh0LXN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJuby1tYXJnaW4gdXNlcm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGI+e3thY2NvdW50TmFtZX19PC9iPlxuICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgIDxoND57e2FjY291bnRFbWFpbH19PC9oND5cbiAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG5cbiAgICAgICAgICAgIDwhLS0gSW5zZXJ0aW9uIGhlYWRlckJvdHRvbVJpZ2h0IC0tPlxuICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlckJvdHRvbVJpZ2h0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICA8L2lvbi1ncmlkPlxuXG4gICAgICA8L2lvbi10b29sYmFyPlxuXG4gICAgICA8IS0tIFVzZXIgbm90IGxvZ2dlZCAtLT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm90TG9naW4+XG4gICAgICAgIDxtYXQtdG9vbGJhciBjbGFzcz1cImlvbi1wYWRkaW5nXCIgQGZhZGVJbkFuaW1hdGlvblxuICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IHVuc2V0OyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XG4gICAgICAgICAgPGltZyAqbmdJZj1cImxvZ29cIiBzcmM9XCJ7e2xvZ299fVwiIFt0aXRsZV09XCInQVBQX05BTUUnfHRyYW5zbGF0ZToge2FwcE5hbWU6IGFwcE5hbWV9XCIgd2lkdGg9XCIxNTBweDtcIj5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFsb2dvXCIgc3R5bGU9XCJ3aWR0aDogMTUwcHhcIj57e2FwcE5hbWV9fTwvc3Bhbj5cbiAgICAgICAgPC9tYXQtdG9vbGJhcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9pb24taGVhZGVyPlxuXG4gICAgPGlvbi1jb250ZW50IFtjbGFzcy5oYXMtdXNlci1oZWFkZXJdPVwiaXNMb2dpblwiPlxuXG4gICAgICA8aW9uLWxpc3QgbGluZXM9XCJub25lXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbWVudVNlcnZpY2UuZGF0YVN1YmplY3QgfCBhc3luYzsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lbnVJdGVtOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtLCBsZXZlbDogMH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2lvbi1saXN0PlxuICAgIDwvaW9uLWNvbnRlbnQ+XG5cbiAgICA8aW9uLWZvb3RlciBjbGFzcz1cImhpZGRlbi14cyBoaWRkZW4tc21cIj5cbiAgICAgIDxpb24tdG9vbGJhcj5cblxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gbWF0LWljb24tYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgKGNsaWNrKT1cIm9wZW5BYm91dE1vZGFsKCRldmVudClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBzbG90PVwiaWNvbi1vbmx5XCI+aGVscF9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG5cbiAgICAgICAgPGlvbi10aXRsZSAoY2xpY2spPVwib3BlbkFib3V0TW9kYWwoJGV2ZW50KVwiIGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAge3snTUVOVS5GT09URVJfVkVSU0lPTl9BQk9VVCd8IHRyYW5zbGF0ZToge3ZlcnNpb246IGFwcFZlcnNpb259IH19XG4gICAgICAgIDwvaW9uLXRpdGxlPlxuXG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJhY2NlbnRcIiAoY2xpY2spPVwidG9nZ2xlU3BsaXRQYW5lU2hvdygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaGlkZGVuLXhzIGhpZGRlbi1zbSBoaWRkZW4tbWRcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihzcGxpdFBhbmUud2hlbiA/ICdDT01NT04uQlROX0hJREVfTUVOVScgOiAnQ09NTU9OLkJUTl9TSE9XX01FTlUnKSB8dHJhbnNsYXRlXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+PHNwYW4+e3tzcGxpdFBhbmUud2hlbiA/ICcmI3hhYjsnIDogJyYjeGJiOyd9fTwvc3Bhbj48L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2lvbi1idXR0b25zPlxuICAgICAgPC9pb24tdG9vbGJhcj5cbiAgICA8L2lvbi1mb290ZXI+XG5cbiAgPC9pb24tbWVudT5cblxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cbjwvaW9uLXNwbGl0LXBhbmU+XG5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyQm90dG9tUmlnaHQ+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIltoZWFkZXJCb3R0b21SaWdodF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21lbnVJdGVtIGxldC1pdGVtIGxldC1sZXZlbD1cImxldmVsXCI+XG4gIDwhLS0gbGluayAtLT5cbiAgPCEtLSBUT0RPIDogYmV0dGVyIHRvIHNldCBwYWRkaW5nIHdpdGggY3NzIHZhcmlyYWJsZSA/IChzdHlsZT1cIiRtZW51LWl0ZW0tbGV2ZWw6e3sgbGV2ZWwgfX0pXCItLT5cbiAgPGlvbi1pdGVtICpuZ0lmPVwiaXRlbS5wYXRoXCJcbiAgICAgICAgICAgIEBmYWRlSW5BbmltYXRpb25cbiAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1sZWZ0Ont7bGV2ZWwgKiAxNX19cHhcIlxuICAgICAgICAgICAgY2xhc3M9XCJ7e2l0ZW0uY3NzQ2xhc3N9fSB7e2l0ZW0uY29sb3J9fSB0ZXh0LTF4XCJcbiAgICAgICAgICAgIHRhcHBhYmxlXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLnBhdGhcIlxuICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cIml0ZW0ucGF0aFBhcmFtc1wiXG4gICAgICAgICAgICByb3V0ZXJEaXJlY3Rpb249XCJyb290XCJcbiAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJzZWxlY3RlZFwiXG4gICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwie2V4YWN0OiAoaXRlbS5wYXRoID09PSAnLycgfHwgbGV2ZWwgIT0gMCl9XCI+XG4gICAgPGlvbi1pY29uIHNsb3Q9XCJzdGFydFwiICpuZ0lmPVwiaXRlbS5pY29uXCIgW25hbWVdPVwiaXRlbS5pY29uXCI+PC9pb24taWNvbj5cbiAgICA8bWF0LWljb24gc2xvdD1cInN0YXJ0XCIgKm5nSWY9XCJpdGVtLm1hdEljb25cIj57e2l0ZW0ubWF0SWNvbn19PC9tYXQtaWNvbj5cbiAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT57e2l0ZW0udGl0bGV9fTwvaW9uLWxhYmVsPlxuICA8L2lvbi1pdGVtPlxuXG4gIDwhLS0gYWN0aW9uIC0tPlxuICA8aW9uLWl0ZW0gKm5nSWY9XCJpdGVtLmFjdGlvblwiXG4gICAgICAgICAgICBAZmFkZUluQW5pbWF0aW9uXG4gICAgICAgICAgICBjbGFzcz1cInt7aXRlbS5jc3NDbGFzc319IHt7aXRlbS5jb2xvcn19IHRleHQtMXhcIlxuICAgICAgICAgICAgdGFwcGFibGVcbiAgICAgICAgICAgIChjbGljayk9XCJkb0FjdGlvbihpdGVtLmFjdGlvbiwgJGV2ZW50KVwiPlxuICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiAqbmdJZj1cIml0ZW0uaWNvblwiIFtuYW1lXT1cIml0ZW0uaWNvblwiPjwvaW9uLWljb24+XG4gICAgPG1hdC1pY29uIHNsb3Q9XCJzdGFydFwiICpuZ0lmPVwiaXRlbS5tYXRJY29uXCI+e3tpdGVtLm1hdEljb259fTwvbWF0LWljb24+XG4gICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+e3tpdGVtLnRpdGxlfX08L2lvbi1sYWJlbD5cbiAgPC9pb24taXRlbT5cblxuICA8IS0tIGRpdmlkZXIgLS0+XG4gIDxpb24taXRlbS1kaXZpZGVyIEBmYWRlSW5BbmltYXRpb25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e2l0ZW0uY3NzQ2xhc3N9fSB7e2l0ZW0uY29sb3J9fVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWl0ZW0ucGF0aCAmJiAhaXRlbS5hY3Rpb25cIj5cbiAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT57e2l0ZW0udGl0bGV9fTwvaW9uLWxhYmVsPlxuICA8L2lvbi1pdGVtLWRpdmlkZXI+XG5cbiAgPCEtLSBjaGlsZHJlbiAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0/LiRjaGlsZHJlblwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGl0ZW0uJGNoaWxkcmVuIHwgYXN5bmM7IHRyYWNrQnk6IHRyYWNrQnlGblwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lbnVJdGVtOyBjb250ZXh0OiB7JGltcGxpY2l0OiBjaGlsZCwgbGV2ZWw6IGxldmVsKzF9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -77,4 +77,4 @@ export class MenuItems {
77
77
  }
78
78
  export class MenuOptions {
79
79
  }
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9tZW51L21lbnUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBR3BELE9BQU8sRUFBVSxZQUFZLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQTJCdEUsTUFBTSxPQUFPLFNBQVM7SUFFcEI7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBa0IsRUFBRSxTQUFtQjtRQUNuRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUk7ZUFDcEMsUUFBUSxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsVUFBVTtlQUM1QyxRQUFRLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxLQUFLO2VBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQW1DLEVBQUUsV0FBb0M7UUFDM0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQWUsRUFBRSxNQUFnQztRQUMvRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssTUFBTSxFQUFFLElBQUk7ZUFDN0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENB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QkFBdUIsQ0FBQyxJQUFZLEVBQUUsTUFBWTtRQUN2RCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEcsSUFBSSxZQUFZLENBQUMsV0FBVyxDQUFDO1lBQUUsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2pELE9BQU8sR0FBRyxJQUFJLElBQUcsRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxXQUFXO0NBRXZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtVc2VyUHJvZmlsZUxhYmVsfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9wZXJzb24ubW9kZWwnO1xuaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9jb25maWcubW9kZWwnO1xuaW1wb3J0IHtJY29uUmVmfSBmcm9tICcuLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHtpc05pbE9yQmxhbmt9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtNZW51UGF0aFBhcmFtfSBmcm9tICcuL21lbnUuc2VydmljZSc7XG5pbXBvcnQge0FjY291bnQsIEFjY291bnRVdGlsc30gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvYWNjb3VudC5tb2RlbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVudUl0ZW0gZXh0ZW5kcyBJY29uUmVmIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgcGF0aD86IHN0cmluZztcblxuICAvLyBJbmplY3Rpb24gcG9pbnRcbiAgYWZ0ZXI/OiBzdHJpbmc7XG4gIGJlZm9yZT86IHN0cmluZztcblxuICBhY3Rpb24/OiBzdHJpbmcgfCBhbnk7XG4gIHByb2ZpbGU/OiBVc2VyUHJvZmlsZUxhYmVsO1xuICBleGFjdFByb2ZpbGU/OiBVc2VyUHJvZmlsZUxhYmVsO1xuICBjb2xvcj86IHN0cmluZztcbiAgY3NzQ2xhc3M/OiBzdHJpbmc7XG4gIC8vIEEgY29uZmlnIHByb3BlcnR5LCB0byBlbmFibGUgdGhlIG1lbnUgaXRlbVxuICBpZlByb3BlcnR5Pzogc3RyaW5nO1xuICAvLyBBIGNvbmZpZyBwcm9wZXJ0eSwgdG8gb3ZlcnJpZGUgdGhlIHRpdGxlXG4gIHRpdGxlUHJvcGVydHk/OiBzdHJpbmc7XG4gIHRpdGxlQXJncz86IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuICBwYXRoUGFyYW1zPzoge1trZXk6IHN0cmluZ106IHN0cmluZ307XG4gIHBhcmVudFBhdGg/OiBzdHJpbmc7XG4gIHBhcmVudFBhdGhQYXJhbXM/OiB7W2tleTogc3RyaW5nXTogc3RyaW5nfTtcblxuICAkY2hpbGRyZW4/OiBCZWhhdmlvclN1YmplY3Q8TWVudUl0ZW1bXT47XG59XG5cbmV4cG9ydCBjbGFzcyBNZW51SXRlbXMge1xuXG4gIC8qKlxuICAgKiBDb21wYXJlLCB3aXRob3V0IGNoZWNraW5nIHRoZSBjaGlsZHJlblxuICAgKiBAcGFyYW0gbWFpbkl0ZW1cbiAgICogQHBhcmFtIG90aGVySXRlbVxuICAgKi9cbiAgc3RhdGljIGlzU2FtZShtYWluSXRlbTogTWVudUl0ZW0sIG90aGVySXRlbTogTWVudUl0ZW0pIHtcbiAgICByZXR1cm4gbWFpbkl0ZW0ucGF0aCA9PT0gb3RoZXJJdGVtLnBhdGhcbiAgICAmJiBtYWluSXRlbS5wYXJlbnRQYXRoID09PSBvdGhlckl0ZW0ucGFyZW50UGF0aFxuICAgICYmIG1haW5JdGVtLnRpdGxlID09PSBvdGhlckl0ZW0udGl0bGVcbiAgICAmJiB0aGlzLmlzU2FtZVBhcmFtcyhtYWluSXRlbS5wYXRoUGFyYW1zLCBvdGhlckl0ZW0ucGF0aFBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogQWxsIGtleS92YWx1ZSBvZiB0aGUgbWFpblBhcmFtcyBzaG91bGQgZXhpc3QgKGFuZCBiZSBlcXVhbHMpIGluIHRoZSBvdGhlciBwYXJhbXNcbiAgICogQHBhcmFtIG1haW5QYXJhbXNcbiAgICogQHBhcmFtIG90aGVyUGFyYW1zXG4gICAqL1xuICBzdGF0aWMgaXNTYW1lUGFyYW1zKG1haW5QYXJhbXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9LCBvdGhlclBhcmFtczoge1trZXk6IHN0cmluZ106IHN0cmluZ30pIHtcbiAgICBjb25zdCByZXN1bHQgPSBPYmplY3QuZW50cmllcyhtYWluUGFyYW1zKS5ldmVyeSgoW2tleSwgdmFsdWVdKSA9PiB2YWx1ZSA9PT0gb3RoZXJQYXJhbXNba2V5XSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyBpc1BhcmVudChjaGlsZDogTWVudUl0ZW0sIHBhcmVudDogTWVudUl0ZW0gfCBNZW51UGF0aFBhcmFtKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gY2hpbGQucGFyZW50UGF0aCAmJiBjaGlsZC5wYXJlbnRQYXRoID09PSBwYXJlbnQ/LnBhdGhcbiAgICAgICAgJiYgdGhpcy5pc1NhbWVQYXJhbXMoY2hpbGQucGFyZW50UGF0aFBhcmFtcywgcGFyZW50WydwYXRoUGFyYW1zJ10gfHwgcGFyZW50WydwYXJhbXMnXSkgfHwgZmFsc2U7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyBjaGVja0lmVmlzaWJsZShpdGVtOiBNZW51SXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQ6IEFjY291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IENvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRzPzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xvZ2luPzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dQcmVmaXg/OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTogYm9vbGVhbiB7XG4gICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgaWYgKGl0ZW0ucHJvZmlsZSkge1xuICAgICAgY29uc3QgaGFzUHJvZmlsZSA9IEFjY291bnRVdGlscy5oYXNNaW5Qcm9maWxlKGFjY291bnQsIGl0ZW0ucHJvZmlsZSk7XG4gICAgICBpZiAoIWhhc1Byb2ZpbGUpIHtcbiAgICAgICAgaWYgKG9wdHMuZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7b3B0cyAmJiBvcHRzLmxvZ1ByZWZpeCB8fCAnW21lbnVdJ30gSGlkZSBpdGVtICcke2l0ZW0udGl0bGV9JzogbmVlZCB0aGUgbWluIHByb2ZpbGUgJyR7aXRlbS5wcm9maWxlfScgdG8gYWNjZXNzIHBhdGggJyR7aXRlbS5wYXRofSdgKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGVsc2UgaWYgKGl0ZW0uZXhhY3RQcm9maWxlKSB7XG4gICAgICBjb25zdCBoYXNFeGFjdFByb2ZpbGUgPSBBY2NvdW50VXRpbHMuaGFzRXhhY3RQcm9maWxlKGFjY291bnQsIGl0ZW0uZXhhY3RQcm9maWxlKTtcbiAgICAgIGlmICghaGFzRXhhY3RQcm9maWxlKSB7XG4gICAgICAgIGlmIChvcHRzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGAke29wdHMgJiYgb3B0cy5sb2dQcmVmaXggfHwgJ1ttZW51XSd9IEhpZGUgaXRlbSAnJHtpdGVtLnRpdGxlfSc6IG5lZWQgZXhhY3QgcHJvZmlsZSAnJHtpdGVtLmV4YWN0UHJvZmlsZX0nIHRvIGFjY2VzcyBwYXRoICcke2l0ZW0ucGF0aH0nYCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBlbmFibGUgYnkgY29uZmlnXG4gICAgaWYgKGl0ZW0uaWZQcm9wZXJ0eSkge1xuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiW21lbnVdIENoZWNraW5nIGlmIHByb3BlcnR5IGVuYWJsZSA/IFwiICsgaXRlbS5pZlByb3BlcnR5LCBjb25maWcgJiYgY29uZmlnLnByb3BlcnRpZXMpO1xuICAgICAgY29uc3QgaXNFbmFibGVCeUNvbmZpZyA9IGNvbmZpZyAmJiBjb25maWcucHJvcGVydGllc1tpdGVtLmlmUHJvcGVydHldID09PSAndHJ1ZSc7XG4gICAgICBpZiAoIWlzRW5hYmxlQnlDb25maWcpIHtcbiAgICAgICAgaWYgKG9wdHMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1ttZW51XSBDb25maWcgcHJvcGVydHkgXFwnJyArIGl0ZW0uaWZQcm9wZXJ0eSArICdcXCcgbm90IFxcJ3RydWVcXCcgZm9yICcsIGl0ZW0ucGF0aCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZVBhdGhXaXRoUXVlcnkocGF0aFdpdGhRdWVyeTogc3RyaW5nKTogTWVudVBhdGhQYXJhbSB7XG4gICAgY29uc3QgaW5kZXggPSBwYXRoV2l0aFF1ZXJ5Lmxhc3RJbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIHtwYXRoOiBwYXRoV2l0aFF1ZXJ5LCBwYXJhbXM6IHt9fTtcbiAgICBjb25zdCBwYXRoID0gcGF0aFdpdGhRdWVyeS5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcGF0aFdpdGhRdWVyeS5zdWJzdHJpbmcoaW5kZXgpO1xuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5mcm9tRW50cmllcyhuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5U3RyaW5nKSk7XG4gICAgcmV0dXJuIHtwYXRoLCBwYXJhbXN9O1xuICB9XG5cbiAgc3RhdGljIGdldFVybChpdGVtOiBNZW51SXRlbSkge1xuICAgIHJldHVybiB0aGlzLmdldFVybEZyb21QYXRoQW5kUGFyYW1zKGl0ZW0/LnBhdGgsIGl0ZW0/LnBhdGhQYXJhbXMpO1xuICB9XG4gIHN0YXRpYyBnZXRVcmxGcm9tUGF0aEFuZFBhcmFtcyhwYXRoOiBzdHJpbmcsIHBhcmFtcz86IGFueSkge1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gT2JqZWN0LmVudHJpZXMocGFyYW1zIHx8IHt9KS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fT0ke3ZhbHVlfWApLmpvaW4oJyYnKTtcbiAgICBpZiAoaXNOaWxPckJsYW5rKHF1ZXJ5U3RyaW5nKSkgcmV0dXJuIHBhdGggfHwgJyc7XG4gICAgcmV0dXJuIGAke3BhdGggfHwnJ30/JHtxdWVyeVN0cmluZ31gO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNZW51T3B0aW9ucyB7XG4gIC8vIFRPRE8gYWRkIG9wdGlvbnMsIHdoZW4gbmVlZCBzcGVjaWZpYyBiZWhhdmlvciBvbiBwcm9qZWN0c1xufVxuIl19
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9tZW51L21lbnUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBR3BELE9BQU8sRUFBVSxZQUFZLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQTRCdEUsTUFBTSxPQUFPLFNBQVM7SUFFcEI7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBa0IsRUFBRSxTQUFtQjtRQUNuRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUk7ZUFDcEMsUUFBUSxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsVUFBVTtlQUM1QyxRQUFRLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxLQUFLO2VBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQW1DLEVBQUUsV0FBb0M7UUFDM0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQWUsRUFBRSxNQUFnQztRQUMvRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssTUFBTSxFQUFFLElBQUk7ZUFDN0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENB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QkFBdUIsQ0FBQyxJQUFZLEVBQUUsTUFBWTtRQUN2RCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEcsSUFBSSxZQUFZLENBQUMsV0FBVyxDQUFDO1lBQUUsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2pELE9BQU8sR0FBRyxJQUFJLElBQUcsRUFBRSxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxXQUFXO0NBRXZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtVc2VyUHJvZmlsZUxhYmVsfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9wZXJzb24ubW9kZWwnO1xuaW1wb3J0IHtDb25maWd1cmF0aW9ufSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9jb25maWcubW9kZWwnO1xuaW1wb3J0IHtJY29uUmVmfSBmcm9tICcuLi8uLi9zaGFyZWQvdHlwZXMnO1xuaW1wb3J0IHtpc05pbE9yQmxhbmt9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtNZW51UGF0aFBhcmFtfSBmcm9tICcuL21lbnUuc2VydmljZSc7XG5pbXBvcnQge0FjY291bnQsIEFjY291bnRVdGlsc30gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvYWNjb3VudC5tb2RlbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVudUl0ZW0gZXh0ZW5kcyBJY29uUmVmIHtcbiAgaWQ/OiBudW1iZXI7IC8vIEludGVybmFsIGlkIChzZXQgYnkgbWVudS1zZXJ2aWNlKVxuICB0aXRsZTogc3RyaW5nO1xuICBwYXRoPzogc3RyaW5nO1xuXG4gIC8vIEluamVjdGlvbiBwb2ludFxuICBhZnRlcj86IHN0cmluZztcbiAgYmVmb3JlPzogc3RyaW5nO1xuXG4gIGFjdGlvbj86IHN0cmluZyB8IGFueTtcbiAgcHJvZmlsZT86IFVzZXJQcm9maWxlTGFiZWw7XG4gIGV4YWN0UHJvZmlsZT86IFVzZXJQcm9maWxlTGFiZWw7XG4gIGNvbG9yPzogc3RyaW5nO1xuICBjc3NDbGFzcz86IHN0cmluZztcbiAgLy8gQSBjb25maWcgcHJvcGVydHksIHRvIGVuYWJsZSB0aGUgbWVudSBpdGVtXG4gIGlmUHJvcGVydHk/OiBzdHJpbmc7XG4gIC8vIEEgY29uZmlnIHByb3BlcnR5LCB0byBvdmVycmlkZSB0aGUgdGl0bGVcbiAgdGl0bGVQcm9wZXJ0eT86IHN0cmluZztcbiAgdGl0bGVBcmdzPzoge1trZXk6IHN0cmluZ106IHN0cmluZ307XG4gIHBhdGhQYXJhbXM/OiB7W2tleTogc3RyaW5nXTogc3RyaW5nfTtcbiAgcGFyZW50UGF0aD86IHN0cmluZztcbiAgcGFyZW50UGF0aFBhcmFtcz86IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuXG4gICRjaGlsZHJlbj86IEJlaGF2aW9yU3ViamVjdDxNZW51SXRlbVtdPjtcbn1cblxuZXhwb3J0IGNsYXNzIE1lbnVJdGVtcyB7XG5cbiAgLyoqXG4gICAqIENvbXBhcmUsIHdpdGhvdXQgY2hlY2tpbmcgdGhlIGNoaWxkcmVuXG4gICAqIEBwYXJhbSBtYWluSXRlbVxuICAgKiBAcGFyYW0gb3RoZXJJdGVtXG4gICAqL1xuICBzdGF0aWMgaXNTYW1lKG1haW5JdGVtOiBNZW51SXRlbSwgb3RoZXJJdGVtOiBNZW51SXRlbSkge1xuICAgIHJldHVybiBtYWluSXRlbS5wYXRoID09PSBvdGhlckl0ZW0ucGF0aFxuICAgICYmIG1haW5JdGVtLnBhcmVudFBhdGggPT09IG90aGVySXRlbS5wYXJlbnRQYXRoXG4gICAgJiYgbWFpbkl0ZW0udGl0bGUgPT09IG90aGVySXRlbS50aXRsZVxuICAgICYmIHRoaXMuaXNTYW1lUGFyYW1zKG1haW5JdGVtLnBhdGhQYXJhbXMsIG90aGVySXRlbS5wYXRoUGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGwga2V5L3ZhbHVlIG9mIHRoZSBtYWluUGFyYW1zIHNob3VsZCBleGlzdCAoYW5kIGJlIGVxdWFscykgaW4gdGhlIG90aGVyIHBhcmFtc1xuICAgKiBAcGFyYW0gbWFpblBhcmFtc1xuICAgKiBAcGFyYW0gb3RoZXJQYXJhbXNcbiAgICovXG4gIHN0YXRpYyBpc1NhbWVQYXJhbXMobWFpblBhcmFtczoge1trZXk6IHN0cmluZ106IHN0cmluZ30sIG90aGVyUGFyYW1zOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5lbnRyaWVzKG1haW5QYXJhbXMpLmV2ZXJ5KChba2V5LCB2YWx1ZV0pID0+IHZhbHVlID09PSBvdGhlclBhcmFtc1trZXldKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIGlzUGFyZW50KGNoaWxkOiBNZW51SXRlbSwgcGFyZW50OiBNZW51SXRlbSB8IE1lbnVQYXRoUGFyYW0pIHtcbiAgICBjb25zdCByZXN1bHQgPSBjaGlsZC5wYXJlbnRQYXRoICYmIGNoaWxkLnBhcmVudFBhdGggPT09IHBhcmVudD8ucGF0aFxuICAgICAgICAmJiB0aGlzLmlzU2FtZVBhcmFtcyhjaGlsZC5wYXJlbnRQYXRoUGFyYW1zLCBwYXJlbnRbJ3BhdGhQYXJhbXMnXSB8fCBwYXJlbnRbJ3BhcmFtcyddKSB8fCBmYWxzZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIGNoZWNrSWZWaXNpYmxlKGl0ZW06IE1lbnVJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudDogQWNjb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogQ29uZmlndXJhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM/OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzTG9naW4/OiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ1ByZWZpeD86IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pOiBib29sZWFuIHtcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICBpZiAoaXRlbS5wcm9maWxlKSB7XG4gICAgICBjb25zdCBoYXNQcm9maWxlID0gQWNjb3VudFV0aWxzLmhhc01pblByb2ZpbGUoYWNjb3VudCwgaXRlbS5wcm9maWxlKTtcbiAgICAgIGlmICghaGFzUHJvZmlsZSkge1xuICAgICAgICBpZiAob3B0cy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHtvcHRzICYmIG9wdHMubG9nUHJlZml4IHx8ICdbbWVudV0nfSBIaWRlIGl0ZW0gJyR7aXRlbS50aXRsZX0nOiBuZWVkIHRoZSBtaW4gcHJvZmlsZSAnJHtpdGVtLnByb2ZpbGV9JyB0byBhY2Nlc3MgcGF0aCAnJHtpdGVtLnBhdGh9J2ApO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZWxzZSBpZiAoaXRlbS5leGFjdFByb2ZpbGUpIHtcbiAgICAgIGNvbnN0IGhhc0V4YWN0UHJvZmlsZSA9IEFjY291bnRVdGlscy5oYXNFeGFjdFByb2ZpbGUoYWNjb3VudCwgaXRlbS5leGFjdFByb2ZpbGUpO1xuICAgICAgaWYgKCFoYXNFeGFjdFByb2ZpbGUpIHtcbiAgICAgICAgaWYgKG9wdHMuZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7b3B0cyAmJiBvcHRzLmxvZ1ByZWZpeCB8fCAnW21lbnVdJ30gSGlkZSBpdGVtICcke2l0ZW0udGl0bGV9JzogbmVlZCBleGFjdCBwcm9maWxlICcke2l0ZW0uZXhhY3RQcm9maWxlfScgdG8gYWNjZXNzIHBhdGggJyR7aXRlbS5wYXRofSdgKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIGVuYWJsZSBieSBjb25maWdcbiAgICBpZiAoaXRlbS5pZlByb3BlcnR5KSB7XG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJbbWVudV0gQ2hlY2tpbmcgaWYgcHJvcGVydHkgZW5hYmxlID8gXCIgKyBpdGVtLmlmUHJvcGVydHksIGNvbmZpZyAmJiBjb25maWcucHJvcGVydGllcyk7XG4gICAgICBjb25zdCBpc0VuYWJsZUJ5Q29uZmlnID0gY29uZmlnICYmIGNvbmZpZy5wcm9wZXJ0aWVzW2l0ZW0uaWZQcm9wZXJ0eV0gPT09ICd0cnVlJztcbiAgICAgIGlmICghaXNFbmFibGVCeUNvbmZpZykge1xuICAgICAgICBpZiAob3B0cy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW21lbnVdIENvbmZpZyBwcm9wZXJ0eSBcXCcnICsgaXRlbS5pZlByb3BlcnR5ICsgJ1xcJyBub3QgXFwndHJ1ZVxcJyBmb3IgJywgaXRlbS5wYXRoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlUGF0aFdpdGhRdWVyeShwYXRoV2l0aFF1ZXJ5OiBzdHJpbmcpOiBNZW51UGF0aFBhcmFtIHtcbiAgICBjb25zdCBpbmRleCA9IHBhdGhXaXRoUXVlcnkubGFzdEluZGV4T2YoJz8nKTtcbiAgICBpZiAoaW5kZXggPCAwKSByZXR1cm4ge3BhdGg6IHBhdGhXaXRoUXVlcnksIHBhcmFtczoge319O1xuICAgIGNvbnN0IHBhdGggPSBwYXRoV2l0aFF1ZXJ5LnN1YnN0cmluZygwLCBpbmRleCk7XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBwYXRoV2l0aFF1ZXJ5LnN1YnN0cmluZyhpbmRleCk7XG4gICAgY29uc3QgcGFyYW1zID0gT2JqZWN0LmZyb21FbnRyaWVzKG5ldyBVUkxTZWFyY2hQYXJhbXMocXVlcnlTdHJpbmcpKTtcbiAgICByZXR1cm4ge3BhdGgsIHBhcmFtc307XG4gIH1cblxuICBzdGF0aWMgZ2V0VXJsKGl0ZW06IE1lbnVJdGVtKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VXJsRnJvbVBhdGhBbmRQYXJhbXMoaXRlbT8ucGF0aCwgaXRlbT8ucGF0aFBhcmFtcyk7XG4gIH1cbiAgc3RhdGljIGdldFVybEZyb21QYXRoQW5kUGFyYW1zKHBhdGg6IHN0cmluZywgcGFyYW1zPzogYW55KSB7XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBPYmplY3QuZW50cmllcyhwYXJhbXMgfHwge30pLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9PSR7dmFsdWV9YCkuam9pbignJicpO1xuICAgIGlmIChpc05pbE9yQmxhbmsocXVlcnlTdHJpbmcpKSByZXR1cm4gcGF0aCB8fCAnJztcbiAgICByZXR1cm4gYCR7cGF0aCB8fCcnfT8ke3F1ZXJ5U3RyaW5nfWA7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1lbnVPcHRpb25zIHtcbiAgLy8gVE9ETyBhZGQgb3B0aW9ucywgd2hlbiBuZWVkIHNwZWNpZmljIGJlaGF2aW9yIG9uIHByb2plY3RzXG59XG4iXX0=