@propmix/profet-common-header 2.3.2 → 2.4.0

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.
Files changed (31) hide show
  1. package/README.md +25 -54
  2. package/esm2020/lib/api-endpoints.def.mjs +5 -2
  3. package/esm2020/lib/common-header.interface.mjs +2 -0
  4. package/esm2020/lib/common-header.module.mjs +31 -5
  5. package/esm2020/lib/common-header.service.mjs +39 -9
  6. package/esm2020/lib/company-switch-warning/company-switch-warning.component.mjs +20 -0
  7. package/esm2020/lib/config/app.config.mjs +21 -0
  8. package/esm2020/lib/header/header.component.mjs +183 -197
  9. package/esm2020/lib/pipes/active-route.pipe.mjs +24 -0
  10. package/esm2020/lib/utils/app.constants.mjs +2 -2
  11. package/esm2020/lib/utils/image.dataurl.mjs +4 -1
  12. package/esm2020/public-api.mjs +2 -3
  13. package/fesm2015/propmix-profet-common-header.mjs +319 -223
  14. package/fesm2015/propmix-profet-common-header.mjs.map +1 -1
  15. package/fesm2020/propmix-profet-common-header.mjs +313 -219
  16. package/fesm2020/propmix-profet-common-header.mjs.map +1 -1
  17. package/lib/api-endpoints.def.d.ts +3 -0
  18. package/lib/common-header.interface.d.ts +32 -0
  19. package/lib/common-header.module.d.ts +18 -10
  20. package/lib/common-header.service.d.ts +11 -3
  21. package/lib/company-switch-warning/company-switch-warning.component.d.ts +7 -0
  22. package/lib/config/app.config.d.ts +4 -0
  23. package/lib/header/header.component.d.ts +35 -27
  24. package/lib/pipes/active-route.pipe.d.ts +12 -0
  25. package/lib/utils/image.dataurl.d.ts +1 -0
  26. package/package.json +1 -1
  27. package/public-api.d.ts +1 -2
  28. package/esm2020/lib/utils/HeaderConfig.mjs +0 -8
  29. package/esm2020/lib/utils/UserDetails.mjs +0 -2
  30. package/lib/utils/HeaderConfig.d.ts +0 -5
  31. package/lib/utils/UserDetails.d.ts +0 -4
@@ -1,11 +1,14 @@
1
- import { LowerCasePipe, TitleCasePipe } from '@angular/common';
2
- import { Component, EventEmitter, inject, Input, Output, ViewEncapsulation, } from '@angular/core';
1
+ import { Component, EventEmitter, inject, Input, Output, ViewChild, ViewEncapsulation, } from '@angular/core';
2
+ import { FormControl } from '@angular/forms';
3
+ import { MatDialog } from '@angular/material/dialog';
3
4
  import { MatSnackBar } from '@angular/material/snack-bar';
4
5
  import { DomSanitizer } from '@angular/platform-browser';
5
6
  import { Router } from '@angular/router';
6
7
  import { getCurrentUser, signOut } from 'aws-amplify/auth';
7
8
  import { forkJoin } from 'rxjs';
8
9
  import { CommonHeaderService } from '../common-header.service';
10
+ import { CompanySwitchWarningComponent } from '../company-switch-warning/company-switch-warning.component';
11
+ import { AppConfig } from '../config/app.config';
9
12
  import { PROFET_APPS } from '../utils/apps.enum';
10
13
  import { imageDataUrl } from '../utils/image.dataurl';
11
14
  import * as i0 from "@angular/core";
@@ -13,74 +16,46 @@ import * as i1 from "@angular/common";
13
16
  import * as i2 from "@angular/material/toolbar";
14
17
  import * as i3 from "@angular/material/icon";
15
18
  import * as i4 from "@angular/material/button";
16
- import * as i5 from "@angular/material/menu";
17
- import * as i6 from "@angular/material/tooltip";
19
+ import * as i5 from "@angular/material/sidenav";
20
+ import * as i6 from "@angular/material/menu";
21
+ import * as i7 from "@angular/material/tooltip";
22
+ import * as i8 from "@angular/material/list";
23
+ import * as i9 from "@angular/material/form-field";
24
+ import * as i10 from "@angular/material/select";
25
+ import * as i11 from "@angular/material/core";
26
+ import * as i12 from "@angular/forms";
27
+ import * as i13 from "../pipes/active-route.pipe";
18
28
  export class HeaderComponent {
19
29
  constructor() {
20
30
  this.username = '';
21
- this.menuEvent = new EventEmitter();
22
31
  this.infoEvent = new EventEmitter();
23
- this.appList = [];
24
32
  this.portalUrl = '';
25
33
  this.userImageLink = null;
26
- this.headerClass = '';
27
- this.currentAppLogo = '';
28
34
  this.userCompanyLogo = '';
29
- this.enabledApplications = [];
30
35
  this.imageDataUrls = imageDataUrl;
31
- this.isAppsMenuOpen = false;
32
- this.isProfileMenuOpen = false;
33
36
  this._router = inject(Router);
34
37
  this._snackbar = inject(MatSnackBar);
35
- this._ser = inject(CommonHeaderService);
38
+ this._headerSer = inject(CommonHeaderService);
36
39
  this._domSanitizer = inject(DomSanitizer);
37
- this._titleCasepipe = inject(TitleCasePipe);
38
- this._lowerCasePipe = inject(LowerCasePipe);
40
+ this._dialog = inject(MatDialog);
41
+ this.companyControl = new FormControl();
42
+ this.appConfig = AppConfig.appConfig;
43
+ this.menuList = [];
44
+ this.companyList = [];
45
+ this.menuInfo = {};
46
+ this.groupedMenu = [];
39
47
  }
40
48
  async ngOnInit() {
49
+ this.updateLastAppInfo();
50
+ this.getCompanyList();
51
+ this.getMenuList();
41
52
  this.fetchCompanyProfile();
42
- this._ser.getApps().subscribe({
43
- next: (v) => {
44
- this.portalUrl = v?.data?.portalUrl;
45
- let data = {
46
- companyInfo: this.companyProfile,
47
- portalUrl: this.portalUrl,
48
- };
49
- this.infoEvent.emit(data);
50
- // let config: any = Auth.configure();
51
- // let signoutUrl = `${this.portalUrl}/login`;
52
- // config.oauth = { ...config.oauth, ...{ "redirectSignOut": signoutUrl } };
53
- // Amplify.configure(config);
54
- if (v?.data?.applications && v.data.applications.length > 0) {
55
- // this.fetchCompanyData(v.data.applications);
56
- this.appList = [];
57
- this.enabledApplications = v.data.applications;
58
- v.data.applications.forEach((element) => {
59
- let currentApp = element.name === this.appName;
60
- this.appList.push({
61
- name: element.displayName,
62
- value: element,
63
- appUrl: element.appUrl,
64
- active: currentApp,
65
- });
66
- });
67
- let appData = {
68
- enabledApps: this.appList,
69
- };
70
- this.infoEvent.emit(appData);
71
- }
72
- },
73
- error: (e) => {
74
- console.log(e);
75
- },
76
- });
77
53
  let userInfo = await getCurrentUser();
78
54
  if (userInfo?.username) {
79
- let userDetails = this._ser.getUserDetailsByEmail({
55
+ let userDetails = this._headerSer.getUserDetailsByEmail({
80
56
  email: userInfo.username,
81
57
  });
82
- let userCompanyInfo = this._ser.getUserCompanies();
83
- forkJoin([userDetails, userCompanyInfo]).subscribe({
58
+ forkJoin([userDetails]).subscribe({
84
59
  next: (res) => {
85
60
  if (res && res[0]) {
86
61
  this.userAuthData = res[0];
@@ -89,33 +64,95 @@ export class HeaderComponent {
89
64
  this.getUserProfile();
90
65
  }
91
66
  }
92
- if (res && res[1]) {
93
- if (res[1] && res[1].data && res[1].data.companies) {
94
- this.userCompanies = res[1].data.companies;
95
- if (this.userCompanies.length > 0) {
96
- for (let com of this.userCompanies) {
97
- if (com.companyKey == this.userAuthData.lastAccessedCompanyKey) {
98
- com.activeNow = true;
99
- break;
100
- }
101
- }
102
- }
103
- }
104
- this.getCurrentCompanyInfo();
105
- this.setCurrentAppLogo();
106
- }
107
67
  },
108
68
  });
109
69
  }
110
70
  }
111
- menuAction() {
112
- this.menuEvent.emit();
71
+ groupMenu() {
72
+ // Reset the grouped menu
73
+ this.groupedMenu = [];
74
+ // This will hold the groupings temporarily
75
+ const menuMap = new Map();
76
+ // Group the items
77
+ this.menuList.forEach(menu => {
78
+ const appKey = menu.appType;
79
+ const groupKey = menu.groupBy || '_ungrouped';
80
+ // Ensure appType exists in the map
81
+ if (!menuMap.has(appKey)) {
82
+ menuMap.set(appKey, { appType: menu.appType, groups: [] });
83
+ }
84
+ const appEntry = menuMap.get(appKey);
85
+ // Find existing group or create a new one
86
+ let group = appEntry.groups.find(g => g.groupBy === groupKey);
87
+ if (!group) {
88
+ group = { groupBy: groupKey, items: [] };
89
+ appEntry.groups.push(group);
90
+ }
91
+ // Add menu item to the correct group
92
+ group.items.push(menu);
93
+ });
94
+ // Convert map values to an array to preserve order
95
+ this.groupedMenu = Array.from(menuMap.values());
96
+ }
97
+ selectCurrentCompany() {
98
+ let com = this.companyList.find(x => x.isActive);
99
+ this.activeCompany = com;
100
+ }
101
+ patchCurrentCompanyInfo() {
102
+ let com = this.companyList.find(x => x.isActive);
103
+ this.companyControl.patchValue(com);
113
104
  }
105
+ sideMenuToggle() {
106
+ this.sidenav.toggle();
107
+ }
108
+ // private groupByAppType(menuList: AppMenu[]): { [key: string]: AppMenu[] } {
109
+ // return menuList.reduce((acc, item) => {
110
+ // (acc[item.appType] = acc[item.appType] || []).push(item)
111
+ // return acc;
112
+ // }, {} as { [key: string]: AppMenu[] });
113
+ // }
114
+ menuSelection(menu) {
115
+ this.sideMenuToggle();
116
+ if (menu.appType == this._headerSer.headerConfig.appType) {
117
+ this._router.navigate([menu.path]);
118
+ }
119
+ else {
120
+ let activeCom = this.companyList.find(x => x.isActive);
121
+ if (activeCom) {
122
+ if (activeCom.baseUrls[menu.appType]) {
123
+ let url = `${activeCom.baseUrls[menu.appType]}/${menu.path}`;
124
+ window.location.replace(url);
125
+ }
126
+ }
127
+ }
128
+ }
129
+ getCompanyList() {
130
+ this._headerSer.getCompanyList().subscribe({
131
+ next: (v) => {
132
+ this._headerSer.setCompanyList(v);
133
+ this.companyList = v;
134
+ this.selectCurrentCompany();
135
+ this.patchCurrentCompanyInfo();
136
+ }
137
+ });
138
+ }
139
+ getMenuList() {
140
+ this._headerSer.getMenuList().subscribe({
141
+ next: (v) => {
142
+ this._headerSer.setMenuState(v);
143
+ this.menuList = v;
144
+ this.groupMenu();
145
+ // this.menuInfo = this.groupByAppType(v);
146
+ // this._headerSer.setMenuState(v);
147
+ }
148
+ });
149
+ }
150
+ // TODO -- needs to be removed after check
114
151
  fetchCompanyProfile() {
115
152
  let req = {
116
153
  companyName: document.location.host.split('.')[0],
117
154
  };
118
- this._ser.fetchCompanyProfile(req).subscribe({
155
+ this._headerSer.fetchCompanyProfile(req).subscribe({
119
156
  next: (v) => {
120
157
  this.companyProfile = v;
121
158
  let data = {
@@ -126,36 +163,8 @@ export class HeaderComponent {
126
163
  },
127
164
  });
128
165
  }
129
- fetchCompanyData(allApps) {
130
- this._ser.getCompanyApplications().subscribe({
131
- next: (v) => {
132
- if (v?.data?.enabledApplications) {
133
- this.appList = [];
134
- let appInfo = [];
135
- let fetchedApplications = v.data.enabledApplications?.split(',');
136
- if (fetchedApplications.length > 0) {
137
- fetchedApplications.forEach((element) => {
138
- appInfo = allApps.filter((ele) => ele.name == element);
139
- if (appInfo && appInfo.length > 0) {
140
- if (appInfo[0].name != 'mca') {
141
- this.appList.push({
142
- name: appInfo[0].displayName,
143
- value: element,
144
- appUrl: appInfo[0].appUrl,
145
- });
146
- }
147
- }
148
- });
149
- }
150
- }
151
- },
152
- });
153
- }
154
- sanitizeUrl(url) {
155
- return this._domSanitizer.bypassSecurityTrustUrl(url);
156
- }
157
166
  getUserProfile() {
158
- this._ser
167
+ this._headerSer
159
168
  .obtainDataByUrl(this.userAuthData._links.profileImage.href)
160
169
  .subscribe((img) => {
161
170
  if (img?.locationUrl) {
@@ -165,134 +174,111 @@ export class HeaderComponent {
165
174
  }
166
175
  });
167
176
  }
168
- appRedirect(app) {
169
- if (!app?.active) {
170
- window.open(app.appUrl, '_self');
171
- }
172
- }
173
177
  profile() {
174
178
  // this.fetchUserData();
175
- if (this._ser.portalFrontendUrl) {
176
- let url = this.portalUrl + '/app/profile';
177
- document.location.href = url;
178
- }
179
- else {
179
+ // TODO -- need to test and remove commented code
180
+ // if (this._headerSer.headerConfig.portalFrontendUrl) {
181
+ // let url = this.portalUrl + '/app/profile';
182
+ // document.location.href = url;
183
+ // } else {
184
+ // this._router.navigateByUrl('/app/profile');
185
+ // }
186
+ if (this._headerSer.headerConfig.appType == PROFET_APPS.profet_portal) {
180
187
  this._router.navigateByUrl('/app/profile');
181
188
  }
182
- }
183
- loadUserMessages() {
184
- if (this.userAuthData) {
185
- this._router.navigateByUrl('/app/user-inbox');
186
- }
187
189
  else {
188
- this._snackbar.open('No messages received yet', 'OK', { duration: 5000 });
190
+ let url = this.activeCompany?.baseUrls.profet_portal + '/app/profile';
191
+ document.location.href = url;
189
192
  }
190
193
  }
191
194
  onLogoutClick() {
192
- signOut({ global: true, oauth: { redirectUrl: this._ser.signOutUrl } })
195
+ signOut({ global: true, oauth: { redirectUrl: this._headerSer.headerConfig.signOutUrl } })
193
196
  .then((data) => {
194
- window.open(this._ser.signOutUrl, '_self');
197
+ window.open(this._headerSer.headerConfig.signOutUrl, '_self');
195
198
  })
196
199
  .catch((err) => {
197
200
  console.log(err);
198
- signOut({ global: true, oauth: { redirectUrl: this._ser.signOutUrl } })
201
+ signOut({ global: true, oauth: { redirectUrl: this._headerSer.headerConfig.signOutUrl } })
199
202
  .then(() => {
200
- window.open(this._ser.signOutUrl, '_self');
203
+ window.open(this._headerSer.headerConfig.signOutUrl, '_self');
201
204
  })
202
205
  .catch((error) => console.log(error));
203
206
  });
204
207
  }
205
- switchCompany(company) {
206
- // switch the user to the selectec company
207
- // Find the domain information
208
- if (!company.activeNow) {
209
- let domainInfo = this._ser.getDomainInfo();
210
- if (domainInfo) {
211
- let req = {
212
- companyKey: company.companyKey,
213
- appName: domainInfo.appCode,
214
- };
215
- this._ser.updateUserCompany(req).subscribe({
216
- next: (response) => {
217
- if (response && response.type && response.type == 'OK') {
218
- if (response.data.applicationURL) {
219
- let url = response.data.applicationURL;
220
- window.location.replace(url);
208
+ updateLastAppInfo() {
209
+ let req = {
210
+ lastAccessedApplication: this._headerSer.headerConfig.appType
211
+ };
212
+ this._headerSer.updateLastAccessedApplication(req).subscribe({
213
+ next: () => {
214
+ }
215
+ });
216
+ }
217
+ switchCompany(info) {
218
+ let company = info.value;
219
+ let comInfo = {
220
+ activeCompany: this.activeCompany?.name,
221
+ switchingCompany: company.name
222
+ };
223
+ this._dialog.open(CompanySwitchWarningComponent, { data: comInfo }).afterClosed().subscribe(res => {
224
+ if (res) {
225
+ // Find the domain information
226
+ if (!company.isActive) {
227
+ // let domainInfo = this._headerSer.getDomainInfo();
228
+ // if (domainInfo) {
229
+ let req = {
230
+ companyKey: company.companyKey,
231
+ appName: this._headerSer.headerConfig.appType,
232
+ };
233
+ this._headerSer.updateUserCompany(req).subscribe({
234
+ next: (response) => {
235
+ if (response && response.type && response.type == 'OK') {
236
+ if (response.data.applicationURL) {
237
+ let url = response.data.applicationURL;
238
+ window.location.replace(url);
239
+ }
240
+ // refresh the current page to reload the contents based on the current company
241
+ // window.location.reload();
221
242
  }
222
- // refresh the current page to reload the contents based on the current company
223
- // window.location.reload();
224
- }
225
- else {
243
+ else {
244
+ // display a message to the user that the company could not be switched.
245
+ this._snackbar.open('Company could not be switched. Please try again or contact support.', 'OK', { duration: 5000 });
246
+ }
247
+ },
248
+ error: (e) => {
249
+ this.patchCurrentCompanyInfo();
226
250
  // display a message to the user that the company could not be switched.
227
251
  this._snackbar.open('Company could not be switched. Please try again or contact support.', 'OK', { duration: 5000 });
228
- }
229
- },
230
- error: (e) => {
231
- // display a message to the user that the company could not be switched.
232
- this._snackbar.open('Company could not be switched. Please try again or contact support.', 'OK', { duration: 5000 });
233
- },
234
- });
252
+ },
253
+ });
254
+ // }
255
+ // else {
256
+ // this.patchCurrentCompanyInfo();
257
+ // this._snackbar.open(
258
+ // 'Company could not be switched. Please try again or contact support.',
259
+ // 'OK',
260
+ // { duration: 5000 }
261
+ // );
262
+ // }
263
+ }
235
264
  }
236
265
  else {
237
- // display a message to the user that the company could not be switched.
238
- this._snackbar.open('Company could not be switched. Please try again or contact support.', 'OK', { duration: 5000 });
266
+ this.patchCurrentCompanyInfo();
239
267
  }
240
- }
241
- }
242
- getCurrentCompanyInfo() {
243
- this.currentCompany = this.userCompanies.find((company) => company.companyKey === this.userAuthData.lastAccessedCompanyKey);
244
- if (this.currentCompany) {
245
- const company = this.currentCompany?.name?.split(' ')[0];
246
- this.headerClass = 'header-' + this._lowerCasePipe?.transform(company);
247
- this.headerClass = 'header-' + this._titleCasepipe?.transform(company);
248
- this.userCompanyLogo = this.currentCompany?.companyLogoUrl
249
- ? this.currentCompany?.companyLogoUrl
250
- : null;
251
- }
252
- return this.currentCompany ? this.currentCompany : null;
253
- }
254
- setCurrentAppLogo() {
255
- const currentApp = this.enabledApplications?.find((app) => app.name === this.appName);
256
- this.currentApp = currentApp;
257
- if (currentApp) {
258
- switch (currentApp?.name) {
259
- case PROFET_APPS.appraisal_management:
260
- this.currentAppLogo = this._domSanitizer.bypassSecurityTrustUrl(imageDataUrl.profetOrdersLogo);
261
- break;
262
- case PROFET_APPS.appraisal_valuation:
263
- this.currentAppLogo = this._domSanitizer.bypassSecurityTrustUrl(imageDataUrl.profetValuationLogo);
264
- break;
265
- case PROFET_APPS.appraisal_review:
266
- this.currentAppLogo = this._domSanitizer.bypassSecurityTrustUrl(imageDataUrl.profetReviewLogo);
267
- break;
268
- case PROFET_APPS.profet_portal:
269
- this.currentAppLogo = this._domSanitizer.bypassSecurityTrustUrl(imageDataUrl.profetPortalLogo);
270
- break;
271
- }
272
- }
273
- else {
274
- this.currentAppLogo = this._domSanitizer.bypassSecurityTrustUrl(imageDataUrl.profetPortalLogo);
275
- }
276
- }
277
- toggleMenu(menu) {
278
- menu === 'apps' ? (this.isAppsMenuOpen = !this.isAppsMenuOpen) : null;
279
- menu === 'profile'
280
- ? (this.isProfileMenuOpen = !this.isProfileMenuOpen)
281
- : null;
268
+ });
282
269
  }
283
270
  }
284
271
  HeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: HeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
285
- HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: HeaderComponent, selector: "lib-header", inputs: { template: "template", appName: "appName" }, outputs: { menuEvent: "menuEvent", infoEvent: "infoEvent" }, ngImport: i0, template: "<mat-toolbar cdkMenuBar color=\"primary\" [ngClass]=\"headerClass\" class=\"header-wrapper common_header shadow-sm\">\n <!-- Main nav button and navigation links -->\n <button mat-icon-button color=\"theme-white\" (click)=\"menuAction()\" class=\"pmx-button pmx-menu-button orders-menu icon-btn ms-0 me-3\"\n aria-label=\"main menu\" tabindex=\"0\" matTooltip=\"Main menu\" matTooltipPosition=\"below\"\n matTooltipClass=\"poc-header-tooltip\"><mat-icon>menu</mat-icon></button>\n <a class=\"navbar-brand me-auto\" href=\"#\">\n <img *ngIf=\"currentAppLogo\" [src]=\"currentAppLogo\" alt=\"App Logo\" class=\"app-logo\">\n </a>\n \n <!-- Apps button and menu items -->\n <ng-container *ngIf=\"template\" [ngTemplateOutlet]=\"template\"></ng-container>\n <button mat-icon-button *ngIf=\"(appList.length > 0)\" color=\"theme-white\"\n class=\"pmx-button pmx-menu-button icon-btn btn-switch-apps ms-1 me-1\" [class.menu-opened]=\"isAppsMenuOpen == true\"\n (menuOpened)=\"toggleMenu('apps')\" (menuClosed)=\"toggleMenu('apps')\" [matMenuTriggerFor]=\"apps\"\n matTooltip=\"Switch application\" matTooltipPosition=\"below\" aria-label=\"apps menu\"\n tabindex=\"0\">\n <mat-icon class=\"icon-arrow-down\">apps</mat-icon>\n </button>\n <mat-menu #apps=\"matMenu\" class=\"accounts_drpmenu pmx-menu-group header-dropdown-apps\" hasBackdrop=\"true\" xPosition=\"before\">\n <div class=\"popover-content show-menu\">\n <div class=\"popover-header\"><h3 class=\"popover-title\">Switch Application</h3></div>\n <div class=\"popover-body\">\n <div class=\"popover-content-title\">\n <p *ngIf=\"appList?.length == 1;else appsTitle\">Enabled Application</p>\n <ng-template #appsTitle><p>Enabled Applications</p></ng-template>\n </div>\n <ul cdkMenu class=\"list-group list-apps-group\">\n <li cdkMenuItem class=\"list-item list-app\" *ngFor=\"let app of appList;let i = index\" \n [ngClass]=\"(app?.active) ? 'app-active' : ''\">\n <button mat-menu-item class=\"pmx-button list-button\" (click)=\"appRedirect(app)\">\n <div class=\"app-icon-wrapper\"><img [src]=\"_domSanitizer.bypassSecurityTrustUrl(imageDataUrls.profetThumbnail )\" class=\"app-icon\"></div>\n <span class=\"list-text me-auto\">{{ app?.name }}</span>\n <small class=\"active-label\" *ngIf=\"(app?.active)\">Active</small>\n <small class=\"hover-label tooltip-label\" *ngIf=\"!(app?.active)\">Click to switch app</small>\n </button>\n </li>\n </ul>\n </div>\n </div>\n </mat-menu>\n \n <span class=\"vr vr-blury\"></span>\n <!-- Profile button and profile dropdown links -->\n <div class=\"btn-group\" role=\"group\" aria-label=\"Button group with profile info\" [ngClass]=\"(((currentCompany?.subDomain) && userCompanyLogo) ? 'branded-group-true' : 'branded-group-false') + ' ' + (isProfileMenuOpen ? 'btn-group-clicked' : '')\">\n <button class=\"pmx-button pmx-menu-button profile-button\" mat-button mat-stroked-button [matMenuTriggerFor]=\"menu\"\n color=\"primary\" (menuOpened)=\"toggleMenu('profile')\" (menuClosed)=\"toggleMenu('profile')\" [ngClass]=\"currentCompany?.subDomain ? 'branded-button-true' : 'branded-button-false'\" matTooltip=\"Profile Info\" matTooltipPosition=\"below\">\n <div class=\"profile-inner\">\n <div class=\"brand-logo align-self-center\" *ngIf=\"((currentCompany?.subDomain) && userCompanyLogo)\" [ngClass]=\"userCompanyLogo ? 'branded-logo-true' : 'branded-logo-false'\" [ngStyle]=\"{'background-image': 'url(' + userCompanyLogo + ')'}\"></div>\n <div class=\"avatar\">\n <img *ngIf=\"userImageLink;else defaultAvatar\" [src]=\"userImageLink\" class=\"avatar-image\" alt=\"Avatar\">\n <ng-template #defaultAvatar><img [src]=\"_domSanitizer.bypassSecurityTrustUrl(imageDataUrls.defaultUserImage)\" class=\"avatar-default\" alt=\"profile pic\"></ng-template>\n </div>\n </div>\n </button>\n </div>\n <mat-menu #menu=\"matMenu\" class=\"accounts_drpmenu pmx-menu-group header-dropdown-profile\" xPosition=\"before\">\n <div class=\"popover-content show-menu\">\n <div class=\"popover-header\">\n <div class=\"popover-user-top\">\n <div class=\"avatar-wrapper\">\n <div *ngIf=\"userImageLink;else defaultLargeAvatar\" [ngStyle]=\"{'background-image': 'url(' + userImageLink + ')'}\"\n class=\"avatar-icon\" alt=\"Avatar icon\">&nbsp;</div>\n <ng-template #defaultLargeAvatar>\n <div [ngStyle]=\"{'background-image': 'url(' + imageDataUrls.defaultUserImage + ')'}\" class=\"avatar-icon default-avatar\" alt=\"Avatar icon\">&nbsp;</div>\n </ng-template>\n </div>\n <div class=\"user-data\">\n <h3 class=\"profile-name\"><span *ngIf=\"userAuthData\">{{ userAuthData?.firstName }} {{ userAuthData?.lastName }}</span></h3>\n <button mat-button color=\"accent\" class=\"pmx-button btn btn-small view-profile ms-0\" (click)=\"profile()\">View Profile</button>\n </div>\n </div>\n </div>\n <div class=\"popover-body\">\n <div class=\"popover-content-title\"><p>Overview</p></div>\n <ul cdkMenu class=\"list-group list-overview\" *ngIf=\"currentCompany\">\n <li cdkMenuItem class=\"list-item\" *ngIf=\"userAuthData?.email\">\n <p mat-menu-item class=\"list-text list-text-email\">\n <mat-icon class=\"list-icon\">mail</mat-icon><span class=\"pmx-lower-case pmx-text-wrap me-auto\">{{ userAuthData?.email }}</span>\n </p>\n </li>\n <li cdkMenuItem class=\"list-item d-none\" *ngIf=\"userAuthData?.contactPhone\">\n <p mat-menu-item class=\"list-text\">\n <mat-icon class=\"list-icon\">call</mat-icon><span class=\"title-case me-auto\">{{ userAuthData?.contactPhone }}</span>\n </p>\n </li>\n <li cdkMenuItem class=\"list-item\" *ngIf=\"userAuthData?.address !== null\">\n <p mat-menu-item class=\"list-text\">\n <mat-icon class=\"list-icon\">location_on</mat-icon>\n <span class=\"title-case me-auto\">\n <small>{{ userAuthData?.address?.streetAddress }} {{(userAuthData?.address?.streetAddress2 !== null) ? userAuthData?.address?.streetAddress2 : '' }}</small><br />\n {{ userAuthData?.address?.city }} {{userAuthData?.address?.stateOrProvince }} {{userAuthData?.address?.postalCode }}\n </span>\n </p>\n </li>\n </ul>\n <hr />\n <div class=\"popover-content-title\">\n <p *ngIf=\"userCompanies?.length == 1;else companiesTitle\">Company</p>\n <ng-template #companiesTitle><p>Companies</p></ng-template>\n </div>\n <ul cdkMenu class=\"list-group list-group-companies\">\n <li cdkMenuItem class=\"list-item list-company\" *ngFor=\"let company of userCompanies\" [ngClass]=\"(company?.activeNow) ? 'list-active company-active' : ''\">\n <button mat-menu-item class=\"pmx-button list-button\" (click)=\"switchCompany(company)\" [matTooltip]=\"company?.name\"\n matTooltipPosition=\"below\">\n <mat-icon class=\"icon-check\">{{ (company?.activeNow) ? 'check_circle' : 'swap_vert' }}</mat-icon>\n <span class=\"list-text pmx-text-wrap me-auto\">{{ company?.name | titlecase }}</span>\n <small class=\"active-label\" *ngIf=\"(company?.activeNow)\">Active</small>\n </button>\n </li>\n </ul>\n <hr />\n <ul cdkMenu class=\"list-group last-group my-1\">\n <li cdkMenuItem class=\"list-item py-2\">\n <button mat-menu-item class=\"pmx-button list-button btn-logout\" (click)=\"onLogoutClick()\">\n <mat-icon>power_settings_new</mat-icon>\n <span class=\"list-text\">Logout</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n </mat-menu>\n</mat-toolbar>", styles: [".pmx-text-truncate{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pmx-text-wrap{overflow-wrap:break-word}.pmx-lower-case{text-transform:lowercase}.mat-mdc-button:not(:disabled){color:var(--mdc-text-button-label-text-color)}.mat-mdc-button.mat-accent{--mdc-text-button-label-text-color: #24a148;--mat-text-button-state-layer-color: #24a148;--mat-text-button-ripple-color: rgba(255, 64, 129, .1)}.header-user-name{text-align:end;color:#000}.header-user-name span{font-size:12px;color:#9e9e9ede}.avatarLogo{max-width:30px}mat-toolbar.mat-toolbar.common_header.mat-primary.mat-toolbar-single-row{position:absolute;left:0;top:0;background-color:#fff;height:56px}button.switchButton,button.menuHamberger{padding:8px!important}.sidenavPanel{padding:20px 25px;height:100vh;position:relative}ul.navbarList{padding-left:0;list-style:none;margin-top:40px}ul.navbarList li{color:#666;font-weight:400;margin-bottom:25px;width:170px;cursor:pointer}.active{color:#4177d6!important}ul.navbarList li img{width:23px;margin-right:15px}.accounts_drpmenu{margin-top:.7em}.xsShowUsername{display:none;padding:0 16px;height:48px;line-height:48px}.vr{width:2px;background-color:#f5f5f5;opacity:1;margin:0 .5rem 0 1rem}.vr-blury{background-image:linear-gradient(180deg,transparent,#666,transparent);width:1px;opacity:.25}.navbar-brand .app-logo{height:24px;width:auto}.pmx-button mat-icon.mat-icon,.pmx-button mat-icon.mat-primary,.pmx-button mat-icon.mat-accent,.pmx-button mat-icon.mat-warn{color:var(--mat-icon-color)}.pmx-button mat-icon.mat-icon{font-size:1.5rem!important;line-height:1.5;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;transition:transform .3s ease}.pmx-button.mdc-button--raised mat-icon.mat-icon{width:24px;height:24px;display:contents}.pmx-button.mat-mdc-button-base mat-icon.mat-icon{z-index:1}.pmx-button mat-icon.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}.pmx-button mat-icon.mdc-button span.button-text{display:inline-flex;padding:0 1rem;text-transform:uppercase;font-size:.875rem;line-height:1.5}.pmx-button mat-icon.mdc-button span.upper-case{text-transform:uppercase}.pmx-button.mdc-button,.pmx-button.mdc-icon-button,.pmx-button.mdc-button--outlined,.pmx-button.mdc-button .mat-mdc-button-touch-target,.pmx-button.mdc-icon-button .mat-mdc-button-touch-target{height:40px!important;font-size:.75rem!important;letter-spacing:.2px;padding:0 .5rem;line-height:normal}.pmx-button.mdc-icon-button,.pmx-button.icon-btn.mdc-button--outlined,.pmx-button.icon-btn.mdc-button--raised,.pmx-button.mdc-icon-button .mat-mdc-button-touch-target{width:40px;border-radius:5px}.pmx-button.btn-small.mdc-button,.pmx-button.btn-small.mdc-icon-button,.pmx-button.btn-small.mdc-button--outlined{height:28px!important;padding:0 1rem}.pmx-button.mdc-icon-button,.pmx-button.icon-btn.mdc-button--raised{color:#254d93}.pmx-header .icon-button-shadow{box-shadow:0 1px 3px #0003,0 0 #00000024,0 1px 3px #0000001f}.pmx-button.icon-btn.mdc-button--raised.btn-switch-apps.menu-opened,.pmx-button.icon-btn.mdc-button--outlined.btn-switch-apps.menu-opened{background-color:#254d93;color:#fff;font-variation-settings:\"FILL\" 0,\"wght\" 200,\"GRAD\" 0,\"opsz\" 24}.pmx-button.mdc-icon-button.pmx-menu-button:hover,.pmx-button.mat-mdc-outlined-button.btn-switch-apps:hover,.pmx-button.icon-btn.mdc-button--outlined.btn-switch-apps:hover{background-color:#e5f3fb}.pmx-button.icon-app{width:20px}.pmx-button.mat-mdc-outlined-button,.pmx-button.mat-mdc-outlined-button:not(:disabled){background-color:#fff;overflow:hidden}.pmx-button.pmx-menu-button.profile-button.mat-mdc-outlined-button{padding:0;border-color:#bfdff7!important}.btn-group-clicked .pmx-button.pmx-menu-button.profile-button.mat-mdc-outlined-button{border-color:#bfdff7!important}.pmx-button.profile-button .profile-inner{border:0 solid transparent!important;display:flex;align-items:center;overflow:clip}.pmx-button.profile-button .avatar{width:38px;height:38px;box-sizing:border-box;border:3px #ffffff solid!important;border-radius:50%;overflow:hidden;display:flex;flex-direction:column;justify-content:center;align-content:center;align-items:center;flex-wrap:wrap}.pmx-button.profile-button .avatar{background-color:#9cd7a8}.pmx-button.profile-button .avatar img.avatar-image,.pmx-button.profile-button .avatar img.avatar-default{width:100%;height:auto}.branded-group-false{margin-left:.65rem}.branded-group-false .pmx-button.pmx-menu-button.profile-button.branded-button-false{width:40px;border-radius:20px!important}.branded-group-true{margin-left:.65rem;border-radius:20px;border:1px solid #bfdff7}.btn-group-clicked.branded-group-true{background-color:#99ccf2}.branded-group-true .pmx-button.profile-button .profile-inner{border:0 solid #c4c9d2!important}.branded-group-true .pmx-button.pmx-menu-button.profile-button.branded-button-true{border-radius:20px}.branded-group-true .pmx-button.profile-button.branded-button-true .profile-inner .branded-logo-true{border-radius:5px;display:block;position:relative;height:38px;background-size:100%;background-position:center;background-repeat:no-repeat;min-width:100px;margin-right:1rem}.pmx-menu-group.mat-mdc-menu-panel{margin-top:1rem}.header-dropdown-apps.mat-mdc-menu-panel .mat-mdc-menu-content,.header-dropdown-profile.mat-mdc-menu-panel .mat-mdc-menu-content{padding:0!important}.header-dropdown-apps{width:400px!important}.header-dropdown-apps.mat-mdc-menu-panel .list-button{padding:.5rem 2rem}.header-dropdown-apps.mdc-menu-surface--open,.header-dropdown-profile.mdc-menu-surface--open{position:absolute;z-index:1;top:0;right:0;margin:0;padding:0;border:1px solid #e5e5e5;border-radius:6px;background:#fff;animation:popover .2s ease-in-out}.header-dropdown-apps.mat-mdc-menu-panel.mat-mdc-menu-panel{max-width:400px!important;width:400px!important;overflow:visible}.header-dropdown-profile.mat-mdc-menu-panel.mat-mdc-menu-panel{max-width:408px!important;width:408px!important;overflow:visible}.popover-content:after,.popover-content:before{font-size:1.4em;display:block;width:0;height:0;content:\"\";pointer-events:none;position:absolute;top:-.45em}.popover-content:before{border-right:10px solid transparent;border-bottom:10px solid #999;border-left:10px solid transparent;right:.97em}.popover-content:after{border-right:12px solid transparent;border-bottom:12px solid #d5e3fa;border-left:12px solid transparent;right:.9em}.popover-content-title{display:flex;align-items:center;justify-content:flex-start;overflow:hidden;padding:0 1rem;min-height:40px}.popover-content-title p{margin:0;font-size:.75rem!important;color:#777}.popover-content .popover-user-top:after{clear:both;content:\"\";display:table}.popover-content .popover-user-top{display:flex;flex-flow:row;justify-content:flex-start;align-items:center}.popover-content .popover-user-top .avatar-wrapper{flex:0 4 auto;border-radius:100%;overflow-clip-margin:content-box;overflow:clip;background-color:#fff;padding:2px}.drop-shadow{filter:drop-shadow(0px 0px 3px rgba(0,0,0,.5))}.popover-content .popover-user-top .user-data{flex:1 0 auto;margin-left:1rem}.popover-content .popover-user-top .avatar-wrapper .avatar-icon{background-repeat:no-repeat;background-size:100%;background-position:center;width:64px;height:64px;background-color:#72c885}.avatar-icon.default-avatar{background-size:100%}.popover-content .popover-user-top .user-data h3.profile-name{font-size:1rem;text-overflow:ellipsis;margin-bottom:.5rem;line-height:normal;font-weight:600;color:#254d93}.btn.view-profile{background:#fafafa;color:#254d93}.popover-content ul.list-group{padding:0 0 8px;margin:0;display:flex;list-style:none}.popover-content ul.list-group.last-group,.popover-content ul.list-group.last-group .list-item{background-color:transparent}.popover-content ul.list-group li.list-item{align-items:center;border:none;padding:0;width:100%;display:flex;flex-direction:row;flex-wrap:wrap;order:1}.popover-content ul.list-group li.list-item .list-button{padding:.5rem 2rem;min-height:40px}.popover-content ul.list-group li.list-item span.mat-mdc-menu-item-text,.popover-content ul.list-group li.list-item span.mdc-list-item__primary-text,.popover-content ul.list-group li.list-item .list-button>span{display:flex;align-items:center}.popover-content ul.list-group li.list-item.list-company .list-button>span{width:100%;overflow:hidden}.popover-content ul.list-group li.list-item .list-button .hover-label.tooltip-label{opacity:0}.popover-content ul.list-group li.list-item.list-app .list-button:hover>span .hover-label.tooltip-label,.popover-content ul.list-group li.list-item.list-company .list-button:hover>span .hover-label.tooltip-label{opacity:0;display:inline-flex;color:#fff;background-color:#616161;font-size:11px;border-radius:4px;padding:0 .5rem;transition:opacity .3s ease-out}.popover-content ul.list-group li.list-item .list-button:hover{background:rgba(0,0,0,.04)}.popover-content ul.list-group li.list-item.company-active,.popover-content ul.list-group li.list-item.app-active{cursor:not-allowed;pointer-events:none;order:0}.popover-content ul.list-group li.list-item.company-active .active-label,.popover-content ul.list-group li.list-item.app-active .active-label{background-color:#93c47d;color:#212121;padding:0 .5rem;border-radius:50px;font-size:.75rem;margin-left:.5rem}.popover-content ul.list-group.list-apps-group{display:flex}.popover-content ul.list-group.list-overview li.list-item{cursor:not-allowed;pointer-events:none}.popover-content ul.list-group li.list-item p.list-text{padding:.5rem 2rem;margin:0;min-height:auto}.popover-content ul.list-group li.list-item .list-button .mat-icon,.popover-content ul.list-group li.list-item p.list-text mat-icon.list-icon,.popover-content ul.list-group li.list-item .list-button .list-icon,.popover-content ul.list-group li.list-item p.list-text .list-icon{color:#2db051;font-variation-settings:\"FILL\" 0,\"wght\" 200,\"GRAD\" 0,\"opsz\" 24;font-size:24px!important}.popover-content ul.list-group li.list-item.list-active.company-active button.list-button .mat-icon{color:#2db051;font-variation-settings:\"FILL\" 1,\"wght\" 300,\"GRAD\" 0,\"opsz\" 24}.popover-content ul.list-group li.list-item p.list-text span.mdc-list-item__primary-text{width:100%;display:flex}.popover-content ul.list-group li.list-item span.title-case,.popover-content ul.list-group li.list-item span.lower-case,.popover-content ul.list-group li.list-item span.pmx-lower-case{font-size:.8rem;color:#212121;font-weight:500;display:block;line-height:normal}small{color:#9e9e9e}.popover-content ul.list-group li.list-item span.text-label{font-size:12px;color:#979797;font-weight:400;display:block;line-height:normal}.popover-content ul.list-group li.list-item .list-text,.popover-content ul.list-group li.list-item .list-text span.mat-mdc-menu-item-text{font-size:.875rem;color:#0a152f;font-weight:500;line-height:normal}.popover-content ul.list-group li.list-item .list-text.list-text-email span.mat-mdc-menu-item-text{width:calc(100% - 40px);display:inline-flex}.popover-content ul.list-group li.list-item .list-text.list-text-email span.pmx-text-wrap{overflow-wrap:break-word;word-wrap:break-word;-webkit-hyphens:none;hyphens:none;width:100%}.popover-content ul.list-group li.list-item span.upper-case{text-transform:uppercase}.popover-content ul.list-group li.list-item span.app-status,.popover-content ul.list-group li.list-item .mat-mdc-chip-option.chip-status{font-size:13px;color:#0a152f;font-weight:400;display:block;line-height:normal;margin:0}.popover-content ul.list-group li.list-item.app-active .list-text,.popover-content ul.list-group li.list-item.company-active .list-text{color:#4b85ea}.popover-content ul.list-group li.list-item.app-active span.app-status,.popover-content ul.list-group li.list-item.app-active .mat-mdc-chip-option.chip-status,.popover-content ul.list-group li.list-item.company-active span.app-status,.popover-content ul.list-group li.list-item.company-active .mat-mdc-chip-option.chip-status{color:#24a53f}.popover-content ul.list-group li.list-item .mat-mdc-chip-option.chip-status{display:flex;flex-direction:row;justify-content:flex-start}.popover-content ul.list-group li.list-item .mat-mdc-chip-option.chip-status.mdc-evolution-chip--selected{transition:all .3s ease-out;margin-left:auto;flex:1;justify-content:flex-end}.popover-content ul.list-group li.list-item.app-active .mat-mdc-chip-option.chip-status.mdc-evolution-chip--selected,.popover-content ul.list-group li.list-item.company-active .mat-mdc-chip-option.chip-status.mdc-evolution-chip--selected{background-color:#408dd7;color:#f5f5f5}.popover-content ul.list-group li.list-item .mat-mdc-standard-chip .mat-mdc-chip-action-label{font-size:.75rem}.popover-content ul.list-group li.list-item .mat-mdc-standard-chip{height:24px}.popover-content ul.list-group li.list-item img.logo-thumb{width:24px;height:auto;margin-right:1rem}.popover-content ul.list-group li.list-item .list-button.btn-logout{display:flex;align-items:center;color:#616161}.popover-content ul.list-group li.list-item.app-active .list-button .app-icon-wrapper{background-color:#fff;border-color:#4b85ea;border-width:3px}.popover-content ul.list-group li.list-item.company-active .list-text .mat-icon{font-variation-settings:\"FILL\" 1,\"wght\" 200,\"GRAD\" 0,\"opsz\" 24;color:var(--themelightblue)}.popover-content ul.list-group li.list-item .list-button.btn-logout .list-text{color:#616161}.popover-content ul.list-group li.list-item.app-active button,.popover-content ul.list-group li.list-item.company-active button{cursor:not-allowed;pointer-events:none}.popover-content hr{background-color:#c4c9d2;margin:0;width:100%;border:0;border-top:1px solid #c4c9d2;opacity:1}.popover-content ul.apps-grid{width:100%;white-space:nowrap;overflow:auto}.popover-content ul.apps-grid li.list-item,.popover-content ul.apps-grid li.list-item img.logo-thumb{display:flex;justify-content:flex-start;flex-wrap:nowrap;align-content:center;align-items:center;flex-direction:row}.popover-header{background-color:#d5e3fa;border-bottom:1px solid #d8d8d8;padding:.975rem 1rem;margin-bottom:0;display:flex;flex-direction:row;align-content:center;justify-content:flex-start;align-items:center;flex-wrap:wrap}.popover-header .mat-icon{font-size:1.5rem!important;font-variation-settings:\"FILL\" 1,\"wght\" 500,\"GRAD\" 0,\"opsz\" 24;color:#254d93}.header-dropdown-profile .popover-header{padding:1.125rem 1rem}.popover-header h3.popover-title{font-size:1rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin-bottom:0;line-height:normal;font-weight:500;color:#254d93}.popover-body{max-height:420px;overflow:auto;padding:0}.app-icon-wrapper{margin:0 1rem 0 0;max-width:48px;max-height:48px;width:48px;height:48px;overflow:hidden;background-size:70%;background-repeat:no-repeat;background-position:center;border:1px solid #c4c9d2;border-radius:8px;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;flex-wrap:wrap}.app-icon-wrapper img.app-icon{width:100%;height:auto;overflow:hidden;padding:.5rem}h4.app-name{font-size:.65rem;margin:.5rem 0 0;line-height:normal;color:#254d93;font-weight:400;text-transform:uppercase}.popover-body ul.enabled-apps{display:flex;flex-flow:column wrap;justify-content:space-evenly;align-items:center;align-content:flex-start;border-bottom:1px solid #E9E9E9;margin:0;padding:0 1rem;list-style:none}.popover-body ul.enabled-apps li.enabled-app{flex-grow:1;flex:0 1 auto;text-align:center;font-size:.8125rem;padding:10px;list-style:none}.pmx-button.mdc-icon-button[color=theme-white],.pmx-button.icon-btn.mdc-button--raised[color=theme-white]{color:#254d93}.pmx-button.icon-btn.orders-menu[color=theme-white]{border:1px solid #fafafa!important}:host(.mat-accent){--mat-slider-ripple-color: #24a148;--mat-slider-hover-state-layer-color: rgba(255, 64, 129, .05);--mat-slider-focus-state-layer-color: rgba(255, 64, 129, .2);--mdc-slider-handle-color: #24a148;--mdc-slider-focus-handle-color: #24a148;--mdc-slider-hover-handle-color: #24a148;--mdc-slider-active-track-color: #24a148;--mdc-slider-inactive-track-color: #24a148;--mdc-slider-with-tick-marks-inactive-container-color: #24a148;--mdc-slider-with-tick-marks-active-container-color: #51bc6b}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i1.TitleCasePipe, name: "titlecase" }], encapsulation: i0.ViewEncapsulation.None });
272
+ HeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: HeaderComponent, selector: "lib-header", inputs: { template: "template" }, outputs: { infoEvent: "infoEvent" }, viewQueries: [{ propertyName: "sidenav", first: true, predicate: ["sidenav"], descendants: true }], ngImport: i0, template: "<!-- <button mat-icon-button color=\"theme-white\" (click)=\"sidenav.toggle()\">Menu</button> -->\n<mat-sidenav-container class=\"main-container\">\n <mat-sidenav cdkMenuBar #sidenav mode=\"over\" class=\"sidenavDrawer\">\n <div class=\"drawerHeadLogo\"><img [src]=\"_domSanitizer.bypassSecurityTrustUrl(imageDataUrls.profetLogo)\"></div>\n <!-- <ng-container *ngFor=\"let appType of menuInfo | keyvalue\">\n <img *ngIf=\"appConfig[appType.key]?.appLogoUri\"\n [src]=\"_domSanitizer.bypassSecurityTrustUrl(appConfig[appType.key]?.appLogoUri)\"\n style=\"height: 20px; padding: 5px;\">\n <div class=\"subHeadListItems\">\n <ng-container *ngFor=\"let item of appType.value\">\n <mat-list-item (click)=\"menuSelection(item)\"\n [ngClass]=\"{'active-menu': item | activeRoute : _router.url:_headerSer.headerConfig.appType}\">\n <mat-icon class=\"menuIconList\" *ngIf=\"item.icon\">{{ item.icon }}</mat-icon>\n <span>{{ item.menuName }}</span>\n </mat-list-item>\n </ng-container>\n </div>\n\n </ng-container> -->\n <ng-container *ngFor=\"let app of groupedMenu\">\n <!-- <h3 mat-subheader>{{ appType.key }}</h3> -->\n <div class=\"appList\">\n <img *ngIf=\"appConfig[app.appType]?.appLogoUri\"\n [src]=\"_domSanitizer.bypassSecurityTrustUrl(appConfig[app.appType]?.appLogoUri)\">\n </div>\n\n <ng-container *ngFor=\"let group of app.groups\">\n <ng-container *ngIf=\"group.groupBy == '_ungrouped'; else grouped\">\n <div class=\"subHeadListItems\">\n <ng-container *ngFor=\"let menu of group.items\">\n <mat-list-item (click)=\"menuSelection(menu)\"\n [ngClass]=\"{'active-menu': menu | activeRoute : _router.url:_headerSer.headerConfig.appType}\">\n <mat-icon class=\"menuIconList\" *ngIf=\"menu.icon\">{{ menu.icon }}</mat-icon>\n <span>{{ menu.menuName }}</span>\n </mat-list-item>\n </ng-container>\n </div>\n </ng-container>\n <ng-template #grouped>\n <div class=\"subHeadListItems subHeadInnerItem\">\n <mat-list-item>{{ group.groupBy }}</mat-list-item>\n <ng-container *ngFor=\"let menu of group.items\">\n <mat-list-item class=\"menusubItems\" (click)=\"menuSelection(menu)\"\n [ngClass]=\"{'active-menu': menu | activeRoute : _router.url:_headerSer.headerConfig.appType}\">\n <mat-icon class=\"menuIconList\" *ngIf=\"menu.icon\">{{ menu.icon }}</mat-icon>\n <span>{{ menu.menuName }}</span>\n </mat-list-item>\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n </ng-container>\n </mat-sidenav>\n\n</mat-sidenav-container>\n<mat-toolbar cdkMenuBar color=\"primary\" class=\"header-wrapper common_header shadow-sm\">\n <!-- Main nav button and navigation links -->\n <button mat-icon-button color=\"theme-white\" (click)=\"sidenav.toggle()\"\n class=\"pmx-button pmx-menu-button orders-menu icon-btn ms-0 me-3\" aria-label=\"main menu\" tabindex=\"0\"\n matTooltip=\"Main menu\" matTooltipPosition=\"below\"\n matTooltipClass=\"poc-header-tooltip\"><mat-icon>menu</mat-icon></button>\n <a class=\"navbar-brand me-auto\" href=\"#\">\n <img [src]=\"_domSanitizer.bypassSecurityTrustUrl(appConfig[_headerSer.headerConfig.appType]?.appLogoUri)\"\n alt=\"App Logo\" class=\"app-logo\">\n </a>\n\n <!-- TODO remove comment -->\n <!-- <ng-container *ngIf=\"template\" [ngTemplateOutlet]=\"template\"></ng-container> -->\n <ng-content></ng-content>\n\n <mat-form-field appearance=\"outline\" class=\"switchCompanyField\">\n <mat-label>Select Company</mat-label>\n <mat-select [formControl]=\"companyControl\" (selectionChange)=\"switchCompany($event)\">\n <mat-option *ngFor=\"let opt of companyList\" [value]=\"opt\">\n {{opt.name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n\n <!-- Profile button and profile dropdown links -->\n <button class=\"pmx-button pmx-menu-button profile-button\" mat-button mat-stroked-button [matMenuTriggerFor]=\"menu\"\n color=\"primary\" matTooltipPosition=\"below\">\n <div class=\"profile-inner\">\n <div class=\"brand-logo align-self-center\" *ngIf=\"activeCompany?.logo\"\n [ngClass]=\"activeCompany?.logo ? 'branded-logo-true' : 'branded-logo-false'\"\n [ngStyle]=\"{'background-image': 'url(' + activeCompany?.logo + ')'}\"></div>\n <div class=\"avatar\">\n <img *ngIf=\"userImageLink;else defaultAvatar\" [src]=\"userImageLink\" class=\"avatar-image\" alt=\"Avatar\">\n <ng-template #defaultAvatar><img\n [src]=\"_domSanitizer.bypassSecurityTrustUrl(imageDataUrls.defaultUserImage)\"\n class=\"avatar-default\" alt=\"profile pic\"></ng-template>\n </div>\n </div>\n </button>\n <mat-menu #menu=\"matMenu\" class=\"accounts_drpmenu pmx-menu-group header-dropdown-profile\" xPosition=\"before\">\n <div class=\"popover-content show-menu\">\n <div class=\"popover-header\">\n <div class=\"popover-user-top\">\n <div class=\"avatar-wrapper\">\n <img *ngIf=\"userImageLink;else defaultLargeAvatar\" [src]=\"userImageLink\" class=\"avatar-icon\"\n alt=\"Avatar\">\n <ng-template #defaultLargeAvatar>\n <div [ngStyle]=\"{'background-image': 'url(' + imageDataUrls.defaultUserImage + ')'}\"\n class=\"avatar-icon default-avatar\" alt=\"Avatar icon\">&nbsp;</div>\n </ng-template>\n </div>\n <div class=\"user-data\">\n <h3 class=\"profile-name\"><span *ngIf=\"userAuthData\">{{ userAuthData?.firstName }} {{\n userAuthData?.lastName }}</span></h3>\n <button mat-button color=\"accent\" class=\"pmx-button btn btn-small view-profile ms-0\"\n (click)=\"profile()\">View Profile</button>\n </div>\n </div>\n </div>\n <div class=\"popover-body\">\n <div class=\"popover-content-title\">\n <p>Overview</p>\n </div>\n\n <div *ngIf=\"userAuthData?.email\">\n <p mat-menu-item class=\"list-text list-text-email\">\n <mat-icon class=\"list-icon\">mail</mat-icon><span class=\"pmx-lower-case pmx-text-wrap me-auto\">{{\n userAuthData?.email }}</span>\n </p>\n </div>\n <ng-container *ngIf=\"userAuthData?.contactPhone\">\n <p mat-menu-item class=\"list-text\">\n <mat-icon class=\"list-icon\">call</mat-icon><span class=\"title-case me-auto\">{{\n userAuthData?.contactPhone }}</span>\n </p>\n </ng-container>\n\n <!-- <ul cdkMenu class=\"list-group list-overview\" *ngIf=\"currentCompany\">\n\n \n <li cdkMenuItem class=\"list-item\" *ngIf=\"userAuthData?.address !== null\">\n <p mat-menu-item class=\"list-text\">\n <mat-icon class=\"list-icon\">location_on</mat-icon>\n <span class=\"title-case me-auto\">\n <small>{{ userAuthData?.address?.streetAddress }}\n {{(userAuthData?.address?.streetAddress2 !== null) ?\n userAuthData?.address?.streetAddress2 : '' }}</small><br />\n {{ userAuthData?.address?.city }} {{userAuthData?.address?.stateOrProvince }}\n {{userAuthData?.address?.postalCode }}\n </span>\n </p>\n </li>\n </ul> -->\n <hr />\n <ul cdkMenu class=\"list-group last-group my-1\">\n <li cdkMenuItem class=\"list-item py-2\">\n <button mat-menu-item class=\"pmx-button list-button btn-logout\" (click)=\"onLogoutClick()\">\n <mat-icon>power_settings_new</mat-icon>\n <span class=\"list-text\">Logout</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n </mat-menu>\n</mat-toolbar>", styles: [".pmx-text-truncate{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pmx-text-wrap{overflow-wrap:break-word}.pmx-lower-case{text-transform:lowercase}.mat-mdc-button:not(:disabled){color:var(--mdc-text-button-label-text-color)}.mat-mdc-button.mat-accent{--mdc-text-button-label-text-color: #24a148;--mat-text-button-state-layer-color: #24a148;--mat-text-button-ripple-color: rgba(255, 64, 129, .1)}.header-user-name{text-align:end;color:#000}.header-user-name span{font-size:12px;color:#9e9e9ede}.avatarLogo{max-width:30px}mat-toolbar.mat-toolbar.common_header.mat-primary.mat-toolbar-single-row{position:fixed;left:0;top:0;background-color:#fff;height:56px;z-index:9}button.switchButton,button.menuHamberger{padding:8px!important}.sidenavPanel{padding:20px 25px;height:100vh;position:relative}ul.navbarList{padding-left:0;list-style:none;margin-top:40px}ul.navbarList li{color:#666;font-weight:400;margin-bottom:25px;width:170px;cursor:pointer}.active{color:#4177d6!important}ul.navbarList li img{width:23px;margin-right:15px}.accounts_drpmenu{margin-top:.7em}.xsShowUsername{display:none;padding:0 16px;height:48px;line-height:48px}.vr{width:2px;background-color:#f5f5f5;opacity:1;margin:0 .5rem 0 1rem}.vr-blury{background-image:linear-gradient(180deg,transparent,#666,transparent);width:1px;opacity:.25}.navbar-brand .app-logo{height:20px;width:auto}.pmx-button mat-icon.mat-icon,.pmx-button mat-icon.mat-primary,.pmx-button mat-icon.mat-accent,.pmx-button mat-icon.mat-warn{color:var(--mat-icon-color)}.pmx-button mat-icon.mat-icon{font-size:1.5rem!important;line-height:1.5;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;transition:transform .3s ease}.pmx-button.mdc-button--raised mat-icon.mat-icon{width:24px;height:24px;display:contents}.pmx-button.mat-mdc-button-base mat-icon.mat-icon{z-index:1}.pmx-button mat-icon.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}.pmx-button mat-icon.mdc-button span.button-text{display:inline-flex;padding:0 1rem;text-transform:uppercase;font-size:.875rem;line-height:1.5}.pmx-button mat-icon.mdc-button span.upper-case{text-transform:uppercase}.pmx-button.mdc-button,.pmx-button.mdc-icon-button,.pmx-button.mdc-button--outlined,.pmx-button.mdc-button .mat-mdc-button-touch-target,.pmx-button.mdc-icon-button .mat-mdc-button-touch-target{height:40px!important;font-size:.75rem!important;letter-spacing:.2px;padding:0 .5rem;line-height:normal}.pmx-button.mdc-icon-button,.pmx-button.icon-btn.mdc-button--outlined,.pmx-button.icon-btn.mdc-button--raised,.pmx-button.mdc-icon-button .mat-mdc-button-touch-target{width:40px;border-radius:5px}.pmx-button.btn-small.mdc-button,.pmx-button.btn-small.mdc-icon-button,.pmx-button.btn-small.mdc-button--outlined{height:28px!important;padding:0 1rem}.pmx-button.mdc-icon-button,.pmx-button.icon-btn.mdc-button--raised{color:#254d93}.pmx-header .icon-button-shadow{box-shadow:0 1px 3px #0003,0 0 #00000024,0 1px 3px #0000001f}.pmx-button.icon-btn.mdc-button--raised.btn-switch-apps.menu-opened,.pmx-button.icon-btn.mdc-button--outlined.btn-switch-apps.menu-opened{background-color:#254d93;color:#fff;font-variation-settings:\"FILL\" 0,\"wght\" 200,\"GRAD\" 0,\"opsz\" 24}.pmx-button.mdc-icon-button.pmx-menu-button:hover,.pmx-button.mat-mdc-outlined-button.btn-switch-apps:hover,.pmx-button.icon-btn.mdc-button--outlined.btn-switch-apps:hover{background-color:#e5f3fb}.pmx-button.icon-app{width:20px}.pmx-button.mat-mdc-outlined-button,.pmx-button.mat-mdc-outlined-button:not(:disabled){background-color:#fff;overflow:hidden}.pmx-button.pmx-menu-button.profile-button.mat-mdc-outlined-button{padding:0;border-color:#bfdff7!important}.btn-group-clicked .pmx-button.pmx-menu-button.profile-button.mat-mdc-outlined-button{border-color:#bfdff7!important}.pmx-button.profile-button .profile-inner{border:0 solid transparent!important;display:flex;align-items:center;overflow:clip}.pmx-button.profile-button .avatar{width:38px;height:38px;box-sizing:border-box;border:3px #ffffff solid!important;border-radius:50%;overflow:hidden;display:flex;flex-direction:column;justify-content:center;align-content:center;align-items:center;flex-wrap:wrap}.pmx-button.profile-button .avatar{background-color:#9cd7a8}.pmx-button.profile-button .avatar img.avatar-image,.pmx-button.profile-button .avatar img.avatar-default{width:100%;height:auto}.branded-group-false{margin-left:.65rem}.branded-group-false .pmx-button.pmx-menu-button.profile-button.branded-button-false{width:40px;border-radius:20px!important}.branded-group-true{margin-left:.65rem;border-radius:20px;border:1px solid #bfdff7}.btn-group-clicked.branded-group-true{background-color:#99ccf2}.branded-group-true .pmx-button.profile-button .profile-inner{border:0 solid #c4c9d2!important}.branded-group-true .pmx-button.pmx-menu-button.profile-button.branded-button-true{border-radius:20px}.branded-group-true .pmx-button.profile-button.branded-button-true .profile-inner .branded-logo-true{border-radius:5px;display:block;position:relative;height:38px;background-size:100%;background-position:center;background-repeat:no-repeat;min-width:100px;margin-right:1rem}.pmx-menu-group.mat-mdc-menu-panel{margin-top:1rem}.header-dropdown-apps.mat-mdc-menu-panel .mat-mdc-menu-content,.header-dropdown-profile.mat-mdc-menu-panel .mat-mdc-menu-content{padding:0!important}.header-dropdown-apps{width:400px!important}.header-dropdown-apps.mat-mdc-menu-panel .list-button{padding:.5rem 2rem}.header-dropdown-apps.mdc-menu-surface--open,.header-dropdown-profile.mdc-menu-surface--open{position:absolute;z-index:1;top:0;right:0;margin:0;padding:0;border:1px solid #e5e5e5;border-radius:6px;background:#fff;animation:popover .2s ease-in-out}.header-dropdown-apps.mat-mdc-menu-panel.mat-mdc-menu-panel{max-width:400px!important;width:400px!important;overflow:visible}.header-dropdown-profile.mat-mdc-menu-panel.mat-mdc-menu-panel{max-width:408px!important;width:408px!important;overflow:visible}.popover-content:after,.popover-content:before{font-size:1.4em;display:block;width:0;height:0;content:\"\";pointer-events:none;position:absolute;top:-.45em}.popover-content:before{border-right:10px solid transparent;border-bottom:10px solid #999;border-left:10px solid transparent;right:.97em}.popover-content:after{border-right:12px solid transparent;border-bottom:12px solid #d5e3fa;border-left:12px solid transparent;right:.9em}.popover-content-title{display:flex;align-items:center;justify-content:flex-start;overflow:hidden;padding:0 1rem;min-height:40px}.popover-content-title p{margin:0;font-size:.75rem!important;color:#777}.popover-content .popover-user-top:after{clear:both;content:\"\";display:table}.popover-content .popover-user-top{display:flex;flex-flow:row;justify-content:flex-start;align-items:center}.popover-content .popover-user-top .avatar-wrapper{flex:0 4 auto;border-radius:100%;overflow-clip-margin:content-box;overflow:clip;background-color:#fff;padding:2px}.drop-shadow{filter:drop-shadow(0px 0px 3px rgba(0,0,0,.5))}.popover-content .popover-user-top .user-data{flex:1 0 auto;margin-left:1rem}.popover-content .popover-user-top .avatar-wrapper .avatar-icon{background-repeat:no-repeat;background-size:100%;background-position:center;width:64px;height:64px;background-color:#72c885}.avatar-icon.default-avatar{background-size:100%}.popover-content .popover-user-top .user-data h3.profile-name{font-size:1rem;text-overflow:ellipsis;margin-bottom:.5rem;line-height:normal;font-weight:600;color:#254d93}.btn.view-profile{background:#fafafa;color:#254d93}.popover-content ul.list-group{padding:0 0 8px;margin:0;display:flex;list-style:none}.popover-content ul.list-group.last-group,.popover-content ul.list-group.last-group .list-item{background-color:transparent}.popover-content ul.list-group li.list-item{align-items:center;border:none;padding:0;width:100%;display:flex;flex-direction:row;flex-wrap:wrap;order:1}.popover-content ul.list-group li.list-item .list-button{padding:.5rem 1rem;min-height:40px}.popover-content ul.list-group li.list-item span.mat-mdc-menu-item-text,.popover-content ul.list-group li.list-item span.mdc-list-item__primary-text,.popover-content ul.list-group li.list-item .list-button>span{display:flex;align-items:center}.popover-content ul.list-group li.list-item.list-company .list-button>span{width:100%;overflow:hidden}.popover-content ul.list-group li.list-item .list-button .hover-label.tooltip-label{opacity:0}.popover-content ul.list-group li.list-item.list-app .list-button:hover>span .hover-label.tooltip-label,.popover-content ul.list-group li.list-item.list-company .list-button:hover>span .hover-label.tooltip-label{opacity:0;display:inline-flex;color:#fff;background-color:#616161;font-size:11px;border-radius:4px;padding:0 .5rem;transition:opacity .3s ease-out}.popover-content ul.list-group li.list-item .list-button:hover{background:rgba(0,0,0,.04)}.popover-content ul.list-group li.list-item.company-active,.popover-content ul.list-group li.list-item.app-active{cursor:not-allowed;pointer-events:none;order:0}.popover-content ul.list-group li.list-item.company-active .active-label,.popover-content ul.list-group li.list-item.app-active .active-label{background-color:#93c47d;color:#212121;padding:0 .5rem;border-radius:50px;font-size:.75rem;margin-left:.5rem}.popover-content ul.list-group.list-apps-group{display:flex}.popover-content ul.list-group.list-overview li.list-item{cursor:not-allowed;pointer-events:none}.popover-content ul.list-group li.list-item p.list-text{padding:.5rem 2rem;margin:0;min-height:auto}.popover-content ul.list-group li.list-item .list-button .mat-icon,.popover-content ul.list-group li.list-item p.list-text mat-icon.list-icon,.popover-content ul.list-group li.list-item .list-button .list-icon,.popover-content ul.list-group li.list-item p.list-text .list-icon{color:#2db051;font-variation-settings:\"FILL\" 0,\"wght\" 200,\"GRAD\" 0,\"opsz\" 24;font-size:24px!important}.popover-content ul.list-group li.list-item.list-active.company-active button.list-button .mat-icon{color:#2db051;font-variation-settings:\"FILL\" 1,\"wght\" 300,\"GRAD\" 0,\"opsz\" 24}.popover-content ul.list-group li.list-item p.list-text span.mdc-list-item__primary-text{width:100%;display:flex}.popover-content ul.list-group li.list-item span.title-case,.popover-content ul.list-group li.list-item span.lower-case,.popover-content ul.list-group li.list-item span.pmx-lower-case{font-size:.8rem;color:#212121;font-weight:500;display:block;line-height:normal}small{color:#9e9e9e}.popover-content ul.list-group li.list-item span.text-label{font-size:12px;color:#979797;font-weight:400;display:block;line-height:normal}.popover-content ul.list-group li.list-item .list-text,.popover-content ul.list-group li.list-item .list-text span.mat-mdc-menu-item-text{font-size:.875rem;color:#0a152f;font-weight:500;line-height:normal}.popover-content ul.list-group li.list-item .list-text.list-text-email span.mat-mdc-menu-item-text{width:calc(100% - 40px);display:inline-flex}.popover-content ul.list-group li.list-item .list-text.list-text-email span.pmx-text-wrap{overflow-wrap:break-word;word-wrap:break-word;-webkit-hyphens:none;hyphens:none;width:100%}.popover-content ul.list-group li.list-item span.upper-case{text-transform:uppercase}.popover-content ul.list-group li.list-item span.app-status,.popover-content ul.list-group li.list-item .mat-mdc-chip-option.chip-status{font-size:13px;color:#0a152f;font-weight:400;display:block;line-height:normal;margin:0}.popover-content ul.list-group li.list-item.app-active .list-text,.popover-content ul.list-group li.list-item.company-active .list-text{color:#4b85ea}.popover-content ul.list-group li.list-item.app-active span.app-status,.popover-content ul.list-group li.list-item.app-active .mat-mdc-chip-option.chip-status,.popover-content ul.list-group li.list-item.company-active span.app-status,.popover-content ul.list-group li.list-item.company-active .mat-mdc-chip-option.chip-status{color:#24a53f}.popover-content ul.list-group li.list-item .mat-mdc-chip-option.chip-status{display:flex;flex-direction:row;justify-content:flex-start}.popover-content ul.list-group li.list-item .mat-mdc-chip-option.chip-status.mdc-evolution-chip--selected{transition:all .3s ease-out;margin-left:auto;flex:1;justify-content:flex-end}.popover-content ul.list-group li.list-item.app-active .mat-mdc-chip-option.chip-status.mdc-evolution-chip--selected,.popover-content ul.list-group li.list-item.company-active .mat-mdc-chip-option.chip-status.mdc-evolution-chip--selected{background-color:#408dd7;color:#f5f5f5}.popover-content ul.list-group li.list-item .mat-mdc-standard-chip .mat-mdc-chip-action-label{font-size:.75rem}.popover-content ul.list-group li.list-item .mat-mdc-standard-chip{height:24px}.popover-content ul.list-group li.list-item img.logo-thumb{width:24px;height:auto;margin-right:1rem}.popover-content ul.list-group li.list-item .list-button.btn-logout{display:flex;align-items:center;color:#616161}.popover-content ul.list-group li.list-item.app-active .list-button .app-icon-wrapper{background-color:#fff;border-color:#4b85ea;border-width:3px}.popover-content ul.list-group li.list-item.company-active .list-text .mat-icon{font-variation-settings:\"FILL\" 1,\"wght\" 200,\"GRAD\" 0,\"opsz\" 24;color:var(--themelightblue)}.popover-content ul.list-group li.list-item .list-button.btn-logout .list-text{color:#616161}.popover-content ul.list-group li.list-item.app-active button,.popover-content ul.list-group li.list-item.company-active button{cursor:not-allowed;pointer-events:none}.popover-content hr{background-color:#c4c9d2;margin:0;width:100%;border:0;border-top:1px solid #c4c9d2;opacity:1}.popover-content ul.apps-grid{width:100%;white-space:nowrap;overflow:auto}.popover-content ul.apps-grid li.list-item,.popover-content ul.apps-grid li.list-item img.logo-thumb{display:flex;justify-content:flex-start;flex-wrap:nowrap;align-content:center;align-items:center;flex-direction:row}.popover-header{background-color:#d5e3fa;border-bottom:1px solid #d8d8d8;padding:.975rem 1rem;margin-bottom:0;display:flex;flex-direction:row;align-content:center;justify-content:flex-start;align-items:center;flex-wrap:wrap}.popover-header .mat-icon{font-size:1.5rem!important;font-variation-settings:\"FILL\" 1,\"wght\" 500,\"GRAD\" 0,\"opsz\" 24;color:#254d93}.header-dropdown-profile .popover-header{padding:1.125rem 1rem}.popover-header h3.popover-title{font-size:1rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin-bottom:0;line-height:normal;font-weight:500;color:#254d93}.popover-body{max-height:420px;overflow:auto;padding:0}.app-icon-wrapper{margin:0 1rem 0 0;max-width:48px;max-height:48px;width:48px;height:48px;overflow:hidden;background-size:70%;background-repeat:no-repeat;background-position:center;border:1px solid #c4c9d2;border-radius:8px;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;flex-wrap:wrap}.app-icon-wrapper img.app-icon{width:100%;height:auto;overflow:hidden;padding:.5rem}h4.app-name{font-size:.65rem;margin:.5rem 0 0;line-height:normal;color:#254d93;font-weight:400;text-transform:uppercase}.popover-body ul.enabled-apps{display:flex;flex-flow:column wrap;justify-content:space-evenly;align-items:center;align-content:flex-start;border-bottom:1px solid #E9E9E9;margin:0;padding:0 1rem;list-style:none}.popover-body ul.enabled-apps li.enabled-app{flex-grow:1;flex:0 1 auto;text-align:center;font-size:.8125rem;padding:10px;list-style:none}.pmx-button.mdc-icon-button[color=theme-white],.pmx-button.icon-btn.mdc-button--raised[color=theme-white]{color:#254d93}.pmx-button.icon-btn.orders-menu[color=theme-white]{border:1px solid #fafafa!important}:host(.mat-accent){--mat-slider-ripple-color: #24a148;--mat-slider-hover-state-layer-color: rgba(255, 64, 129, .05);--mat-slider-focus-state-layer-color: rgba(255, 64, 129, .2);--mdc-slider-handle-color: #24a148;--mdc-slider-focus-handle-color: #24a148;--mdc-slider-hover-handle-color: #24a148;--mdc-slider-active-track-color: #24a148;--mdc-slider-inactive-track-color: #24a148;--mdc-slider-with-tick-marks-inactive-container-color: #24a148;--mdc-slider-with-tick-marks-active-container-color: #51bc6b}.mat-drawer-container.main-container{position:fixed!important;z-index:999}.mat-drawer-backdrop{position:fixed!important}.sidenavDrawer{position:fixed!important;left:0;min-width:200px;padding:15px 0}.mdc-list-group__subheader{background-color:#eef4ff;padding:5px 20px;margin-bottom:5px!important;font-size:14px!important;font-weight:500!important}.subHeadListItems .mat-mdc-list-item{display:block;cursor:pointer;color:#000;padding:0 10px 5px!important;border-radius:3px;transition:all .3s;margin-bottom:3px;font-size:12px}.subHeadListItems .mat-mdc-list-item:hover{background-color:#f5f5f5}.menusubItems{padding:0 10px 5px 30px!important}.subHeadListItems .mdc-list-item__content{position:relative;top:-2px}.switchCompanyField{min-width:190px!important;margin-left:15px}.profile-button{margin-left:10px}.brand-logo{width:100px;height:38px;background-repeat:no-repeat;background-size:contain;background-origin:content-box;padding:7px}.menuIconList{font-size:20px!important;margin-right:2px;top:10px;position:relative;color:#747474;font-weight:300}.subHeadListItems{margin-bottom:25px;padding:0 15px}.subHeadInnerItem{margin-bottom:0!important}.drawerHeadLogo{width:100%;padding:10px 20px;margin-bottom:20px}.drawerHeadLogo img{width:130px}.active-menu{background-color:#e0e0e0!important;color:#1976d2!important}.active-menu .menuIconList{color:#1976d2}.appList{padding:11px 15px;background-color:#eef4ff;margin-bottom:10px;height:35px;display:flex}.appList img{object-fit:contain}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i5.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i6.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i6.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i8.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "component", type: i9.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i9.MatLabel, selector: "mat-label" }, { kind: "component", type: i10.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i11.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i12.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i13.ActiveRoutePipe, name: "activeRoute" }], encapsulation: i0.ViewEncapsulation.None });
286
273
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: HeaderComponent, decorators: [{
287
274
  type: Component,
288
- args: [{ selector: 'lib-header', encapsulation: ViewEncapsulation.None, template: "<mat-toolbar cdkMenuBar color=\"primary\" [ngClass]=\"headerClass\" class=\"header-wrapper common_header shadow-sm\">\n <!-- Main nav button and navigation links -->\n <button mat-icon-button color=\"theme-white\" (click)=\"menuAction()\" class=\"pmx-button pmx-menu-button orders-menu icon-btn ms-0 me-3\"\n aria-label=\"main menu\" tabindex=\"0\" matTooltip=\"Main menu\" matTooltipPosition=\"below\"\n matTooltipClass=\"poc-header-tooltip\"><mat-icon>menu</mat-icon></button>\n <a class=\"navbar-brand me-auto\" href=\"#\">\n <img *ngIf=\"currentAppLogo\" [src]=\"currentAppLogo\" alt=\"App Logo\" class=\"app-logo\">\n </a>\n \n <!-- Apps button and menu items -->\n <ng-container *ngIf=\"template\" [ngTemplateOutlet]=\"template\"></ng-container>\n <button mat-icon-button *ngIf=\"(appList.length > 0)\" color=\"theme-white\"\n class=\"pmx-button pmx-menu-button icon-btn btn-switch-apps ms-1 me-1\" [class.menu-opened]=\"isAppsMenuOpen == true\"\n (menuOpened)=\"toggleMenu('apps')\" (menuClosed)=\"toggleMenu('apps')\" [matMenuTriggerFor]=\"apps\"\n matTooltip=\"Switch application\" matTooltipPosition=\"below\" aria-label=\"apps menu\"\n tabindex=\"0\">\n <mat-icon class=\"icon-arrow-down\">apps</mat-icon>\n </button>\n <mat-menu #apps=\"matMenu\" class=\"accounts_drpmenu pmx-menu-group header-dropdown-apps\" hasBackdrop=\"true\" xPosition=\"before\">\n <div class=\"popover-content show-menu\">\n <div class=\"popover-header\"><h3 class=\"popover-title\">Switch Application</h3></div>\n <div class=\"popover-body\">\n <div class=\"popover-content-title\">\n <p *ngIf=\"appList?.length == 1;else appsTitle\">Enabled Application</p>\n <ng-template #appsTitle><p>Enabled Applications</p></ng-template>\n </div>\n <ul cdkMenu class=\"list-group list-apps-group\">\n <li cdkMenuItem class=\"list-item list-app\" *ngFor=\"let app of appList;let i = index\" \n [ngClass]=\"(app?.active) ? 'app-active' : ''\">\n <button mat-menu-item class=\"pmx-button list-button\" (click)=\"appRedirect(app)\">\n <div class=\"app-icon-wrapper\"><img [src]=\"_domSanitizer.bypassSecurityTrustUrl(imageDataUrls.profetThumbnail )\" class=\"app-icon\"></div>\n <span class=\"list-text me-auto\">{{ app?.name }}</span>\n <small class=\"active-label\" *ngIf=\"(app?.active)\">Active</small>\n <small class=\"hover-label tooltip-label\" *ngIf=\"!(app?.active)\">Click to switch app</small>\n </button>\n </li>\n </ul>\n </div>\n </div>\n </mat-menu>\n \n <span class=\"vr vr-blury\"></span>\n <!-- Profile button and profile dropdown links -->\n <div class=\"btn-group\" role=\"group\" aria-label=\"Button group with profile info\" [ngClass]=\"(((currentCompany?.subDomain) && userCompanyLogo) ? 'branded-group-true' : 'branded-group-false') + ' ' + (isProfileMenuOpen ? 'btn-group-clicked' : '')\">\n <button class=\"pmx-button pmx-menu-button profile-button\" mat-button mat-stroked-button [matMenuTriggerFor]=\"menu\"\n color=\"primary\" (menuOpened)=\"toggleMenu('profile')\" (menuClosed)=\"toggleMenu('profile')\" [ngClass]=\"currentCompany?.subDomain ? 'branded-button-true' : 'branded-button-false'\" matTooltip=\"Profile Info\" matTooltipPosition=\"below\">\n <div class=\"profile-inner\">\n <div class=\"brand-logo align-self-center\" *ngIf=\"((currentCompany?.subDomain) && userCompanyLogo)\" [ngClass]=\"userCompanyLogo ? 'branded-logo-true' : 'branded-logo-false'\" [ngStyle]=\"{'background-image': 'url(' + userCompanyLogo + ')'}\"></div>\n <div class=\"avatar\">\n <img *ngIf=\"userImageLink;else defaultAvatar\" [src]=\"userImageLink\" class=\"avatar-image\" alt=\"Avatar\">\n <ng-template #defaultAvatar><img [src]=\"_domSanitizer.bypassSecurityTrustUrl(imageDataUrls.defaultUserImage)\" class=\"avatar-default\" alt=\"profile pic\"></ng-template>\n </div>\n </div>\n </button>\n </div>\n <mat-menu #menu=\"matMenu\" class=\"accounts_drpmenu pmx-menu-group header-dropdown-profile\" xPosition=\"before\">\n <div class=\"popover-content show-menu\">\n <div class=\"popover-header\">\n <div class=\"popover-user-top\">\n <div class=\"avatar-wrapper\">\n <div *ngIf=\"userImageLink;else defaultLargeAvatar\" [ngStyle]=\"{'background-image': 'url(' + userImageLink + ')'}\"\n class=\"avatar-icon\" alt=\"Avatar icon\">&nbsp;</div>\n <ng-template #defaultLargeAvatar>\n <div [ngStyle]=\"{'background-image': 'url(' + imageDataUrls.defaultUserImage + ')'}\" class=\"avatar-icon default-avatar\" alt=\"Avatar icon\">&nbsp;</div>\n </ng-template>\n </div>\n <div class=\"user-data\">\n <h3 class=\"profile-name\"><span *ngIf=\"userAuthData\">{{ userAuthData?.firstName }} {{ userAuthData?.lastName }}</span></h3>\n <button mat-button color=\"accent\" class=\"pmx-button btn btn-small view-profile ms-0\" (click)=\"profile()\">View Profile</button>\n </div>\n </div>\n </div>\n <div class=\"popover-body\">\n <div class=\"popover-content-title\"><p>Overview</p></div>\n <ul cdkMenu class=\"list-group list-overview\" *ngIf=\"currentCompany\">\n <li cdkMenuItem class=\"list-item\" *ngIf=\"userAuthData?.email\">\n <p mat-menu-item class=\"list-text list-text-email\">\n <mat-icon class=\"list-icon\">mail</mat-icon><span class=\"pmx-lower-case pmx-text-wrap me-auto\">{{ userAuthData?.email }}</span>\n </p>\n </li>\n <li cdkMenuItem class=\"list-item d-none\" *ngIf=\"userAuthData?.contactPhone\">\n <p mat-menu-item class=\"list-text\">\n <mat-icon class=\"list-icon\">call</mat-icon><span class=\"title-case me-auto\">{{ userAuthData?.contactPhone }}</span>\n </p>\n </li>\n <li cdkMenuItem class=\"list-item\" *ngIf=\"userAuthData?.address !== null\">\n <p mat-menu-item class=\"list-text\">\n <mat-icon class=\"list-icon\">location_on</mat-icon>\n <span class=\"title-case me-auto\">\n <small>{{ userAuthData?.address?.streetAddress }} {{(userAuthData?.address?.streetAddress2 !== null) ? userAuthData?.address?.streetAddress2 : '' }}</small><br />\n {{ userAuthData?.address?.city }} {{userAuthData?.address?.stateOrProvince }} {{userAuthData?.address?.postalCode }}\n </span>\n </p>\n </li>\n </ul>\n <hr />\n <div class=\"popover-content-title\">\n <p *ngIf=\"userCompanies?.length == 1;else companiesTitle\">Company</p>\n <ng-template #companiesTitle><p>Companies</p></ng-template>\n </div>\n <ul cdkMenu class=\"list-group list-group-companies\">\n <li cdkMenuItem class=\"list-item list-company\" *ngFor=\"let company of userCompanies\" [ngClass]=\"(company?.activeNow) ? 'list-active company-active' : ''\">\n <button mat-menu-item class=\"pmx-button list-button\" (click)=\"switchCompany(company)\" [matTooltip]=\"company?.name\"\n matTooltipPosition=\"below\">\n <mat-icon class=\"icon-check\">{{ (company?.activeNow) ? 'check_circle' : 'swap_vert' }}</mat-icon>\n <span class=\"list-text pmx-text-wrap me-auto\">{{ company?.name | titlecase }}</span>\n <small class=\"active-label\" *ngIf=\"(company?.activeNow)\">Active</small>\n </button>\n </li>\n </ul>\n <hr />\n <ul cdkMenu class=\"list-group last-group my-1\">\n <li cdkMenuItem class=\"list-item py-2\">\n <button mat-menu-item class=\"pmx-button list-button btn-logout\" (click)=\"onLogoutClick()\">\n <mat-icon>power_settings_new</mat-icon>\n <span class=\"list-text\">Logout</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n </mat-menu>\n</mat-toolbar>", styles: [".pmx-text-truncate{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pmx-text-wrap{overflow-wrap:break-word}.pmx-lower-case{text-transform:lowercase}.mat-mdc-button:not(:disabled){color:var(--mdc-text-button-label-text-color)}.mat-mdc-button.mat-accent{--mdc-text-button-label-text-color: #24a148;--mat-text-button-state-layer-color: #24a148;--mat-text-button-ripple-color: rgba(255, 64, 129, .1)}.header-user-name{text-align:end;color:#000}.header-user-name span{font-size:12px;color:#9e9e9ede}.avatarLogo{max-width:30px}mat-toolbar.mat-toolbar.common_header.mat-primary.mat-toolbar-single-row{position:absolute;left:0;top:0;background-color:#fff;height:56px}button.switchButton,button.menuHamberger{padding:8px!important}.sidenavPanel{padding:20px 25px;height:100vh;position:relative}ul.navbarList{padding-left:0;list-style:none;margin-top:40px}ul.navbarList li{color:#666;font-weight:400;margin-bottom:25px;width:170px;cursor:pointer}.active{color:#4177d6!important}ul.navbarList li img{width:23px;margin-right:15px}.accounts_drpmenu{margin-top:.7em}.xsShowUsername{display:none;padding:0 16px;height:48px;line-height:48px}.vr{width:2px;background-color:#f5f5f5;opacity:1;margin:0 .5rem 0 1rem}.vr-blury{background-image:linear-gradient(180deg,transparent,#666,transparent);width:1px;opacity:.25}.navbar-brand .app-logo{height:24px;width:auto}.pmx-button mat-icon.mat-icon,.pmx-button mat-icon.mat-primary,.pmx-button mat-icon.mat-accent,.pmx-button mat-icon.mat-warn{color:var(--mat-icon-color)}.pmx-button mat-icon.mat-icon{font-size:1.5rem!important;line-height:1.5;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;transition:transform .3s ease}.pmx-button.mdc-button--raised mat-icon.mat-icon{width:24px;height:24px;display:contents}.pmx-button.mat-mdc-button-base mat-icon.mat-icon{z-index:1}.pmx-button mat-icon.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}.pmx-button mat-icon.mdc-button span.button-text{display:inline-flex;padding:0 1rem;text-transform:uppercase;font-size:.875rem;line-height:1.5}.pmx-button mat-icon.mdc-button span.upper-case{text-transform:uppercase}.pmx-button.mdc-button,.pmx-button.mdc-icon-button,.pmx-button.mdc-button--outlined,.pmx-button.mdc-button .mat-mdc-button-touch-target,.pmx-button.mdc-icon-button .mat-mdc-button-touch-target{height:40px!important;font-size:.75rem!important;letter-spacing:.2px;padding:0 .5rem;line-height:normal}.pmx-button.mdc-icon-button,.pmx-button.icon-btn.mdc-button--outlined,.pmx-button.icon-btn.mdc-button--raised,.pmx-button.mdc-icon-button .mat-mdc-button-touch-target{width:40px;border-radius:5px}.pmx-button.btn-small.mdc-button,.pmx-button.btn-small.mdc-icon-button,.pmx-button.btn-small.mdc-button--outlined{height:28px!important;padding:0 1rem}.pmx-button.mdc-icon-button,.pmx-button.icon-btn.mdc-button--raised{color:#254d93}.pmx-header .icon-button-shadow{box-shadow:0 1px 3px #0003,0 0 #00000024,0 1px 3px #0000001f}.pmx-button.icon-btn.mdc-button--raised.btn-switch-apps.menu-opened,.pmx-button.icon-btn.mdc-button--outlined.btn-switch-apps.menu-opened{background-color:#254d93;color:#fff;font-variation-settings:\"FILL\" 0,\"wght\" 200,\"GRAD\" 0,\"opsz\" 24}.pmx-button.mdc-icon-button.pmx-menu-button:hover,.pmx-button.mat-mdc-outlined-button.btn-switch-apps:hover,.pmx-button.icon-btn.mdc-button--outlined.btn-switch-apps:hover{background-color:#e5f3fb}.pmx-button.icon-app{width:20px}.pmx-button.mat-mdc-outlined-button,.pmx-button.mat-mdc-outlined-button:not(:disabled){background-color:#fff;overflow:hidden}.pmx-button.pmx-menu-button.profile-button.mat-mdc-outlined-button{padding:0;border-color:#bfdff7!important}.btn-group-clicked .pmx-button.pmx-menu-button.profile-button.mat-mdc-outlined-button{border-color:#bfdff7!important}.pmx-button.profile-button .profile-inner{border:0 solid transparent!important;display:flex;align-items:center;overflow:clip}.pmx-button.profile-button .avatar{width:38px;height:38px;box-sizing:border-box;border:3px #ffffff solid!important;border-radius:50%;overflow:hidden;display:flex;flex-direction:column;justify-content:center;align-content:center;align-items:center;flex-wrap:wrap}.pmx-button.profile-button .avatar{background-color:#9cd7a8}.pmx-button.profile-button .avatar img.avatar-image,.pmx-button.profile-button .avatar img.avatar-default{width:100%;height:auto}.branded-group-false{margin-left:.65rem}.branded-group-false .pmx-button.pmx-menu-button.profile-button.branded-button-false{width:40px;border-radius:20px!important}.branded-group-true{margin-left:.65rem;border-radius:20px;border:1px solid #bfdff7}.btn-group-clicked.branded-group-true{background-color:#99ccf2}.branded-group-true .pmx-button.profile-button .profile-inner{border:0 solid #c4c9d2!important}.branded-group-true .pmx-button.pmx-menu-button.profile-button.branded-button-true{border-radius:20px}.branded-group-true .pmx-button.profile-button.branded-button-true .profile-inner .branded-logo-true{border-radius:5px;display:block;position:relative;height:38px;background-size:100%;background-position:center;background-repeat:no-repeat;min-width:100px;margin-right:1rem}.pmx-menu-group.mat-mdc-menu-panel{margin-top:1rem}.header-dropdown-apps.mat-mdc-menu-panel .mat-mdc-menu-content,.header-dropdown-profile.mat-mdc-menu-panel .mat-mdc-menu-content{padding:0!important}.header-dropdown-apps{width:400px!important}.header-dropdown-apps.mat-mdc-menu-panel .list-button{padding:.5rem 2rem}.header-dropdown-apps.mdc-menu-surface--open,.header-dropdown-profile.mdc-menu-surface--open{position:absolute;z-index:1;top:0;right:0;margin:0;padding:0;border:1px solid #e5e5e5;border-radius:6px;background:#fff;animation:popover .2s ease-in-out}.header-dropdown-apps.mat-mdc-menu-panel.mat-mdc-menu-panel{max-width:400px!important;width:400px!important;overflow:visible}.header-dropdown-profile.mat-mdc-menu-panel.mat-mdc-menu-panel{max-width:408px!important;width:408px!important;overflow:visible}.popover-content:after,.popover-content:before{font-size:1.4em;display:block;width:0;height:0;content:\"\";pointer-events:none;position:absolute;top:-.45em}.popover-content:before{border-right:10px solid transparent;border-bottom:10px solid #999;border-left:10px solid transparent;right:.97em}.popover-content:after{border-right:12px solid transparent;border-bottom:12px solid #d5e3fa;border-left:12px solid transparent;right:.9em}.popover-content-title{display:flex;align-items:center;justify-content:flex-start;overflow:hidden;padding:0 1rem;min-height:40px}.popover-content-title p{margin:0;font-size:.75rem!important;color:#777}.popover-content .popover-user-top:after{clear:both;content:\"\";display:table}.popover-content .popover-user-top{display:flex;flex-flow:row;justify-content:flex-start;align-items:center}.popover-content .popover-user-top .avatar-wrapper{flex:0 4 auto;border-radius:100%;overflow-clip-margin:content-box;overflow:clip;background-color:#fff;padding:2px}.drop-shadow{filter:drop-shadow(0px 0px 3px rgba(0,0,0,.5))}.popover-content .popover-user-top .user-data{flex:1 0 auto;margin-left:1rem}.popover-content .popover-user-top .avatar-wrapper .avatar-icon{background-repeat:no-repeat;background-size:100%;background-position:center;width:64px;height:64px;background-color:#72c885}.avatar-icon.default-avatar{background-size:100%}.popover-content .popover-user-top .user-data h3.profile-name{font-size:1rem;text-overflow:ellipsis;margin-bottom:.5rem;line-height:normal;font-weight:600;color:#254d93}.btn.view-profile{background:#fafafa;color:#254d93}.popover-content ul.list-group{padding:0 0 8px;margin:0;display:flex;list-style:none}.popover-content ul.list-group.last-group,.popover-content ul.list-group.last-group .list-item{background-color:transparent}.popover-content ul.list-group li.list-item{align-items:center;border:none;padding:0;width:100%;display:flex;flex-direction:row;flex-wrap:wrap;order:1}.popover-content ul.list-group li.list-item .list-button{padding:.5rem 2rem;min-height:40px}.popover-content ul.list-group li.list-item span.mat-mdc-menu-item-text,.popover-content ul.list-group li.list-item span.mdc-list-item__primary-text,.popover-content ul.list-group li.list-item .list-button>span{display:flex;align-items:center}.popover-content ul.list-group li.list-item.list-company .list-button>span{width:100%;overflow:hidden}.popover-content ul.list-group li.list-item .list-button .hover-label.tooltip-label{opacity:0}.popover-content ul.list-group li.list-item.list-app .list-button:hover>span .hover-label.tooltip-label,.popover-content ul.list-group li.list-item.list-company .list-button:hover>span .hover-label.tooltip-label{opacity:0;display:inline-flex;color:#fff;background-color:#616161;font-size:11px;border-radius:4px;padding:0 .5rem;transition:opacity .3s ease-out}.popover-content ul.list-group li.list-item .list-button:hover{background:rgba(0,0,0,.04)}.popover-content ul.list-group li.list-item.company-active,.popover-content ul.list-group li.list-item.app-active{cursor:not-allowed;pointer-events:none;order:0}.popover-content ul.list-group li.list-item.company-active .active-label,.popover-content ul.list-group li.list-item.app-active .active-label{background-color:#93c47d;color:#212121;padding:0 .5rem;border-radius:50px;font-size:.75rem;margin-left:.5rem}.popover-content ul.list-group.list-apps-group{display:flex}.popover-content ul.list-group.list-overview li.list-item{cursor:not-allowed;pointer-events:none}.popover-content ul.list-group li.list-item p.list-text{padding:.5rem 2rem;margin:0;min-height:auto}.popover-content ul.list-group li.list-item .list-button .mat-icon,.popover-content ul.list-group li.list-item p.list-text mat-icon.list-icon,.popover-content ul.list-group li.list-item .list-button .list-icon,.popover-content ul.list-group li.list-item p.list-text .list-icon{color:#2db051;font-variation-settings:\"FILL\" 0,\"wght\" 200,\"GRAD\" 0,\"opsz\" 24;font-size:24px!important}.popover-content ul.list-group li.list-item.list-active.company-active button.list-button .mat-icon{color:#2db051;font-variation-settings:\"FILL\" 1,\"wght\" 300,\"GRAD\" 0,\"opsz\" 24}.popover-content ul.list-group li.list-item p.list-text span.mdc-list-item__primary-text{width:100%;display:flex}.popover-content ul.list-group li.list-item span.title-case,.popover-content ul.list-group li.list-item span.lower-case,.popover-content ul.list-group li.list-item span.pmx-lower-case{font-size:.8rem;color:#212121;font-weight:500;display:block;line-height:normal}small{color:#9e9e9e}.popover-content ul.list-group li.list-item span.text-label{font-size:12px;color:#979797;font-weight:400;display:block;line-height:normal}.popover-content ul.list-group li.list-item .list-text,.popover-content ul.list-group li.list-item .list-text span.mat-mdc-menu-item-text{font-size:.875rem;color:#0a152f;font-weight:500;line-height:normal}.popover-content ul.list-group li.list-item .list-text.list-text-email span.mat-mdc-menu-item-text{width:calc(100% - 40px);display:inline-flex}.popover-content ul.list-group li.list-item .list-text.list-text-email span.pmx-text-wrap{overflow-wrap:break-word;word-wrap:break-word;-webkit-hyphens:none;hyphens:none;width:100%}.popover-content ul.list-group li.list-item span.upper-case{text-transform:uppercase}.popover-content ul.list-group li.list-item span.app-status,.popover-content ul.list-group li.list-item .mat-mdc-chip-option.chip-status{font-size:13px;color:#0a152f;font-weight:400;display:block;line-height:normal;margin:0}.popover-content ul.list-group li.list-item.app-active .list-text,.popover-content ul.list-group li.list-item.company-active .list-text{color:#4b85ea}.popover-content ul.list-group li.list-item.app-active span.app-status,.popover-content ul.list-group li.list-item.app-active .mat-mdc-chip-option.chip-status,.popover-content ul.list-group li.list-item.company-active span.app-status,.popover-content ul.list-group li.list-item.company-active .mat-mdc-chip-option.chip-status{color:#24a53f}.popover-content ul.list-group li.list-item .mat-mdc-chip-option.chip-status{display:flex;flex-direction:row;justify-content:flex-start}.popover-content ul.list-group li.list-item .mat-mdc-chip-option.chip-status.mdc-evolution-chip--selected{transition:all .3s ease-out;margin-left:auto;flex:1;justify-content:flex-end}.popover-content ul.list-group li.list-item.app-active .mat-mdc-chip-option.chip-status.mdc-evolution-chip--selected,.popover-content ul.list-group li.list-item.company-active .mat-mdc-chip-option.chip-status.mdc-evolution-chip--selected{background-color:#408dd7;color:#f5f5f5}.popover-content ul.list-group li.list-item .mat-mdc-standard-chip .mat-mdc-chip-action-label{font-size:.75rem}.popover-content ul.list-group li.list-item .mat-mdc-standard-chip{height:24px}.popover-content ul.list-group li.list-item img.logo-thumb{width:24px;height:auto;margin-right:1rem}.popover-content ul.list-group li.list-item .list-button.btn-logout{display:flex;align-items:center;color:#616161}.popover-content ul.list-group li.list-item.app-active .list-button .app-icon-wrapper{background-color:#fff;border-color:#4b85ea;border-width:3px}.popover-content ul.list-group li.list-item.company-active .list-text .mat-icon{font-variation-settings:\"FILL\" 1,\"wght\" 200,\"GRAD\" 0,\"opsz\" 24;color:var(--themelightblue)}.popover-content ul.list-group li.list-item .list-button.btn-logout .list-text{color:#616161}.popover-content ul.list-group li.list-item.app-active button,.popover-content ul.list-group li.list-item.company-active button{cursor:not-allowed;pointer-events:none}.popover-content hr{background-color:#c4c9d2;margin:0;width:100%;border:0;border-top:1px solid #c4c9d2;opacity:1}.popover-content ul.apps-grid{width:100%;white-space:nowrap;overflow:auto}.popover-content ul.apps-grid li.list-item,.popover-content ul.apps-grid li.list-item img.logo-thumb{display:flex;justify-content:flex-start;flex-wrap:nowrap;align-content:center;align-items:center;flex-direction:row}.popover-header{background-color:#d5e3fa;border-bottom:1px solid #d8d8d8;padding:.975rem 1rem;margin-bottom:0;display:flex;flex-direction:row;align-content:center;justify-content:flex-start;align-items:center;flex-wrap:wrap}.popover-header .mat-icon{font-size:1.5rem!important;font-variation-settings:\"FILL\" 1,\"wght\" 500,\"GRAD\" 0,\"opsz\" 24;color:#254d93}.header-dropdown-profile .popover-header{padding:1.125rem 1rem}.popover-header h3.popover-title{font-size:1rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin-bottom:0;line-height:normal;font-weight:500;color:#254d93}.popover-body{max-height:420px;overflow:auto;padding:0}.app-icon-wrapper{margin:0 1rem 0 0;max-width:48px;max-height:48px;width:48px;height:48px;overflow:hidden;background-size:70%;background-repeat:no-repeat;background-position:center;border:1px solid #c4c9d2;border-radius:8px;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;flex-wrap:wrap}.app-icon-wrapper img.app-icon{width:100%;height:auto;overflow:hidden;padding:.5rem}h4.app-name{font-size:.65rem;margin:.5rem 0 0;line-height:normal;color:#254d93;font-weight:400;text-transform:uppercase}.popover-body ul.enabled-apps{display:flex;flex-flow:column wrap;justify-content:space-evenly;align-items:center;align-content:flex-start;border-bottom:1px solid #E9E9E9;margin:0;padding:0 1rem;list-style:none}.popover-body ul.enabled-apps li.enabled-app{flex-grow:1;flex:0 1 auto;text-align:center;font-size:.8125rem;padding:10px;list-style:none}.pmx-button.mdc-icon-button[color=theme-white],.pmx-button.icon-btn.mdc-button--raised[color=theme-white]{color:#254d93}.pmx-button.icon-btn.orders-menu[color=theme-white]{border:1px solid #fafafa!important}:host(.mat-accent){--mat-slider-ripple-color: #24a148;--mat-slider-hover-state-layer-color: rgba(255, 64, 129, .05);--mat-slider-focus-state-layer-color: rgba(255, 64, 129, .2);--mdc-slider-handle-color: #24a148;--mdc-slider-focus-handle-color: #24a148;--mdc-slider-hover-handle-color: #24a148;--mdc-slider-active-track-color: #24a148;--mdc-slider-inactive-track-color: #24a148;--mdc-slider-with-tick-marks-inactive-container-color: #24a148;--mdc-slider-with-tick-marks-active-container-color: #51bc6b}\n"] }]
275
+ args: [{ selector: 'lib-header', encapsulation: ViewEncapsulation.None, template: "<!-- <button mat-icon-button color=\"theme-white\" (click)=\"sidenav.toggle()\">Menu</button> -->\n<mat-sidenav-container class=\"main-container\">\n <mat-sidenav cdkMenuBar #sidenav mode=\"over\" class=\"sidenavDrawer\">\n <div class=\"drawerHeadLogo\"><img [src]=\"_domSanitizer.bypassSecurityTrustUrl(imageDataUrls.profetLogo)\"></div>\n <!-- <ng-container *ngFor=\"let appType of menuInfo | keyvalue\">\n <img *ngIf=\"appConfig[appType.key]?.appLogoUri\"\n [src]=\"_domSanitizer.bypassSecurityTrustUrl(appConfig[appType.key]?.appLogoUri)\"\n style=\"height: 20px; padding: 5px;\">\n <div class=\"subHeadListItems\">\n <ng-container *ngFor=\"let item of appType.value\">\n <mat-list-item (click)=\"menuSelection(item)\"\n [ngClass]=\"{'active-menu': item | activeRoute : _router.url:_headerSer.headerConfig.appType}\">\n <mat-icon class=\"menuIconList\" *ngIf=\"item.icon\">{{ item.icon }}</mat-icon>\n <span>{{ item.menuName }}</span>\n </mat-list-item>\n </ng-container>\n </div>\n\n </ng-container> -->\n <ng-container *ngFor=\"let app of groupedMenu\">\n <!-- <h3 mat-subheader>{{ appType.key }}</h3> -->\n <div class=\"appList\">\n <img *ngIf=\"appConfig[app.appType]?.appLogoUri\"\n [src]=\"_domSanitizer.bypassSecurityTrustUrl(appConfig[app.appType]?.appLogoUri)\">\n </div>\n\n <ng-container *ngFor=\"let group of app.groups\">\n <ng-container *ngIf=\"group.groupBy == '_ungrouped'; else grouped\">\n <div class=\"subHeadListItems\">\n <ng-container *ngFor=\"let menu of group.items\">\n <mat-list-item (click)=\"menuSelection(menu)\"\n [ngClass]=\"{'active-menu': menu | activeRoute : _router.url:_headerSer.headerConfig.appType}\">\n <mat-icon class=\"menuIconList\" *ngIf=\"menu.icon\">{{ menu.icon }}</mat-icon>\n <span>{{ menu.menuName }}</span>\n </mat-list-item>\n </ng-container>\n </div>\n </ng-container>\n <ng-template #grouped>\n <div class=\"subHeadListItems subHeadInnerItem\">\n <mat-list-item>{{ group.groupBy }}</mat-list-item>\n <ng-container *ngFor=\"let menu of group.items\">\n <mat-list-item class=\"menusubItems\" (click)=\"menuSelection(menu)\"\n [ngClass]=\"{'active-menu': menu | activeRoute : _router.url:_headerSer.headerConfig.appType}\">\n <mat-icon class=\"menuIconList\" *ngIf=\"menu.icon\">{{ menu.icon }}</mat-icon>\n <span>{{ menu.menuName }}</span>\n </mat-list-item>\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n </ng-container>\n </mat-sidenav>\n\n</mat-sidenav-container>\n<mat-toolbar cdkMenuBar color=\"primary\" class=\"header-wrapper common_header shadow-sm\">\n <!-- Main nav button and navigation links -->\n <button mat-icon-button color=\"theme-white\" (click)=\"sidenav.toggle()\"\n class=\"pmx-button pmx-menu-button orders-menu icon-btn ms-0 me-3\" aria-label=\"main menu\" tabindex=\"0\"\n matTooltip=\"Main menu\" matTooltipPosition=\"below\"\n matTooltipClass=\"poc-header-tooltip\"><mat-icon>menu</mat-icon></button>\n <a class=\"navbar-brand me-auto\" href=\"#\">\n <img [src]=\"_domSanitizer.bypassSecurityTrustUrl(appConfig[_headerSer.headerConfig.appType]?.appLogoUri)\"\n alt=\"App Logo\" class=\"app-logo\">\n </a>\n\n <!-- TODO remove comment -->\n <!-- <ng-container *ngIf=\"template\" [ngTemplateOutlet]=\"template\"></ng-container> -->\n <ng-content></ng-content>\n\n <mat-form-field appearance=\"outline\" class=\"switchCompanyField\">\n <mat-label>Select Company</mat-label>\n <mat-select [formControl]=\"companyControl\" (selectionChange)=\"switchCompany($event)\">\n <mat-option *ngFor=\"let opt of companyList\" [value]=\"opt\">\n {{opt.name}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n\n <!-- Profile button and profile dropdown links -->\n <button class=\"pmx-button pmx-menu-button profile-button\" mat-button mat-stroked-button [matMenuTriggerFor]=\"menu\"\n color=\"primary\" matTooltipPosition=\"below\">\n <div class=\"profile-inner\">\n <div class=\"brand-logo align-self-center\" *ngIf=\"activeCompany?.logo\"\n [ngClass]=\"activeCompany?.logo ? 'branded-logo-true' : 'branded-logo-false'\"\n [ngStyle]=\"{'background-image': 'url(' + activeCompany?.logo + ')'}\"></div>\n <div class=\"avatar\">\n <img *ngIf=\"userImageLink;else defaultAvatar\" [src]=\"userImageLink\" class=\"avatar-image\" alt=\"Avatar\">\n <ng-template #defaultAvatar><img\n [src]=\"_domSanitizer.bypassSecurityTrustUrl(imageDataUrls.defaultUserImage)\"\n class=\"avatar-default\" alt=\"profile pic\"></ng-template>\n </div>\n </div>\n </button>\n <mat-menu #menu=\"matMenu\" class=\"accounts_drpmenu pmx-menu-group header-dropdown-profile\" xPosition=\"before\">\n <div class=\"popover-content show-menu\">\n <div class=\"popover-header\">\n <div class=\"popover-user-top\">\n <div class=\"avatar-wrapper\">\n <img *ngIf=\"userImageLink;else defaultLargeAvatar\" [src]=\"userImageLink\" class=\"avatar-icon\"\n alt=\"Avatar\">\n <ng-template #defaultLargeAvatar>\n <div [ngStyle]=\"{'background-image': 'url(' + imageDataUrls.defaultUserImage + ')'}\"\n class=\"avatar-icon default-avatar\" alt=\"Avatar icon\">&nbsp;</div>\n </ng-template>\n </div>\n <div class=\"user-data\">\n <h3 class=\"profile-name\"><span *ngIf=\"userAuthData\">{{ userAuthData?.firstName }} {{\n userAuthData?.lastName }}</span></h3>\n <button mat-button color=\"accent\" class=\"pmx-button btn btn-small view-profile ms-0\"\n (click)=\"profile()\">View Profile</button>\n </div>\n </div>\n </div>\n <div class=\"popover-body\">\n <div class=\"popover-content-title\">\n <p>Overview</p>\n </div>\n\n <div *ngIf=\"userAuthData?.email\">\n <p mat-menu-item class=\"list-text list-text-email\">\n <mat-icon class=\"list-icon\">mail</mat-icon><span class=\"pmx-lower-case pmx-text-wrap me-auto\">{{\n userAuthData?.email }}</span>\n </p>\n </div>\n <ng-container *ngIf=\"userAuthData?.contactPhone\">\n <p mat-menu-item class=\"list-text\">\n <mat-icon class=\"list-icon\">call</mat-icon><span class=\"title-case me-auto\">{{\n userAuthData?.contactPhone }}</span>\n </p>\n </ng-container>\n\n <!-- <ul cdkMenu class=\"list-group list-overview\" *ngIf=\"currentCompany\">\n\n \n <li cdkMenuItem class=\"list-item\" *ngIf=\"userAuthData?.address !== null\">\n <p mat-menu-item class=\"list-text\">\n <mat-icon class=\"list-icon\">location_on</mat-icon>\n <span class=\"title-case me-auto\">\n <small>{{ userAuthData?.address?.streetAddress }}\n {{(userAuthData?.address?.streetAddress2 !== null) ?\n userAuthData?.address?.streetAddress2 : '' }}</small><br />\n {{ userAuthData?.address?.city }} {{userAuthData?.address?.stateOrProvince }}\n {{userAuthData?.address?.postalCode }}\n </span>\n </p>\n </li>\n </ul> -->\n <hr />\n <ul cdkMenu class=\"list-group last-group my-1\">\n <li cdkMenuItem class=\"list-item py-2\">\n <button mat-menu-item class=\"pmx-button list-button btn-logout\" (click)=\"onLogoutClick()\">\n <mat-icon>power_settings_new</mat-icon>\n <span class=\"list-text\">Logout</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n </mat-menu>\n</mat-toolbar>", styles: [".pmx-text-truncate{max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pmx-text-wrap{overflow-wrap:break-word}.pmx-lower-case{text-transform:lowercase}.mat-mdc-button:not(:disabled){color:var(--mdc-text-button-label-text-color)}.mat-mdc-button.mat-accent{--mdc-text-button-label-text-color: #24a148;--mat-text-button-state-layer-color: #24a148;--mat-text-button-ripple-color: rgba(255, 64, 129, .1)}.header-user-name{text-align:end;color:#000}.header-user-name span{font-size:12px;color:#9e9e9ede}.avatarLogo{max-width:30px}mat-toolbar.mat-toolbar.common_header.mat-primary.mat-toolbar-single-row{position:fixed;left:0;top:0;background-color:#fff;height:56px;z-index:9}button.switchButton,button.menuHamberger{padding:8px!important}.sidenavPanel{padding:20px 25px;height:100vh;position:relative}ul.navbarList{padding-left:0;list-style:none;margin-top:40px}ul.navbarList li{color:#666;font-weight:400;margin-bottom:25px;width:170px;cursor:pointer}.active{color:#4177d6!important}ul.navbarList li img{width:23px;margin-right:15px}.accounts_drpmenu{margin-top:.7em}.xsShowUsername{display:none;padding:0 16px;height:48px;line-height:48px}.vr{width:2px;background-color:#f5f5f5;opacity:1;margin:0 .5rem 0 1rem}.vr-blury{background-image:linear-gradient(180deg,transparent,#666,transparent);width:1px;opacity:.25}.navbar-brand .app-logo{height:20px;width:auto}.pmx-button mat-icon.mat-icon,.pmx-button mat-icon.mat-primary,.pmx-button mat-icon.mat-accent,.pmx-button mat-icon.mat-warn{color:var(--mat-icon-color)}.pmx-button mat-icon.mat-icon{font-size:1.5rem!important;line-height:1.5;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;transition:transform .3s ease}.pmx-button.mdc-button--raised mat-icon.mat-icon{width:24px;height:24px;display:contents}.pmx-button.mat-mdc-button-base mat-icon.mat-icon{z-index:1}.pmx-button mat-icon.mat-icon.mat-icon-inline{font-size:inherit;height:inherit;line-height:inherit;width:inherit}.pmx-button mat-icon.mdc-button span.button-text{display:inline-flex;padding:0 1rem;text-transform:uppercase;font-size:.875rem;line-height:1.5}.pmx-button mat-icon.mdc-button span.upper-case{text-transform:uppercase}.pmx-button.mdc-button,.pmx-button.mdc-icon-button,.pmx-button.mdc-button--outlined,.pmx-button.mdc-button .mat-mdc-button-touch-target,.pmx-button.mdc-icon-button .mat-mdc-button-touch-target{height:40px!important;font-size:.75rem!important;letter-spacing:.2px;padding:0 .5rem;line-height:normal}.pmx-button.mdc-icon-button,.pmx-button.icon-btn.mdc-button--outlined,.pmx-button.icon-btn.mdc-button--raised,.pmx-button.mdc-icon-button .mat-mdc-button-touch-target{width:40px;border-radius:5px}.pmx-button.btn-small.mdc-button,.pmx-button.btn-small.mdc-icon-button,.pmx-button.btn-small.mdc-button--outlined{height:28px!important;padding:0 1rem}.pmx-button.mdc-icon-button,.pmx-button.icon-btn.mdc-button--raised{color:#254d93}.pmx-header .icon-button-shadow{box-shadow:0 1px 3px #0003,0 0 #00000024,0 1px 3px #0000001f}.pmx-button.icon-btn.mdc-button--raised.btn-switch-apps.menu-opened,.pmx-button.icon-btn.mdc-button--outlined.btn-switch-apps.menu-opened{background-color:#254d93;color:#fff;font-variation-settings:\"FILL\" 0,\"wght\" 200,\"GRAD\" 0,\"opsz\" 24}.pmx-button.mdc-icon-button.pmx-menu-button:hover,.pmx-button.mat-mdc-outlined-button.btn-switch-apps:hover,.pmx-button.icon-btn.mdc-button--outlined.btn-switch-apps:hover{background-color:#e5f3fb}.pmx-button.icon-app{width:20px}.pmx-button.mat-mdc-outlined-button,.pmx-button.mat-mdc-outlined-button:not(:disabled){background-color:#fff;overflow:hidden}.pmx-button.pmx-menu-button.profile-button.mat-mdc-outlined-button{padding:0;border-color:#bfdff7!important}.btn-group-clicked .pmx-button.pmx-menu-button.profile-button.mat-mdc-outlined-button{border-color:#bfdff7!important}.pmx-button.profile-button .profile-inner{border:0 solid transparent!important;display:flex;align-items:center;overflow:clip}.pmx-button.profile-button .avatar{width:38px;height:38px;box-sizing:border-box;border:3px #ffffff solid!important;border-radius:50%;overflow:hidden;display:flex;flex-direction:column;justify-content:center;align-content:center;align-items:center;flex-wrap:wrap}.pmx-button.profile-button .avatar{background-color:#9cd7a8}.pmx-button.profile-button .avatar img.avatar-image,.pmx-button.profile-button .avatar img.avatar-default{width:100%;height:auto}.branded-group-false{margin-left:.65rem}.branded-group-false .pmx-button.pmx-menu-button.profile-button.branded-button-false{width:40px;border-radius:20px!important}.branded-group-true{margin-left:.65rem;border-radius:20px;border:1px solid #bfdff7}.btn-group-clicked.branded-group-true{background-color:#99ccf2}.branded-group-true .pmx-button.profile-button .profile-inner{border:0 solid #c4c9d2!important}.branded-group-true .pmx-button.pmx-menu-button.profile-button.branded-button-true{border-radius:20px}.branded-group-true .pmx-button.profile-button.branded-button-true .profile-inner .branded-logo-true{border-radius:5px;display:block;position:relative;height:38px;background-size:100%;background-position:center;background-repeat:no-repeat;min-width:100px;margin-right:1rem}.pmx-menu-group.mat-mdc-menu-panel{margin-top:1rem}.header-dropdown-apps.mat-mdc-menu-panel .mat-mdc-menu-content,.header-dropdown-profile.mat-mdc-menu-panel .mat-mdc-menu-content{padding:0!important}.header-dropdown-apps{width:400px!important}.header-dropdown-apps.mat-mdc-menu-panel .list-button{padding:.5rem 2rem}.header-dropdown-apps.mdc-menu-surface--open,.header-dropdown-profile.mdc-menu-surface--open{position:absolute;z-index:1;top:0;right:0;margin:0;padding:0;border:1px solid #e5e5e5;border-radius:6px;background:#fff;animation:popover .2s ease-in-out}.header-dropdown-apps.mat-mdc-menu-panel.mat-mdc-menu-panel{max-width:400px!important;width:400px!important;overflow:visible}.header-dropdown-profile.mat-mdc-menu-panel.mat-mdc-menu-panel{max-width:408px!important;width:408px!important;overflow:visible}.popover-content:after,.popover-content:before{font-size:1.4em;display:block;width:0;height:0;content:\"\";pointer-events:none;position:absolute;top:-.45em}.popover-content:before{border-right:10px solid transparent;border-bottom:10px solid #999;border-left:10px solid transparent;right:.97em}.popover-content:after{border-right:12px solid transparent;border-bottom:12px solid #d5e3fa;border-left:12px solid transparent;right:.9em}.popover-content-title{display:flex;align-items:center;justify-content:flex-start;overflow:hidden;padding:0 1rem;min-height:40px}.popover-content-title p{margin:0;font-size:.75rem!important;color:#777}.popover-content .popover-user-top:after{clear:both;content:\"\";display:table}.popover-content .popover-user-top{display:flex;flex-flow:row;justify-content:flex-start;align-items:center}.popover-content .popover-user-top .avatar-wrapper{flex:0 4 auto;border-radius:100%;overflow-clip-margin:content-box;overflow:clip;background-color:#fff;padding:2px}.drop-shadow{filter:drop-shadow(0px 0px 3px rgba(0,0,0,.5))}.popover-content .popover-user-top .user-data{flex:1 0 auto;margin-left:1rem}.popover-content .popover-user-top .avatar-wrapper .avatar-icon{background-repeat:no-repeat;background-size:100%;background-position:center;width:64px;height:64px;background-color:#72c885}.avatar-icon.default-avatar{background-size:100%}.popover-content .popover-user-top .user-data h3.profile-name{font-size:1rem;text-overflow:ellipsis;margin-bottom:.5rem;line-height:normal;font-weight:600;color:#254d93}.btn.view-profile{background:#fafafa;color:#254d93}.popover-content ul.list-group{padding:0 0 8px;margin:0;display:flex;list-style:none}.popover-content ul.list-group.last-group,.popover-content ul.list-group.last-group .list-item{background-color:transparent}.popover-content ul.list-group li.list-item{align-items:center;border:none;padding:0;width:100%;display:flex;flex-direction:row;flex-wrap:wrap;order:1}.popover-content ul.list-group li.list-item .list-button{padding:.5rem 1rem;min-height:40px}.popover-content ul.list-group li.list-item span.mat-mdc-menu-item-text,.popover-content ul.list-group li.list-item span.mdc-list-item__primary-text,.popover-content ul.list-group li.list-item .list-button>span{display:flex;align-items:center}.popover-content ul.list-group li.list-item.list-company .list-button>span{width:100%;overflow:hidden}.popover-content ul.list-group li.list-item .list-button .hover-label.tooltip-label{opacity:0}.popover-content ul.list-group li.list-item.list-app .list-button:hover>span .hover-label.tooltip-label,.popover-content ul.list-group li.list-item.list-company .list-button:hover>span .hover-label.tooltip-label{opacity:0;display:inline-flex;color:#fff;background-color:#616161;font-size:11px;border-radius:4px;padding:0 .5rem;transition:opacity .3s ease-out}.popover-content ul.list-group li.list-item .list-button:hover{background:rgba(0,0,0,.04)}.popover-content ul.list-group li.list-item.company-active,.popover-content ul.list-group li.list-item.app-active{cursor:not-allowed;pointer-events:none;order:0}.popover-content ul.list-group li.list-item.company-active .active-label,.popover-content ul.list-group li.list-item.app-active .active-label{background-color:#93c47d;color:#212121;padding:0 .5rem;border-radius:50px;font-size:.75rem;margin-left:.5rem}.popover-content ul.list-group.list-apps-group{display:flex}.popover-content ul.list-group.list-overview li.list-item{cursor:not-allowed;pointer-events:none}.popover-content ul.list-group li.list-item p.list-text{padding:.5rem 2rem;margin:0;min-height:auto}.popover-content ul.list-group li.list-item .list-button .mat-icon,.popover-content ul.list-group li.list-item p.list-text mat-icon.list-icon,.popover-content ul.list-group li.list-item .list-button .list-icon,.popover-content ul.list-group li.list-item p.list-text .list-icon{color:#2db051;font-variation-settings:\"FILL\" 0,\"wght\" 200,\"GRAD\" 0,\"opsz\" 24;font-size:24px!important}.popover-content ul.list-group li.list-item.list-active.company-active button.list-button .mat-icon{color:#2db051;font-variation-settings:\"FILL\" 1,\"wght\" 300,\"GRAD\" 0,\"opsz\" 24}.popover-content ul.list-group li.list-item p.list-text span.mdc-list-item__primary-text{width:100%;display:flex}.popover-content ul.list-group li.list-item span.title-case,.popover-content ul.list-group li.list-item span.lower-case,.popover-content ul.list-group li.list-item span.pmx-lower-case{font-size:.8rem;color:#212121;font-weight:500;display:block;line-height:normal}small{color:#9e9e9e}.popover-content ul.list-group li.list-item span.text-label{font-size:12px;color:#979797;font-weight:400;display:block;line-height:normal}.popover-content ul.list-group li.list-item .list-text,.popover-content ul.list-group li.list-item .list-text span.mat-mdc-menu-item-text{font-size:.875rem;color:#0a152f;font-weight:500;line-height:normal}.popover-content ul.list-group li.list-item .list-text.list-text-email span.mat-mdc-menu-item-text{width:calc(100% - 40px);display:inline-flex}.popover-content ul.list-group li.list-item .list-text.list-text-email span.pmx-text-wrap{overflow-wrap:break-word;word-wrap:break-word;-webkit-hyphens:none;hyphens:none;width:100%}.popover-content ul.list-group li.list-item span.upper-case{text-transform:uppercase}.popover-content ul.list-group li.list-item span.app-status,.popover-content ul.list-group li.list-item .mat-mdc-chip-option.chip-status{font-size:13px;color:#0a152f;font-weight:400;display:block;line-height:normal;margin:0}.popover-content ul.list-group li.list-item.app-active .list-text,.popover-content ul.list-group li.list-item.company-active .list-text{color:#4b85ea}.popover-content ul.list-group li.list-item.app-active span.app-status,.popover-content ul.list-group li.list-item.app-active .mat-mdc-chip-option.chip-status,.popover-content ul.list-group li.list-item.company-active span.app-status,.popover-content ul.list-group li.list-item.company-active .mat-mdc-chip-option.chip-status{color:#24a53f}.popover-content ul.list-group li.list-item .mat-mdc-chip-option.chip-status{display:flex;flex-direction:row;justify-content:flex-start}.popover-content ul.list-group li.list-item .mat-mdc-chip-option.chip-status.mdc-evolution-chip--selected{transition:all .3s ease-out;margin-left:auto;flex:1;justify-content:flex-end}.popover-content ul.list-group li.list-item.app-active .mat-mdc-chip-option.chip-status.mdc-evolution-chip--selected,.popover-content ul.list-group li.list-item.company-active .mat-mdc-chip-option.chip-status.mdc-evolution-chip--selected{background-color:#408dd7;color:#f5f5f5}.popover-content ul.list-group li.list-item .mat-mdc-standard-chip .mat-mdc-chip-action-label{font-size:.75rem}.popover-content ul.list-group li.list-item .mat-mdc-standard-chip{height:24px}.popover-content ul.list-group li.list-item img.logo-thumb{width:24px;height:auto;margin-right:1rem}.popover-content ul.list-group li.list-item .list-button.btn-logout{display:flex;align-items:center;color:#616161}.popover-content ul.list-group li.list-item.app-active .list-button .app-icon-wrapper{background-color:#fff;border-color:#4b85ea;border-width:3px}.popover-content ul.list-group li.list-item.company-active .list-text .mat-icon{font-variation-settings:\"FILL\" 1,\"wght\" 200,\"GRAD\" 0,\"opsz\" 24;color:var(--themelightblue)}.popover-content ul.list-group li.list-item .list-button.btn-logout .list-text{color:#616161}.popover-content ul.list-group li.list-item.app-active button,.popover-content ul.list-group li.list-item.company-active button{cursor:not-allowed;pointer-events:none}.popover-content hr{background-color:#c4c9d2;margin:0;width:100%;border:0;border-top:1px solid #c4c9d2;opacity:1}.popover-content ul.apps-grid{width:100%;white-space:nowrap;overflow:auto}.popover-content ul.apps-grid li.list-item,.popover-content ul.apps-grid li.list-item img.logo-thumb{display:flex;justify-content:flex-start;flex-wrap:nowrap;align-content:center;align-items:center;flex-direction:row}.popover-header{background-color:#d5e3fa;border-bottom:1px solid #d8d8d8;padding:.975rem 1rem;margin-bottom:0;display:flex;flex-direction:row;align-content:center;justify-content:flex-start;align-items:center;flex-wrap:wrap}.popover-header .mat-icon{font-size:1.5rem!important;font-variation-settings:\"FILL\" 1,\"wght\" 500,\"GRAD\" 0,\"opsz\" 24;color:#254d93}.header-dropdown-profile .popover-header{padding:1.125rem 1rem}.popover-header h3.popover-title{font-size:1rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;margin-bottom:0;line-height:normal;font-weight:500;color:#254d93}.popover-body{max-height:420px;overflow:auto;padding:0}.app-icon-wrapper{margin:0 1rem 0 0;max-width:48px;max-height:48px;width:48px;height:48px;overflow:hidden;background-size:70%;background-repeat:no-repeat;background-position:center;border:1px solid #c4c9d2;border-radius:8px;display:flex;flex-direction:row;align-content:center;justify-content:center;align-items:center;flex-wrap:wrap}.app-icon-wrapper img.app-icon{width:100%;height:auto;overflow:hidden;padding:.5rem}h4.app-name{font-size:.65rem;margin:.5rem 0 0;line-height:normal;color:#254d93;font-weight:400;text-transform:uppercase}.popover-body ul.enabled-apps{display:flex;flex-flow:column wrap;justify-content:space-evenly;align-items:center;align-content:flex-start;border-bottom:1px solid #E9E9E9;margin:0;padding:0 1rem;list-style:none}.popover-body ul.enabled-apps li.enabled-app{flex-grow:1;flex:0 1 auto;text-align:center;font-size:.8125rem;padding:10px;list-style:none}.pmx-button.mdc-icon-button[color=theme-white],.pmx-button.icon-btn.mdc-button--raised[color=theme-white]{color:#254d93}.pmx-button.icon-btn.orders-menu[color=theme-white]{border:1px solid #fafafa!important}:host(.mat-accent){--mat-slider-ripple-color: #24a148;--mat-slider-hover-state-layer-color: rgba(255, 64, 129, .05);--mat-slider-focus-state-layer-color: rgba(255, 64, 129, .2);--mdc-slider-handle-color: #24a148;--mdc-slider-focus-handle-color: #24a148;--mdc-slider-hover-handle-color: #24a148;--mdc-slider-active-track-color: #24a148;--mdc-slider-inactive-track-color: #24a148;--mdc-slider-with-tick-marks-inactive-container-color: #24a148;--mdc-slider-with-tick-marks-active-container-color: #51bc6b}.mat-drawer-container.main-container{position:fixed!important;z-index:999}.mat-drawer-backdrop{position:fixed!important}.sidenavDrawer{position:fixed!important;left:0;min-width:200px;padding:15px 0}.mdc-list-group__subheader{background-color:#eef4ff;padding:5px 20px;margin-bottom:5px!important;font-size:14px!important;font-weight:500!important}.subHeadListItems .mat-mdc-list-item{display:block;cursor:pointer;color:#000;padding:0 10px 5px!important;border-radius:3px;transition:all .3s;margin-bottom:3px;font-size:12px}.subHeadListItems .mat-mdc-list-item:hover{background-color:#f5f5f5}.menusubItems{padding:0 10px 5px 30px!important}.subHeadListItems .mdc-list-item__content{position:relative;top:-2px}.switchCompanyField{min-width:190px!important;margin-left:15px}.profile-button{margin-left:10px}.brand-logo{width:100px;height:38px;background-repeat:no-repeat;background-size:contain;background-origin:content-box;padding:7px}.menuIconList{font-size:20px!important;margin-right:2px;top:10px;position:relative;color:#747474;font-weight:300}.subHeadListItems{margin-bottom:25px;padding:0 15px}.subHeadInnerItem{margin-bottom:0!important}.drawerHeadLogo{width:100%;padding:10px 20px;margin-bottom:20px}.drawerHeadLogo img{width:130px}.active-menu{background-color:#e0e0e0!important;color:#1976d2!important}.active-menu .menuIconList{color:#1976d2}.appList{padding:11px 15px;background-color:#eef4ff;margin-bottom:10px;height:35px;display:flex}.appList img{object-fit:contain}\n"] }]
289
276
  }], ctorParameters: function () { return []; }, propDecorators: { template: [{
290
277
  type: Input
291
- }], appName: [{
292
- type: Input
293
- }], menuEvent: [{
294
- type: Output
295
278
  }], infoEvent: [{
296
279
  type: Output
280
+ }], sidenav: [{
281
+ type: ViewChild,
282
+ args: ['sidenav']
297
283
  }] } });
298
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi1oZWFkZXIvc3JjL2xpYi9oZWFkZXIvaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi1oZWFkZXIvc3JjL2xpYi9oZWFkZXIvaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0QsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBRU4saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFXLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7OztBQVF0RCxNQUFNLE9BQU8sZUFBZTtJQTZCMUI7UUE1QkEsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUdaLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3BDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRTlDLFlBQU8sR0FBZSxFQUFFLENB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LENBQzdELFlBQVksQ0FBQyxnQkFBZ0IsQ0FDOUIsQ0FBQztvQkFDRixNQUFNO2dCQUNSLEtBQUssV0FBVyxDQUFDLGFBQWE7b0JBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FDN0QsWUFBWSxDQUFDLGdCQUFnQixDQUM5QixDQUFDO29CQUNGLE1BQU07YUFDVDtTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQzdELFlBQVksQ0FBQyxnQkFBZ0IsQ0FDOUIsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUNELFVBQVUsQ0FBQyxJQUFZO1FBQ3JCLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3RFLElBQUksS0FBSyxTQUFTO1lBQ2hCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztZQUNwRCxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1gsQ0FBQzs7NkdBdlRVLGVBQWU7aUdBQWYsZUFBZSxxS0MzQjVCLHM3UkEwSGM7NEZEL0ZELGVBQWU7a0JBTjNCLFNBQVM7K0JBQ0UsWUFBWSxpQkFHUCxpQkFBaUIsQ0FBQyxJQUFJOzBFQUk1QixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb3dlckNhc2VQaXBlLCBUaXRsZUNhc2VQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFNpZGVuYXYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZVVybCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGdldEN1cnJlbnRVc2VyLCBzaWduT3V0IH0gZnJvbSAnYXdzLWFtcGxpZnkvYXV0aCc7XG5pbXBvcnQgeyBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29tbW9uSGVhZGVyU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi1oZWFkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQUk9GRVRfQVBQUyB9IGZyb20gJy4uL3V0aWxzL2FwcHMuZW51bSc7XG5pbXBvcnQgeyBpbWFnZURhdGFVcmwgfSBmcm9tICcuLi91dGlscy9pbWFnZS5kYXRhdXJsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWhlYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9oZWFkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgSGVhZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgdXNlcm5hbWU6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSB0ZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGFwcE5hbWUhOiBQUk9GRVRfQVBQUztcbiAgQE91dHB1dCgpIG1lbnVFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgaW5mb0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHNpZGVuYXYhOiBNYXRTaWRlbmF2O1xuICBhcHBMaXN0OiBBcnJheTxhbnk+ID0gW107XG4gIHVzZXJDb21wYW5pZXM6IGFueTtcbiAgY29tcGFueVByb2ZpbGU6IGFueTtcbiAgcG9ydGFsVXJsOiBzdHJpbmcgPSAnJztcbiAgdXNlckF1dGhEYXRhOiBhbnk7XG4gIHVzZXJJbWFnZUxpbms6IGFueSA9IG51bGw7XG4gIGhlYWRlckNsYXNzOiBzdHJpbmcgPSAnJztcbiAgY3VycmVudEFwcDogYW55O1xuICBjdXJyZW50QXBwTG9nbzogU2FmZVVybCA9ICcnO1xuICBjdXJyZW50Q29tcGFueTogYW55O1xuICB1c2VyQ29tcGFueUxvZ286IGFueSA9ICcnO1xuICBlbmFibGVkQXBwbGljYXRpb25zOiBBcnJheTxhbnk+ID0gW107XG4gIGltYWdlRGF0YVVybHMgPSBpbWFnZURhdGFVcmw7XG4gIGlzQXBwc01lbnVPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUHJvZmlsZU1lbnVPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3JvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcml2YXRlIF9zbmFja2JhciA9IGluamVjdChNYXRTbmFja0Jhcik7XG4gIHByaXZhdGUgX3NlciA9IGluamVjdChDb21tb25IZWFkZXJTZXJ2aWNlKTtcbiAgcHVibGljIF9kb21TYW5pdGl6ZXIgPSBpbmplY3QoRG9tU2FuaXRpemVyKTtcbiAgcHJpdmF0ZSBfdGl0bGVDYXNlcGlwZSA9IGluamVjdChUaXRsZUNhc2VQaXBlKTtcbiAgcHJpdmF0ZSBfbG93ZXJDYXNlUGlwZSA9IGluamVjdChMb3dlckNhc2VQaXBlKTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mZXRjaENvbXBhbnlQcm9maWxlKCk7XG4gICAgdGhpcy5fc2VyLmdldEFwcHMoKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHYpID0+IHtcbiAgICAgICAgdGhpcy5wb3J0YWxVcmwgPSB2Py5kYXRhPy5wb3J0YWxVcmw7XG4gICAgICAgIGxldCBkYXRhID0ge1xuICAgICAgICAgIGNvbXBhbnlJbmZvOiB0aGlzLmNvbXBhbnlQcm9maWxlLFxuICAgICAgICAgIHBvcnRhbFVybDogdGhpcy5wb3J0YWxVcmwsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuaW5mb0V2ZW50LmVtaXQoZGF0YSk7XG4gICAgICAgIC8vIGxldCBjb25maWc6IGFueSA9IEF1dGguY29uZmlndXJlKCk7XG4gICAgICAgIC8vIGxldCBzaWdub3V0VXJsID0gYCR7dGhpcy5wb3J0YWxVcmx9L2xvZ2luYDtcbiAgICAgICAgLy8gY29uZmlnLm9hdXRoID0geyAuLi5jb25maWcub2F1dGgsIC4uLnsgXCJyZWRpcmVjdFNpZ25PdXRcIjogc2lnbm91dFVybCB9IH07XG4gICAgICAgIC8vIEFtcGxpZnkuY29uZmlndXJlKGNvbmZpZyk7XG4gICAgICAgIGlmICh2Py5kYXRhPy5hcHBsaWNhdGlvbnMgJiYgdi5kYXRhLmFwcGxpY2F0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gdGhpcy5mZXRjaENvbXBhbnlEYXRhKHYuZGF0YS5hcHBsaWNhdGlvbnMpO1xuICAgICAgICAgIHRoaXMuYXBwTGlzdCA9IFtdO1xuICAgICAgICAgIHRoaXMuZW5hYmxlZEFwcGxpY2F0aW9ucyA9IHYuZGF0YS5hcHBsaWNhdGlvbnM7XG5cbiAgICAgICAgICB2LmRhdGEuYXBwbGljYXRpb25zLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRBcHAgPSBlbGVtZW50Lm5hbWUgPT09IHRoaXMuYXBwTmFtZTtcblxuICAgICAgICAgICAgdGhpcy5hcHBMaXN0LnB1c2goe1xuICAgICAgICAgICAgICBuYW1lOiBlbGVtZW50LmRpc3BsYXlOYW1lLFxuICAgICAgICAgICAgICB2YWx1ZTogZWxlbWVudCxcbiAgICAgICAgICAgICAgYXBwVXJsOiBlbGVtZW50LmFwcFVybCxcbiAgICAgICAgICAgICAgYWN0aXZlOiBjdXJyZW50QXBwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbGV0IGFwcERhdGEgPSB7XG4gICAgICAgICAgICBlbmFibGVkQXBwczogdGhpcy5hcHBMaXN0LFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5pbmZvRXZlbnQuZW1pdChhcHBEYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgbGV0IHVzZXJJbmZvID0gYXdhaXQgZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBpZiAodXNlckluZm8/LnVzZXJuYW1lKSB7XG4gICAgICBsZXQgdXNlckRldGFpbHMgPSB0aGlzLl9zZXIuZ2V0VXNlckRldGFpbHNCeUVtYWlsKHtcbiAgICAgICAgZW1haWw6IHVzZXJJbmZvLnVzZXJuYW1lLFxuICAgICAgfSk7XG4gICAgICBsZXQgdXNlckNvbXBhbnlJbmZvID0gdGhpcy5fc2VyLmdldFVzZXJDb21wYW5pZXMoKTtcbiAgICAgIGZvcmtKb2luKFt1c2VyRGV0YWlscywgdXNlckNvbXBhbnlJbmZvXSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgIGlmIChyZXMgJiYgcmVzWzBdKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJBdXRoRGF0YSA9IHJlc1swXTtcbiAgICAgICAgICAgIHRoaXMudXNlcm5hbWUgPSB0aGlzLnVzZXJBdXRoRGF0YS5maXJzdE5hbWU7XG4gICAgICAgICAgICBpZiAodGhpcy51c2VyQXV0aERhdGE/Ll9saW5rcz8ucHJvZmlsZUltYWdlPy5ocmVmKSB7XG4gICAgICAgICAgICAgIHRoaXMuZ2V0VXNlclByb2ZpbGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlcyAmJiByZXNbMV0pIHtcbiAgICAgICAgICAgIGlmIChyZXNbMV0gJiYgcmVzWzFdLmRhdGEgJiYgcmVzWzFdLmRhdGEuY29tcGFuaWVzKSB7XG4gICAgICAgICAgICAgIHRoaXMudXNlckNvbXBhbmllcyA9IHJlc1sxXS5kYXRhLmNvbXBhbmllcztcbiAgICAgICAgICAgICAgaWYgKHRoaXMudXNlckNvbXBhbmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY29tIG9mIHRoaXMudXNlckNvbXBhbmllcykge1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBjb20uY29tcGFueUtleSA9PSB0aGlzLnVzZXJBdXRoRGF0YS5sYXN0QWNjZXNzZWRDb21wYW55S2V5XG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29tLmFjdGl2ZU5vdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5nZXRDdXJyZW50Q29tcGFueUluZm8oKTtcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudEFwcExvZ28oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBtZW51QWN0aW9uKCkge1xuICAgIHRoaXMubWVudUV2ZW50LmVtaXQoKTtcbiAgfVxuXG4gIGZldGNoQ29tcGFueVByb2ZpbGUoKSB7XG4gICAgbGV0IHJlcSA9IHtcbiAgICAgIGNvbXBhbnlOYW1lOiBkb2N1bWVudC5sb2NhdGlvbi5ob3N0LnNwbGl0KCcuJylbMF0sXG4gICAgfTtcbiAgICB0aGlzLl9zZXIuZmV0Y2hDb21wYW55UHJvZmlsZShyZXEpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAodikgPT4ge1xuICAgICAgICB0aGlzLmNvbXBhbnlQcm9maWxlID0gdjtcbiAgICAgICAgbGV0IGRhdGEgPSB7XG4gICAgICAgICAgY29tcGFueUluZm86IHYsXG4gICAgICAgICAgcG9ydGFsVXJsOiB0aGlzLnBvcnRhbFVybCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5pbmZvRXZlbnQuZW1pdChkYXRhKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgZmV0Y2hDb21wYW55RGF0YShhbGxBcHBzOiBBcnJheTxhbnk+KSB7XG4gICAgdGhpcy5fc2VyLmdldENvbXBhbnlBcHBsaWNhdGlvbnMoKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHYpID0+IHtcbiAgICAgICAgaWYgKHY/LmRhdGE/LmVuYWJsZWRBcHBsaWNhdGlvbnMpIHtcbiAgICAgICAgICB0aGlzLmFwcExpc3QgPSBbXTtcbiAgICAgICAgICBsZXQgYXBwSW5mbyA9IFtdO1xuICAgICAgICAgIGxldCBmZXRjaGVkQXBwbGljYXRpb25zID0gdi5kYXRhLmVuYWJsZWRBcHBsaWNhdGlvbnM/LnNwbGl0KCcsJyk7XG5cbiAgICAgICAgICBpZiAoZmV0Y2hlZEFwcGxpY2F0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmZXRjaGVkQXBwbGljYXRpb25zLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBhcHBJbmZvID0gYWxsQXBwcy5maWx0ZXIoKGVsZSkgPT4gZWxlLm5hbWUgPT0gZWxlbWVudCk7XG4gICAgICAgICAgICAgIGlmIChhcHBJbmZvICYmIGFwcEluZm8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlmIChhcHBJbmZvWzBdLm5hbWUgIT0gJ21jYScpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuYXBwTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYXBwSW5mb1swXS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIGFwcFVybDogYXBwSW5mb1swXS5hcHBVcmwsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHNhbml0aXplVXJsKHVybDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKHVybCk7XG4gIH1cblxuICBnZXRVc2VyUHJvZmlsZSgpIHtcbiAgICB0aGlzLl9zZXJcbiAgICAgIC5vYnRhaW5EYXRhQnlVcmwodGhpcy51c2VyQXV0aERhdGEuX2xpbmtzLnByb2ZpbGVJbWFnZS5ocmVmKVxuICAgICAgLnN1YnNjcmliZSgoaW1nKSA9PiB7XG4gICAgICAgIGlmIChpbWc/LmxvY2F0aW9uVXJsKSB7XG4gICAgICAgICAgdGhpcy51c2VySW1hZ2VMaW5rID0gaW1nLmxvY2F0aW9uVXJsXG4gICAgICAgICAgICA/IHRoaXMuX2RvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKGltZy5sb2NhdGlvblVybClcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBhcHBSZWRpcmVjdChhcHA6IGFueSkge1xuICAgIGlmICghYXBwPy5hY3RpdmUpIHtcbiAgICAgIHdpbmRvdy5vcGVuKGFwcC5hcHBVcmwsICdfc2VsZicpO1xuICAgIH1cbiAgfVxuICBwcm9maWxlKCkge1xuICAgIC8vIHRoaXMuZmV0Y2hVc2VyRGF0YSgpO1xuICAgIGlmICh0aGlzLl9zZXIucG9ydGFsRnJvbnRlbmRVcmwpIHtcbiAgICAgIGxldCB1cmwgPSB0aGlzLnBvcnRhbFVybCArICcvYXBwL3Byb2ZpbGUnO1xuICAgICAgZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9IHVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJy9hcHAvcHJvZmlsZScpO1xuICAgIH1cbiAgfVxuICBsb2FkVXNlck1lc3NhZ2VzKCkge1xuICAgIGlmICh0aGlzLnVzZXJBdXRoRGF0YSkge1xuICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoJy9hcHAvdXNlci1pbmJveCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zbmFja2Jhci5vcGVuKCdObyBtZXNzYWdlcyByZWNlaXZlZCB5ZXQnLCAnT0snLCB7IGR1cmF0aW9uOiA1MDAwIH0pO1xuICAgIH1cbiAgfVxuICBvbkxvZ291dENsaWNrKCkge1xuICAgIHNpZ25PdXQoeyBnbG9iYWw6IHRydWUsIG9hdXRoOiB7IHJlZGlyZWN0VXJsOiB0aGlzLl9zZXIuc2lnbk91dFVybCB9IH0pXG4gICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICB3aW5kb3cub3Blbih0aGlzLl9zZXIuc2lnbk91dFVybCwgJ19zZWxmJyk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgc2lnbk91dCh7IGdsb2JhbDogdHJ1ZSwgb2F1dGg6IHsgcmVkaXJlY3RVcmw6IHRoaXMuX3Nlci5zaWduT3V0VXJsIH0gfSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLl9zZXIuc2lnbk91dFVybCwgJ19zZWxmJyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiBjb25zb2xlLmxvZyhlcnJvcikpO1xuICAgICAgfSk7XG4gIH1cblxuICBzd2l0Y2hDb21wYW55KGNvbXBhbnk6IGFueSkge1xuICAgIC8vIHN3aXRjaCB0aGUgdXNlciB0byB0aGUgc2VsZWN0ZWMgY29tcGFueVxuXG4gICAgLy8gRmluZCB0aGUgZG9tYWluIGluZm9ybWF0aW9uXG4gICAgaWYgKCFjb21wYW55LmFjdGl2ZU5vdykge1xuICAgICAgbGV0IGRvbWFpbkluZm8gPSB0aGlzLl9zZXIuZ2V0RG9tYWluSW5mbygpO1xuICAgICAgaWYgKGRvbWFpbkluZm8pIHtcbiAgICAgICAgbGV0IHJlcTogYW55ID0ge1xuICAgICAgICAgIGNvbXBhbnlLZXk6IGNvbXBhbnkuY29tcGFueUtleSxcbiAgICAgICAgICBhcHBOYW1lOiBkb21haW5JbmZvLmFwcENvZGUsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuX3Nlci51cGRhdGVVc2VyQ29tcGFueShyZXEpLnN1YnNjcmliZSh7XG4gICAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS50eXBlICYmIHJlc3BvbnNlLnR5cGUgPT0gJ09LJykge1xuICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5hcHBsaWNhdGlvblVSTCkge1xuICAgICAgICAgICAgICAgIGxldCB1cmwgPSByZXNwb25zZS5kYXRhLmFwcGxpY2F0aW9uVVJMO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHVybCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gcmVmcmVzaCB0aGUgY3VycmVudCBwYWdlIHRvIHJlbG9hZCB0aGUgY29udGVudHMgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29tcGFueVxuICAgICAgICAgICAgICAvLyB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBkaXNwbGF5IGEgbWVzc2FnZSB0byB0aGUgdXNlciB0aGF0IHRoZSBjb21wYW55IGNvdWxkIG5vdCBiZSBzd2l0Y2hlZC5cbiAgICAgICAgICAgICAgdGhpcy5fc25hY2tiYXIub3BlbihcbiAgICAgICAgICAgICAgICAnQ29tcGFueSBjb3VsZCBub3QgYmUgc3dpdGNoZWQuIFBsZWFzZSB0cnkgYWdhaW4gb3IgY29udGFjdCBzdXBwb3J0LicsXG4gICAgICAgICAgICAgICAgJ09LJyxcbiAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA1MDAwIH1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZSkgPT4ge1xuICAgICAgICAgICAgLy8gZGlzcGxheSBhIG1lc3NhZ2UgdG8gdGhlIHVzZXIgdGhhdCB0aGUgY29tcGFueSBjb3VsZCBub3QgYmUgc3dpdGNoZWQuXG4gICAgICAgICAgICB0aGlzLl9zbmFja2Jhci5vcGVuKFxuICAgICAgICAgICAgICAnQ29tcGFueSBjb3VsZCBub3QgYmUgc3dpdGNoZWQuIFBsZWFzZSB0cnkgYWdhaW4gb3IgY29udGFjdCBzdXBwb3J0LicsXG4gICAgICAgICAgICAgICdPSycsXG4gICAgICAgICAgICAgIHsgZHVyYXRpb246IDUwMDAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRpc3BsYXkgYSBtZXNzYWdlIHRvIHRoZSB1c2VyIHRoYXQgdGhlIGNvbXBhbnkgY291bGQgbm90IGJlIHN3aXRjaGVkLlxuICAgICAgICB0aGlzLl9zbmFja2Jhci5vcGVuKFxuICAgICAgICAgICdDb21wYW55IGNvdWxkIG5vdCBiZSBzd2l0Y2hlZC4gUGxlYXNlIHRyeSBhZ2FpbiBvciBjb250YWN0IHN1cHBvcnQuJyxcbiAgICAgICAgICAnT0snLFxuICAgICAgICAgIHsgZHVyYXRpb246IDUwMDAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldEN1cnJlbnRDb21wYW55SW5mbygpOiBhbnkge1xuICAgIHRoaXMuY3VycmVudENvbXBhbnkgPSB0aGlzLnVzZXJDb21wYW5pZXMuZmluZChcbiAgICAgIChjb21wYW55OiBhbnkpID0+XG4gICAgICAgIGNvbXBhbnkuY29tcGFueUtleSA9PT0gdGhpcy51c2VyQXV0aERhdGEubGFzdEFjY2Vzc2VkQ29tcGFueUtleVxuICAgICk7XG4gICAgaWYgKHRoaXMuY3VycmVudENvbXBhbnkpIHtcbiAgICAgIGNvbnN0IGNvbXBhbnkgPSB0aGlzLmN1cnJlbnRDb21wYW55Py5uYW1lPy5zcGxpdCgnICcpWzBdO1xuICAgICAgdGhpcy5oZWFkZXJDbGFzcyA9ICdoZWFkZXItJyArIHRoaXMuX2xvd2VyQ2FzZVBpcGU/LnRyYW5zZm9ybShjb21wYW55KTtcbiAgICAgIHRoaXMuaGVhZGVyQ2xhc3MgPSAnaGVhZGVyLScgKyB0aGlzLl90aXRsZUNhc2VwaXBlPy50cmFuc2Zvcm0oY29tcGFueSk7XG4gICAgICB0aGlzLnVzZXJDb21wYW55TG9nbyA9IHRoaXMuY3VycmVudENvbXBhbnk/LmNvbXBhbnlMb2dvVXJsXG4gICAgICAgID8gdGhpcy5jdXJyZW50Q29tcGFueT8uY29tcGFueUxvZ29VcmxcbiAgICAgICAgOiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRDb21wYW55ID8gdGhpcy5jdXJyZW50Q29tcGFueSA6IG51bGw7XG4gIH1cblxuICBzZXRDdXJyZW50QXBwTG9nbygpIHtcbiAgICBjb25zdCBjdXJyZW50QXBwID0gdGhpcy5lbmFibGVkQXBwbGljYXRpb25zPy5maW5kKFxuICAgICAgKGFwcCkgPT4gYXBwLm5hbWUgPT09IHRoaXMuYXBwTmFtZVxuICAgICk7XG4gICAgdGhpcy5jdXJyZW50QXBwID0gY3VycmVudEFwcDtcblxuICAgIGlmIChjdXJyZW50QXBwKSB7XG4gICAgICBzd2l0Y2ggKGN1cnJlbnRBcHA/Lm5hbWUpIHtcbiAgICAgICAgY2FzZSBQUk9GRVRfQVBQUy5hcHByYWlzYWxfbWFuYWdlbWVudDpcbiAgICAgICAgICB0aGlzLmN1cnJlbnRBcHBMb2dvID0gdGhpcy5fZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoXG4gICAgICAgICAgICBpbWFnZURhdGFVcmwucHJvZmV0T3JkZXJzTG9nb1xuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUFJPRkVUX0FQUFMuYXBwcmFpc2FsX3ZhbHVhdGlvbjpcbiAgICAgICAgICB0aGlzLmN1cnJlbnRBcHBMb2dvID0gdGhpcy5fZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoXG4gICAgICAgICAgICBpbWFnZURhdGFVcmwucHJvZmV0VmFsdWF0aW9uTG9nb1xuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUFJPRkVUX0FQUFMuYXBwcmFpc2FsX3JldmlldzpcbiAgICAgICAgICB0aGlzLmN1cnJlbnRBcHBMb2dvID0gdGhpcy5fZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoXG4gICAgICAgICAgICBpbWFnZURhdGFVcmwucHJvZmV0UmV2aWV3TG9nb1xuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUFJPRkVUX0FQUFMucHJvZmV0X3BvcnRhbDpcbiAgICAgICAgICB0aGlzLmN1cnJlbnRBcHBMb2dvID0gdGhpcy5fZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoXG4gICAgICAgICAgICBpbWFnZURhdGFVcmwucHJvZmV0UG9ydGFsTG9nb1xuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudEFwcExvZ28gPSB0aGlzLl9kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChcbiAgICAgICAgaW1hZ2VEYXRhVXJsLnByb2ZldFBvcnRhbExvZ29cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHRvZ2dsZU1lbnUobWVudTogc3RyaW5nKSB7XG4gICAgbWVudSA9PT0gJ2FwcHMnID8gKHRoaXMuaXNBcHBzTWVudU9wZW4gPSAhdGhpcy5pc0FwcHNNZW51T3BlbikgOiBudWxsO1xuICAgIG1lbnUgPT09ICdwcm9maWxlJ1xuICAgICAgPyAodGhpcy5pc1Byb2ZpbGVNZW51T3BlbiA9ICF0aGlzLmlzUHJvZmlsZU1lbnVPcGVuKVxuICAgICAgOiBudWxsO1xuICB9XG59XG4iLCI8bWF0LXRvb2xiYXIgY2RrTWVudUJhciBjb2xvcj1cInByaW1hcnlcIiBbbmdDbGFzc109XCJoZWFkZXJDbGFzc1wiIGNsYXNzPVwiaGVhZGVyLXdyYXBwZXIgY29tbW9uX2hlYWRlciBzaGFkb3ctc21cIj5cbiAgICA8IS0tIE1haW4gbmF2IGJ1dHRvbiBhbmQgbmF2aWdhdGlvbiBsaW5rcyAtLT5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAgY29sb3I9XCJ0aGVtZS13aGl0ZVwiIChjbGljayk9XCJtZW51QWN0aW9uKClcIiBjbGFzcz1cInBteC1idXR0b24gcG14LW1lbnUtYnV0dG9uIG9yZGVycy1tZW51IGljb24tYnRuIG1zLTAgbWUtM1wiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJtYWluIG1lbnVcIiB0YWJpbmRleD1cIjBcIiBtYXRUb29sdGlwPVwiTWFpbiBtZW51XCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJwb2MtaGVhZGVyLXRvb2x0aXBcIj48bWF0LWljb24+bWVudTwvbWF0LWljb24+PC9idXR0b24+XG4gICAgPGEgY2xhc3M9XCJuYXZiYXItYnJhbmQgbWUtYXV0b1wiIGhyZWY9XCIjXCI+XG4gICAgICAgIDxpbWcgKm5nSWY9XCJjdXJyZW50QXBwTG9nb1wiIFtzcmNdPVwiY3VycmVudEFwcExvZ29cIiBhbHQ9XCJBcHAgTG9nb1wiIGNsYXNzPVwiYXBwLWxvZ29cIj5cbiAgICA8L2E+XG4gICAgXG4gICAgPCEtLSBBcHBzIGJ1dHRvbiBhbmQgbWVudSBpdGVtcyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uICpuZ0lmPVwiKGFwcExpc3QubGVuZ3RoID4gMClcIiBjb2xvcj1cInRoZW1lLXdoaXRlXCJcbiAgICAgICAgY2xhc3M9XCJwbXgtYnV0dG9uIHBteC1tZW51LWJ1dHRvbiBpY29uLWJ0biBidG4tc3dpdGNoLWFwcHMgbXMtMSBtZS0xXCIgW2NsYXNzLm1lbnUtb3BlbmVkXT1cImlzQXBwc01lbnVPcGVuID09IHRydWVcIlxuICAgICAgICAobWVudU9wZW5lZCk9XCJ0b2dnbGVNZW51KCdhcHBzJylcIiAobWVudUNsb3NlZCk9XCJ0b2dnbGVNZW51KCdhcHBzJylcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiYXBwc1wiXG4gICAgICAgIG1hdFRvb2x0aXA9XCJTd2l0Y2ggYXBwbGljYXRpb25cIiBtYXRUb29sdGlwUG9zaXRpb249XCJiZWxvd1wiIGFyaWEtbGFiZWw9XCJhcHBzIG1lbnVcIlxuICAgICAgICB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbi1hcnJvdy1kb3duXCI+YXBwczwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPG1hdC1tZW51ICNhcHBzPVwibWF0TWVudVwiIGNsYXNzPVwiYWNjb3VudHNfZHJwbWVudSBwbXgtbWVudS1ncm91cCBoZWFkZXItZHJvcGRvd24tYXBwc1wiIGhhc0JhY2tkcm9wPVwidHJ1ZVwiIHhQb3NpdGlvbj1cImJlZm9yZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9wb3Zlci1jb250ZW50IHNob3ctbWVudVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcG92ZXItaGVhZGVyXCI+PGgzIGNsYXNzPVwicG9wb3Zlci10aXRsZVwiPlN3aXRjaCBBcHBsaWNhdGlvbjwvaDM+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wb3Zlci1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcG92ZXItY29udGVudC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImFwcExpc3Q/Lmxlbmd0aCA9PSAxO2Vsc2UgYXBwc1RpdGxlXCI+RW5hYmxlZCBBcHBsaWNhdGlvbjwvcD5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNhcHBzVGl0bGU+PHA+RW5hYmxlZCBBcHBsaWNhdGlvbnM8L3A+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8dWwgY2RrTWVudSBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1hcHBzLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjZGtNZW51SXRlbSBjbGFzcz1cImxpc3QtaXRlbSBsaXN0LWFwcFwiICpuZ0Zvcj1cImxldCBhcHAgb2YgYXBwTGlzdDtsZXQgaSA9IGluZGV4XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCIoYXBwPy5hY3RpdmUpID8gJ2FwcC1hY3RpdmUnIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBjbGFzcz1cInBteC1idXR0b24gbGlzdC1idXR0b25cIiAoY2xpY2spPVwiYXBwUmVkaXJlY3QoYXBwKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtaWNvbi13cmFwcGVyXCI+PGltZyBbc3JjXT1cIl9kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChpbWFnZURhdGFVcmxzLnByb2ZldFRodW1ibmFpbCApXCIgY2xhc3M9XCJhcHAtaWNvblwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGlzdC10ZXh0IG1lLWF1dG9cIj57eyBhcHA/Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiYWN0aXZlLWxhYmVsXCIgKm5nSWY9XCIoYXBwPy5hY3RpdmUpXCI+QWN0aXZlPC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJob3Zlci1sYWJlbCB0b29sdGlwLWxhYmVsXCIgKm5nSWY9XCIhKGFwcD8uYWN0aXZlKVwiPkNsaWNrIHRvIHN3aXRjaCBhcHA8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L21hdC1tZW51PlxuICAgIFxuICAgIDxzcGFuIGNsYXNzPVwidnIgdnItYmx1cnlcIj48L3NwYW4+XG4gICAgPCEtLSBQcm9maWxlIGJ1dHRvbiBhbmQgcHJvZmlsZSBkcm9wZG93biBsaW5rcyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIkJ1dHRvbiBncm91cCB3aXRoIHByb2ZpbGUgaW5mb1wiIFtuZ0NsYXNzXT1cIigoKGN1cnJlbnRDb21wYW55Py5zdWJEb21haW4pICYmIHVzZXJDb21wYW55TG9nbykgPyAnYnJhbmRlZC1ncm91cC10cnVlJyA6ICdicmFuZGVkLWdyb3VwLWZhbHNlJykgKyAnICcgKyAoaXNQcm9maWxlTWVudU9wZW4gPyAnYnRuLWdyb3VwLWNsaWNrZWQnIDogJycpXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJwbXgtYnV0dG9uIHBteC1tZW51LWJ1dHRvbiBwcm9maWxlLWJ1dHRvblwiIG1hdC1idXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiIChtZW51T3BlbmVkKT1cInRvZ2dsZU1lbnUoJ3Byb2ZpbGUnKVwiIChtZW51Q2xvc2VkKT1cInRvZ2dsZU1lbnUoJ3Byb2ZpbGUnKVwiIFtuZ0NsYXNzXT1cImN1cnJlbnRDb21wYW55Py5zdWJEb21haW4gPyAnYnJhbmRlZC1idXR0b24tdHJ1ZScgOiAnYnJhbmRlZC1idXR0b24tZmFsc2UnXCIgbWF0VG9vbHRpcD1cIlByb2ZpbGUgSW5mb1wiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZmlsZS1pbm5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJicmFuZC1sb2dvIGFsaWduLXNlbGYtY2VudGVyXCIgKm5nSWY9XCIoKGN1cnJlbnRDb21wYW55Py5zdWJEb21haW4pICYmIHVzZXJDb21wYW55TG9nbylcIiBbbmdDbGFzc109XCJ1c2VyQ29tcGFueUxvZ28gPyAnYnJhbmRlZC1sb2dvLXRydWUnIDogJ2JyYW5kZWQtbG9nby1mYWxzZSdcIiBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQtaW1hZ2UnOiAndXJsKCcgKyB1c2VyQ29tcGFueUxvZ28gKyAnKSd9XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhclwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwidXNlckltYWdlTGluaztlbHNlIGRlZmF1bHRBdmF0YXJcIiBbc3JjXT1cInVzZXJJbWFnZUxpbmtcIiBjbGFzcz1cImF2YXRhci1pbWFnZVwiIGFsdD1cIkF2YXRhclwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRBdmF0YXI+PGltZyBbc3JjXT1cIl9kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChpbWFnZURhdGFVcmxzLmRlZmF1bHRVc2VySW1hZ2UpXCIgY2xhc3M9XCJhdmF0YXItZGVmYXVsdFwiIGFsdD1cInByb2ZpbGUgcGljXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJhY2NvdW50c19kcnBtZW51IHBteC1tZW51LWdyb3VwIGhlYWRlci1kcm9wZG93bi1wcm9maWxlXCIgeFBvc2l0aW9uPVwiYmVmb3JlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3BvdmVyLWNvbnRlbnQgc2hvdy1tZW51XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wb3Zlci1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wb3Zlci11c2VyLXRvcFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1c2VySW1hZ2VMaW5rO2Vsc2UgZGVmYXVsdExhcmdlQXZhdGFyXCIgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kLWltYWdlJzogJ3VybCgnICsgdXNlckltYWdlTGluayArICcpJ31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXZhdGFyLWljb25cIiBhbHQ9XCJBdmF0YXIgaWNvblwiPiZuYnNwOzwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TGFyZ2VBdmF0YXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQtaW1hZ2UnOiAndXJsKCcgKyBpbWFnZURhdGFVcmxzLmRlZmF1bHRVc2VySW1hZ2UgKyAnKSd9XCIgY2xhc3M9XCJhdmF0YXItaWNvbiBkZWZhdWx0LWF2YXRhclwiIGFsdD1cIkF2YXRhciBpY29uXCI+Jm5ic3A7PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwicHJvZmlsZS1uYW1lXCI+PHNwYW4gKm5nSWY9XCJ1c2VyQXV0aERhdGFcIj57eyB1c2VyQXV0aERhdGE/LmZpcnN0TmFtZSB9fSB7eyB1c2VyQXV0aERhdGE/Lmxhc3ROYW1lIH19PC9zcGFuPjwvaDM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9XCJhY2NlbnRcIiBjbGFzcz1cInBteC1idXR0b24gYnRuIGJ0bi1zbWFsbCB2aWV3LXByb2ZpbGUgbXMtMFwiIChjbGljayk9XCJwcm9maWxlKClcIj5WaWV3IFByb2ZpbGU8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3BvdmVyLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wb3Zlci1jb250ZW50LXRpdGxlXCI+PHA+T3ZlcnZpZXc8L3A+PC9kaXY+XG4gICAgICAgICAgICAgICAgPHVsIGNka01lbnUgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3Qtb3ZlcnZpZXdcIiAqbmdJZj1cImN1cnJlbnRDb21wYW55XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjZGtNZW51SXRlbSBjbGFzcz1cImxpc3QtaXRlbVwiICpuZ0lmPVwidXNlckF1dGhEYXRhPy5lbWFpbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgbWF0LW1lbnUtaXRlbSBjbGFzcz1cImxpc3QtdGV4dCBsaXN0LXRleHQtZW1haWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJsaXN0LWljb25cIj5tYWlsPC9tYXQtaWNvbj48c3BhbiBjbGFzcz1cInBteC1sb3dlci1jYXNlIHBteC10ZXh0LXdyYXAgbWUtYXV0b1wiPnt7IHVzZXJBdXRoRGF0YT8uZW1haWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjZGtNZW51SXRlbSBjbGFzcz1cImxpc3QtaXRlbSBkLW5vbmVcIiAqbmdJZj1cInVzZXJBdXRoRGF0YT8uY29udGFjdFBob25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBtYXQtbWVudS1pdGVtIGNsYXNzPVwibGlzdC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibGlzdC1pY29uXCI+Y2FsbDwvbWF0LWljb24+PHNwYW4gY2xhc3M9XCJ0aXRsZS1jYXNlIG1lLWF1dG9cIj57eyB1c2VyQXV0aERhdGE/LmNvbnRhY3RQaG9uZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPGxpIGNka01lbnVJdGVtIGNsYXNzPVwibGlzdC1pdGVtXCIgKm5nSWY9XCJ1c2VyQXV0aERhdGE/LmFkZHJlc3MgIT09IG51bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJsaXN0LXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJsaXN0LWljb25cIj5sb2NhdGlvbl9vbjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZS1jYXNlIG1lLWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPnt7IHVzZXJBdXRoRGF0YT8uYWRkcmVzcz8uc3RyZWV0QWRkcmVzcyB9fSB7eyh1c2VyQXV0aERhdGE/LmFkZHJlc3M/LnN0cmVldEFkZHJlc3MyICE9PSBudWxsKSA/IHVzZXJBdXRoRGF0YT8uYWRkcmVzcz8uc3RyZWV0QWRkcmVzczIgOiAnJyB9fTwvc21hbGw+PGJyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHVzZXJBdXRoRGF0YT8uYWRkcmVzcz8uY2l0eSB9fSB7e3VzZXJBdXRoRGF0YT8uYWRkcmVzcz8uc3RhdGVPclByb3ZpbmNlIH19IHt7dXNlckF1dGhEYXRhPy5hZGRyZXNzPy5wb3N0YWxDb2RlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgPGhyIC8+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcG92ZXItY29udGVudC10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cInVzZXJDb21wYW5pZXM/Lmxlbmd0aCA9PSAxO2Vsc2UgY29tcGFuaWVzVGl0bGVcIj5Db21wYW55PC9wPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NvbXBhbmllc1RpdGxlPjxwPkNvbXBhbmllczwvcD48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDx1bCBjZGtNZW51IGNsYXNzPVwibGlzdC1ncm91cCBsaXN0LWdyb3VwLWNvbXBhbmllc1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2RrTWVudUl0ZW0gY2xhc3M9XCJsaXN0LWl0ZW0gbGlzdC1jb21wYW55XCIgKm5nRm9yPVwibGV0IGNvbXBhbnkgb2YgdXNlckNvbXBhbmllc1wiIFtuZ0NsYXNzXT1cIihjb21wYW55Py5hY3RpdmVOb3cpID8gJ2xpc3QtYWN0aXZlIGNvbXBhbnktYWN0aXZlJyA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJwbXgtYnV0dG9uIGxpc3QtYnV0dG9uXCIgKGNsaWNrKT1cInN3aXRjaENvbXBhbnkoY29tcGFueSlcIiBbbWF0VG9vbHRpcF09XCJjb21wYW55Py5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYmVsb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uLWNoZWNrXCI+e3sgKGNvbXBhbnk/LmFjdGl2ZU5vdykgPyAnY2hlY2tfY2lyY2xlJyA6ICdzd2FwX3ZlcnQnIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpc3QtdGV4dCBwbXgtdGV4dC13cmFwIG1lLWF1dG9cIj57eyBjb21wYW55Py5uYW1lIHwgdGl0bGVjYXNlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImFjdGl2ZS1sYWJlbFwiICpuZ0lmPVwiKGNvbXBhbnk/LmFjdGl2ZU5vdylcIj5BY3RpdmU8L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8aHIgLz5cbiAgICAgICAgICAgICAgICA8dWwgY2RrTWVudSBjbGFzcz1cImxpc3QtZ3JvdXAgbGFzdC1ncm91cCBteS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSBjZGtNZW51SXRlbSBjbGFzcz1cImxpc3QtaXRlbSBweS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJwbXgtYnV0dG9uIGxpc3QtYnV0dG9uIGJ0bi1sb2dvdXRcIiAoY2xpY2spPVwib25Mb2dvdXRDbGljaygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnBvd2VyX3NldHRpbmdzX25ldzwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsaXN0LXRleHRcIj5Mb2dvdXQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbWF0LW1lbnU+XG48L21hdC10b29sYmFyPiJdfQ==
284
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi1oZWFkZXIvc3JjL2xpYi9oZWFkZXIvaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbW1vbi1oZWFkZXIvc3JjL2xpYi9oZWFkZXIvaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzNELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDM0csT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQVF0RCxNQUFN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YUFDRjtpQkFDSTtnQkFDSCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQzthQUNoQztRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQzs7NkdBM1JVLGVBQWU7aUdBQWYsZUFBZSw2TkNoQzVCLHdxU0FpS2M7NEZEaklELGVBQWU7a0JBTjNCLFNBQVM7K0JBQ0UsWUFBWSxpQkFHUCxpQkFBaUIsQ0FBQyxJQUFJOzBFQUk1QixRQUFRO3NCQUFoQixLQUFLO2dCQUNJLFNBQVM7c0JBQWxCLE1BQU07Z0JBa0JlLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0U2lkZW5hdiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZ2V0Q3VycmVudFVzZXIsIHNpZ25PdXQgfSBmcm9tICdhd3MtYW1wbGlmeS9hdXRoJztcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcHBNZW51LCBDb21wYW55IH0gZnJvbSAnLi4vY29tbW9uLWhlYWRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29tbW9uSGVhZGVyU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi1oZWFkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wYW55U3dpdGNoV2FybmluZ0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBhbnktc3dpdGNoLXdhcm5pbmcvY29tcGFueS1zd2l0Y2gtd2FybmluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXBwQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnL2FwcC5jb25maWcnO1xuaW1wb3J0IHsgUFJPRkVUX0FQUFMgfSBmcm9tICcuLi91dGlscy9hcHBzLmVudW0nO1xuaW1wb3J0IHsgaW1hZ2VEYXRhVXJsIH0gZnJvbSAnLi4vdXRpbHMvaW1hZ2UuZGF0YXVybCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1oZWFkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaGVhZGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEhlYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHVzZXJuYW1lOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgdGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAT3V0cHV0KCkgaW5mb0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIGNvbXBhbnlQcm9maWxlOiBhbnk7XG4gIHBvcnRhbFVybDogc3RyaW5nID0gJyc7XG4gIHVzZXJBdXRoRGF0YTogYW55O1xuICB1c2VySW1hZ2VMaW5rOiBhbnkgPSBudWxsO1xuICB1c2VyQ29tcGFueUxvZ286IGFueSA9ICcnO1xuICBpbWFnZURhdGFVcmxzID0gaW1hZ2VEYXRhVXJsO1xuICBwdWJsaWMgX3JvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwcml2YXRlIF9zbmFja2JhciA9IGluamVjdChNYXRTbmFja0Jhcik7XG4gIHB1YmxpYyBfaGVhZGVyU2VyID0gaW5qZWN0KENvbW1vbkhlYWRlclNlcnZpY2UpO1xuICBwdWJsaWMgX2RvbVNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuICBwcml2YXRlIF9kaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcblxuXG4gIGNvbXBhbnlDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gIGFwcENvbmZpZzogYW55ID0gQXBwQ29uZmlnLmFwcENvbmZpZztcbiAgbWVudUxpc3Q6IEFwcE1lbnVbXSA9IFtdO1xuICBjb21wYW55TGlzdDogQ29tcGFueVtdID0gW107XG4gIEBWaWV3Q2hpbGQoJ3NpZGVuYXYnKSBzaWRlbmF2ITogTWF0U2lkZW5hdjtcbiAgbWVudUluZm86IHsgW2tleTogc3RyaW5nXTogQXBwTWVudVtdIH0gPSB7fTtcbiAgYWN0aXZlQ29tcGFueTogQ29tcGFueSB8IHVuZGVmaW5lZDtcbiAgZ3JvdXBlZE1lbnU6IHsgYXBwVHlwZTogUFJPRkVUX0FQUFMsIGdyb3VwczogeyBncm91cEJ5Pzogc3RyaW5nLCBpdGVtczogQXBwTWVudVtdIH1bXSB9W10gPSBbXTtcblxuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy51cGRhdGVMYXN0QXBwSW5mbygpO1xuICAgIHRoaXMuZ2V0Q29tcGFueUxpc3QoKTtcbiAgICB0aGlzLmdldE1lbnVMaXN0KCk7XG5cbiAgICB0aGlzLmZldGNoQ29tcGFueVByb2ZpbGUoKTtcblxuICAgIGxldCB1c2VySW5mbyA9IGF3YWl0IGdldEN1cnJlbnRVc2VyKCk7XG4gICAgaWYgKHVzZXJJbmZvPy51c2VybmFtZSkge1xuICAgICAgbGV0IHVzZXJEZXRhaWxzID0gdGhpcy5faGVhZGVyU2VyLmdldFVzZXJEZXRhaWxzQnlFbWFpbCh7XG4gICAgICAgIGVtYWlsOiB1c2VySW5mby51c2VybmFtZSxcbiAgICAgIH0pO1xuICAgICAgZm9ya0pvaW4oW3VzZXJEZXRhaWxzXSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAgIGlmIChyZXMgJiYgcmVzWzBdKSB7XG4gICAgICAgICAgICB0aGlzLnVzZXJBdXRoRGF0YSA9IHJlc1swXTtcbiAgICAgICAgICAgIHRoaXMudXNlcm5hbWUgPSB0aGlzLnVzZXJBdXRoRGF0YS5maXJzdE5hbWU7XG4gICAgICAgICAgICBpZiAodGhpcy51c2VyQXV0aERhdGE/Ll9saW5rcz8ucHJvZmlsZUltYWdlPy5ocmVmKSB7XG4gICAgICAgICAgICAgIHRoaXMuZ2V0VXNlclByb2ZpbGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdyb3VwTWVudSgpIHtcbiAgICAvLyBSZXNldCB0aGUgZ3JvdXBlZCBtZW51XG4gICAgdGhpcy5ncm91cGVkTWVudSA9IFtdO1xuXG4gICAgLy8gVGhpcyB3aWxsIGhvbGQgdGhlIGdyb3VwaW5ncyB0ZW1wb3JhcmlseVxuICAgIGNvbnN0IG1lbnVNYXAgPSBuZXcgTWFwPHN0cmluZywgeyBhcHBUeXBlOiBQUk9GRVRfQVBQUywgZ3JvdXBzOiB7IGdyb3VwQnk/OiBzdHJpbmcsIGl0ZW1zOiBBcHBNZW51W10gfVtdIH0+KCk7XG5cbiAgICAvLyBHcm91cCB0aGUgaXRlbXNcbiAgICB0aGlzLm1lbnVMaXN0LmZvckVhY2gobWVudSA9PiB7XG4gICAgICBjb25zdCBhcHBLZXkgPSBtZW51LmFwcFR5cGUgYXMgc3RyaW5nO1xuICAgICAgY29uc3QgZ3JvdXBLZXkgPSBtZW51Lmdyb3VwQnkgfHwgJ191bmdyb3VwZWQnO1xuXG4gICAgICAvLyBFbnN1cmUgYXBwVHlwZSBleGlzdHMgaW4gdGhlIG1hcFxuICAgICAgaWYgKCFtZW51TWFwLmhhcyhhcHBLZXkpKSB7XG4gICAgICAgIG1lbnVNYXAuc2V0KGFwcEtleSwgeyBhcHBUeXBlOiBtZW51LmFwcFR5cGUsIGdyb3VwczogW10gfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFwcEVudHJ5ID0gbWVudU1hcC5nZXQoYXBwS2V5KSE7XG5cbiAgICAgIC8vIEZpbmQgZXhpc3RpbmcgZ3JvdXAgb3IgY3JlYXRlIGEgbmV3IG9uZVxuICAgICAgbGV0IGdyb3VwID0gYXBwRW50cnkuZ3JvdXBzLmZpbmQoZyA9PiBnLmdyb3VwQnkgPT09IGdyb3VwS2V5KTtcbiAgICAgIGlmICghZ3JvdXApIHtcbiAgICAgICAgZ3JvdXAgPSB7IGdyb3VwQnk6IGdyb3VwS2V5LCBpdGVtczogW10gfTtcbiAgICAgICAgYXBwRW50cnkuZ3JvdXBzLnB1c2goZ3JvdXApO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgbWVudSBpdGVtIHRvIHRoZSBjb3JyZWN0IGdyb3VwXG4gICAgICBncm91cC5pdGVtcy5wdXNoKG1lbnUpO1xuICAgIH0pO1xuXG4gICAgLy8gQ29udmVydCBtYXAgdmFsdWVzIHRvIGFuIGFycmF5IHRvIHByZXNlcnZlIG9yZGVyXG4gICAgdGhpcy5ncm91cGVkTWVudSA9IEFycmF5LmZyb20obWVudU1hcC52YWx1ZXMoKSk7XG4gIH1cblxuICBzZWxlY3RDdXJyZW50Q29tcGFueSgpIHtcbiAgICBsZXQgY29tID0gdGhpcy5jb21wYW55TGlzdC5maW5kKHggPT4geC5pc0FjdGl2ZSk7XG4gICAgdGhpcy5hY3RpdmVDb21wYW55ID0gY29tO1xuICB9XG5cbiAgcGF0Y2hDdXJyZW50Q29tcGFueUluZm8oKSB7XG4gICAgbGV0IGNvbSA9IHRoaXMuY29tcGFueUxpc3QuZmluZCh4ID0+IHguaXNBY3RpdmUpO1xuICAgIHRoaXMuY29tcGFueUNvbnRyb2wucGF0Y2hWYWx1ZShjb20pO1xuICB9XG5cbiAgc2lkZU1lbnVUb2dnbGUoKSB7XG4gICAgdGhpcy5zaWRlbmF2LnRvZ2dsZSgpO1xuICB9XG5cbiAgLy8gcHJpdmF0ZSBncm91cEJ5QXBwVHlwZShtZW51TGlzdDogQXBwTWVudVtdKTogeyBba2V5OiBzdHJpbmddOiBBcHBNZW51W10gfSB7XG4gIC8vICAgcmV0dXJuIG1lbnVMaXN0LnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gIC8vICAgICAoYWNjW2l0ZW0uYXBwVHlwZV0gPSBhY2NbaXRlbS5hcHBUeXBlXSB8fCBbXSkucHVzaChpdGVtKVxuICAvLyAgICAgcmV0dXJuIGFjYztcbiAgLy8gICB9LCB7fSBhcyB7IFtrZXk6IHN0cmluZ106IEFwcE1lbnVbXSB9KTtcbiAgLy8gfVxuXG4gIG1lbnVTZWxlY3Rpb24obWVudTogQXBwTWVudSkge1xuICAgIHRoaXMuc2lkZU1lbnVUb2dnbGUoKTtcbiAgICBpZiAobWVudS5hcHBUeXBlID09IHRoaXMuX2hlYWRlclNlci5oZWFkZXJDb25maWcuYXBwVHlwZSkge1xuICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFttZW51LnBhdGhdKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBsZXQgYWN0aXZlQ29tID0gdGhpcy5jb21wYW55TGlzdC5maW5kKHggPT4geC5pc0FjdGl2ZSk7XG4gICAgICBpZiAoYWN0aXZlQ29tKSB7XG4gICAgICAgIGlmIChhY3RpdmVDb20uYmFzZVVybHNbbWVudS5hcHBUeXBlXSkge1xuICAgICAgICAgIGxldCB1cmwgPSBgJHthY3RpdmVDb20uYmFzZVVybHNbbWVudS5hcHBUeXBlXX0vJHttZW51LnBhdGh9YFxuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHVybCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRDb21wYW55TGlzdCgpIHtcbiAgICB0aGlzLl9oZWFkZXJTZXIuZ2V0Q29tcGFueUxpc3QoKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHY6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLl9oZWFkZXJTZXIuc2V0Q29tcGFueUxpc3Qodik7XG4gICAgICAgIHRoaXMuY29tcGFueUxpc3QgPSB2O1xuICAgICAgICB0aGlzLnNlbGVjdEN1cnJlbnRDb21wYW55KCk7XG4gICAgICAgIHRoaXMucGF0Y2hDdXJyZW50Q29tcGFueUluZm8oKTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIGdldE1lbnVMaXN0KCkge1xuICAgIHRoaXMuX2hlYWRlclNlci5nZXRNZW51TGlzdCgpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAodjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuX2hlYWRlclNlci5zZXRNZW51U3RhdGUodik7XG4gICAgICAgIHRoaXMubWVudUxpc3QgPSB2O1xuICAgICAgICB0aGlzLmdyb3VwTWVudSgpO1xuICAgICAgICAvLyB0aGlzLm1lbnVJbmZvID0gdGhpcy5ncm91cEJ5QXBwVHlwZSh2KTtcbiAgICAgICAgLy8gdGhpcy5faGVhZGVyU2VyLnNldE1lbnVTdGF0ZSh2KTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cblxuICAvLyBUT0RPIC0tIG5lZWRzIHRvIGJlIHJlbW92ZWQgYWZ0ZXIgY2hlY2tcbiAgZmV0Y2hDb21wYW55UHJvZmlsZSgpIHtcbiAgICBsZXQgcmVxID0ge1xuICAgICAgY29tcGFueU5hbWU6IGRvY3VtZW50LmxvY2F0aW9uLmhvc3Quc3BsaXQoJy4nKVswXSxcbiAgICB9O1xuICAgIHRoaXMuX2hlYWRlclNlci5mZXRjaENvbXBhbnlQcm9maWxlKHJlcSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICh2KSA9PiB7XG4gICAgICAgIHRoaXMuY29tcGFueVByb2ZpbGUgPSB2O1xuICAgICAgICBsZXQgZGF0YSA9IHtcbiAgICAgICAgICBjb21wYW55SW5mbzogdixcbiAgICAgICAgICBwb3J0YWxVcmw6IHRoaXMucG9ydGFsVXJsLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmluZm9FdmVudC5lbWl0KGRhdGEpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldFVzZXJQcm9maWxlKCkge1xuICAgIHRoaXMuX2hlYWRlclNlclxuICAgICAgLm9idGFpbkRhdGFCeVVybCh0aGlzLnVzZXJBdXRoRGF0YS5fbGlua3MucHJvZmlsZUltYWdlLmhyZWYpXG4gICAgICAuc3Vic2NyaWJlKChpbWcpID0+IHtcbiAgICAgICAgaWYgKGltZz8ubG9jYXRpb25VcmwpIHtcbiAgICAgICAgICB0aGlzLnVzZXJJbWFnZUxpbmsgPSBpbWcubG9jYXRpb25VcmxcbiAgICAgICAgICAgID8gdGhpcy5fZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoaW1nLmxvY2F0aW9uVXJsKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByb2ZpbGUoKSB7XG4gICAgLy8gdGhpcy5mZXRjaFVzZXJEYXRhKCk7XG5cbiAgICAvLyBUT0RPICAtLSBuZWVkIHRvIHRlc3QgYW5kIHJlbW92ZSBjb21tZW50ZWQgY29kZVxuICAgIC8vIGlmICh0aGlzLl9oZWFkZXJTZXIuaGVhZGVyQ29uZmlnLnBvcnRhbEZyb250ZW5kVXJsKSB7XG4gICAgLy8gICBsZXQgdXJsID0gdGhpcy5wb3J0YWxVcmwgKyAnL2FwcC9wcm9maWxlJztcbiAgICAvLyAgIGRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSB1cmw7XG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvYXBwL3Byb2ZpbGUnKTtcbiAgICAvLyB9XG5cbiAgICBpZiAodGhpcy5faGVhZGVyU2VyLmhlYWRlckNvbmZpZy5hcHBUeXBlID09IFBST0ZFVF9BUFBTLnByb2ZldF9wb3J0YWwpIHtcbiAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvYXBwL3Byb2ZpbGUnKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBsZXQgdXJsID0gdGhpcy5hY3RpdmVDb21wYW55Py5iYXNlVXJscy5wcm9mZXRfcG9ydGFsICsgJy9hcHAvcHJvZmlsZSc7XG4gICAgICBkb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICAgIH1cbiAgfVxuICBvbkxvZ291dENsaWNrKCkge1xuICAgIHNpZ25PdXQoeyBnbG9iYWw6IHRydWUsIG9hdXRoOiB7IHJlZGlyZWN0VXJsOiB0aGlzLl9oZWFkZXJTZXIuaGVhZGVyQ29uZmlnLnNpZ25PdXRVcmwgfSB9KVxuICAgICAgLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgd2luZG93Lm9wZW4odGhpcy5faGVhZGVyU2VyLmhlYWRlckNvbmZpZy5zaWduT3V0VXJsLCAnX3NlbGYnKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICBzaWduT3V0KHsgZ2xvYmFsOiB0cnVlLCBvYXV0aDogeyByZWRpcmVjdFVybDogdGhpcy5faGVhZGVyU2VyLmhlYWRlckNvbmZpZy5zaWduT3V0VXJsIH0gfSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLl9oZWFkZXJTZXIuaGVhZGVyQ29uZmlnLnNpZ25PdXRVcmwsICdfc2VsZicpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4gY29uc29sZS5sb2coZXJyb3IpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlTGFzdEFwcEluZm8oKSB7XG4gICAgbGV0IHJlcSA9IHtcbiAgICAgIGxhc3RBY2Nlc3NlZEFwcGxpY2F0aW9uOiB0aGlzLl9oZWFkZXJTZXIuaGVhZGVyQ29uZmlnLmFwcFR5cGVcbiAgICB9O1xuXG4gICAgdGhpcy5faGVhZGVyU2VyLnVwZGF0ZUxhc3RBY2Nlc3NlZEFwcGxpY2F0aW9uKHJlcSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgc3dpdGNoQ29tcGFueShpbmZvOiBhbnkpIHtcbiAgICBsZXQgY29tcGFueSA9IGluZm8udmFsdWU7XG4gICAgbGV0IGNvbUluZm8gPSB7XG4gICAgICBhY3RpdmVDb21wYW55OiB0aGlzLmFjdGl2ZUNvbXBhbnk/Lm5hbWUsXG4gICAgICBzd2l0Y2hpbmdDb21wYW55OiBjb21wYW55Lm5hbWVcbiAgICB9O1xuICAgIHRoaXMuX2RpYWxvZy5vcGVuKENvbXBhbnlTd2l0Y2hXYXJuaW5nQ29tcG9uZW50LCB7IGRhdGE6IGNvbUluZm8gfSkuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgLy8gRmluZCB0aGUgZG9tYWluIGluZm9ybWF0aW9uXG4gICAgICAgIGlmICghY29tcGFueS5pc0FjdGl2ZSkge1xuICAgICAgICAgIC8vIGxldCBkb21haW5JbmZvID0gdGhpcy5faGVhZGVyU2VyLmdldERvbWFpbkluZm8oKTtcbiAgICAgICAgICAvLyBpZiAoZG9tYWluSW5mbykge1xuICAgICAgICAgIGxldCByZXE6IGFueSA9IHtcbiAgICAgICAgICAgIGNvbXBhbnlLZXk6IGNvbXBhbnkuY29tcGFueUtleSxcbiAgICAgICAgICAgIGFwcE5hbWU6IHRoaXMuX2hlYWRlclNlci5oZWFkZXJDb25maWcuYXBwVHlwZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuX2hlYWRlclNlci51cGRhdGVVc2VyQ29tcGFueShyZXEpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudHlwZSAmJiByZXNwb25zZS50eXBlID09ICdPSycpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5hcHBsaWNhdGlvblVSTCkge1xuICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHJlc3BvbnNlLmRhdGEuYXBwbGljYXRpb25VUkw7XG4gICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZSh1cmwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyByZWZyZXNoIHRoZSBjdXJyZW50IHBhZ2UgdG8gcmVsb2FkIHRoZSBjb250ZW50cyBiYXNlZCBvbiB0aGUgY3VycmVudCBjb21wYW55XG4gICAgICAgICAgICAgICAgLy8gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRpc3BsYXkgYSBtZXNzYWdlIHRvIHRoZSB1c2VyIHRoYXQgdGhlIGNvbXBhbnkgY291bGQgbm90IGJlIHN3aXRjaGVkLlxuICAgICAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW4oXG4gICAgICAgICAgICAgICAgICAnQ29tcGFueSBjb3VsZCBub3QgYmUgc3dpdGNoZWQuIFBsZWFzZSB0cnkgYWdhaW4gb3IgY29udGFjdCBzdXBwb3J0LicsXG4gICAgICAgICAgICAgICAgICAnT0snLFxuICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNTAwMCB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiAoZSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnBhdGNoQ3VycmVudENvbXBhbnlJbmZvKCk7XG4gICAgICAgICAgICAgIC8vIGRpc3BsYXkgYSBtZXNzYWdlIHRvIHRoZSB1c2VyIHRoYXQgdGhlIGNvbXBhbnkgY291bGQgbm90IGJlIHN3aXRjaGVkLlxuICAgICAgICAgICAgICB0aGlzLl9zbmFja2Jhci5vcGVuKFxuICAgICAgICAgICAgICAgICdDb21wYW55IGNvdWxkIG5vdCBiZSBzd2l0Y2hlZC4gUGxlYXNlIHRyeSBhZ2FpbiBvciBjb250YWN0IHN1cHBvcnQuJyxcbiAgICAgICAgICAgICAgICAnT0snLFxuICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDUwMDAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyB9IFxuICAgICAgICAgIC8vIGVsc2Uge1xuICAgICAgICAgIC8vICAgdGhpcy5wYXRjaEN1cnJlbnRDb21wYW55SW5mbygpO1xuICAgICAgICAgIC8vICAgdGhpcy5fc25hY2tiYXIub3BlbihcbiAgICAgICAgICAvLyAgICAgJ0NvbXBhbnkgY291bGQgbm90IGJlIHN3aXRjaGVkLiBQbGVhc2UgdHJ5IGFnYWluIG9yIGNvbnRhY3Qgc3VwcG9ydC4nLFxuICAgICAgICAgIC8vICAgICAnT0snLFxuICAgICAgICAgIC8vICAgICB7IGR1cmF0aW9uOiA1MDAwIH1cbiAgICAgICAgICAvLyAgICk7XG4gICAgICAgICAgLy8gfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXRjaEN1cnJlbnRDb21wYW55SW5mbygpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cbiIsIjwhLS0gPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJ0aGVtZS13aGl0ZVwiIChjbGljayk9XCJzaWRlbmF2LnRvZ2dsZSgpXCI+TWVudTwvYnV0dG9uPiAtLT5cbjxtYXQtc2lkZW5hdi1jb250YWluZXIgY2xhc3M9XCJtYWluLWNvbnRhaW5lclwiPlxuICAgIDxtYXQtc2lkZW5hdiBjZGtNZW51QmFyICNzaWRlbmF2IG1vZGU9XCJvdmVyXCIgY2xhc3M9XCJzaWRlbmF2RHJhd2VyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcmF3ZXJIZWFkTG9nb1wiPjxpbWcgW3NyY109XCJfZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoaW1hZ2VEYXRhVXJscy5wcm9mZXRMb2dvKVwiPjwvZGl2PlxuICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFwcFR5cGUgb2YgbWVudUluZm8gfCBrZXl2YWx1ZVwiPlxuICAgICAgICAgICAgPGltZyAqbmdJZj1cImFwcENvbmZpZ1thcHBUeXBlLmtleV0/LmFwcExvZ29VcmlcIlxuICAgICAgICAgICAgICAgIFtzcmNdPVwiX2RvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKGFwcENvbmZpZ1thcHBUeXBlLmtleV0/LmFwcExvZ29VcmkpXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogMjBweDsgcGFkZGluZzogNXB4O1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1YkhlYWRMaXN0SXRlbXNcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFwcFR5cGUudmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1saXN0LWl0ZW0gKGNsaWNrKT1cIm1lbnVTZWxlY3Rpb24oaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUtbWVudSc6IGl0ZW0gfCBhY3RpdmVSb3V0ZSA6IF9yb3V0ZXIudXJsOl9oZWFkZXJTZXIuaGVhZGVyQ29uZmlnLmFwcFR5cGV9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtZW51SWNvbkxpc3RcIiAqbmdJZj1cIml0ZW0uaWNvblwiPnt7IGl0ZW0uaWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtLm1lbnVOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L25nLWNvbnRhaW5lcj4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFwcCBvZiBncm91cGVkTWVudVwiPlxuICAgICAgICAgICAgPCEtLSA8aDMgbWF0LXN1YmhlYWRlcj57eyBhcHBUeXBlLmtleSB9fTwvaDM+IC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcExpc3RcIj5cbiAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiYXBwQ29uZmlnW2FwcC5hcHBUeXBlXT8uYXBwTG9nb1VyaVwiXG4gICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiX2RvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKGFwcENvbmZpZ1thcHAuYXBwVHlwZV0/LmFwcExvZ29VcmkpXCI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgYXBwLmdyb3Vwc1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJncm91cC5ncm91cEJ5ID09ICdfdW5ncm91cGVkJzsgZWxzZSBncm91cGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWJIZWFkTGlzdEl0ZW1zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBtZW51IG9mIGdyb3VwLml0ZW1zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1saXN0LWl0ZW0gKGNsaWNrKT1cIm1lbnVTZWxlY3Rpb24obWVudSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZS1tZW51JzogbWVudSB8IGFjdGl2ZVJvdXRlIDogX3JvdXRlci51cmw6X2hlYWRlclNlci5oZWFkZXJDb25maWcuYXBwVHlwZX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWVudUljb25MaXN0XCIgKm5nSWY9XCJtZW51Lmljb25cIj57eyBtZW51Lmljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBtZW51Lm1lbnVOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxpc3QtaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2dyb3VwZWQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWJIZWFkTGlzdEl0ZW1zIHN1YkhlYWRJbm5lckl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGlzdC1pdGVtPnt7IGdyb3VwLmdyb3VwQnkgfX08L21hdC1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBtZW51IG9mIGdyb3VwLml0ZW1zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1saXN0LWl0ZW0gY2xhc3M9XCJtZW51c3ViSXRlbXNcIiAoY2xpY2spPVwibWVudVNlbGVjdGlvbihtZW51KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlLW1lbnUnOiBtZW51IHwgYWN0aXZlUm91dGUgOiBfcm91dGVyLnVybDpfaGVhZGVyU2VyLmhlYWRlckNvbmZpZy5hcHBUeXBlfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtZW51SWNvbkxpc3RcIiAqbmdJZj1cIm1lbnUuaWNvblwiPnt7IG1lbnUuaWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IG1lbnUubWVudU5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGlzdC1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9tYXQtc2lkZW5hdj5cblxuPC9tYXQtc2lkZW5hdi1jb250YWluZXI+XG48bWF0LXRvb2xiYXIgY2RrTWVudUJhciBjb2xvcj1cInByaW1hcnlcIiBjbGFzcz1cImhlYWRlci13cmFwcGVyIGNvbW1vbl9oZWFkZXIgc2hhZG93LXNtXCI+XG4gICAgPCEtLSBNYWluIG5hdiBidXR0b24gYW5kIG5hdmlnYXRpb24gbGlua3MgLS0+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJ0aGVtZS13aGl0ZVwiIChjbGljayk9XCJzaWRlbmF2LnRvZ2dsZSgpXCJcbiAgICAgICAgY2xhc3M9XCJwbXgtYnV0dG9uIHBteC1tZW51LWJ1dHRvbiBvcmRlcnMtbWVudSBpY29uLWJ0biBtcy0wIG1lLTNcIiBhcmlhLWxhYmVsPVwibWFpbiBtZW51XCIgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgbWF0VG9vbHRpcD1cIk1haW4gbWVudVwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCJcbiAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwicG9jLWhlYWRlci10b29sdGlwXCI+PG1hdC1pY29uPm1lbnU8L21hdC1pY29uPjwvYnV0dG9uPlxuICAgIDxhIGNsYXNzPVwibmF2YmFyLWJyYW5kIG1lLWF1dG9cIiBocmVmPVwiI1wiPlxuICAgICAgICA8aW1nIFtzcmNdPVwiX2RvbVNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKGFwcENvbmZpZ1tfaGVhZGVyU2VyLmhlYWRlckNvbmZpZy5hcHBUeXBlXT8uYXBwTG9nb1VyaSlcIlxuICAgICAgICAgICAgYWx0PVwiQXBwIExvZ29cIiBjbGFzcz1cImFwcC1sb2dvXCI+XG4gICAgPC9hPlxuXG4gICAgPCEtLSBUT0RPIHJlbW92ZSBjb21tZW50IC0tPlxuICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cInRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj4gLS0+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJzd2l0Y2hDb21wYW55RmllbGRcIj5cbiAgICAgICAgPG1hdC1sYWJlbD5TZWxlY3QgQ29tcGFueTwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwiY29tcGFueUNvbnRyb2xcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cInN3aXRjaENvbXBhbnkoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdCBvZiBjb21wYW55TGlzdFwiIFt2YWx1ZV09XCJvcHRcIj5cbiAgICAgICAgICAgICAgICB7e29wdC5uYW1lfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cblxuICAgIDwhLS0gUHJvZmlsZSBidXR0b24gYW5kIHByb2ZpbGUgZHJvcGRvd24gbGlua3MgLS0+XG4gICAgPGJ1dHRvbiBjbGFzcz1cInBteC1idXR0b24gcG14LW1lbnUtYnV0dG9uIHByb2ZpbGUtYnV0dG9uXCIgbWF0LWJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBtYXRUb29sdGlwUG9zaXRpb249XCJiZWxvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZmlsZS1pbm5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJyYW5kLWxvZ28gYWxpZ24tc2VsZi1jZW50ZXJcIiAqbmdJZj1cImFjdGl2ZUNvbXBhbnk/LmxvZ29cIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImFjdGl2ZUNvbXBhbnk/LmxvZ28gPyAnYnJhbmRlZC1sb2dvLXRydWUnIDogJ2JyYW5kZWQtbG9nby1mYWxzZSdcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1pbWFnZSc6ICd1cmwoJyArIGFjdGl2ZUNvbXBhbnk/LmxvZ28gKyAnKSd9XCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyXCI+XG4gICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cInVzZXJJbWFnZUxpbms7ZWxzZSBkZWZhdWx0QXZhdGFyXCIgW3NyY109XCJ1c2VySW1hZ2VMaW5rXCIgY2xhc3M9XCJhdmF0YXItaW1hZ2VcIiBhbHQ9XCJBdmF0YXJcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRBdmF0YXI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJfZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoaW1hZ2VEYXRhVXJscy5kZWZhdWx0VXNlckltYWdlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF2YXRhci1kZWZhdWx0XCIgYWx0PVwicHJvZmlsZSBwaWNcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvYnV0dG9uPlxuICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cImFjY291bnRzX2RycG1lbnUgcG14LW1lbnUtZ3JvdXAgaGVhZGVyLWRyb3Bkb3duLXByb2ZpbGVcIiB4UG9zaXRpb249XCJiZWZvcmVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvcG92ZXItY29udGVudCBzaG93LW1lbnVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3BvdmVyLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3BvdmVyLXVzZXItdG9wXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cInVzZXJJbWFnZUxpbms7ZWxzZSBkZWZhdWx0TGFyZ2VBdmF0YXJcIiBbc3JjXT1cInVzZXJJbWFnZUxpbmtcIiBjbGFzcz1cImF2YXRhci1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJBdmF0YXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdExhcmdlQXZhdGFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kLWltYWdlJzogJ3VybCgnICsgaW1hZ2VEYXRhVXJscy5kZWZhdWx0VXNlckltYWdlICsgJyknfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXZhdGFyLWljb24gZGVmYXVsdC1hdmF0YXJcIiBhbHQ9XCJBdmF0YXIgaWNvblwiPiZuYnNwOzwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWRhdGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cInByb2ZpbGUtbmFtZVwiPjxzcGFuICpuZ0lmPVwidXNlckF1dGhEYXRhXCI+e3sgdXNlckF1dGhEYXRhPy5maXJzdE5hbWUgfX0ge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckF1dGhEYXRhPy5sYXN0TmFtZSB9fTwvc3Bhbj48L2gzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPVwiYWNjZW50XCIgY2xhc3M9XCJwbXgtYnV0dG9uIGJ0biBidG4tc21hbGwgdmlldy1wcm9maWxlIG1zLTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwcm9maWxlKClcIj5WaWV3IFByb2ZpbGU8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3BvdmVyLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wb3Zlci1jb250ZW50LXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPk92ZXJ2aWV3PC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInVzZXJBdXRoRGF0YT8uZW1haWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAgbWF0LW1lbnUtaXRlbSBjbGFzcz1cImxpc3QtdGV4dCBsaXN0LXRleHQtZW1haWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImxpc3QtaWNvblwiPm1haWw8L21hdC1pY29uPjxzcGFuIGNsYXNzPVwicG14LWxvd2VyLWNhc2UgcG14LXRleHQtd3JhcCBtZS1hdXRvXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyQXV0aERhdGE/LmVtYWlsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJBdXRoRGF0YT8uY29udGFjdFBob25lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJsaXN0LXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImxpc3QtaWNvblwiPmNhbGw8L21hdC1pY29uPjxzcGFuIGNsYXNzPVwidGl0bGUtY2FzZSBtZS1hdXRvXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyQXV0aERhdGE/LmNvbnRhY3RQaG9uZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPCEtLSA8dWwgY2RrTWVudSBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1vdmVydmlld1wiICpuZ0lmPVwiY3VycmVudENvbXBhbnlcIj5cblxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNka01lbnVJdGVtIGNsYXNzPVwibGlzdC1pdGVtXCIgKm5nSWY9XCJ1c2VyQXV0aERhdGE/LmFkZHJlc3MgIT09IG51bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJsaXN0LXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJsaXN0LWljb25cIj5sb2NhdGlvbl9vbjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZS1jYXNlIG1lLWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPnt7IHVzZXJBdXRoRGF0YT8uYWRkcmVzcz8uc3RyZWV0QWRkcmVzcyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sodXNlckF1dGhEYXRhPy5hZGRyZXNzPy5zdHJlZXRBZGRyZXNzMiAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlckF1dGhEYXRhPy5hZGRyZXNzPy5zdHJlZXRBZGRyZXNzMiA6ICcnIH19PC9zbWFsbD48YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdXNlckF1dGhEYXRhPy5hZGRyZXNzPy5jaXR5IH19IHt7dXNlckF1dGhEYXRhPy5hZGRyZXNzPy5zdGF0ZU9yUHJvdmluY2UgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t1c2VyQXV0aERhdGE/LmFkZHJlc3M/LnBvc3RhbENvZGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPC91bD4gLS0+XG4gICAgICAgICAgICAgICAgPGhyIC8+XG4gICAgICAgICAgICAgICAgPHVsIGNka01lbnUgY2xhc3M9XCJsaXN0LWdyb3VwIGxhc3QtZ3JvdXAgbXktMVwiPlxuICAgICAgICAgICAgICAgICAgICA8bGkgY2RrTWVudUl0ZW0gY2xhc3M9XCJsaXN0LWl0ZW0gcHktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwicG14LWJ1dHRvbiBsaXN0LWJ1dHRvbiBidG4tbG9nb3V0XCIgKGNsaWNrKT1cIm9uTG9nb3V0Q2xpY2soKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5wb3dlcl9zZXR0aW5nc19uZXc8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGlzdC10ZXh0XCI+TG9nb3V0PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L21hdC1tZW51PlxuPC9tYXQtdG9vbGJhcj4iXX0=