common-header-lib 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/assets/.gitkeep +0 -0
- package/assets/i18n/ar.json +83 -0
- package/assets/i18n/de.json +83 -0
- package/assets/i18n/en.json +83 -0
- package/assets/i18n/es.json +83 -0
- package/assets/i18n/fr.json +83 -0
- package/assets/i18n/hi.json +83 -0
- package/assets/i18n/ja.json +83 -0
- package/assets/i18n/ko.json +83 -0
- package/assets/images/APP019.svg +6 -0
- package/assets/images/APP020.svg +4 -0
- package/assets/images/APP021.svg +6 -0
- package/assets/images/APP022.svg +6 -0
- package/assets/images/APP023.svg +11 -0
- package/assets/images/APP024.svg +9 -0
- package/assets/images/APP025.svg +8 -0
- package/assets/images/APP026.svg +4 -0
- package/assets/images/APP027.svg +5 -0
- package/assets/images/APP028.svg +6 -0
- package/assets/images/APP029.svg +12 -0
- package/assets/images/APP030.svg +20 -0
- package/assets/images/APP031.svg +14 -0
- package/assets/images/APP032.svg +17 -0
- package/assets/images/Frame.svg +104 -0
- package/assets/images/apps-1.svg +22 -0
- package/assets/images/bell-icon.svg +3 -0
- package/assets/images/check_circle.svg +3 -0
- package/assets/images/close copy.svg +5 -0
- package/assets/images/close.svg +5 -0
- package/assets/images/copy-img.svg +3 -0
- package/assets/images/cross-search.svg +4 -0
- package/assets/images/domain_img.svg +3 -0
- package/assets/images/east.svg +3 -0
- package/assets/images/error.svg +3 -0
- package/assets/images/filepath.svg +8 -0
- package/assets/images/flag1.svg +3 -0
- package/assets/images/gc-mail.svg +3 -0
- package/assets/images/grey-arrow.svg +3 -0
- package/assets/images/info.svg +3 -0
- package/assets/images/local.svg +3 -0
- package/assets/images/lock-pass.svg +3 -0
- package/assets/images/lock1.svg +3 -0
- package/assets/images/login-bg/default_bg.svg +448 -0
- package/assets/images/login-bg/visibility.svg +3 -0
- package/assets/images/login-bg/visibility_off.svg +3 -0
- package/assets/images/logo.png +0 -0
- package/assets/images/logout.svg +3 -0
- package/assets/images/mail-icon.svg +3 -0
- package/assets/images/marker-pin.svg +4 -0
- package/assets/images/noti_ticket.svg +3 -0
- package/assets/images/pass-img.svg +3 -0
- package/assets/images/refresh-1.svg +3 -0
- package/assets/images/schedule.svg +1 -0
- package/assets/images/search-filter.svg +3 -0
- package/assets/images/search-icon.svg +3 -0
- package/assets/images/settings.svg +3 -0
- package/assets/images/successful.svg +10 -0
- package/assets/images/user-name.svg +3 -0
- package/assets/scss/_sidebar.scss +267 -0
- package/assets/scss/styles.scss +577 -0
- package/esm2020/common-header-lib.mjs +5 -0
- package/esm2020/lib/Validators/noSpaceAllowed.mjs +16 -0
- package/esm2020/lib/common-header-lib.component.mjs +612 -0
- package/esm2020/lib/common-header-lib.module.mjs +208 -0
- package/esm2020/lib/common-header-lib.service.mjs +200 -0
- package/esm2020/lib/components/confirm-dialog/confirm-dialog.component.mjs +49 -0
- package/esm2020/lib/components/general-configuration/general-configuration.component.mjs +402 -0
- package/esm2020/lib/components/general-configuration/landingpg-config/landingpg-config.component.mjs +124 -0
- package/esm2020/lib/components/general-configuration/timezone-configuration/timezone-configuration.component.mjs +138 -0
- package/esm2020/lib/components/grid-pagination/grid-pagination.component.mjs +39 -0
- package/esm2020/lib/components/ng-translation/ng-translation.component.mjs +65 -0
- package/esm2020/lib/components/no-service-my-access-pg/no-service-my-access-pg.component.mjs +19 -0
- package/esm2020/lib/components/notification-sidebar/notification-sidebar.component.mjs +40 -0
- package/esm2020/lib/components/side-popup/side-popup.component.mjs +34 -0
- package/esm2020/lib/components/user-mailbox/user-mailbox.component.mjs +173 -0
- package/esm2020/lib/components/user-sidebar/user-sidebar.component.mjs +279 -0
- package/esm2020/lib/components/viewpassword-popup/viewpassword-popup.component.mjs +196 -0
- package/esm2020/lib/model/data_model.mjs +217 -0
- package/esm2020/lib/pipes/custome-dateformat.pipe.mjs +27 -0
- package/esm2020/lib/pipes/date-diff.pipe.mjs +56 -0
- package/esm2020/lib/pipes/slice-to-two.pipe.mjs +34 -0
- package/esm2020/lib/services/EncrypDecryp_RSA.service.mjs +100 -0
- package/esm2020/lib/services/async-passwordcheck.service.mjs +72 -0
- package/esm2020/lib/services/cookie-storage-manager.service.mjs +78 -0
- package/esm2020/lib/services/encrpdata.service.mjs +55 -0
- package/esm2020/lib/services/encrydecrydata.service.mjs +207 -0
- package/esm2020/lib/services/event.service.mjs +133 -0
- package/esm2020/lib/services/http/http-common.service.mjs +216 -0
- package/esm2020/lib/services/http/http-general-config.service.mjs +84 -0
- package/esm2020/lib/services/rest-login-form.service.mjs +296 -0
- package/esm2020/lib/services/rest-signalr.service.mjs +100 -0
- package/esm2020/lib/services/storage.service.mjs +33 -0
- package/esm2020/lib/services/toast-msg.service.mjs +95 -0
- package/esm2020/lib/services/vapt-validation.service.mjs +31 -0
- package/esm2020/public-api.mjs +13 -0
- package/fesm2015/common-header-lib.mjs +4165 -0
- package/fesm2015/common-header-lib.mjs.map +1 -0
- package/fesm2020/common-header-lib.mjs +4146 -0
- package/fesm2020/common-header-lib.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/Validators/noSpaceAllowed.d.ts +2 -0
- package/lib/common-header-lib.component.d.ts +148 -0
- package/lib/common-header-lib.module.d.ts +43 -0
- package/lib/common-header-lib.service.d.ts +25 -0
- package/lib/components/confirm-dialog/confirm-dialog.component.d.ts +13 -0
- package/lib/components/general-configuration/general-configuration.component.d.ts +86 -0
- package/lib/components/general-configuration/landingpg-config/landingpg-config.component.d.ts +37 -0
- package/lib/components/general-configuration/timezone-configuration/timezone-configuration.component.d.ts +38 -0
- package/lib/components/grid-pagination/grid-pagination.component.d.ts +20 -0
- package/lib/components/ng-translation/ng-translation.component.d.ts +22 -0
- package/lib/components/no-service-my-access-pg/no-service-my-access-pg.component.d.ts +8 -0
- package/lib/components/notification-sidebar/notification-sidebar.component.d.ts +16 -0
- package/lib/components/side-popup/side-popup.component.d.ts +14 -0
- package/lib/components/user-mailbox/user-mailbox.component.d.ts +40 -0
- package/lib/components/user-sidebar/user-sidebar.component.d.ts +61 -0
- package/lib/components/viewpassword-popup/viewpassword-popup.component.d.ts +47 -0
- package/lib/model/data_model.d.ts +184 -0
- package/lib/pipes/custome-dateformat.pipe.d.ts +8 -0
- package/lib/pipes/date-diff.pipe.d.ts +9 -0
- package/lib/pipes/slice-to-two.pipe.d.ts +7 -0
- package/lib/services/EncrypDecryp_RSA.service.d.ts +15 -0
- package/lib/services/async-passwordcheck.service.d.ts +18 -0
- package/lib/services/cookie-storage-manager.service.d.ts +16 -0
- package/lib/services/encrpdata.service.d.ts +12 -0
- package/lib/services/encrydecrydata.service.d.ts +33 -0
- package/lib/services/event.service.d.ts +30 -0
- package/lib/services/http/http-common.service.d.ts +30 -0
- package/lib/services/http/http-general-config.service.d.ts +15 -0
- package/lib/services/rest-login-form.service.d.ts +39 -0
- package/lib/services/rest-signalr.service.d.ts +23 -0
- package/lib/services/storage.service.d.ts +11 -0
- package/lib/services/toast-msg.service.d.ts +21 -0
- package/lib/services/vapt-validation.service.d.ts +7 -0
- package/package.json +49 -0
- package/public-api.d.ts +8 -0
- package/src/assets/i18n/ar.json +83 -0
- package/src/assets/i18n/de.json +83 -0
- package/src/assets/i18n/en.json +83 -0
- package/src/assets/i18n/es.json +83 -0
- package/src/assets/i18n/fr.json +83 -0
- package/src/assets/i18n/hi.json +83 -0
- package/src/assets/i18n/ja.json +83 -0
- package/src/assets/i18n/ko.json +83 -0
- package/src/assets/images/APP019.svg +6 -0
- package/src/assets/images/APP020.svg +4 -0
- package/src/assets/images/APP021.svg +6 -0
- package/src/assets/images/APP022.svg +6 -0
- package/src/assets/images/APP023.svg +11 -0
- package/src/assets/images/APP024.svg +9 -0
- package/src/assets/images/APP025.svg +8 -0
- package/src/assets/images/APP026.svg +4 -0
- package/src/assets/images/APP027.svg +5 -0
- package/src/assets/images/APP028.svg +6 -0
- package/src/assets/images/APP029.svg +12 -0
- package/src/assets/images/APP030.svg +20 -0
- package/src/assets/images/APP031.svg +14 -0
- package/src/assets/images/APP032.svg +17 -0
- package/src/assets/images/Frame.svg +104 -0
- package/src/assets/images/apps-1.svg +22 -0
- package/src/assets/images/bell-icon.svg +3 -0
- package/src/assets/images/check_circle.svg +3 -0
- package/src/assets/images/close copy.svg +5 -0
- package/src/assets/images/close.svg +5 -0
- package/src/assets/images/copy-img.svg +3 -0
- package/src/assets/images/cross-search.svg +4 -0
- package/src/assets/images/domain_img.svg +3 -0
- package/src/assets/images/east.svg +3 -0
- package/src/assets/images/error.svg +3 -0
- package/src/assets/images/filepath.svg +8 -0
- package/src/assets/images/flag1.svg +3 -0
- package/src/assets/images/gc-mail.svg +3 -0
- package/src/assets/images/grey-arrow.svg +3 -0
- package/src/assets/images/info.svg +3 -0
- package/src/assets/images/local.svg +3 -0
- package/src/assets/images/lock-pass.svg +3 -0
- package/src/assets/images/lock1.svg +3 -0
- package/src/assets/images/login-bg/default_bg.svg +448 -0
- package/src/assets/images/login-bg/visibility.svg +3 -0
- package/src/assets/images/login-bg/visibility_off.svg +3 -0
- package/src/assets/images/logo.png +0 -0
- package/src/assets/images/logout.svg +3 -0
- package/src/assets/images/mail-icon.svg +3 -0
- package/src/assets/images/marker-pin.svg +4 -0
- package/src/assets/images/noti_ticket.svg +3 -0
- package/src/assets/images/pass-img.svg +3 -0
- package/src/assets/images/refresh-1.svg +3 -0
- package/src/assets/images/schedule.svg +1 -0
- package/src/assets/images/search-filter.svg +3 -0
- package/src/assets/images/search-icon.svg +3 -0
- package/src/assets/images/settings.svg +3 -0
- package/src/assets/images/successful.svg +10 -0
- package/src/assets/images/user-name.svg +3 -0
- package/src/assets/scss/_sidebar.scss +267 -0
- package/src/assets/scss/styles.scss +577 -0
|
@@ -0,0 +1,612 @@
|
|
|
1
|
+
import { ConfirmDialogComponent } from './components/confirm-dialog/confirm-dialog.component';
|
|
2
|
+
import { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Output, ViewChild, ViewEncapsulation, } from '@angular/core';
|
|
3
|
+
import { CommonHeaderLibService } from './common-header-lib.service';
|
|
4
|
+
import { catchError, finalize, map, takeUntil } from 'rxjs/operators';
|
|
5
|
+
import { OverlayPanel } from 'primeng/overlaypanel';
|
|
6
|
+
import { Subject, forkJoin, of } from 'rxjs';
|
|
7
|
+
import { GlobalConstants } from './model/data_model';
|
|
8
|
+
import { RestSignalRService } from './services/rest-signalr.service';
|
|
9
|
+
import { EventService } from './services/event.service';
|
|
10
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
11
|
+
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
|
12
|
+
import { HttpCommonService } from './services/http/http-common.service';
|
|
13
|
+
import { ToastMsgService } from './services/toast-msg.service';
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
import * as i1 from "./common-header-lib.service";
|
|
16
|
+
import * as i2 from "./services/rest-signalr.service";
|
|
17
|
+
import * as i3 from "./services/event.service";
|
|
18
|
+
import * as i4 from "@ngx-translate/core";
|
|
19
|
+
import * as i5 from "@ng-bootstrap/ng-bootstrap";
|
|
20
|
+
import * as i6 from "./services/http/http-common.service";
|
|
21
|
+
import * as i7 from "./services/toast-msg.service";
|
|
22
|
+
import * as i8 from "@angular/common";
|
|
23
|
+
import * as i9 from "@angular/forms";
|
|
24
|
+
import * as i10 from "primeng/dropdown";
|
|
25
|
+
import * as i11 from "primeng/api";
|
|
26
|
+
import * as i12 from "primeng/overlaypanel";
|
|
27
|
+
import * as i13 from "primeng/badge";
|
|
28
|
+
import * as i14 from "primeng/skeleton";
|
|
29
|
+
import * as i15 from "./components/user-sidebar/user-sidebar.component";
|
|
30
|
+
import * as i16 from "./components/side-popup/side-popup.component";
|
|
31
|
+
import * as i17 from "./components/user-mailbox/user-mailbox.component";
|
|
32
|
+
import * as i18 from "./components/no-service-my-access-pg/no-service-my-access-pg.component";
|
|
33
|
+
import * as i19 from "./components/confirm-dialog/confirm-dialog.component";
|
|
34
|
+
import * as i20 from "./pipes/slice-to-two.pipe";
|
|
35
|
+
export class CommonHeaderLibComponent {
|
|
36
|
+
constructor(libService, cdRef, _signalRService, _eventService, translate, modalService, translateService, httpCommonService, msgService) {
|
|
37
|
+
this.libService = libService;
|
|
38
|
+
this.cdRef = cdRef;
|
|
39
|
+
this._signalRService = _signalRService;
|
|
40
|
+
this._eventService = _eventService;
|
|
41
|
+
this.translate = translate;
|
|
42
|
+
this.modalService = modalService;
|
|
43
|
+
this.translateService = translateService;
|
|
44
|
+
this.httpCommonService = httpCommonService;
|
|
45
|
+
this.msgService = msgService;
|
|
46
|
+
// @Input() apiURL: string = '';
|
|
47
|
+
this.EnableLogo = true;
|
|
48
|
+
this.moduleName = '';
|
|
49
|
+
this.EnableTimeZone = true;
|
|
50
|
+
this.EnableLOB = true;
|
|
51
|
+
this.EnableMail = true;
|
|
52
|
+
this.EnableNotifications = true;
|
|
53
|
+
this.EnableMoreApps = true;
|
|
54
|
+
this.EnableProfile = true;
|
|
55
|
+
this.lobSelected = new EventEmitter();
|
|
56
|
+
this.langChange = new EventEmitter();
|
|
57
|
+
this.overlayStateChange = new EventEmitter();
|
|
58
|
+
this.userTimeZoneAbbreviations = '';
|
|
59
|
+
this.userTimeZoneFullForm = '';
|
|
60
|
+
this.userLOBList = [];
|
|
61
|
+
this.showLobLoader = true;
|
|
62
|
+
this.totalEmails = '';
|
|
63
|
+
this.userNotificationCount = '';
|
|
64
|
+
this.ListOfUserPrivillegedApp = [];
|
|
65
|
+
this.userdisplayName = '';
|
|
66
|
+
this.userDetailsInfo = [];
|
|
67
|
+
this.isOpenSidePopup = false;
|
|
68
|
+
this.showUserDetails = false;
|
|
69
|
+
this.userAppLoaderLoadder = true;
|
|
70
|
+
this.repeatLoader = new Array(12).fill(0);
|
|
71
|
+
this.showMailboxScreenflag = false;
|
|
72
|
+
this.isErrorFound = false;
|
|
73
|
+
this.userNotificationCountObj = {};
|
|
74
|
+
this.eventwiseNotificationCount = [];
|
|
75
|
+
this.notificationLoadder = true;
|
|
76
|
+
this.unsubscribeAPIEventListenerData = new Subject();
|
|
77
|
+
this.unsubscribeSidebarListenerData = new Subject();
|
|
78
|
+
this.userId = '';
|
|
79
|
+
this.assetCategoryMenuList = [];
|
|
80
|
+
this.showbusinessFileds = false;
|
|
81
|
+
this.showInfraFileds = false;
|
|
82
|
+
this.showfiltersearch = true;
|
|
83
|
+
this.clickInside = false;
|
|
84
|
+
this.isLobContentLoaded = false;
|
|
85
|
+
this.isHeaderContentLoaded = false;
|
|
86
|
+
this.requestTypeId = 1;
|
|
87
|
+
this.accessTypes = [
|
|
88
|
+
{ id: 1, name: 'Permanent' },
|
|
89
|
+
{ id: 2, name: 'OneTime' },
|
|
90
|
+
{ id: 3, name: 'TimeBased' },
|
|
91
|
+
];
|
|
92
|
+
this.selectedAssetName = {
|
|
93
|
+
assetId: -100,
|
|
94
|
+
assetName: 'All',
|
|
95
|
+
};
|
|
96
|
+
this.assetName = '';
|
|
97
|
+
this.assetId = 0;
|
|
98
|
+
this.allCategory = {
|
|
99
|
+
assetTypeId: -100,
|
|
100
|
+
assetTypeValue: 'All Section',
|
|
101
|
+
assetList: [
|
|
102
|
+
{
|
|
103
|
+
assetId: -100,
|
|
104
|
+
assetName: 'All',
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
};
|
|
108
|
+
this.translateName = [
|
|
109
|
+
'Generic_lib.Permanent',
|
|
110
|
+
'Generic_lib.OneTime',
|
|
111
|
+
'Generic_lib.TimeBased',
|
|
112
|
+
];
|
|
113
|
+
this.appPanel = OverlayPanel;
|
|
114
|
+
this.isErrorOccured = false;
|
|
115
|
+
// @Output() public refreshNotification = new EventEmitter<boolean>();
|
|
116
|
+
this.repeatLoader1 = new Array(9).fill(0);
|
|
117
|
+
}
|
|
118
|
+
ngOnInit() {
|
|
119
|
+
this.headerLogo = '';
|
|
120
|
+
this.overlayStateChange.emit(false);
|
|
121
|
+
this.setWebAPIURL();
|
|
122
|
+
if (this.EnableLogo)
|
|
123
|
+
this.loadHeaderLogo();
|
|
124
|
+
if (this.EnableLOB)
|
|
125
|
+
this.getListofLOB();
|
|
126
|
+
this.onLoadMethod();
|
|
127
|
+
}
|
|
128
|
+
onLoadMethod() {
|
|
129
|
+
this.onDemandActions();
|
|
130
|
+
if (this.EnableNotifications)
|
|
131
|
+
this.getEventwiseNotificationCount();
|
|
132
|
+
this.getUserActivityDetails();
|
|
133
|
+
}
|
|
134
|
+
//* on click of Mail icon
|
|
135
|
+
showMailBoxScreen() {
|
|
136
|
+
this.showMailboxScreenflag = true;
|
|
137
|
+
this.overlayStateChange.emit(true);
|
|
138
|
+
}
|
|
139
|
+
hideMailBoxScreen() {
|
|
140
|
+
this.showMailboxScreenflag = false;
|
|
141
|
+
this.overlayStateChange.emit(false);
|
|
142
|
+
}
|
|
143
|
+
//* Main language change emitter
|
|
144
|
+
languageChange(event) {
|
|
145
|
+
if (!event)
|
|
146
|
+
return;
|
|
147
|
+
this.langChange.emit(event);
|
|
148
|
+
}
|
|
149
|
+
showUserAppsPanel(event) {
|
|
150
|
+
this.appPanel.toggle(event);
|
|
151
|
+
if (this.ListOfUserPrivillegedApp.length === 0) {
|
|
152
|
+
this.getUserAssignedApp();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
showUserDetailsPanel() {
|
|
156
|
+
this.openSidePopup();
|
|
157
|
+
this.showUserDetails = true;
|
|
158
|
+
}
|
|
159
|
+
closeSidePopup() {
|
|
160
|
+
this.showUserDetails = false;
|
|
161
|
+
this.isOpenSidePopup = false;
|
|
162
|
+
}
|
|
163
|
+
openSidePopup() {
|
|
164
|
+
this.isOpenSidePopup = true;
|
|
165
|
+
}
|
|
166
|
+
//Method: Take Connection of Application
|
|
167
|
+
getConnectionofApplication(appCode) {
|
|
168
|
+
console.log('appcode', appCode);
|
|
169
|
+
const url = GlobalConstants.baseURL + '/xauth/api/Token/AppOAuth?appcode=' + appCode;
|
|
170
|
+
window.open(url, '_blank');
|
|
171
|
+
}
|
|
172
|
+
async getConnectToSingalRhub() {
|
|
173
|
+
try {
|
|
174
|
+
await this._signalRService.initializeSignalRConnection();
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
console.error('All SignalR hub connections failed.', error);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
ngAfterViewInit() {
|
|
181
|
+
this.ListenToTranslateEvent();
|
|
182
|
+
// Initialize modal instance when DOM is ready
|
|
183
|
+
this.bsModalInstance = new bootstrap.Modal(this.notifyModal.nativeElement);
|
|
184
|
+
}
|
|
185
|
+
/*Method : Listen to the Other component event
|
|
186
|
+
Action : It used to listen diff. component command on basis of perform some actions */
|
|
187
|
+
onDemandActions() {
|
|
188
|
+
//Listen the Event Emit by Sidebar
|
|
189
|
+
this._eventService
|
|
190
|
+
.listenerAssetTypeEvent()
|
|
191
|
+
.pipe(takeUntil(this.unsubscribeSidebarListenerData))
|
|
192
|
+
.subscribe((data) => {
|
|
193
|
+
if (data && data['component'] === 'assetMenu') {
|
|
194
|
+
this.assetCategoryMenuList = [];
|
|
195
|
+
this.assetCategoryMenuList = data['aseetTypeList'];
|
|
196
|
+
//Note: Add Filter Fileds of Business/Infra Asset and there RequestID
|
|
197
|
+
//For Business Asset
|
|
198
|
+
if (data?.['assetCategoryId'] == 1) {
|
|
199
|
+
this.showbusinessFileds = true;
|
|
200
|
+
this.showInfraFileds = false;
|
|
201
|
+
this.requestTypeId = 1;
|
|
202
|
+
this.selectedAssetName = this.assetCategoryMenuList[0]; //Set index 0 By Default
|
|
203
|
+
this.assetName = this.selectedAssetName['assetTypeValue'];
|
|
204
|
+
this.assetId = this.selectedAssetName['assetTypeId'];
|
|
205
|
+
//For Infra Asset
|
|
206
|
+
}
|
|
207
|
+
else if (data?.['assetCategoryId'] == 2) {
|
|
208
|
+
this.showInfraFileds = true;
|
|
209
|
+
this.showbusinessFileds = false;
|
|
210
|
+
this.requestTypeId = 2;
|
|
211
|
+
this.selectedAssetName =
|
|
212
|
+
this.assetCategoryMenuList[0]['assetList'][0]; //Set index 0 By Default
|
|
213
|
+
this.assetName = this.selectedAssetName['assetName'];
|
|
214
|
+
this.assetId = this.selectedAssetName['assetId'];
|
|
215
|
+
}
|
|
216
|
+
//Note: Added Extra Hard coded type in AssetCategory Menu for Infra Asset
|
|
217
|
+
if (this.assetCategoryMenuList.length > 0) {
|
|
218
|
+
if (this.showInfraFileds) {
|
|
219
|
+
this.assetCategoryMenuList.unshift(this.allCategory);
|
|
220
|
+
}
|
|
221
|
+
this.assetCategoryMenuList = this.assetCategoryMenuList.filter((element) => {
|
|
222
|
+
if (!(element.assetTypeValue === 'Favorite' ||
|
|
223
|
+
element.assetTypeValue === 'Bookmark')) {
|
|
224
|
+
return element;
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
//Listen the Event Emit by SignalR Hub
|
|
231
|
+
this._signalRService
|
|
232
|
+
.listenerEventMsg()
|
|
233
|
+
.pipe(takeUntil(this.unsubscribeAPIEventListenerData))
|
|
234
|
+
.subscribe((data) => {
|
|
235
|
+
if (data && data['application'] && data['events']) {
|
|
236
|
+
this.isErrorFound = false;
|
|
237
|
+
this.userNotificationCountObj = data['application'];
|
|
238
|
+
//Note: If Notification count > 99
|
|
239
|
+
if (this.userNotificationCountObj &&
|
|
240
|
+
this.userNotificationCountObj['PendingCount']) {
|
|
241
|
+
if (Number(this.userNotificationCountObj['PendingCount']) > 99) {
|
|
242
|
+
this.userNotificationCount = '99+';
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
this.userNotificationCount = String(this.userNotificationCountObj['PendingCount']);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
this.userNotificationCount = '';
|
|
250
|
+
}
|
|
251
|
+
this.eventwiseNotificationCount = data['events'];
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
this.listenToTimeZoneConfig();
|
|
255
|
+
this.listenToEmailCountEvent();
|
|
256
|
+
}
|
|
257
|
+
//Listen to TimeZone Config
|
|
258
|
+
listenToTimeZoneConfig() {
|
|
259
|
+
this._eventService
|
|
260
|
+
.listenerTimezone()
|
|
261
|
+
.pipe(takeUntil(this.unsubscribeAPIEventListenerData))
|
|
262
|
+
.subscribe((response) => {
|
|
263
|
+
if (response && response['component'] == 'timezone') {
|
|
264
|
+
this.userTimeZoneAbbreviations =
|
|
265
|
+
response['usertimezoneAbbreviations'];
|
|
266
|
+
this.userTimeZoneFullForm = response['userTimeZoneFullForm'];
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
//Listen to Email Count when user Read
|
|
271
|
+
listenToEmailCountEvent() {
|
|
272
|
+
this._eventService
|
|
273
|
+
.listenerUserEmail()
|
|
274
|
+
.pipe(takeUntil(this.unsubscribeAPIEventListenerData))
|
|
275
|
+
.subscribe((data) => {
|
|
276
|
+
if (data && data['component'] === 'email-count') {
|
|
277
|
+
this.totalEmails = data['mailCount'];
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
//Method: Convert text one Lang. to another
|
|
282
|
+
ListenToTranslateEvent() {
|
|
283
|
+
this.translate.onLangChange.subscribe((val) => {
|
|
284
|
+
this.getTranslateContent();
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
//Method: Convert text one Lang. to another Event Listener
|
|
288
|
+
getTranslateContent() {
|
|
289
|
+
this.translate.get(this.translateName).subscribe((trans) => {
|
|
290
|
+
this.accessTypes.forEach((item, index) => {
|
|
291
|
+
const key = this.translateName[index];
|
|
292
|
+
item['name'] = trans[key];
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
OpenNotificationModal() {
|
|
297
|
+
// const modalRef = this.modalService.open(NotificationSidebarComponent);
|
|
298
|
+
// modalRef.componentInstance.lesson = lesson;
|
|
299
|
+
this.bsModalInstance?.show();
|
|
300
|
+
}
|
|
301
|
+
closeModal() {
|
|
302
|
+
this.bsModalInstance?.hide();
|
|
303
|
+
}
|
|
304
|
+
//Method: Call APi to Fetch New Notification Count
|
|
305
|
+
getEventwiseNotification() {
|
|
306
|
+
// this.refreshNotification.emit(true);
|
|
307
|
+
this.getEventwiseNotificationCount();
|
|
308
|
+
}
|
|
309
|
+
setWebAPIURL() {
|
|
310
|
+
if (GlobalConstants.baseURL == undefined) {
|
|
311
|
+
if (localStorage.getItem('_WAU')) {
|
|
312
|
+
GlobalConstants.baseURL = localStorage.getItem('_WAU') || '';
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
let parsedURL = new URL(window.location.href);
|
|
316
|
+
let WebApiUrl = parsedURL.origin;
|
|
317
|
+
GlobalConstants.baseURL = WebApiUrl;
|
|
318
|
+
localStorage.setItem('_WAU', GlobalConstants.baseURL);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
getUserActivityDetails() {
|
|
323
|
+
// Reset error state before API calls
|
|
324
|
+
this.isErrorFound = false;
|
|
325
|
+
// Initialize response container for forkJoin
|
|
326
|
+
const responseSet = {};
|
|
327
|
+
// Build payload once for notification API
|
|
328
|
+
const notificationPayload = {
|
|
329
|
+
ApplicationName: GlobalConstants.applicationName,
|
|
330
|
+
UserId: String(this.userId),
|
|
331
|
+
};
|
|
332
|
+
// Add notification API if enabled
|
|
333
|
+
if (this.EnableNotifications) {
|
|
334
|
+
responseSet.notifications = this.httpCommonService
|
|
335
|
+
.getWorkFlowTicketCount(notificationPayload)
|
|
336
|
+
.pipe(
|
|
337
|
+
// Extract valid notification data
|
|
338
|
+
map((response) => response),
|
|
339
|
+
// Handle API error without breaking forkJoin
|
|
340
|
+
catchError(() => {
|
|
341
|
+
this.isErrorFound = true;
|
|
342
|
+
return of(null);
|
|
343
|
+
}));
|
|
344
|
+
}
|
|
345
|
+
// Add user profile API if enabled
|
|
346
|
+
if (this.EnableProfile) {
|
|
347
|
+
responseSet.userinfo = this.httpCommonService.getLoggedInUserDetails();
|
|
348
|
+
}
|
|
349
|
+
// Add timezone API if enabled
|
|
350
|
+
if (this.EnableTimeZone) {
|
|
351
|
+
responseSet.timeZone = this.httpCommonService.getGlobalTimeZone();
|
|
352
|
+
}
|
|
353
|
+
// Add unread email count API if enabled
|
|
354
|
+
if (this.EnableMail) {
|
|
355
|
+
responseSet.emailCount =
|
|
356
|
+
this.httpCommonService.getUnreadUserEmailsCount();
|
|
357
|
+
}
|
|
358
|
+
// Execute all enabled APIs together
|
|
359
|
+
forkJoin(responseSet)
|
|
360
|
+
.pipe(
|
|
361
|
+
// Mark header loading as completed
|
|
362
|
+
finalize(() => {
|
|
363
|
+
this.isHeaderContentLoaded = true;
|
|
364
|
+
}))
|
|
365
|
+
.subscribe((response) => {
|
|
366
|
+
// Process notification data
|
|
367
|
+
if (response.notifications) {
|
|
368
|
+
this.getTotalNotificationCounts(response.notifications);
|
|
369
|
+
}
|
|
370
|
+
// Process user profile data
|
|
371
|
+
if (response.userinfo) {
|
|
372
|
+
this.getLoggedInUserDetails(response.userinfo);
|
|
373
|
+
}
|
|
374
|
+
// Process timezone list
|
|
375
|
+
if (response.timeZone) {
|
|
376
|
+
this.getListOfTimeZones(response.timeZone);
|
|
377
|
+
}
|
|
378
|
+
// Process unread email count
|
|
379
|
+
if (response.emailCount) {
|
|
380
|
+
this.getUserEmailCount(response.emailCount);
|
|
381
|
+
}
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
getTotalNotificationCounts(data) {
|
|
385
|
+
// this.isErrorFound = false;
|
|
386
|
+
this.userNotificationCountObj = data || {};
|
|
387
|
+
if (this.userNotificationCountObj &&
|
|
388
|
+
this.userNotificationCountObj['PendingCount']) {
|
|
389
|
+
if (Number(this.userNotificationCountObj['PendingCount']) > 99) {
|
|
390
|
+
this.userNotificationCount = '99+';
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
this.userNotificationCount = String(this.userNotificationCountObj['PendingCount']);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
this.userNotificationCount = '';
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
/*Method : Retrieves details of the currently logged-in user*/
|
|
401
|
+
getLoggedInUserDetails(response) {
|
|
402
|
+
if (response && response['success'] && response['result']) {
|
|
403
|
+
this.userDetails = response['result'];
|
|
404
|
+
this.userdisplayName = this.userDetails['userDisplayName'];
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
/*Method : GET
|
|
408
|
+
Action : Get List of Time Zone*/
|
|
409
|
+
getListOfTimeZones(result) {
|
|
410
|
+
if (result && result['abbreviations']) {
|
|
411
|
+
this.userTimeZoneAbbreviations = result['abbreviations'];
|
|
412
|
+
this.userTimeZoneFullForm = result['userTimeZone'];
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
/*Method : GET
|
|
416
|
+
Action : Transformation fo Count */
|
|
417
|
+
getUserEmailCount(count) {
|
|
418
|
+
if (count <= 0) {
|
|
419
|
+
this.totalEmails = '';
|
|
420
|
+
}
|
|
421
|
+
else if (count > 99) {
|
|
422
|
+
this.totalEmails = '99+';
|
|
423
|
+
}
|
|
424
|
+
else {
|
|
425
|
+
this.totalEmails = String(count);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
/** API to get the header LOGO */
|
|
429
|
+
loadHeaderLogo() {
|
|
430
|
+
this.httpCommonService.getLogo().subscribe((img) => {
|
|
431
|
+
this.headerLogo = 'data:image/png;base64,' + img['logoImg'];
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
/** API to get the timezone */
|
|
435
|
+
// getUserPreferredTimezone() {
|
|
436
|
+
// this.httpCommonService.getGlobalTimeZone().subscribe((res: any) => {
|
|
437
|
+
// if (res?.abbreviations) {
|
|
438
|
+
// this.userTimeZoneAbbreviations = res.abbreviations;
|
|
439
|
+
// this.userTimeZoneFullForm = res?.userTimeZone;
|
|
440
|
+
// }
|
|
441
|
+
// });
|
|
442
|
+
// }
|
|
443
|
+
//* get Lob AI call and initial LOB emitter
|
|
444
|
+
getListofLOB() {
|
|
445
|
+
this.showLobLoader = true;
|
|
446
|
+
this.httpCommonService.getLOBList().subscribe((res) => {
|
|
447
|
+
this.showLobLoader = false;
|
|
448
|
+
this.userLOBList = res.result;
|
|
449
|
+
let initialLobSelected = this.getLobById(this.userLOBList, this.userLOBList[0]?.lobId);
|
|
450
|
+
const preSelectedLob = JSON.parse(localStorage.getItem('XOB') || 'null');
|
|
451
|
+
let isPreSelectedLobExistsInList = this.userLOBList.some((lob) => Number(lob.lobId) == Number(preSelectedLob?.LOBId));
|
|
452
|
+
if (preSelectedLob &&
|
|
453
|
+
Number(preSelectedLob.LOBId) &&
|
|
454
|
+
isPreSelectedLobExistsInList) {
|
|
455
|
+
//* Emitting 1st LOB for LOB List as LOb details available in localstorega
|
|
456
|
+
this.selectedLOBId = preSelectedLob?.LOBId;
|
|
457
|
+
this.tempSelectedLOBId = preSelectedLob?.LOBId;
|
|
458
|
+
initialLobSelected = this.getLobById(this.userLOBList, this.selectedLOBId);
|
|
459
|
+
}
|
|
460
|
+
else {
|
|
461
|
+
//* Emitting 1st LOB for LOB List if localstorage have null LOB details
|
|
462
|
+
this.selectedLOBId = this.userLOBList[0]?.lobId;
|
|
463
|
+
this.tempSelectedLOBId = this.userLOBList[0]?.lobId;
|
|
464
|
+
localStorage.setItem('XOB', JSON.stringify(initialLobSelected));
|
|
465
|
+
}
|
|
466
|
+
this.lobSelected.emit(initialLobSelected);
|
|
467
|
+
this.cdRef.detectChanges();
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
//* Selected LOB emitter
|
|
471
|
+
onLobChangeEvent(event) {
|
|
472
|
+
this.selectedLOBId = event.value;
|
|
473
|
+
this.openConfirm(event);
|
|
474
|
+
}
|
|
475
|
+
openConfirm(event) {
|
|
476
|
+
this.confirmDialog.openConfirmModal(event);
|
|
477
|
+
}
|
|
478
|
+
lobChangeConfirmation(event) {
|
|
479
|
+
if (event) {
|
|
480
|
+
this.tempSelectedLOBId = this.selectedLOBId;
|
|
481
|
+
let selectedLob = this.getLobById(this.userLOBList, this.tempSelectedLOBId);
|
|
482
|
+
localStorage.setItem('XOB', JSON.stringify(selectedLob));
|
|
483
|
+
this.lobSelected.emit(selectedLob);
|
|
484
|
+
}
|
|
485
|
+
else {
|
|
486
|
+
this.selectedLOBId = this.tempSelectedLOBId;
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
setCustomLobId(lobId) {
|
|
490
|
+
if (this.userLOBList) {
|
|
491
|
+
let filteredLobs = this.getLobById(this.userLOBList, lobId);
|
|
492
|
+
if (Object.keys(filteredLobs).length > 0) {
|
|
493
|
+
this.selectedLOBId = lobId;
|
|
494
|
+
//* If the LOB is forcefully set from the parent module, CustomLOBSetByParent is set to true; otherwise, it is set to false.
|
|
495
|
+
filteredLobs['CustomLOBSetByParent'] = true;
|
|
496
|
+
this.lobSelected.emit(filteredLobs);
|
|
497
|
+
localStorage.setItem('XOB', JSON.stringify(filteredLobs));
|
|
498
|
+
}
|
|
499
|
+
else {
|
|
500
|
+
this.msgService.error('The LOB you are trying to set is not available.');
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
//* Helper function to get selected LOB Object by LobId
|
|
505
|
+
getLobById(list, id) {
|
|
506
|
+
const item = list.find((x) => x.lobId === id);
|
|
507
|
+
if (!item)
|
|
508
|
+
return {};
|
|
509
|
+
return {
|
|
510
|
+
LOBId: item.lobId,
|
|
511
|
+
LOBName: item.lobName,
|
|
512
|
+
CustomLOBSetByParent: false,
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
//* get the Mail count
|
|
516
|
+
// getMailCount() {
|
|
517
|
+
// this.httpCommonService
|
|
518
|
+
// .getUnreadUserEmailsCount()
|
|
519
|
+
// .pipe(takeUntil(this.unsubscribeAPIEventListenerData))
|
|
520
|
+
// .subscribe((result) => {
|
|
521
|
+
// this.totalEmails = result;
|
|
522
|
+
// });
|
|
523
|
+
// }
|
|
524
|
+
//Action: Used to Get Total Eventwise User Notification Count */
|
|
525
|
+
getEventwiseNotificationCount() {
|
|
526
|
+
let payload = {
|
|
527
|
+
ApplicationName: GlobalConstants.applicationName,
|
|
528
|
+
UserId: String(this.userId),
|
|
529
|
+
};
|
|
530
|
+
this.notificationLoadder = true;
|
|
531
|
+
this.httpCommonService
|
|
532
|
+
.getWorkFlowTicketEventwiseCount(payload)
|
|
533
|
+
.pipe(takeUntil(this.unsubscribeAPIEventListenerData), finalize(() => (this.notificationLoadder = false)))
|
|
534
|
+
.subscribe({
|
|
535
|
+
next: (data) => {
|
|
536
|
+
this.isErrorFound = data.length == 0;
|
|
537
|
+
this.eventwiseNotificationCount = data;
|
|
538
|
+
},
|
|
539
|
+
error: () => {
|
|
540
|
+
this.isErrorFound = true;
|
|
541
|
+
},
|
|
542
|
+
});
|
|
543
|
+
}
|
|
544
|
+
//* Get Module privilege list
|
|
545
|
+
getUserAssignedApp() {
|
|
546
|
+
this.ListOfUserPrivillegedApp = [];
|
|
547
|
+
this.userAppLoaderLoadder = true;
|
|
548
|
+
this.httpCommonService
|
|
549
|
+
.getUserAssignedApps()
|
|
550
|
+
.pipe(takeUntil(this.unsubscribeAPIEventListenerData))
|
|
551
|
+
.subscribe((result) => {
|
|
552
|
+
this.userAppLoaderLoadder = false;
|
|
553
|
+
this.ListOfUserPrivillegedApp = result;
|
|
554
|
+
});
|
|
555
|
+
}
|
|
556
|
+
//* Get User details
|
|
557
|
+
getLoggedInuserDetails() {
|
|
558
|
+
this.httpCommonService.getLoggedInUserDetails().subscribe((result) => {
|
|
559
|
+
this.userDetailsInfo = result.result;
|
|
560
|
+
this.userdisplayName = this.userDetailsInfo['userDisplayName'];
|
|
561
|
+
});
|
|
562
|
+
}
|
|
563
|
+
ngOnDestroy() {
|
|
564
|
+
this.unsubscribeAPIEventListenerData.next(true);
|
|
565
|
+
this.unsubscribeAPIEventListenerData.complete();
|
|
566
|
+
this.unsubscribeSidebarListenerData.next(true);
|
|
567
|
+
this.unsubscribeSidebarListenerData.complete();
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
CommonHeaderLibComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CommonHeaderLibComponent, deps: [{ token: i1.CommonHeaderLibService }, { token: i0.ChangeDetectorRef }, { token: i2.RestSignalRService }, { token: i3.EventService }, { token: i4.TranslateService }, { token: i5.NgbModal }, { token: i4.TranslateService }, { token: i6.HttpCommonService }, { token: i7.ToastMsgService }], target: i0.ɵɵFactoryTarget.Component });
|
|
571
|
+
CommonHeaderLibComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CommonHeaderLibComponent, selector: "lib-common-header-lib", inputs: { EnableLogo: "EnableLogo", moduleName: "moduleName", EnableTimeZone: "EnableTimeZone", EnableLOB: "EnableLOB", EnableMail: "EnableMail", EnableNotifications: "EnableNotifications", EnableMoreApps: "EnableMoreApps", EnableProfile: "EnableProfile", selectedLOBId: "selectedLOBId" }, outputs: { lobSelected: "lobSelected", langChange: "langChange", overlayStateChange: "overlayStateChange" }, viewQueries: [{ propertyName: "confirmDialog", first: true, predicate: ["confirmDialog"], descendants: true }, { propertyName: "appPanel", first: true, predicate: ["App"], descendants: true }, { propertyName: "notifyModalRef", first: true, predicate: ["notifyModal"], descendants: true }, { propertyName: "notifyModal", first: true, predicate: ["notifyModal"], descendants: true }], ngImport: i0, template: "<header class=\"app-header ext\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <div class=\"d-flex\">\r\n <div class=\"logo gap-4\">\r\n <img\r\n *ngIf=\"EnableLogo && headerLogo\"\r\n class=\"logo-size\"\r\n title=\"Logo\"\r\n alt=\"Logo\"\r\n [src]=\"headerLogo\"\r\n loading=\"lazy\"\r\n />\r\n <p-skeleton\r\n *ngIf=\"!headerLogo\"\r\n height=\"1.5rem\"\r\n width=\"5rem\"\r\n ></p-skeleton>\r\n </div>\r\n </div>\r\n <div class=\"projName\">\r\n <h1 class=\"modname\">{{ moduleName }}</h1>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-end align-items-center\">\r\n <!--timezone-->\r\n <ng-container *ngIf=\"EnableTimeZone && userTimeZoneAbbreviations\">\r\n <div class=\"timezone\">\r\n <img\r\n src=\"../assets/common-header-lib/images/schedule.svg\"\r\n class=\"mb-1\"\r\n alt=\"Icon\"\r\n />\r\n <span class=\"timezone-text\"\r\n >{{ \"Generic_lib.PreferredTimezone\" | translate }} :\r\n </span>\r\n <span\r\n *ngIf=\"userTimeZoneAbbreviations\"\r\n class=\"user-tz\"\r\n [title]=\"userTimeZoneFullForm\"\r\n >{{ userTimeZoneAbbreviations }}</span\r\n >\r\n </div>\r\n </ng-container>\r\n\r\n <!--lob-->\r\n <ng-container\r\n *ngIf=\"EnableLOB && !showLobLoader; else LobLodderAnimation\"\r\n >\r\n <div class=\"main-left d-flex\">\r\n <img\r\n src=\"../assets/common-header-lib/images/marker-pin.svg\"\r\n alt=\"pen Icon\"\r\n />\r\n <p-dropdown\r\n filterPlaceholder=\"{{ 'Generic_lib.Search' | translate }}\"\r\n [options]=\"userLOBList\"\r\n (onChange)=\"onLobChangeEvent($event)\"\r\n optionLabel=\"lobName\"\r\n optionValue=\"lobId\"\r\n [(ngModel)]=\"selectedLOBId\"\r\n [filter]=\"true\"\r\n filterBy=\"lobName\"\r\n [showClear]=\"false\"\r\n [style]=\"{ width: '150px', height: '30px' }\"\r\n [resetFilterOnHide]=\"true\"\r\n [virtualScroll]=\"true\"\r\n [lazy]=\"false\"\r\n name=\"lob\"\r\n [itemSize]=\"30\"\r\n class=\"loblist-drpdwn\"\r\n panelStyleClass=\"loblist-drpdwn-panel\"\r\n >\r\n <ng-template let-loblist pTemplate=\"item\">\r\n <div class=\"flex align-items-center gap-2\">\r\n <div title=\"{{ loblist.lobName }}\" class=\"header-drpdwn\">\r\n {{ loblist.lobName }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-dropdown>\r\n </div>\r\n </ng-container>\r\n <ng-template #LobLodderAnimation>\r\n <p-skeleton height=\"1.5rem\" width=\"10rem\"></p-skeleton>\r\n </ng-template>\r\n\r\n <!--mailbox-->\r\n <ng-container *ngIf=\"isHeaderContentLoaded; else HeaderLoading\">\r\n <div *ngIf=\"EnableMail\" class=\"header-left-icon\">\r\n <img\r\n src=\"../assets/common-header-lib/images/mail-icon.svg\"\r\n alt=\"mail Icon\"\r\n class=\"headeright-icon\"\r\n (click)=\"showMailBoxScreen()\"\r\n />\r\n </div>\r\n <ng-container *ngIf=\"EnableMail && totalEmails.length > 0\">\r\n <!-- <ng-container> -->\r\n <div class=\"badge-notify\">\r\n <div pBadge [value]=\"totalEmails\"></div>\r\n </div>\r\n </ng-container>\r\n\r\n <!--notification-->\r\n <div class=\"header-left-icon\" *ngIf=\"EnableNotifications\">\r\n <img\r\n src=\"../assets/common-header-lib/images/bell-icon.svg\"\r\n alt=\"mail Icon\"\r\n class=\"headeright-icon\"\r\n (click)=\"OpenNotificationModal()\"\r\n />\r\n </div>\r\n\r\n <ng-container\r\n *ngIf=\"EnableNotifications && userNotificationCount.length > 0\"\r\n >\r\n <div class=\"badge-notify\">\r\n <div pBadge [value]=\"userNotificationCount\"></div>\r\n </div>\r\n </ng-container>\r\n\r\n <!--9 Dots -->\r\n <div\r\n *ngIf=\"EnableMoreApps\"\r\n class=\"header-left-icon\"\r\n title=\"Control Center\"\r\n alt=\"bell Icon\"\r\n (click)=\"showUserAppsPanel($event)\"\r\n >\r\n <img\r\n src=\"../assets/common-header-lib/images/apps-1.svg\"\r\n class=\"apps-icon\"\r\n />\r\n </div>\r\n\r\n <!--user display name -->\r\n <div\r\n *ngIf=\"EnableProfile\"\r\n class=\"main-right\"\r\n (click)=\"showUserDetailsPanel()\"\r\n >\r\n <ng-container>\r\n <div class=\"initial-text mx-1\">\r\n {{ userdisplayName | sliceToTwo }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #HeaderLoading>\r\n <p-skeleton shape=\"circle\" size=\"1.3rem\" styleClass=\"mx-2\"></p-skeleton>\r\n <p-skeleton shape=\"circle\" size=\"1.3rem\" styleClass=\"mx-2\"></p-skeleton>\r\n <p-skeleton size=\"1.5rem\" styleClass=\"mx-2\"></p-skeleton>\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mx-2\"></p-skeleton>\r\n </ng-template>\r\n </div>\r\n </div>\r\n</header>\r\n\r\n<!--List of Application : 9 dots -->\r\n<p-overlayPanel #App class=\"pt-0\" styleClass=\"app-panel\">\r\n <ng-container *ngIf=\"!userAppLoaderLoadder; else LoadingTemplate\">\r\n <div class=\"custom-popover-content\">\r\n <div class=\"waffle-align\">\r\n <div\r\n class=\"waffle-popup\"\r\n [title]=\"appDetails['applicationName']\"\r\n *ngFor=\"let appDetails of ListOfUserPrivillegedApp\"\r\n (click)=\"getConnectionofApplication(appDetails['appCode'])\"\r\n >\r\n <img\r\n *ngIf=\"appDetails?.appCode\"\r\n src=\"../assets/common-header-lib/images/{{\r\n appDetails.appCode\r\n }}.svg\"\r\n alt=\"App icon\"\r\n />\r\n\r\n <div class=\"waffle-text\">{{ appDetails[\"applicationName\"] }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-template #LoadingTemplate>\r\n <div class=\"custom-popover-content skeleton-popover\">\r\n <ng-container *ngFor=\"let item of repeatLoader\">\r\n <div\r\n class=\"d-flex flex-column align-items-center justify-content-center gap-2\"\r\n >\r\n <p-skeleton size=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\".3rem\" width=\"35px\"></p-skeleton>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n</p-overlayPanel>\r\n\r\n<!--mailbox details-->\r\n<ng-container *ngIf=\"showMailboxScreenflag\">\r\n <div class=\"changingContent\">\r\n <app-user-mailbox\r\n (closeMailDialogBox)=\"hideMailBoxScreen()\"\r\n ></app-user-mailbox>\r\n </div>\r\n</ng-container>\r\n\r\n<!-- Userdetails profile pop up -->\r\n<div class=\"profile-sidebar\">\r\n <app-side-popup\r\n *ngIf=\"isOpenSidePopup\"\r\n [visible]=\"true\"\r\n [position]=\"'right'\"\r\n (closeDialogBox)=\"closeSidePopup()\"\r\n >\r\n <app-user-sidebar\r\n *ngIf=\"showUserDetails\"\r\n (closeDialogBox)=\"closeSidePopup()\"\r\n ></app-user-sidebar>\r\n </app-side-popup>\r\n</div>\r\n\r\n<!-- Notification side popup -->\r\n<div\r\n class=\"modal fade common-alert-modal\"\r\n #notifyModal\r\n id=\"Notify_SidebarModal\"\r\n tabindex=\"-1\"\r\n aria-hidden=\"true\"\r\n>\r\n <div class=\"modal-dialog sidebar-outer white-bg\">\r\n <div class=\"modal-content\">\r\n <div class=\"sidebar-container white-bg\">\r\n <!-- keep everything inside this content -->\r\n\r\n <!-- Sidebar Header -->\r\n <div class=\"sidebar-header grey-background\">\r\n <div class=\"sh-top\">\r\n <div class=\"sh-top-left d-flex align-items-center\">\r\n <div class=\"mx-2 log-text\">\r\n {{ \"Generic_lib.Notification\" | translate }}\r\n </div>\r\n </div>\r\n <div class=\"sh-top-right\">\r\n <button\r\n type=\"button\"\r\n class=\"common-bn tertiary-btn\"\r\n aria-label=\"Close\"\r\n (click)=\"closeModal()\"\r\n >\r\n <img\r\n src=\"assets/common-header-lib/images/close.svg\"\r\n alt=\"Close\"\r\n class=\"imgs mb-1\"\r\n />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sidebar Body -->\r\n <div class=\"sidebar-body\">\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\r\n <div class=\"noti-text\">\r\n {{\r\n \"Generic_lib.YouHaveNNotifications\"\r\n | translate: { count: userNotificationCount }\r\n }}\r\n </div>\r\n <div\r\n class=\"d-flex align-items-center gap-1 refresh-icon\"\r\n (click)=\"getEventwiseNotification()\"\r\n >\r\n <img\r\n src=\"assets/common-header-lib/images/refresh-1.svg\"\r\n alt=\"Refresh\"\r\n />\r\n <div class=\"refresh-text\">\r\n {{ \"Generic_lib.Refresh\" | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-3\">\r\n <ng-container\r\n *ngIf=\"\r\n !isErrorFound && !notificationLoadder;\r\n else Noti_LoadingTemplate\r\n \"\r\n >\r\n <div\r\n class=\"notify-border\"\r\n *ngFor=\"let event of eventwiseNotificationCount\"\r\n >\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <div class=\"initial-text initial-text-1 mx-1\">\r\n <img\r\n src=\"assets/common-header-lib/images/noti_ticket.svg\"\r\n alt=\"Icon\"\r\n />\r\n </div>\r\n <div>\r\n <div>\r\n <span class=\"service-count\"\r\n >{{ event[\"PendingCount\"] }} New </span\r\n ><span class=\"service-request\"\r\n >{{ event[\"EventName\"] }} Event requests</span\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grey-borders mt-2\"></div>\r\n </div>\r\n </ng-container>\r\n <ng-template #Noti_LoadingTemplate>\r\n <ng-container *ngIf=\"notificationLoadder; else errorTemplate\">\r\n <ng-container *ngFor=\"let item of repeatLoader1\">\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <p-skeleton\r\n shape=\"circle\"\r\n size=\"60px\"\r\n styleClass=\"my-2\"\r\n ></p-skeleton>\r\n <div class=\"ms-1\">\r\n <p-skeleton width=\"200%\" styleClass=\"mb-2\"></p-skeleton>\r\n <p-skeleton width=\"150px\" height=\"1rem\"></p-skeleton>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-template #errorTemplate>\r\n <app-no-service-my-access-pg\r\n heading=\"{{ 'Generic_lib.CommonError' | translate }}\"\r\n ></app-no-service-my-access-pg>\r\n </ng-template>\r\n </div>\r\n <!-- Notification content & loaders remain here -->\r\n </div>\r\n </div>\r\n <!-- end of sidebar-container -->\r\n </div>\r\n <!-- end of modal-content -->\r\n </div>\r\n <!-- end of modal-dialog -->\r\n</div>\r\n\r\n<!-- Common Conirmation Modal -->\r\n<confirm-dialog\r\n class=\"rm-invalid-border\"\r\n #confirmDialog\r\n header=\"{{ 'Generic_lib.ChangeLOB' | translate }}\"\r\n message=\"{{ 'Generic_lib.DoYouWantToChangeTheCurrentLOB' | translate }}\"\r\n (result)=\"lobChangeConfirmation($event)\"\r\n></confirm-dialog>\r\n\r\n<!--* Need to use component based notification UI as below -->\r\n<!-- Notification-Sidebar Started -->\r\n<!-- <app-notification-sidebar [isErrorOccured]=\"isErrorFound\" [userNotificationCount]=\"userNotificationCount\"\r\n [userNotificationCountObj]=\"userNotificationCountObj\" [eventwiseNotificationCount]=\"eventwiseNotificationCount\"\r\n (refreshNotification)=\"getEventwiseNotificationCount()\"\r\n [notificationLoadder]=\"notificationLoadder\"></app-notification-sidebar> -->\r\n<!-- Notification-Sidebar Ended -->\r\n", styles: [".app-header{padding:4px 10px 10px;height:42px;border-bottom:1px solid #d0d4e4}.logo{display:flex;align-items:center}.main-right{display:flex;align-items:center;cursor:pointer}.logo-icon{width:0;height:0;border-left:14px solid transparent;border-right:14px solid transparent;position:relative}.logo-icon:after{width:0;height:0;border-left:7px solid transparent;border-right:7px solid transparent;position:absolute;content:\"\";top:7px;left:-7px}p{font-size:25px!important}.p-inputtext.p-inputtext-sm{padding:4px 5px 4px 33px!important}.pi-search:before{font-size:13px;position:absolute;top:2px}.overlay-text{font-size:13px;line-height:18px;color:#676879;font-weight:400}.main-left .p-dropdown{border:none;border-radius:0;width:140px!important}.main-left .p-dropdown-panel .p-dropdown-items{padding:0!important;max-height:110px}.main-left :focus-visible{outline:none}.main-left .p-scroller{overflow-x:hidden;height:120px!important}.header-drpdwn{width:120px!important;font-size:11px!important;text-overflow:ellipsis;overflow:hidden}.logs{gap:70px;margin-top:5px}.head-search{position:fixed;top:4px;left:275px}.head-search input{width:calc(30vw - 40px)!important;border:1px solid #c3c6d4;background-color:#f6f7fb;height:32px;border-radius:0 4px 4px 0;border-left:none;font-size:13px!important;padding-left:30px!important;padding-right:54px}.head-search.active{position:fixed;top:4px;left:275px}.head-search.active input{width:555px!important}@media screen and (min-width: 1920px){.head-search.active{position:fixed;top:4px;left:275px}.head-search.active input{width:900px!important}}.header-left-icon{height:32px;width:32px;cursor:pointer;display:flex;justify-content:center;align-items:center;transition:all .5s;border-radius:50%;margin-right:4px;position:relative}.header-left-icon:hover{background:#dcdfec}.header-left-icon img:hover{filter:invert(0%) sepia(4%) saturate(0%) hue-rotate(324deg) brightness(55%) contrast(105%)}.apps-icon{width:21px}.logo-img{width:80px}.initial-text{width:32px;height:32px;display:flex;align-items:center;justify-content:center;font-size:11px;border-radius:50%;color:#fff;background-color:#8e562e}.initial-text-1{background-color:#f2edfa}.lob-img{padding-bottom:4px}.session-app:hover{background:#dcdfec;border-radius:10px}.app-col{cursor:pointer;padding:8px 0}.app-text{font-size:12px;color:#676879;white-space:nowrap;padding-top:8px;text-align:center;text-overflow:ellipsis;overflow:hidden;width:100px}.filter-search{position:relative;right:50px;bottom:2px;cursor:pointer}.filter-search .cross-search{width:23px}.filter-search .search-filter{width:19px}.headeright-icon{width:17px;height:17px;filter:invert(44%) sepia(3%) saturate(1698%) hue-rotate(199deg) brightness(92%) contrast(93%)}.pl-0{padding-left:0}.form-control-sm{border:none;border-bottom:1px solid #c3c6d4;border-radius:0}.overlay-footer .common-btn{width:110px;height:32px;padding:11px 12px;border-radius:4px;font-size:13px;cursor:pointer;background:#fff}.overlay-footer .primary-btn{padding:8px 12px 11px 14px;border-radius:4px;height:32px;width:65px;font-size:13px;cursor:pointer}.filter-popup{position:relative;left:10px}.form-group{margin-bottom:5px}.waffle-text{font-size:11px;text-align:center;width:70px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;margin-top:-3px}.waffle-align{display:grid;grid-template-columns:auto auto auto}.waffle{cursor:pointer;margin-right:16px}.waffle-popup{width:89px!important;margin-top:0;padding:8px 0 4px;display:flex;align-items:center;justify-content:center;flex-direction:column;cursor:pointer}.waffle-popup:hover{background:#d3e6ff;border-radius:10px}.waffle-popup img{height:40px}.custom-popover-content{padding:10px;right:-5px;top:0;position:absolute;background:white;border-radius:8px;box-shadow:0 0 6px #9d9d9d}.custom-popover-content.skeleton-popover{width:313px;display:grid;grid-template-columns:auto auto auto;gap:10px}.timezone{margin-right:12px}.timezone-icon{font-size:16px}.timezone-text{padding-left:6px;font-size:13px;color:#495057;font-weight:400}.user-tz{font-size:13px;color:#757575;font-weight:400;text-overflow:ellipsis;overflow:hidden;width:30px;white-space:normal}.profile-sidebar .p-dialog .p-dialog-content{padding:0}.profile-sidebar .p-dialog-header{display:none}.modname{font-size:18px;margin-bottom:0}.changingContent{overflow:hidden;width:100%}.changingContent .intro-text{background-image:linear-gradient(145deg,#f1eaec,#f8e3e7,#f7e1f8,#ebeeff,#e8eef3);position:relative;height:135px}.changingContent .inner-garient{padding:50px 20px 115px 30px}.changingContent .table-heading{padding:0 20px 1px 30px}.changingContent .table-selection{padding:3px 20px 0 30px}.grey-background{background-color:#f6f7fb}.white-bg{background:#ffffff;overflow:hidden}.imgs{width:20px}.p-dropdown .p-dropdown-label{background:transparent;border:0 none;display:flex;align-items:center}.p-dropdown .p-dropdown-trigger{width:32px!important}.pi-chevron-down:before{content:\"\\e902\";font-size:11px}.sidebar-outer{height:100vh}.lang-dropdown .p-dropdown{border:1px solid #dee2e6!important;height:26px!important;border-radius:4px!important;min-width:calc(40vh - 92px)!important;padding:0 4px 0 12px!important;display:flex!important;align-items:center!important;justify-content:space-between!important}.lang-dropdown .p-dropdown .pi{position:relative;bottom:2px;left:7px}.lang-dropdown .p-dropdown-panel{background:#ffffff!important;color:#495057!important;border:0px!important;box-shadow:0 2px 12px #0000001a!important}.lang-dropdown .p-dropdown-header{padding:5px 10px!important;border-bottom:1px solid #dee2e6!important;background:#f8f9fa!important;color:#343a40!important;margin:0!important}.lang-dropdown .p-dropdown-items-wrapper{max-height:140px!important}.lang-dropdown .p-dropdown-panel .p-dropdown-header{padding:4px 8px!important;border-radius:0!important}.p-dropdown-panel .p-dropdown-header{padding:.75rem 1.25rem;border-bottom:1px solid #dee2e6;color:#343a40;background:#f8f9fa;margin:0;border-top-right-radius:6px;border-top-left-radius:6px}.lang-dropdown .p-dropdown .p-dropdown-header .p-dropdown-filter{height:26px;border-radius:4px;font-size:12px;border:1px solid #ced4da!important;padding-left:12px!important}.lang-dropdown .p-inputtext{margin:0;text-align:start;font-size:13px;padding:0!important}.lang-dropdown .p-dropdown-panel .p-dropdown-header .p-dropdown-filter-icon{position:relative;bottom:13px;font-size:13px}.sidebar-outer .sidebar-body .sb-list ul li span{margin-right:12px}.p-dropdown-panel .p-dropdown-header .p-dropdown-filter-icon{left:6px;color:#6c757d}.lang-dropdown .p-dropdown-items-wrapper ::-webkit-scrollbar{width:6px!important}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background-color:#c1c1c1;border-radius:6px}::-webkit-scrollbar-thumb:hover{background-color:#a8a8a8}.sidebar-outer .sidebar-body .sb-list ul{float:left;width:100%;list-style:none;padding-left:0}.lang-dropdown .p-dropdown-panel .p-dropdown-items{font-size:12px;padding:0!important}.p-dropdown-panel .p-dropdown-items .p-dropdown-item.p-highlight{color:#1d4ed8;background:#eff6ff}.lang-dropdown .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:2px 14px;font-size:12px}.sidebar-outer .sidebar-body .sb-list ul li{display:flex;padding:8px 2px;cursor:pointer}.modal-dialog{margin-right:0;margin-top:0;margin-bottom:0}.loblist-drpdwn-panel .p-dropdown-header{padding:5px 10px}.loblist-drpdwn-panel .p-inputtext{background:#ffffff;padding:6px}.loblist-drpdwn .p-inputtext{font-size:13px}.loblist-drpdwn-panel .p-dropdown-header .p-dropdown-filter{height:28px;border-radius:4px;font-size:12px}.loblist-drpdwn-panel .p-dropdown-items .p-dropdown-item{margin-bottom:1px;padding:6px 16px;border:0;color:#495057;background:transparent;transition:box-shadow .2s;border-radius:0;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.loblist-drpdwn-panel .p-dropdown-header .p-dropdown-filter-icon{position:absolute;left:82%;top:50%;transform:translateY(-50%);color:#6c757d}.loblist-drpdwn-panel .p-dropdown-items .p-dropdown-empty-message{padding:6px 12px;color:#495057!important;background:transparent!important;font-size:12px}.logo-size{max-height:32px;max-width:92px}.logo-size-1{width:80px;height:30px}.sidebar-body{overflow:auto;height:calc(100vh - 70px);width:100%}.sidebar-body .refresh-icon{cursor:pointer}.sidebar-body .notify-border{padding:8px 8px 0 6px;cursor:pointer}.sidebar-body .notify-border:hover{background-color:#dcdfec;border-radius:8px}.sidebar-body .notify-border .initial-text{width:40px;height:40px;display:flex;align-items:center;justify-content:center;font-size:11px;border-radius:50%;color:#fff;background-color:#f2edfa}.sidebar-body .notify-border .service-count{color:#323238;font-weight:600;font-size:13px}.sidebar-body .notify-border .service-request{color:#676879;font-size:12px;font-weight:500}.sidebar-body .notify-border .time-text{color:#676879;font-size:12px}.sidebar-body .notify-border .grey-borders{border-bottom:1px solid #d0d4e4}.mail-table{height:calc(100vh - 155px);overflow:auto}.mail-table .p-datatable .p-datatable-thead>tr{border:1px solid #dee2e6;border-radius:24px}.mail-table .p-datatable .p-datatable-thead>tr th{padding:0 8px;height:36px;font-size:13px;color:var(--primary-text);font-weight:600;background:#fff}.mail-table .p-datatable .p-datatable-tbody>tr{border:1px solid #dee2e6;border-radius:24px}.mail-table .p-datatable .p-datatable-tbody>tr td{padding:0 25px 0 8px;height:38px;font-size:13px;color:var(--secondary-text);white-space:nowrap}.mail-table .p-checkbox{height:18px;width:18px}.mail-table .p-checkbox .p-checkbox-box{height:16px;width:16px;border-radius:4px;border:1px solid var(--ui-border)}.mail-table .p-checkbox .p-checkbox-box:hover{border:1px solid var(--ui-border)!important}.mail-table .p-checkbox .p-checkbox-icon{font-size:10px!important}.mail-table .p-datatable .p-sortable-column:hover{background-color:#fff!important;color:#000!important}.mail-table .p-datatable .p-sortable-column:focus{box-shadow:none!important}.mail-table .p-datatable .p-sortable-column .p-sortable-column-icon{font-size:12px}.mail-table .p-dropdown-panel .p-dropdown-items{padding:0}.mail-table .p-dropdown-panel .p-dropdown-items .p-dropdown-item{font-size:13px!important;padding:10px 15px}.mail-table .p-paginator{justify-content:flex-start!important;position:fixed;bottom:0;padding-left:0!important}.mail-table .p-paginator .p-paginator-current{font-size:12px;height:1rem!important}.mail-table .p-paginator .p-paginator-pages .p-paginator-page{min-width:30px!important;height:30px!important;font-size:12px}.mail-table .p-paginator .p-dropdown{height:30px!important;margin-top:0;border:0px}.mail-table .p-paginator .p-dropdown .p-dropdown-label{padding:4px 5px 0 10px!important;font-size:14px}.mail-table .p-paginator .p-dropdown .p-dropdown-trigger{width:1.5rem!important}.mail-table .p-paginator .p-dropdown .p-dropdown-trigger .pi{font-size:13px!important}.mail-pagination .p-paginator{justify-content:flex-start!important;position:fixed;bottom:0;padding-left:0}.mail-pagination .p-paginator .p-paginator-current{font-size:12px;height:1rem!important;padding-left:0}.mail-pagination .p-paginator .p-paginator-pages .p-paginator-page{min-width:30px!important;height:30px!important;font-size:12px}.mail-pagination .p-paginator .p-dropdown{height:30px!important;margin-top:0;border:0px}.mail-pagination .p-paginator .p-dropdown .p-dropdown-label{padding:4px 5px 0 10px!important;font-size:14px}.mail-pagination .p-paginator .p-dropdown .p-dropdown-trigger{width:1.5rem!important}.mail-pagination .p-paginator .p-dropdown .p-dropdown-trigger .pi{font-size:13px!important}.rm-invalid-border .card{border:0px}.view-pass-details{width:600px!important}.view-pass-details .p-dialog-header{background:#ffffff!important;border-radius:4px 4px 0 0!important;border-bottom:1px solid #d0d4e4!important}.view-pass-details .p-dialog-content:last-of-type{border-bottom-right-radius:4px!important;border-bottom-left-radius:4px!important;padding:0}.confirmtion-modal .p-dialog-content{padding-top:24px;padding-right:100px;font-size:15px}.confirmtion-modal .p-confirm-dialog-message{margin-left:0!important}.confirmtion-modal .p-button{font-size:15px;padding:6px 28px}.ngx-toastr{width:400px!important;margin-top:10px!important}.toast-success{background-color:#fff!important;border-bottom:3px solid #258750;border-radius:4px!important;background-image:url(../assets/common-header-lib/images/check_circle.svg)!important;background-repeat:no-repeat}.toast-success .toast-message{padding-top:2px;color:#258750!important;font-size:14px!important}.toast-error{background-color:#fff!important;border-bottom:3px solid #d83a52;border-radius:4px!important;background-image:url(../assets/common-header-lib/images/error.svg)!important;background-repeat:no-repeat}.toast-error .toast-message{padding-top:2px;color:#d83a52!important;font-size:14px!important}.toast-info{background-color:#fff!important;border-bottom:3px solid #0073ea;border-radius:4px!important;background-image:url(../assets/common-header-lib/images/info.svg)!important;background-repeat:no-repeat}.toast-info .toast-message{padding-top:3px;color:#0073ea!important;font-size:14px!important}.toast-warning{background-color:#fff!important;border-bottom:3px solid #fdab3d;border-radius:4px!important;background-image:url(../assets/common-header-lib/images/check_circle.svg)!important;background-repeat:no-repeat}.toast-warning .toast-message{padding-top:3px;color:#fdab3d!important;font-size:14px!important}.toast-close-button{right:10px!important;font-size:20px;font-weight:700;text-shadow:0 1px 0 #ffffff;background-color:transparent;border:0px;color:#676879;position:absolute;top:10px;cursor:pointer}.toast-container{position:absolute;z-index:2147483647!important}.toast-container .ngx-toastr{position:relative;overflow:hidden;margin:0 0 6px;padding:15px 40px 15px 50px;width:300px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;background-size:24px;box-shadow:0 0 12px #999;color:#fff}.toast-top-center{top:0;right:0;width:100%}.toast-container.toast-top-center .ngx-toastr,.toast-container.toast-bottom-center .ngx-toastr{margin-left:auto;margin-right:auto}.badge-notify:hover{border-radius:50%;background:#dcdfec}.badge-notify .p-badge{min-width:16px;height:16px;line-height:15px}.badge-notify .p-overlay-badge .p-badge{position:absolute;top:-7px;right:12px;font-size:9px;padding:0 2px;cursor:pointer}.madontary-icon{color:#d4231d;font-weight:500;padding:5px 0 0 5px}.img-lock{width:12px;margin-bottom:1px}.img-lock.ext{width:16px;margin-bottom:0}.img-lock.ext2{width:18px;margin-bottom:0}.form-group .error-msg{position:relative}.submit-btn .p-button{height:30px;font-size:14px;border-radius:4px}.submit-btn .p-button .p-button-label{font-weight:400;font-size:13px}.p-dialog.general-configuration{width:100%;height:100vh;max-height:100vh}.general-configuration .p-dialog-header{border-bottom:1px solid #d0d4e4!important;background:#ffffff!important}.p-dialog .p-dialog-header{padding:10px 21px!important;background:#f6f7fb!important;border-top-right-radius:0!important;border-top-left-radius:0!important;height:54px}.assets-dropdown .p-dropdown{height:38px!important;width:100%!important;border-radius:4px!important;align-items:center!important}.assets-dropdown .p-dropdown:hover{border:1px solid #ced4da!important}.p-dropdown-panel .p-dropdown-header .p-dropdown-filter{padding-right:1.75rem;margin-right:-1.75rem}.assets-dropdown .p-inputtext{width:100%;border-radius:4px;height:30px;font-size:13px!important}.assets-dropdown .p-dropdown-panel .p-dropdown-header .p-dropdown-filter-icon{left:96%;color:#6c757d;font-size:13px;top:15px!important}.assets-dropdown .p-dropdown-panel .p-dropdown-header{padding:10px!important}.assets-dropdown .p-dropdown-items-wrapper{max-height:100px!important}.assets-dropdown .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:5px 20px!important;font-size:13px!important;font-weight:400!important}.p-dropdown-panel .p-dropdown-items{padding:0!important}.assets-dropdown .p-dropdown-panel .p-dropdown-items .p-dropdown-empty-message{font-size:13px!important;padding:8px 20px!important}.p-dropdown-panel .p-dropdown-items .p-dropdown-empty-message{padding:.75rem 1.25rem;color:#495057!important;background:transparent!important}.p-dropdown-filter-container{position:relative}.p-dropdown-filter-container input{border:1px solid #ced4da!important}.input-dropdown .password-checkbox-right{position:absolute;width:24px;right:8px}.timezone-dropdown .p-dropdown{width:100%;border:1px solid #ced4da!important;border-radius:4px;height:38px}.timezone-dropdown .p-dropdown-panel .p-dropdown-header{padding:5px}.timezone-dropdown .p-dropdown:hover{border:1px solid #ced4da!important}.timezone-dropdown .p-inputtext{width:100%;border-radius:4px;height:30px;font-size:13px!important}.timezone-dropdown .p-dropdown-panel .p-dropdown-header .p-dropdown-filter-icon{left:96%;color:#6c757d;font-size:13px;top:15px!important}.timezone-dropdown .p-dropdown-panel .p-dropdown-header{padding:10px!important}.timezone-dropdowntimezone-dropdown .p-dropdown-items-wrapper{max-height:100px!important}.timezone-dropdown .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:5px 20px!important;font-size:13px!important;font-weight:400!important}.timezone-dropdown .p-dropdown-panel .p-dropdown-items .p-dropdown-empty-message{font-size:13px!important;padding:8px 20px!important}.sidebar-container{width:420px;position:fixed;top:0;height:100vh;max-width:100%;transition:all .3s ease;-webkit-transition:all .3s ease;-moz-transition:all .3s ease;background-color:#fff}.white-bg{background:#ffffff;width:420px;overflow:hidden}.sidebar-outer .sidebar-header{padding:12px 15px}.sidebar-outer .sidebar-header .sh-top{display:flex;align-items:center;justify-content:space-between}.log-text{font-size:16px;color:#292f4c;font-weight:600}.sidebar-outer .sidebar-header .sh-top button{height:24px}.sidebar-outer .sidebar-body{padding:12px 20px;float:left;width:100%;overflow:auto;height:calc(100vh - 70px)}.tertiary-btn{border:none;background-color:transparent}.sidebar-body .noti-text{color:#292f4c;font-size:13px;font-weight:600;line-height:24px}.sidebar-body .refresh-text{color:#676879;font-size:12px;line-height:24px}.error-msg{font-size:12px;font-weight:600;width:100%;position:absolute;bottom:4px;left:0;display:flex;align-items:flex-end;color:#d83a52;font-family:-apple-system,BlinkMacSystemFont,Roboto,Segoe UI,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol!important}.error-msg .error-icon{font-size:18px;margin-right:4px;position:relative;top:-1px}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i10.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "overlayDirection", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i11.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i12.OverlayPanel, selector: "p-overlayPanel", inputs: ["dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i13.BadgeDirective, selector: "[pBadge]", inputs: ["iconPos", "badgeDisabled", "value", "severity"] }, { kind: "component", type: i14.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i15.UserSidebarComponent, selector: "app-user-sidebar", outputs: ["closeDialogBox"] }, { kind: "component", type: i16.SidePopupComponent, selector: "app-side-popup", inputs: ["visible", "position", "header"], outputs: ["closeDialogBox"] }, { kind: "component", type: i17.UserMailboxComponent, selector: "app-user-mailbox", inputs: ["apiURL"], outputs: ["closeMailDialogBox"] }, { kind: "component", type: i18.NoServiceMyAccessPgComponent, selector: "app-no-service-my-access-pg", inputs: ["heading", "subHeading"] }, { kind: "component", type: i19.ConfirmDialogComponent, selector: "confirm-dialog", inputs: ["header", "message"], outputs: ["result"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "pipe", type: i20.SliceToTwoPipe, name: "sliceToTwo" }], encapsulation: i0.ViewEncapsulation.None });
|
|
572
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CommonHeaderLibComponent, decorators: [{
|
|
573
|
+
type: Component,
|
|
574
|
+
args: [{ selector: 'lib-common-header-lib', encapsulation: ViewEncapsulation.None, template: "<header class=\"app-header ext\">\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <div class=\"d-flex\">\r\n <div class=\"logo gap-4\">\r\n <img\r\n *ngIf=\"EnableLogo && headerLogo\"\r\n class=\"logo-size\"\r\n title=\"Logo\"\r\n alt=\"Logo\"\r\n [src]=\"headerLogo\"\r\n loading=\"lazy\"\r\n />\r\n <p-skeleton\r\n *ngIf=\"!headerLogo\"\r\n height=\"1.5rem\"\r\n width=\"5rem\"\r\n ></p-skeleton>\r\n </div>\r\n </div>\r\n <div class=\"projName\">\r\n <h1 class=\"modname\">{{ moduleName }}</h1>\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-end align-items-center\">\r\n <!--timezone-->\r\n <ng-container *ngIf=\"EnableTimeZone && userTimeZoneAbbreviations\">\r\n <div class=\"timezone\">\r\n <img\r\n src=\"../assets/common-header-lib/images/schedule.svg\"\r\n class=\"mb-1\"\r\n alt=\"Icon\"\r\n />\r\n <span class=\"timezone-text\"\r\n >{{ \"Generic_lib.PreferredTimezone\" | translate }} :\r\n </span>\r\n <span\r\n *ngIf=\"userTimeZoneAbbreviations\"\r\n class=\"user-tz\"\r\n [title]=\"userTimeZoneFullForm\"\r\n >{{ userTimeZoneAbbreviations }}</span\r\n >\r\n </div>\r\n </ng-container>\r\n\r\n <!--lob-->\r\n <ng-container\r\n *ngIf=\"EnableLOB && !showLobLoader; else LobLodderAnimation\"\r\n >\r\n <div class=\"main-left d-flex\">\r\n <img\r\n src=\"../assets/common-header-lib/images/marker-pin.svg\"\r\n alt=\"pen Icon\"\r\n />\r\n <p-dropdown\r\n filterPlaceholder=\"{{ 'Generic_lib.Search' | translate }}\"\r\n [options]=\"userLOBList\"\r\n (onChange)=\"onLobChangeEvent($event)\"\r\n optionLabel=\"lobName\"\r\n optionValue=\"lobId\"\r\n [(ngModel)]=\"selectedLOBId\"\r\n [filter]=\"true\"\r\n filterBy=\"lobName\"\r\n [showClear]=\"false\"\r\n [style]=\"{ width: '150px', height: '30px' }\"\r\n [resetFilterOnHide]=\"true\"\r\n [virtualScroll]=\"true\"\r\n [lazy]=\"false\"\r\n name=\"lob\"\r\n [itemSize]=\"30\"\r\n class=\"loblist-drpdwn\"\r\n panelStyleClass=\"loblist-drpdwn-panel\"\r\n >\r\n <ng-template let-loblist pTemplate=\"item\">\r\n <div class=\"flex align-items-center gap-2\">\r\n <div title=\"{{ loblist.lobName }}\" class=\"header-drpdwn\">\r\n {{ loblist.lobName }}\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-dropdown>\r\n </div>\r\n </ng-container>\r\n <ng-template #LobLodderAnimation>\r\n <p-skeleton height=\"1.5rem\" width=\"10rem\"></p-skeleton>\r\n </ng-template>\r\n\r\n <!--mailbox-->\r\n <ng-container *ngIf=\"isHeaderContentLoaded; else HeaderLoading\">\r\n <div *ngIf=\"EnableMail\" class=\"header-left-icon\">\r\n <img\r\n src=\"../assets/common-header-lib/images/mail-icon.svg\"\r\n alt=\"mail Icon\"\r\n class=\"headeright-icon\"\r\n (click)=\"showMailBoxScreen()\"\r\n />\r\n </div>\r\n <ng-container *ngIf=\"EnableMail && totalEmails.length > 0\">\r\n <!-- <ng-container> -->\r\n <div class=\"badge-notify\">\r\n <div pBadge [value]=\"totalEmails\"></div>\r\n </div>\r\n </ng-container>\r\n\r\n <!--notification-->\r\n <div class=\"header-left-icon\" *ngIf=\"EnableNotifications\">\r\n <img\r\n src=\"../assets/common-header-lib/images/bell-icon.svg\"\r\n alt=\"mail Icon\"\r\n class=\"headeright-icon\"\r\n (click)=\"OpenNotificationModal()\"\r\n />\r\n </div>\r\n\r\n <ng-container\r\n *ngIf=\"EnableNotifications && userNotificationCount.length > 0\"\r\n >\r\n <div class=\"badge-notify\">\r\n <div pBadge [value]=\"userNotificationCount\"></div>\r\n </div>\r\n </ng-container>\r\n\r\n <!--9 Dots -->\r\n <div\r\n *ngIf=\"EnableMoreApps\"\r\n class=\"header-left-icon\"\r\n title=\"Control Center\"\r\n alt=\"bell Icon\"\r\n (click)=\"showUserAppsPanel($event)\"\r\n >\r\n <img\r\n src=\"../assets/common-header-lib/images/apps-1.svg\"\r\n class=\"apps-icon\"\r\n />\r\n </div>\r\n\r\n <!--user display name -->\r\n <div\r\n *ngIf=\"EnableProfile\"\r\n class=\"main-right\"\r\n (click)=\"showUserDetailsPanel()\"\r\n >\r\n <ng-container>\r\n <div class=\"initial-text mx-1\">\r\n {{ userdisplayName | sliceToTwo }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-template #HeaderLoading>\r\n <p-skeleton shape=\"circle\" size=\"1.3rem\" styleClass=\"mx-2\"></p-skeleton>\r\n <p-skeleton shape=\"circle\" size=\"1.3rem\" styleClass=\"mx-2\"></p-skeleton>\r\n <p-skeleton size=\"1.5rem\" styleClass=\"mx-2\"></p-skeleton>\r\n <p-skeleton shape=\"circle\" size=\"2rem\" styleClass=\"mx-2\"></p-skeleton>\r\n </ng-template>\r\n </div>\r\n </div>\r\n</header>\r\n\r\n<!--List of Application : 9 dots -->\r\n<p-overlayPanel #App class=\"pt-0\" styleClass=\"app-panel\">\r\n <ng-container *ngIf=\"!userAppLoaderLoadder; else LoadingTemplate\">\r\n <div class=\"custom-popover-content\">\r\n <div class=\"waffle-align\">\r\n <div\r\n class=\"waffle-popup\"\r\n [title]=\"appDetails['applicationName']\"\r\n *ngFor=\"let appDetails of ListOfUserPrivillegedApp\"\r\n (click)=\"getConnectionofApplication(appDetails['appCode'])\"\r\n >\r\n <img\r\n *ngIf=\"appDetails?.appCode\"\r\n src=\"../assets/common-header-lib/images/{{\r\n appDetails.appCode\r\n }}.svg\"\r\n alt=\"App icon\"\r\n />\r\n\r\n <div class=\"waffle-text\">{{ appDetails[\"applicationName\"] }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-template #LoadingTemplate>\r\n <div class=\"custom-popover-content skeleton-popover\">\r\n <ng-container *ngFor=\"let item of repeatLoader\">\r\n <div\r\n class=\"d-flex flex-column align-items-center justify-content-center gap-2\"\r\n >\r\n <p-skeleton size=\"3rem\"></p-skeleton>\r\n <p-skeleton height=\".3rem\" width=\"35px\"></p-skeleton>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n</p-overlayPanel>\r\n\r\n<!--mailbox details-->\r\n<ng-container *ngIf=\"showMailboxScreenflag\">\r\n <div class=\"changingContent\">\r\n <app-user-mailbox\r\n (closeMailDialogBox)=\"hideMailBoxScreen()\"\r\n ></app-user-mailbox>\r\n </div>\r\n</ng-container>\r\n\r\n<!-- Userdetails profile pop up -->\r\n<div class=\"profile-sidebar\">\r\n <app-side-popup\r\n *ngIf=\"isOpenSidePopup\"\r\n [visible]=\"true\"\r\n [position]=\"'right'\"\r\n (closeDialogBox)=\"closeSidePopup()\"\r\n >\r\n <app-user-sidebar\r\n *ngIf=\"showUserDetails\"\r\n (closeDialogBox)=\"closeSidePopup()\"\r\n ></app-user-sidebar>\r\n </app-side-popup>\r\n</div>\r\n\r\n<!-- Notification side popup -->\r\n<div\r\n class=\"modal fade common-alert-modal\"\r\n #notifyModal\r\n id=\"Notify_SidebarModal\"\r\n tabindex=\"-1\"\r\n aria-hidden=\"true\"\r\n>\r\n <div class=\"modal-dialog sidebar-outer white-bg\">\r\n <div class=\"modal-content\">\r\n <div class=\"sidebar-container white-bg\">\r\n <!-- keep everything inside this content -->\r\n\r\n <!-- Sidebar Header -->\r\n <div class=\"sidebar-header grey-background\">\r\n <div class=\"sh-top\">\r\n <div class=\"sh-top-left d-flex align-items-center\">\r\n <div class=\"mx-2 log-text\">\r\n {{ \"Generic_lib.Notification\" | translate }}\r\n </div>\r\n </div>\r\n <div class=\"sh-top-right\">\r\n <button\r\n type=\"button\"\r\n class=\"common-bn tertiary-btn\"\r\n aria-label=\"Close\"\r\n (click)=\"closeModal()\"\r\n >\r\n <img\r\n src=\"assets/common-header-lib/images/close.svg\"\r\n alt=\"Close\"\r\n class=\"imgs mb-1\"\r\n />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Sidebar Body -->\r\n <div class=\"sidebar-body\">\r\n <div class=\"d-flex justify-content-between align-items-center mb-2\">\r\n <div class=\"noti-text\">\r\n {{\r\n \"Generic_lib.YouHaveNNotifications\"\r\n | translate: { count: userNotificationCount }\r\n }}\r\n </div>\r\n <div\r\n class=\"d-flex align-items-center gap-1 refresh-icon\"\r\n (click)=\"getEventwiseNotification()\"\r\n >\r\n <img\r\n src=\"assets/common-header-lib/images/refresh-1.svg\"\r\n alt=\"Refresh\"\r\n />\r\n <div class=\"refresh-text\">\r\n {{ \"Generic_lib.Refresh\" | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-3\">\r\n <ng-container\r\n *ngIf=\"\r\n !isErrorFound && !notificationLoadder;\r\n else Noti_LoadingTemplate\r\n \"\r\n >\r\n <div\r\n class=\"notify-border\"\r\n *ngFor=\"let event of eventwiseNotificationCount\"\r\n >\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <div class=\"initial-text initial-text-1 mx-1\">\r\n <img\r\n src=\"assets/common-header-lib/images/noti_ticket.svg\"\r\n alt=\"Icon\"\r\n />\r\n </div>\r\n <div>\r\n <div>\r\n <span class=\"service-count\"\r\n >{{ event[\"PendingCount\"] }} New </span\r\n ><span class=\"service-request\"\r\n >{{ event[\"EventName\"] }} Event requests</span\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"grey-borders mt-2\"></div>\r\n </div>\r\n </ng-container>\r\n <ng-template #Noti_LoadingTemplate>\r\n <ng-container *ngIf=\"notificationLoadder; else errorTemplate\">\r\n <ng-container *ngFor=\"let item of repeatLoader1\">\r\n <div class=\"d-flex align-items-center gap-3\">\r\n <p-skeleton\r\n shape=\"circle\"\r\n size=\"60px\"\r\n styleClass=\"my-2\"\r\n ></p-skeleton>\r\n <div class=\"ms-1\">\r\n <p-skeleton width=\"200%\" styleClass=\"mb-2\"></p-skeleton>\r\n <p-skeleton width=\"150px\" height=\"1rem\"></p-skeleton>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-template #errorTemplate>\r\n <app-no-service-my-access-pg\r\n heading=\"{{ 'Generic_lib.CommonError' | translate }}\"\r\n ></app-no-service-my-access-pg>\r\n </ng-template>\r\n </div>\r\n <!-- Notification content & loaders remain here -->\r\n </div>\r\n </div>\r\n <!-- end of sidebar-container -->\r\n </div>\r\n <!-- end of modal-content -->\r\n </div>\r\n <!-- end of modal-dialog -->\r\n</div>\r\n\r\n<!-- Common Conirmation Modal -->\r\n<confirm-dialog\r\n class=\"rm-invalid-border\"\r\n #confirmDialog\r\n header=\"{{ 'Generic_lib.ChangeLOB' | translate }}\"\r\n message=\"{{ 'Generic_lib.DoYouWantToChangeTheCurrentLOB' | translate }}\"\r\n (result)=\"lobChangeConfirmation($event)\"\r\n></confirm-dialog>\r\n\r\n<!--* Need to use component based notification UI as below -->\r\n<!-- Notification-Sidebar Started -->\r\n<!-- <app-notification-sidebar [isErrorOccured]=\"isErrorFound\" [userNotificationCount]=\"userNotificationCount\"\r\n [userNotificationCountObj]=\"userNotificationCountObj\" [eventwiseNotificationCount]=\"eventwiseNotificationCount\"\r\n (refreshNotification)=\"getEventwiseNotificationCount()\"\r\n [notificationLoadder]=\"notificationLoadder\"></app-notification-sidebar> -->\r\n<!-- Notification-Sidebar Ended -->\r\n", styles: [".app-header{padding:4px 10px 10px;height:42px;border-bottom:1px solid #d0d4e4}.logo{display:flex;align-items:center}.main-right{display:flex;align-items:center;cursor:pointer}.logo-icon{width:0;height:0;border-left:14px solid transparent;border-right:14px solid transparent;position:relative}.logo-icon:after{width:0;height:0;border-left:7px solid transparent;border-right:7px solid transparent;position:absolute;content:\"\";top:7px;left:-7px}p{font-size:25px!important}.p-inputtext.p-inputtext-sm{padding:4px 5px 4px 33px!important}.pi-search:before{font-size:13px;position:absolute;top:2px}.overlay-text{font-size:13px;line-height:18px;color:#676879;font-weight:400}.main-left .p-dropdown{border:none;border-radius:0;width:140px!important}.main-left .p-dropdown-panel .p-dropdown-items{padding:0!important;max-height:110px}.main-left :focus-visible{outline:none}.main-left .p-scroller{overflow-x:hidden;height:120px!important}.header-drpdwn{width:120px!important;font-size:11px!important;text-overflow:ellipsis;overflow:hidden}.logs{gap:70px;margin-top:5px}.head-search{position:fixed;top:4px;left:275px}.head-search input{width:calc(30vw - 40px)!important;border:1px solid #c3c6d4;background-color:#f6f7fb;height:32px;border-radius:0 4px 4px 0;border-left:none;font-size:13px!important;padding-left:30px!important;padding-right:54px}.head-search.active{position:fixed;top:4px;left:275px}.head-search.active input{width:555px!important}@media screen and (min-width: 1920px){.head-search.active{position:fixed;top:4px;left:275px}.head-search.active input{width:900px!important}}.header-left-icon{height:32px;width:32px;cursor:pointer;display:flex;justify-content:center;align-items:center;transition:all .5s;border-radius:50%;margin-right:4px;position:relative}.header-left-icon:hover{background:#dcdfec}.header-left-icon img:hover{filter:invert(0%) sepia(4%) saturate(0%) hue-rotate(324deg) brightness(55%) contrast(105%)}.apps-icon{width:21px}.logo-img{width:80px}.initial-text{width:32px;height:32px;display:flex;align-items:center;justify-content:center;font-size:11px;border-radius:50%;color:#fff;background-color:#8e562e}.initial-text-1{background-color:#f2edfa}.lob-img{padding-bottom:4px}.session-app:hover{background:#dcdfec;border-radius:10px}.app-col{cursor:pointer;padding:8px 0}.app-text{font-size:12px;color:#676879;white-space:nowrap;padding-top:8px;text-align:center;text-overflow:ellipsis;overflow:hidden;width:100px}.filter-search{position:relative;right:50px;bottom:2px;cursor:pointer}.filter-search .cross-search{width:23px}.filter-search .search-filter{width:19px}.headeright-icon{width:17px;height:17px;filter:invert(44%) sepia(3%) saturate(1698%) hue-rotate(199deg) brightness(92%) contrast(93%)}.pl-0{padding-left:0}.form-control-sm{border:none;border-bottom:1px solid #c3c6d4;border-radius:0}.overlay-footer .common-btn{width:110px;height:32px;padding:11px 12px;border-radius:4px;font-size:13px;cursor:pointer;background:#fff}.overlay-footer .primary-btn{padding:8px 12px 11px 14px;border-radius:4px;height:32px;width:65px;font-size:13px;cursor:pointer}.filter-popup{position:relative;left:10px}.form-group{margin-bottom:5px}.waffle-text{font-size:11px;text-align:center;width:70px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;margin-top:-3px}.waffle-align{display:grid;grid-template-columns:auto auto auto}.waffle{cursor:pointer;margin-right:16px}.waffle-popup{width:89px!important;margin-top:0;padding:8px 0 4px;display:flex;align-items:center;justify-content:center;flex-direction:column;cursor:pointer}.waffle-popup:hover{background:#d3e6ff;border-radius:10px}.waffle-popup img{height:40px}.custom-popover-content{padding:10px;right:-5px;top:0;position:absolute;background:white;border-radius:8px;box-shadow:0 0 6px #9d9d9d}.custom-popover-content.skeleton-popover{width:313px;display:grid;grid-template-columns:auto auto auto;gap:10px}.timezone{margin-right:12px}.timezone-icon{font-size:16px}.timezone-text{padding-left:6px;font-size:13px;color:#495057;font-weight:400}.user-tz{font-size:13px;color:#757575;font-weight:400;text-overflow:ellipsis;overflow:hidden;width:30px;white-space:normal}.profile-sidebar .p-dialog .p-dialog-content{padding:0}.profile-sidebar .p-dialog-header{display:none}.modname{font-size:18px;margin-bottom:0}.changingContent{overflow:hidden;width:100%}.changingContent .intro-text{background-image:linear-gradient(145deg,#f1eaec,#f8e3e7,#f7e1f8,#ebeeff,#e8eef3);position:relative;height:135px}.changingContent .inner-garient{padding:50px 20px 115px 30px}.changingContent .table-heading{padding:0 20px 1px 30px}.changingContent .table-selection{padding:3px 20px 0 30px}.grey-background{background-color:#f6f7fb}.white-bg{background:#ffffff;overflow:hidden}.imgs{width:20px}.p-dropdown .p-dropdown-label{background:transparent;border:0 none;display:flex;align-items:center}.p-dropdown .p-dropdown-trigger{width:32px!important}.pi-chevron-down:before{content:\"\\e902\";font-size:11px}.sidebar-outer{height:100vh}.lang-dropdown .p-dropdown{border:1px solid #dee2e6!important;height:26px!important;border-radius:4px!important;min-width:calc(40vh - 92px)!important;padding:0 4px 0 12px!important;display:flex!important;align-items:center!important;justify-content:space-between!important}.lang-dropdown .p-dropdown .pi{position:relative;bottom:2px;left:7px}.lang-dropdown .p-dropdown-panel{background:#ffffff!important;color:#495057!important;border:0px!important;box-shadow:0 2px 12px #0000001a!important}.lang-dropdown .p-dropdown-header{padding:5px 10px!important;border-bottom:1px solid #dee2e6!important;background:#f8f9fa!important;color:#343a40!important;margin:0!important}.lang-dropdown .p-dropdown-items-wrapper{max-height:140px!important}.lang-dropdown .p-dropdown-panel .p-dropdown-header{padding:4px 8px!important;border-radius:0!important}.p-dropdown-panel .p-dropdown-header{padding:.75rem 1.25rem;border-bottom:1px solid #dee2e6;color:#343a40;background:#f8f9fa;margin:0;border-top-right-radius:6px;border-top-left-radius:6px}.lang-dropdown .p-dropdown .p-dropdown-header .p-dropdown-filter{height:26px;border-radius:4px;font-size:12px;border:1px solid #ced4da!important;padding-left:12px!important}.lang-dropdown .p-inputtext{margin:0;text-align:start;font-size:13px;padding:0!important}.lang-dropdown .p-dropdown-panel .p-dropdown-header .p-dropdown-filter-icon{position:relative;bottom:13px;font-size:13px}.sidebar-outer .sidebar-body .sb-list ul li span{margin-right:12px}.p-dropdown-panel .p-dropdown-header .p-dropdown-filter-icon{left:6px;color:#6c757d}.lang-dropdown .p-dropdown-items-wrapper ::-webkit-scrollbar{width:6px!important}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background-color:#c1c1c1;border-radius:6px}::-webkit-scrollbar-thumb:hover{background-color:#a8a8a8}.sidebar-outer .sidebar-body .sb-list ul{float:left;width:100%;list-style:none;padding-left:0}.lang-dropdown .p-dropdown-panel .p-dropdown-items{font-size:12px;padding:0!important}.p-dropdown-panel .p-dropdown-items .p-dropdown-item.p-highlight{color:#1d4ed8;background:#eff6ff}.lang-dropdown .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:2px 14px;font-size:12px}.sidebar-outer .sidebar-body .sb-list ul li{display:flex;padding:8px 2px;cursor:pointer}.modal-dialog{margin-right:0;margin-top:0;margin-bottom:0}.loblist-drpdwn-panel .p-dropdown-header{padding:5px 10px}.loblist-drpdwn-panel .p-inputtext{background:#ffffff;padding:6px}.loblist-drpdwn .p-inputtext{font-size:13px}.loblist-drpdwn-panel .p-dropdown-header .p-dropdown-filter{height:28px;border-radius:4px;font-size:12px}.loblist-drpdwn-panel .p-dropdown-items .p-dropdown-item{margin-bottom:1px;padding:6px 16px;border:0;color:#495057;background:transparent;transition:box-shadow .2s;border-radius:0;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.loblist-drpdwn-panel .p-dropdown-header .p-dropdown-filter-icon{position:absolute;left:82%;top:50%;transform:translateY(-50%);color:#6c757d}.loblist-drpdwn-panel .p-dropdown-items .p-dropdown-empty-message{padding:6px 12px;color:#495057!important;background:transparent!important;font-size:12px}.logo-size{max-height:32px;max-width:92px}.logo-size-1{width:80px;height:30px}.sidebar-body{overflow:auto;height:calc(100vh - 70px);width:100%}.sidebar-body .refresh-icon{cursor:pointer}.sidebar-body .notify-border{padding:8px 8px 0 6px;cursor:pointer}.sidebar-body .notify-border:hover{background-color:#dcdfec;border-radius:8px}.sidebar-body .notify-border .initial-text{width:40px;height:40px;display:flex;align-items:center;justify-content:center;font-size:11px;border-radius:50%;color:#fff;background-color:#f2edfa}.sidebar-body .notify-border .service-count{color:#323238;font-weight:600;font-size:13px}.sidebar-body .notify-border .service-request{color:#676879;font-size:12px;font-weight:500}.sidebar-body .notify-border .time-text{color:#676879;font-size:12px}.sidebar-body .notify-border .grey-borders{border-bottom:1px solid #d0d4e4}.mail-table{height:calc(100vh - 155px);overflow:auto}.mail-table .p-datatable .p-datatable-thead>tr{border:1px solid #dee2e6;border-radius:24px}.mail-table .p-datatable .p-datatable-thead>tr th{padding:0 8px;height:36px;font-size:13px;color:var(--primary-text);font-weight:600;background:#fff}.mail-table .p-datatable .p-datatable-tbody>tr{border:1px solid #dee2e6;border-radius:24px}.mail-table .p-datatable .p-datatable-tbody>tr td{padding:0 25px 0 8px;height:38px;font-size:13px;color:var(--secondary-text);white-space:nowrap}.mail-table .p-checkbox{height:18px;width:18px}.mail-table .p-checkbox .p-checkbox-box{height:16px;width:16px;border-radius:4px;border:1px solid var(--ui-border)}.mail-table .p-checkbox .p-checkbox-box:hover{border:1px solid var(--ui-border)!important}.mail-table .p-checkbox .p-checkbox-icon{font-size:10px!important}.mail-table .p-datatable .p-sortable-column:hover{background-color:#fff!important;color:#000!important}.mail-table .p-datatable .p-sortable-column:focus{box-shadow:none!important}.mail-table .p-datatable .p-sortable-column .p-sortable-column-icon{font-size:12px}.mail-table .p-dropdown-panel .p-dropdown-items{padding:0}.mail-table .p-dropdown-panel .p-dropdown-items .p-dropdown-item{font-size:13px!important;padding:10px 15px}.mail-table .p-paginator{justify-content:flex-start!important;position:fixed;bottom:0;padding-left:0!important}.mail-table .p-paginator .p-paginator-current{font-size:12px;height:1rem!important}.mail-table .p-paginator .p-paginator-pages .p-paginator-page{min-width:30px!important;height:30px!important;font-size:12px}.mail-table .p-paginator .p-dropdown{height:30px!important;margin-top:0;border:0px}.mail-table .p-paginator .p-dropdown .p-dropdown-label{padding:4px 5px 0 10px!important;font-size:14px}.mail-table .p-paginator .p-dropdown .p-dropdown-trigger{width:1.5rem!important}.mail-table .p-paginator .p-dropdown .p-dropdown-trigger .pi{font-size:13px!important}.mail-pagination .p-paginator{justify-content:flex-start!important;position:fixed;bottom:0;padding-left:0}.mail-pagination .p-paginator .p-paginator-current{font-size:12px;height:1rem!important;padding-left:0}.mail-pagination .p-paginator .p-paginator-pages .p-paginator-page{min-width:30px!important;height:30px!important;font-size:12px}.mail-pagination .p-paginator .p-dropdown{height:30px!important;margin-top:0;border:0px}.mail-pagination .p-paginator .p-dropdown .p-dropdown-label{padding:4px 5px 0 10px!important;font-size:14px}.mail-pagination .p-paginator .p-dropdown .p-dropdown-trigger{width:1.5rem!important}.mail-pagination .p-paginator .p-dropdown .p-dropdown-trigger .pi{font-size:13px!important}.rm-invalid-border .card{border:0px}.view-pass-details{width:600px!important}.view-pass-details .p-dialog-header{background:#ffffff!important;border-radius:4px 4px 0 0!important;border-bottom:1px solid #d0d4e4!important}.view-pass-details .p-dialog-content:last-of-type{border-bottom-right-radius:4px!important;border-bottom-left-radius:4px!important;padding:0}.confirmtion-modal .p-dialog-content{padding-top:24px;padding-right:100px;font-size:15px}.confirmtion-modal .p-confirm-dialog-message{margin-left:0!important}.confirmtion-modal .p-button{font-size:15px;padding:6px 28px}.ngx-toastr{width:400px!important;margin-top:10px!important}.toast-success{background-color:#fff!important;border-bottom:3px solid #258750;border-radius:4px!important;background-image:url(../assets/common-header-lib/images/check_circle.svg)!important;background-repeat:no-repeat}.toast-success .toast-message{padding-top:2px;color:#258750!important;font-size:14px!important}.toast-error{background-color:#fff!important;border-bottom:3px solid #d83a52;border-radius:4px!important;background-image:url(../assets/common-header-lib/images/error.svg)!important;background-repeat:no-repeat}.toast-error .toast-message{padding-top:2px;color:#d83a52!important;font-size:14px!important}.toast-info{background-color:#fff!important;border-bottom:3px solid #0073ea;border-radius:4px!important;background-image:url(../assets/common-header-lib/images/info.svg)!important;background-repeat:no-repeat}.toast-info .toast-message{padding-top:3px;color:#0073ea!important;font-size:14px!important}.toast-warning{background-color:#fff!important;border-bottom:3px solid #fdab3d;border-radius:4px!important;background-image:url(../assets/common-header-lib/images/check_circle.svg)!important;background-repeat:no-repeat}.toast-warning .toast-message{padding-top:3px;color:#fdab3d!important;font-size:14px!important}.toast-close-button{right:10px!important;font-size:20px;font-weight:700;text-shadow:0 1px 0 #ffffff;background-color:transparent;border:0px;color:#676879;position:absolute;top:10px;cursor:pointer}.toast-container{position:absolute;z-index:2147483647!important}.toast-container .ngx-toastr{position:relative;overflow:hidden;margin:0 0 6px;padding:15px 40px 15px 50px;width:300px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;background-size:24px;box-shadow:0 0 12px #999;color:#fff}.toast-top-center{top:0;right:0;width:100%}.toast-container.toast-top-center .ngx-toastr,.toast-container.toast-bottom-center .ngx-toastr{margin-left:auto;margin-right:auto}.badge-notify:hover{border-radius:50%;background:#dcdfec}.badge-notify .p-badge{min-width:16px;height:16px;line-height:15px}.badge-notify .p-overlay-badge .p-badge{position:absolute;top:-7px;right:12px;font-size:9px;padding:0 2px;cursor:pointer}.madontary-icon{color:#d4231d;font-weight:500;padding:5px 0 0 5px}.img-lock{width:12px;margin-bottom:1px}.img-lock.ext{width:16px;margin-bottom:0}.img-lock.ext2{width:18px;margin-bottom:0}.form-group .error-msg{position:relative}.submit-btn .p-button{height:30px;font-size:14px;border-radius:4px}.submit-btn .p-button .p-button-label{font-weight:400;font-size:13px}.p-dialog.general-configuration{width:100%;height:100vh;max-height:100vh}.general-configuration .p-dialog-header{border-bottom:1px solid #d0d4e4!important;background:#ffffff!important}.p-dialog .p-dialog-header{padding:10px 21px!important;background:#f6f7fb!important;border-top-right-radius:0!important;border-top-left-radius:0!important;height:54px}.assets-dropdown .p-dropdown{height:38px!important;width:100%!important;border-radius:4px!important;align-items:center!important}.assets-dropdown .p-dropdown:hover{border:1px solid #ced4da!important}.p-dropdown-panel .p-dropdown-header .p-dropdown-filter{padding-right:1.75rem;margin-right:-1.75rem}.assets-dropdown .p-inputtext{width:100%;border-radius:4px;height:30px;font-size:13px!important}.assets-dropdown .p-dropdown-panel .p-dropdown-header .p-dropdown-filter-icon{left:96%;color:#6c757d;font-size:13px;top:15px!important}.assets-dropdown .p-dropdown-panel .p-dropdown-header{padding:10px!important}.assets-dropdown .p-dropdown-items-wrapper{max-height:100px!important}.assets-dropdown .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:5px 20px!important;font-size:13px!important;font-weight:400!important}.p-dropdown-panel .p-dropdown-items{padding:0!important}.assets-dropdown .p-dropdown-panel .p-dropdown-items .p-dropdown-empty-message{font-size:13px!important;padding:8px 20px!important}.p-dropdown-panel .p-dropdown-items .p-dropdown-empty-message{padding:.75rem 1.25rem;color:#495057!important;background:transparent!important}.p-dropdown-filter-container{position:relative}.p-dropdown-filter-container input{border:1px solid #ced4da!important}.input-dropdown .password-checkbox-right{position:absolute;width:24px;right:8px}.timezone-dropdown .p-dropdown{width:100%;border:1px solid #ced4da!important;border-radius:4px;height:38px}.timezone-dropdown .p-dropdown-panel .p-dropdown-header{padding:5px}.timezone-dropdown .p-dropdown:hover{border:1px solid #ced4da!important}.timezone-dropdown .p-inputtext{width:100%;border-radius:4px;height:30px;font-size:13px!important}.timezone-dropdown .p-dropdown-panel .p-dropdown-header .p-dropdown-filter-icon{left:96%;color:#6c757d;font-size:13px;top:15px!important}.timezone-dropdown .p-dropdown-panel .p-dropdown-header{padding:10px!important}.timezone-dropdowntimezone-dropdown .p-dropdown-items-wrapper{max-height:100px!important}.timezone-dropdown .p-dropdown-panel .p-dropdown-items .p-dropdown-item{padding:5px 20px!important;font-size:13px!important;font-weight:400!important}.timezone-dropdown .p-dropdown-panel .p-dropdown-items .p-dropdown-empty-message{font-size:13px!important;padding:8px 20px!important}.sidebar-container{width:420px;position:fixed;top:0;height:100vh;max-width:100%;transition:all .3s ease;-webkit-transition:all .3s ease;-moz-transition:all .3s ease;background-color:#fff}.white-bg{background:#ffffff;width:420px;overflow:hidden}.sidebar-outer .sidebar-header{padding:12px 15px}.sidebar-outer .sidebar-header .sh-top{display:flex;align-items:center;justify-content:space-between}.log-text{font-size:16px;color:#292f4c;font-weight:600}.sidebar-outer .sidebar-header .sh-top button{height:24px}.sidebar-outer .sidebar-body{padding:12px 20px;float:left;width:100%;overflow:auto;height:calc(100vh - 70px)}.tertiary-btn{border:none;background-color:transparent}.sidebar-body .noti-text{color:#292f4c;font-size:13px;font-weight:600;line-height:24px}.sidebar-body .refresh-text{color:#676879;font-size:12px;line-height:24px}.error-msg{font-size:12px;font-weight:600;width:100%;position:absolute;bottom:4px;left:0;display:flex;align-items:flex-end;color:#d83a52;font-family:-apple-system,BlinkMacSystemFont,Roboto,Segoe UI,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol!important}.error-msg .error-icon{font-size:18px;margin-right:4px;position:relative;top:-1px}\n"] }]
|
|
575
|
+
}], ctorParameters: function () { return [{ type: i1.CommonHeaderLibService }, { type: i0.ChangeDetectorRef }, { type: i2.RestSignalRService }, { type: i3.EventService }, { type: i4.TranslateService }, { type: i5.NgbModal }, { type: i4.TranslateService }, { type: i6.HttpCommonService }, { type: i7.ToastMsgService }]; }, propDecorators: { EnableLogo: [{
|
|
576
|
+
type: Input
|
|
577
|
+
}], moduleName: [{
|
|
578
|
+
type: Input
|
|
579
|
+
}], EnableTimeZone: [{
|
|
580
|
+
type: Input
|
|
581
|
+
}], EnableLOB: [{
|
|
582
|
+
type: Input
|
|
583
|
+
}], EnableMail: [{
|
|
584
|
+
type: Input
|
|
585
|
+
}], EnableNotifications: [{
|
|
586
|
+
type: Input
|
|
587
|
+
}], EnableMoreApps: [{
|
|
588
|
+
type: Input
|
|
589
|
+
}], EnableProfile: [{
|
|
590
|
+
type: Input
|
|
591
|
+
}], selectedLOBId: [{
|
|
592
|
+
type: Input
|
|
593
|
+
}], lobSelected: [{
|
|
594
|
+
type: Output
|
|
595
|
+
}], langChange: [{
|
|
596
|
+
type: Output
|
|
597
|
+
}], overlayStateChange: [{
|
|
598
|
+
type: Output
|
|
599
|
+
}], confirmDialog: [{
|
|
600
|
+
type: ViewChild,
|
|
601
|
+
args: ['confirmDialog']
|
|
602
|
+
}], appPanel: [{
|
|
603
|
+
type: ViewChild,
|
|
604
|
+
args: ['App']
|
|
605
|
+
}], notifyModalRef: [{
|
|
606
|
+
type: ViewChild,
|
|
607
|
+
args: ['notifyModal']
|
|
608
|
+
}], notifyModal: [{
|
|
609
|
+
type: ViewChild,
|
|
610
|
+
args: ['notifyModal']
|
|
611
|
+
}] } });
|
|
612
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWhlYWRlci1saWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uLWhlYWRlci1saWIvc3JjL2xpYi9jb21tb24taGVhZGVyLWxpYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24taGVhZGVyLWxpYi9zcmMvbGliL2NvbW1vbi1oZWFkZXItbGliLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzlGLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFN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QyxJQUFJLENBQUMsOEJBQThCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDakQsQ0FBQzs7cUhBM21CVSx3QkFBd0I7eUdBQXhCLHdCQUF3QiwyMEJDOUNyQyxta2FBMFdBOzJGRDVUYSx3QkFBd0I7a0JBTnBDLFNBQVM7K0JBQ0UsdUJBQXVCLGlCQUdsQixpQkFBaUIsQ0FBQyxJQUFJOzRWQUk1QixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBRVAsYUFBYTtzQkFEWixTQUFTO3VCQUFDLGVBQWU7Z0JBbUVSLFFBQVE7c0JBQXpCLFNBQVM7dUJBQUMsS0FBSztnQkFDVSxjQUFjO3NCQUF2QyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ0UsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlybURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jb25maXJtLWRpYWxvZy9jb25maXJtLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uSGVhZGVyTGliU2VydmljZSB9IGZyb20gJy4vY29tbW9uLWhlYWRlci1saWIuc2VydmljZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPdmVybGF5UGFuZWwgfSBmcm9tICdwcmltZW5nL292ZXJsYXlwYW5lbCc7XG5pbXBvcnQgeyBTdWJqZWN0LCBmb3JrSm9pbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEdsb2JhbENvbnN0YW50cyB9IGZyb20gJy4vbW9kZWwvZGF0YV9tb2RlbCc7XG5pbXBvcnQgeyBSZXN0U2lnbmFsUlNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3Jlc3Qtc2lnbmFsci5zZXJ2aWNlJztcbmltcG9ydCB7IEV2ZW50U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IEh0dHBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9odHRwL2h0dHAtY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG9hc3RNc2dTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90b2FzdC1tc2cuc2VydmljZSc7XG5kZWNsYXJlIHZhciBib290c3RyYXA6IGFueTsgLy8gQm9vdHN0cmFwIEpTIGlzIGdsb2JhbCAoZnJvbSBidW5kbGUpXG5cbmludGVyZmFjZSBBcHBEZXRhaWxzIHtcbiAgYXBwbGljYXRpb25OYW1lOiBzdHJpbmc7XG4gIGFwcGxpY2F0aW9uSWQ6IG51bWJlcjtcbiAgYXBwQ29kZTogc3RyaW5nO1xuICBwcml2aWxlZ2VzOiBhbnk7IC8vIG9yIGEgbW9yZSBzcGVjaWZpYyB0eXBlIGlmIHlvdSBrbm93IGl0XG4gIGFwcGxpY2F0aW9uVXJsOiBzdHJpbmc7XG4gIGlzQXNzaWduZWRMYW5kaW5nOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgQWNjZXNzVHlwZSB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWNvbW1vbi1oZWFkZXItbGliJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbW1vbi1oZWFkZXItbGliLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29tbW9uLWhlYWRlci1saWIuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgQ29tbW9uSGVhZGVyTGliQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgLy8gQElucHV0KCkgYXBpVVJMOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgRW5hYmxlTG9nbzogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIG1vZHVsZU5hbWU6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBFbmFibGVUaW1lWm9uZTogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIEVuYWJsZUxPQjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIEVuYWJsZU1haWw6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBFbmFibGVOb3RpZmljYXRpb25zOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgRW5hYmxlTW9yZUFwcHM6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBFbmFibGVQcm9maWxlOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2VsZWN0ZWRMT0JJZDogYW55O1xuICBAT3V0cHV0KCkgbG9iU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGxhbmdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG92ZXJsYXlTdGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQFZpZXdDaGlsZCgnY29uZmlybURpYWxvZycpXG4gIGNvbmZpcm1EaWFsb2chOiBDb25maXJtRGlhbG9nQ29tcG9uZW50O1xuXG4gIGhlYWRlckxvZ286IGFueTtcbiAgdXNlclRpbWVab25lQWJicmV2aWF0aW9uczogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyB1c2VyVGltZVpvbmVGdWxsRm9ybTogc3RyaW5nID0gJyc7XG4gIHVzZXJMT0JMaXN0OiBhbnkgPSBbXTtcbiAgdGVtcFNlbGVjdGVkTE9CSWQ6IGFueTtcbiAgc2hvd0xvYkxvYWRlcjogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyB0b3RhbEVtYWlsczogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyB1c2VyTm90aWZpY2F0aW9uQ291bnQ6IHN0cmluZyA9ICcnO1xuXG4gIHB1YmxpYyB1c2VyRGV0YWlsczogYW55O1xuXG4gIExpc3RPZlVzZXJQcml2aWxsZWdlZEFwcDogQXBwRGV0YWlsc1tdID0gW107XG4gIHVzZXJkaXNwbGF5TmFtZTogc3RyaW5nID0gJyc7XG4gIHVzZXJEZXRhaWxzSW5mbzogYW55ID0gW107XG4gIHB1YmxpYyBpc09wZW5TaWRlUG9wdXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNob3dVc2VyRGV0YWlsczogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgdXNlckFwcExvYWRlckxvYWRkZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgcmVwZWF0TG9hZGVyID0gbmV3IEFycmF5KDEyKS5maWxsKDApO1xuICBzaG93TWFpbGJveFNjcmVlbmZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGlzRXJyb3JGb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgdXNlck5vdGlmaWNhdGlvbkNvdW50T2JqOiBhbnkgPSB7fTtcbiAgcHVibGljIGV2ZW50d2lzZU5vdGlmaWNhdGlvbkNvdW50ID0gW107XG4gIHB1YmxpYyBub3RpZmljYXRpb25Mb2FkZGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZUFQSUV2ZW50TGlzdGVuZXJEYXRhOiBTdWJqZWN0PGJvb2xlYW4+ID1cbiAgICBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwcml2YXRlIHVuc3Vic2NyaWJlU2lkZWJhckxpc3RlbmVyRGF0YTogU3ViamVjdDxib29sZWFuPiA9XG4gICAgbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHVibGljIHVzZXJJZDogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBhc3NldENhdGVnb3J5TWVudUxpc3Q6IGFueSA9IFtdO1xuICBwdWJsaWMgc2hvd2J1c2luZXNzRmlsZWRzOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93SW5mcmFGaWxlZHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNob3dmaWx0ZXJzZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgY2xpY2tJbnNpZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGlzTG9iQ29udGVudExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgaXNIZWFkZXJDb250ZW50TG9hZGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyByZXF1ZXN0VHlwZUlkOiBudW1iZXIgPSAxO1xuICBwdWJsaWMgYWNjZXNzVHlwZXM6IEFycmF5PEFjY2Vzc1R5cGU+ID0gW1xuICAgIHsgaWQ6IDEsIG5hbWU6ICdQZXJtYW5lbnQnIH0sXG4gICAgeyBpZDogMiwgbmFtZTogJ09uZVRpbWUnIH0sXG4gICAgeyBpZDogMywgbmFtZTogJ1RpbWVCYXNlZCcgfSxcbiAgXTtcbiAgcHVibGljIHNlbGVjdGVkQXNzZXROYW1lOiBhbnkgPSB7XG4gICAgYXNzZXRJZDogLTEwMCxcbiAgICBhc3NldE5hbWU6ICdBbGwnLFxuICB9O1xuICBwdWJsaWMgYXNzZXROYW1lOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIGFzc2V0SWQ6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBhbGxDYXRlZ29yeSA9IHtcbiAgICBhc3NldFR5cGVJZDogLTEwMCxcbiAgICBhc3NldFR5cGVWYWx1ZTogJ0FsbCBTZWN0aW9uJyxcbiAgICBhc3NldExpc3Q6IFtcbiAgICAgIHtcbiAgICAgICAgYXNzZXRJZDogLTEwMCxcbiAgICAgICAgYXNzZXROYW1lOiAnQWxsJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcblxuICBwcml2YXRlIHRyYW5zbGF0ZU5hbWUgPSBbXG4gICAgJ0dlbmVyaWNfbGliLlBlcm1hbmVudCcsXG4gICAgJ0dlbmVyaWNfbGliLk9uZVRpbWUnLFxuICAgICdHZW5lcmljX2xpYi5UaW1lQmFzZWQnLFxuICBdO1xuXG4gIEBWaWV3Q2hpbGQoJ0FwcCcpIGFwcFBhbmVsOiBhbnkgPSBPdmVybGF5UGFuZWw7XG4gIEBWaWV3Q2hpbGQoJ25vdGlmeU1vZGFsJykgbm90aWZ5TW9kYWxSZWYhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdub3RpZnlNb2RhbCcpIG5vdGlmeU1vZGFsITogRWxlbWVudFJlZjtcbiAgcHJpdmF0ZSBic01vZGFsSW5zdGFuY2U6IGFueTtcbiAgcHVibGljIGlzRXJyb3JPY2N1cmVkOiBib29sZWFuID0gZmFsc2U7XG4gIC8vIEBPdXRwdXQoKSBwdWJsaWMgcmVmcmVzaE5vdGlmaWNhdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgcHVibGljIHJlcGVhdExvYWRlcjEgPSBuZXcgQXJyYXkoOSkuZmlsbCgwKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpYlNlcnZpY2U6IENvbW1vbkhlYWRlckxpYlNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc2lnbmFsUlNlcnZpY2U6IFJlc3RTaWduYWxSU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cENvbW1vblNlcnZpY2U6IEh0dHBDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbXNnU2VydmljZTogVG9hc3RNc2dTZXJ2aWNlLFxuICApIHt9XG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaGVhZGVyTG9nbyA9ICcnO1xuICAgIHRoaXMub3ZlcmxheVN0YXRlQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICAgIHRoaXMuc2V0V2ViQVBJVVJMKCk7XG4gICAgaWYgKHRoaXMuRW5hYmxlTG9nbykgdGhpcy5sb2FkSGVhZGVyTG9nbygpO1xuICAgIGlmICh0aGlzLkVuYWJsZUxPQikgdGhpcy5nZXRMaXN0b2ZMT0IoKTtcbiAgICB0aGlzLm9uTG9hZE1ldGhvZCgpO1xuICB9XG4gIG9uTG9hZE1ldGhvZCgpIHtcbiAgICB0aGlzLm9uRGVtYW5kQWN0aW9ucygpO1xuICAgIGlmICh0aGlzLkVuYWJsZU5vdGlmaWNhdGlvbnMpIHRoaXMuZ2V0RXZlbnR3aXNlTm90aWZpY2F0aW9uQ291bnQoKTtcbiAgICB0aGlzLmdldFVzZXJBY3Rpdml0eURldGFpbHMoKTtcbiAgfVxuXG4gIC8vKiBvbiBjbGljayBvZiBNYWlsIGljb25cbiAgc2hvd01haWxCb3hTY3JlZW4oKSB7XG4gICAgdGhpcy5zaG93TWFpbGJveFNjcmVlbmZsYWcgPSB0cnVlO1xuICAgIHRoaXMub3ZlcmxheVN0YXRlQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gIH1cblxuICBoaWRlTWFpbEJveFNjcmVlbigpIHtcbiAgICB0aGlzLnNob3dNYWlsYm94U2NyZWVuZmxhZyA9IGZhbHNlO1xuICAgIHRoaXMub3ZlcmxheVN0YXRlQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICB9XG5cbiAgLy8qIE1haW4gbGFuZ3VhZ2UgY2hhbmdlIGVtaXR0ZXJcbiAgbGFuZ3VhZ2VDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGlmICghZXZlbnQpIHJldHVybjtcbiAgICB0aGlzLmxhbmdDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICBzaG93VXNlckFwcHNQYW5lbChldmVudDogRXZlbnQpIHtcbiAgICB0aGlzLmFwcFBhbmVsLnRvZ2dsZShldmVudCk7XG4gICAgaWYgKHRoaXMuTGlzdE9mVXNlclByaXZpbGxlZ2VkQXBwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5nZXRVc2VyQXNzaWduZWRBcHAoKTtcbiAgICB9XG4gIH1cbiAgc2hvd1VzZXJEZXRhaWxzUGFuZWwoKSB7XG4gICAgdGhpcy5vcGVuU2lkZVBvcHVwKCk7XG4gICAgdGhpcy5zaG93VXNlckRldGFpbHMgPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VTaWRlUG9wdXAoKSB7XG4gICAgdGhpcy5zaG93VXNlckRldGFpbHMgPSBmYWxzZTtcbiAgICB0aGlzLmlzT3BlblNpZGVQb3B1cCA9IGZhbHNlO1xuICB9XG4gIG9wZW5TaWRlUG9wdXAoKSB7XG4gICAgdGhpcy5pc09wZW5TaWRlUG9wdXAgPSB0cnVlO1xuICB9XG4gIC8vTWV0aG9kOiBUYWtlIENvbm5lY3Rpb24gb2YgQXBwbGljYXRpb25cbiAgZ2V0Q29ubmVjdGlvbm9mQXBwbGljYXRpb24oYXBwQ29kZTogc3RyaW5nKSB7XG4gICAgY29uc29sZS5sb2coJ2FwcGNvZGUnLCBhcHBDb2RlKTtcblxuICAgIGNvbnN0IHVybCA9XG4gICAgICBHbG9iYWxDb25zdGFudHMuYmFzZVVSTCArICcveGF1dGgvYXBpL1Rva2VuL0FwcE9BdXRoP2FwcGNvZGU9JyArIGFwcENvZGU7XG4gICAgd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldENvbm5lY3RUb1NpbmdhbFJodWIoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX3NpZ25hbFJTZXJ2aWNlLmluaXRpYWxpemVTaWduYWxSQ29ubmVjdGlvbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdBbGwgU2lnbmFsUiBodWIgY29ubmVjdGlvbnMgZmFpbGVkLicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5MaXN0ZW5Ub1RyYW5zbGF0ZUV2ZW50KCk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtb2RhbCBpbnN0YW5jZSB3aGVuIERPTSBpcyByZWFkeVxuICAgIHRoaXMuYnNNb2RhbEluc3RhbmNlID0gbmV3IGJvb3RzdHJhcC5Nb2RhbCh0aGlzLm5vdGlmeU1vZGFsLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgLypNZXRob2QgOiBMaXN0ZW4gdG8gdGhlIE90aGVyIGNvbXBvbmVudCBldmVudFxuICAgQWN0aW9uIDogSXQgdXNlZCB0byBsaXN0ZW4gZGlmZi4gY29tcG9uZW50IGNvbW1hbmQgb24gYmFzaXMgb2YgcGVyZm9ybSBzb21lIGFjdGlvbnMgKi9cbiAgb25EZW1hbmRBY3Rpb25zKCkge1xuICAgIC8vTGlzdGVuIHRoZSBFdmVudCBFbWl0IGJ5IFNpZGViYXJcbiAgICB0aGlzLl9ldmVudFNlcnZpY2VcbiAgICAgIC5saXN0ZW5lckFzc2V0VHlwZUV2ZW50KClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlU2lkZWJhckxpc3RlbmVyRGF0YSkpXG4gICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGFbJ2NvbXBvbmVudCddID09PSAnYXNzZXRNZW51Jykge1xuICAgICAgICAgIHRoaXMuYXNzZXRDYXRlZ29yeU1lbnVMaXN0ID0gW107XG4gICAgICAgICAgdGhpcy5hc3NldENhdGVnb3J5TWVudUxpc3QgPSBkYXRhWydhc2VldFR5cGVMaXN0J107XG5cbiAgICAgICAgICAvL05vdGU6IEFkZCBGaWx0ZXIgRmlsZWRzIG9mIEJ1c2luZXNzL0luZnJhIEFzc2V0IGFuZCB0aGVyZSBSZXF1ZXN0SURcbiAgICAgICAgICAvL0ZvciBCdXNpbmVzcyBBc3NldFxuICAgICAgICAgIGlmIChkYXRhPy5bJ2Fzc2V0Q2F0ZWdvcnlJZCddID09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd2J1c2luZXNzRmlsZWRzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0luZnJhRmlsZWRzID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RUeXBlSWQgPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFzc2V0TmFtZSA9IHRoaXMuYXNzZXRDYXRlZ29yeU1lbnVMaXN0WzBdOyAvL1NldCBpbmRleCAwIEJ5IERlZmF1bHRcbiAgICAgICAgICAgIHRoaXMuYXNzZXROYW1lID0gdGhpcy5zZWxlY3RlZEFzc2V0TmFtZVsnYXNzZXRUeXBlVmFsdWUnXTtcbiAgICAgICAgICAgIHRoaXMuYXNzZXRJZCA9IHRoaXMuc2VsZWN0ZWRBc3NldE5hbWVbJ2Fzc2V0VHlwZUlkJ107XG4gICAgICAgICAgICAvL0ZvciBJbmZyYSBBc3NldFxuICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YT8uWydhc3NldENhdGVnb3J5SWQnXSA9PSAyKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dJbmZyYUZpbGVkcyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNob3didXNpbmVzc0ZpbGVkcyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0VHlwZUlkID0gMjtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBc3NldE5hbWUgPVxuICAgICAgICAgICAgICB0aGlzLmFzc2V0Q2F0ZWdvcnlNZW51TGlzdFswXVsnYXNzZXRMaXN0J11bMF07IC8vU2V0IGluZGV4IDAgQnkgRGVmYXVsdFxuICAgICAgICAgICAgdGhpcy5hc3NldE5hbWUgPSB0aGlzLnNlbGVjdGVkQXNzZXROYW1lWydhc3NldE5hbWUnXTtcbiAgICAgICAgICAgIHRoaXMuYXNzZXRJZCA9IHRoaXMuc2VsZWN0ZWRBc3NldE5hbWVbJ2Fzc2V0SWQnXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvL05vdGU6IEFkZGVkIEV4dHJhIEhhcmQgY29kZWQgdHlwZSBpbiBBc3NldENhdGVnb3J5IE1lbnUgZm9yIEluZnJhIEFzc2V0XG4gICAgICAgICAgaWYgKHRoaXMuYXNzZXRDYXRlZ29yeU1lbnVMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dJbmZyYUZpbGVkcykge1xuICAgICAgICAgICAgICB0aGlzLmFzc2V0Q2F0ZWdvcnlNZW51TGlzdC51bnNoaWZ0KHRoaXMuYWxsQ2F0ZWdvcnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hc3NldENhdGVnb3J5TWVudUxpc3QgPSB0aGlzLmFzc2V0Q2F0ZWdvcnlNZW51TGlzdC5maWx0ZXIoXG4gICAgICAgICAgICAgIChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmFzc2V0VHlwZVZhbHVlID09PSAnRmF2b3JpdGUnIHx8XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYXNzZXRUeXBlVmFsdWUgPT09ICdCb29rbWFyaydcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIC8vTGlzdGVuIHRoZSBFdmVudCBFbWl0IGJ5IFNpZ25hbFIgSHViXG4gICAgdGhpcy5fc2lnbmFsUlNlcnZpY2VcbiAgICAgIC5saXN0ZW5lckV2ZW50TXNnKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlQVBJRXZlbnRMaXN0ZW5lckRhdGEpKVxuICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhWydhcHBsaWNhdGlvbiddICYmIGRhdGFbJ2V2ZW50cyddKSB7XG4gICAgICAgICAgdGhpcy5pc0Vycm9yRm91bmQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnVzZXJOb3RpZmljYXRpb25Db3VudE9iaiA9IGRhdGFbJ2FwcGxpY2F0aW9uJ107XG4gICAgICAgICAgLy9Ob3RlOiBJZiBOb3RpZmljYXRpb24gY291bnQgPiA5OVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMudXNlck5vdGlmaWNhdGlvbkNvdW50T2JqICYmXG4gICAgICAgICAgICB0aGlzLnVzZXJOb3RpZmljYXRpb25Db3VudE9ialsnUGVuZGluZ0NvdW50J11cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChOdW1iZXIodGhpcy51c2VyTm90aWZpY2F0aW9uQ291bnRPYmpbJ1BlbmRpbmdDb3VudCddKSA+IDk5KSB7XG4gICAgICAgICAgICAgIHRoaXMudXNlck5vdGlmaWNhdGlvbkNvdW50ID0gJzk5Kyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnVzZXJOb3RpZmljYXRpb25Db3VudCA9IFN0cmluZyhcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJOb3RpZmljYXRpb25Db3VudE9ialsnUGVuZGluZ0NvdW50J10sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXNlck5vdGlmaWNhdGlvbkNvdW50ID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZXZlbnR3aXNlTm90aWZpY2F0aW9uQ291bnQgPSBkYXRhWydldmVudHMnXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmxpc3RlblRvVGltZVpvbmVDb25maWcoKTtcbiAgICB0aGlzLmxpc3RlblRvRW1haWxDb3VudEV2ZW50KCk7XG4gIH1cblxuICAvL0xpc3RlbiB0byBUaW1lWm9uZSBDb25maWdcbiAgbGlzdGVuVG9UaW1lWm9uZUNvbmZpZygpIHtcbiAgICB0aGlzLl9ldmVudFNlcnZpY2VcbiAgICAgIC5saXN0ZW5lclRpbWV6b25lKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlQVBJRXZlbnRMaXN0ZW5lckRhdGEpKVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlWydjb21wb25lbnQnXSA9PSAndGltZXpvbmUnKSB7XG4gICAgICAgICAgdGhpcy51c2VyVGltZVpvbmVBYmJyZXZpYXRpb25zID1cbiAgICAgICAgICAgIHJlc3BvbnNlWyd1c2VydGltZXpvbmVBYmJyZXZpYXRpb25zJ107XG4gICAgICAgICAgdGhpcy51c2VyVGltZVpvbmVGdWxsRm9ybSA9IHJlc3BvbnNlWyd1c2VyVGltZVpvbmVGdWxsRm9ybSddO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vTGlzdGVuIHRvIEVtYWlsIENvdW50IHdoZW4gdXNlciBSZWFkXG4gIGxpc3RlblRvRW1haWxDb3VudEV2ZW50KCkge1xuICAgIHRoaXMuX2V2ZW50U2VydmljZVxuICAgICAgLmxpc3RlbmVyVXNlckVtYWlsKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlQVBJRXZlbnRMaXN0ZW5lckRhdGEpKVxuICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhWydjb21wb25lbnQnXSA9PT0gJ2VtYWlsLWNvdW50Jykge1xuICAgICAgICAgIHRoaXMudG90YWxFbWFpbHMgPSBkYXRhWydtYWlsQ291bnQnXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvL01ldGhvZDogQ29udmVydCB0ZXh0IG9uZSBMYW5nLiB0byBhbm90aGVyXG4gIHByaXZhdGUgTGlzdGVuVG9UcmFuc2xhdGVFdmVudCgpIHtcbiAgICB0aGlzLnRyYW5zbGF0ZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKCh2YWw6IGFueSkgPT4ge1xuICAgICAgdGhpcy5nZXRUcmFuc2xhdGVDb250ZW50KCk7XG4gICAgfSk7XG4gIH1cblxuICAvL01ldGhvZDogQ29udmVydCB0ZXh0IG9uZSBMYW5nLiB0byBhbm90aGVyIEV2ZW50IExpc3RlbmVyXG4gIHByaXZhdGUgZ2V0VHJhbnNsYXRlQ29udGVudCgpIHtcbiAgICB0aGlzLnRyYW5zbGF0ZS5nZXQodGhpcy50cmFuc2xhdGVOYW1lKS5zdWJzY3JpYmUoKHRyYW5zOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuYWNjZXNzVHlwZXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy50cmFuc2xhdGVOYW1lW2luZGV4XTtcbiAgICAgICAgaXRlbVsnbmFtZSddID0gdHJhbnNba2V5XTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgT3Blbk5vdGlmaWNhdGlvbk1vZGFsKCkge1xuICAgIC8vIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihOb3RpZmljYXRpb25TaWRlYmFyQ29tcG9uZW50KTtcbiAgICAvLyBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5sZXNzb24gPSBsZXNzb247XG4gICAgdGhpcy5ic01vZGFsSW5zdGFuY2U/LnNob3coKTtcbiAgfVxuICBjbG9zZU1vZGFsKCkge1xuICAgIHRoaXMuYnNNb2RhbEluc3RhbmNlPy5oaWRlKCk7XG4gIH1cblxuICAvL01ldGhvZDogQ2FsbCBBUGkgdG8gRmV0Y2ggTmV3IE5vdGlmaWNhdGlvbiBDb3VudFxuICBnZXRFdmVudHdpc2VOb3RpZmljYXRpb24oKSB7XG4gICAgLy8gdGhpcy5yZWZyZXNoTm90aWZpY2F0aW9uLmVtaXQodHJ1ZSk7XG4gICAgdGhpcy5nZXRFdmVudHdpc2VOb3RpZmljYXRpb25Db3VudCgpO1xuICB9XG5cbiAgc2V0V2ViQVBJVVJMKCkge1xuICAgIGlmIChHbG9iYWxDb25zdGFudHMuYmFzZVVSTCA9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnX1dBVScpKSB7XG4gICAgICAgIEdsb2JhbENvbnN0YW50cy5iYXNlVVJMID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ19XQVUnKSB8fCAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwYXJzZWRVUkwgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgICAgbGV0IFdlYkFwaVVybCA9IHBhcnNlZFVSTC5vcmlnaW47XG4gICAgICAgIEdsb2JhbENvbnN0YW50cy5iYXNlVVJMID0gV2ViQXBpVXJsO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnX1dBVScsIEdsb2JhbENvbnN0YW50cy5iYXNlVVJMKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFVzZXJBY3Rpdml0eURldGFpbHMoKTogdm9pZCB7XG4gICAgLy8gUmVzZXQgZXJyb3Igc3RhdGUgYmVmb3JlIEFQSSBjYWxsc1xuICAgIHRoaXMuaXNFcnJvckZvdW5kID0gZmFsc2U7XG5cbiAgICAvLyBJbml0aWFsaXplIHJlc3BvbnNlIGNvbnRhaW5lciBmb3IgZm9ya0pvaW5cbiAgICBjb25zdCByZXNwb25zZVNldDogYW55ID0ge307XG5cbiAgICAvLyBCdWlsZCBwYXlsb2FkIG9uY2UgZm9yIG5vdGlmaWNhdGlvbiBBUElcbiAgICBjb25zdCBub3RpZmljYXRpb25QYXlsb2FkID0ge1xuICAgICAgQXBwbGljYXRpb25OYW1lOiBHbG9iYWxDb25zdGFudHMuYXBwbGljYXRpb25OYW1lLFxuICAgICAgVXNlcklkOiBTdHJpbmcodGhpcy51c2VySWQpLFxuICAgIH07XG5cbiAgICAvLyBBZGQgbm90aWZpY2F0aW9uIEFQSSBpZiBlbmFibGVkXG4gICAgaWYgKHRoaXMuRW5hYmxlTm90aWZpY2F0aW9ucykge1xuICAgICAgcmVzcG9uc2VTZXQubm90aWZpY2F0aW9ucyA9IHRoaXMuaHR0cENvbW1vblNlcnZpY2VcbiAgICAgICAgLmdldFdvcmtGbG93VGlja2V0Q291bnQobm90aWZpY2F0aW9uUGF5bG9hZClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gRXh0cmFjdCB2YWxpZCBub3RpZmljYXRpb24gZGF0YVxuICAgICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHJlc3BvbnNlKSxcbiAgICAgICAgICAvLyBIYW5kbGUgQVBJIGVycm9yIHdpdGhvdXQgYnJlYWtpbmcgZm9ya0pvaW5cbiAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNFcnJvckZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdXNlciBwcm9maWxlIEFQSSBpZiBlbmFibGVkXG4gICAgaWYgKHRoaXMuRW5hYmxlUHJvZmlsZSkge1xuICAgICAgcmVzcG9uc2VTZXQudXNlcmluZm8gPSB0aGlzLmh0dHBDb21tb25TZXJ2aWNlLmdldExvZ2dlZEluVXNlckRldGFpbHMoKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGltZXpvbmUgQVBJIGlmIGVuYWJsZWRcbiAgICBpZiAodGhpcy5FbmFibGVUaW1lWm9uZSkge1xuICAgICAgcmVzcG9uc2VTZXQudGltZVpvbmUgPSB0aGlzLmh0dHBDb21tb25TZXJ2aWNlLmdldEdsb2JhbFRpbWVab25lKCk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHVucmVhZCBlbWFpbCBjb3VudCBBUEkgaWYgZW5hYmxlZFxuICAgIGlmICh0aGlzLkVuYWJsZU1haWwpIHtcbiAgICAgIHJlc3BvbnNlU2V0LmVtYWlsQ291bnQgPVxuICAgICAgICB0aGlzLmh0dHBDb21tb25TZXJ2aWNlLmdldFVucmVhZFVzZXJFbWFpbHNDb3VudCgpO1xuICAgIH1cblxuICAgIC8vIEV4ZWN1dGUgYWxsIGVuYWJsZWQgQVBJcyB0b2dldGhlclxuICAgIGZvcmtKb2luKHJlc3BvbnNlU2V0KVxuICAgICAgLnBpcGUoXG4gICAgICAgIC8vIE1hcmsgaGVhZGVyIGxvYWRpbmcgYXMgY29tcGxldGVkXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzSGVhZGVyQ29udGVudExvYWRlZCA9IHRydWU7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAvLyBQcm9jZXNzIG5vdGlmaWNhdGlvbiBkYXRhXG4gICAgICAgIGlmIChyZXNwb25zZS5ub3RpZmljYXRpb25zKSB7XG4gICAgICAgICAgdGhpcy5nZXRUb3RhbE5vdGlmaWNhdGlvbkNvdW50cyhyZXNwb25zZS5ub3RpZmljYXRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgdXNlciBwcm9maWxlIGRhdGFcbiAgICAgICAgaWYgKHJlc3BvbnNlLnVzZXJpbmZvKSB7XG4gICAgICAgICAgdGhpcy5nZXRMb2dnZWRJblVzZXJEZXRhaWxzKHJlc3BvbnNlLnVzZXJpbmZvKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgdGltZXpvbmUgbGlzdFxuICAgICAgICBpZiAocmVzcG9uc2UudGltZVpvbmUpIHtcbiAgICAgICAgICB0aGlzLmdldExpc3RPZlRpbWVab25lcyhyZXNwb25zZS50aW1lWm9uZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIHVucmVhZCBlbWFpbCBjb3VudFxuICAgICAgICBpZiAocmVzcG9uc2UuZW1haWxDb3VudCkge1xuICAgICAgICAgIHRoaXMuZ2V0VXNlckVtYWlsQ291bnQocmVzcG9uc2UuZW1haWxDb3VudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFRvdGFsTm90aWZpY2F0aW9uQ291bnRzKGRhdGE6IGFueSkge1xuICAgIC8vIHRoaXMuaXNFcnJvckZvdW5kID0gZmFsc2U7XG4gICAgdGhpcy51c2VyTm90aWZpY2F0aW9uQ291bnRPYmogPSBkYXRhIHx8IHt9O1xuICAgIGlmIChcbiAgICAgIHRoaXMudXNlck5vdGlmaWNhdGlvbkNvdW50T2JqICYmXG4gICAgICB0aGlzLnVzZXJOb3RpZmljYXRpb25Db3VudE9ialsnUGVuZGluZ0NvdW50J11cbiAgICApIHtcbiAgICAgIGlmIChOdW1iZXIodGhpcy51c2VyTm90aWZpY2F0aW9uQ291bnRPYmpbJ1BlbmRpbmdDb3VudCddKSA+IDk5KSB7XG4gICAgICAgIHRoaXMudXNlck5vdGlmaWNhdGlvbkNvdW50ID0gJzk5Kyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVzZXJOb3RpZmljYXRpb25Db3VudCA9IFN0cmluZyhcbiAgICAgICAgICB0aGlzLnVzZXJOb3RpZmljYXRpb25Db3VudE9ialsnUGVuZGluZ0NvdW50J10sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXNlck5vdGlmaWNhdGlvbkNvdW50ID0gJyc7XG4gICAgfVxuICB9XG5cbiAgLypNZXRob2QgOiAgUmV0cmlldmVzIGRldGFpbHMgb2YgdGhlIGN1cnJlbnRseSBsb2dnZWQtaW4gdXNlciovXG4gIHB1YmxpYyBnZXRMb2dnZWRJblVzZXJEZXRhaWxzKHJlc3BvbnNlOiBhbnkpIHtcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2VbJ3N1Y2Nlc3MnXSAmJiByZXNwb25zZVsncmVzdWx0J10pIHtcbiAgICAgIHRoaXMudXNlckRldGFpbHMgPSByZXNwb25zZVsncmVzdWx0J107XG4gICAgICB0aGlzLnVzZXJkaXNwbGF5TmFtZSA9IHRoaXMudXNlckRldGFpbHNbJ3VzZXJEaXNwbGF5TmFtZSddO1xuICAgIH1cbiAgfVxuXG4gIC8qTWV0aG9kIDogR0VUXG4gICAgQWN0aW9uIDogR2V0IExpc3Qgb2YgVGltZSBab25lKi9cbiAgcHVibGljIGdldExpc3RPZlRpbWVab25lcyhyZXN1bHQ6IGFueSkge1xuICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0WydhYmJyZXZpYXRpb25zJ10pIHtcbiAgICAgIHRoaXMudXNlclRpbWVab25lQWJicmV2aWF0aW9ucyA9IHJlc3VsdFsnYWJicmV2aWF0aW9ucyddO1xuICAgICAgdGhpcy51c2VyVGltZVpvbmVGdWxsRm9ybSA9IHJlc3VsdFsndXNlclRpbWVab25lJ107XG4gICAgfVxuICB9XG5cbiAgLypNZXRob2QgOiBHRVRcbiAgICBBY3Rpb24gOiBUcmFuc2Zvcm1hdGlvbiBmbyBDb3VudCAgKi9cbiAgcHJpdmF0ZSBnZXRVc2VyRW1haWxDb3VudChjb3VudDogbnVtYmVyKSB7XG4gICAgaWYgKGNvdW50IDw9IDApIHtcbiAgICAgIHRoaXMudG90YWxFbWFpbHMgPSAnJztcbiAgICB9IGVsc2UgaWYgKGNvdW50ID4gOTkpIHtcbiAgICAgIHRoaXMudG90YWxFbWFpbHMgPSAnOTkrJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b3RhbEVtYWlscyA9IFN0cmluZyhjb3VudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEFQSSB0byBnZXQgdGhlIGhlYWRlciBMT0dPICovXG4gIGxvYWRIZWFkZXJMb2dvKCkge1xuICAgIHRoaXMuaHR0cENvbW1vblNlcnZpY2UuZ2V0TG9nbygpLnN1YnNjcmliZSgoaW1nKSA9PiB7XG4gICAgICB0aGlzLmhlYWRlckxvZ28gPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcgKyBpbWdbJ2xvZ29JbWcnXTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBBUEkgdG8gZ2V0IHRoZSB0aW1lem9uZSAqL1xuICAvLyBnZXRVc2VyUHJlZmVycmVkVGltZXpvbmUoKSB7XG4gIC8vICAgdGhpcy5odHRwQ29tbW9uU2VydmljZS5nZXRHbG9iYWxUaW1lWm9uZSgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgLy8gICAgIGlmIChyZXM/LmFiYnJldmlhdGlvbnMpIHtcbiAgLy8gICAgICAgdGhpcy51c2VyVGltZVpvbmVBYmJyZXZpYXRpb25zID0gcmVzLmFiYnJldmlhdGlvbnM7XG4gIC8vICAgICAgIHRoaXMudXNlclRpbWVab25lRnVsbEZvcm0gPSByZXM/LnVzZXJUaW1lWm9uZTtcbiAgLy8gICAgIH1cbiAgLy8gICB9KTtcbiAgLy8gfVxuXG4gIC8vKiBnZXQgTG9iIEFJIGNhbGwgYW5kIGluaXRpYWwgTE9CIGVtaXR0ZXJcbiAgZ2V0TGlzdG9mTE9CKCkge1xuICAgIHRoaXMuc2hvd0xvYkxvYWRlciA9IHRydWU7XG4gICAgdGhpcy5odHRwQ29tbW9uU2VydmljZS5nZXRMT0JMaXN0KCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgdGhpcy5zaG93TG9iTG9hZGVyID0gZmFsc2U7XG4gICAgICB0aGlzLnVzZXJMT0JMaXN0ID0gcmVzLnJlc3VsdDtcbiAgICAgIGxldCBpbml0aWFsTG9iU2VsZWN0ZWQgPSB0aGlzLmdldExvYkJ5SWQoXG4gICAgICAgIHRoaXMudXNlckxPQkxpc3QsXG4gICAgICAgIHRoaXMudXNlckxPQkxpc3RbMF0/LmxvYklkLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHByZVNlbGVjdGVkTG9iID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnWE9CJykgfHwgJ251bGwnKTtcbiAgICAgIGxldCBpc1ByZVNlbGVjdGVkTG9iRXhpc3RzSW5MaXN0ID0gdGhpcy51c2VyTE9CTGlzdC5zb21lKFxuICAgICAgICAobG9iOiBhbnkpID0+IE51bWJlcihsb2IubG9iSWQpID09IE51bWJlcihwcmVTZWxlY3RlZExvYj8uTE9CSWQpLFxuICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgcHJlU2VsZWN0ZWRMb2IgJiZcbiAgICAgICAgTnVtYmVyKHByZVNlbGVjdGVkTG9iLkxPQklkKSAmJlxuICAgICAgICBpc1ByZVNlbGVjdGVkTG9iRXhpc3RzSW5MaXN0XG4gICAgICApIHtcbiAgICAgICAgLy8qIEVtaXR0aW5nIDFzdCBMT0IgZm9yIExPQiBMaXN0IGFzIExPYiBkZXRhaWxzIGF2YWlsYWJsZSBpbiBsb2NhbHN0b3JlZ2FcbiAgICAgICAgdGhpcy5zZWxlY3RlZExPQklkID0gcHJlU2VsZWN0ZWRMb2I/LkxPQklkO1xuICAgICAgICB0aGlzLnRlbXBTZWxlY3RlZExPQklkID0gcHJlU2VsZWN0ZWRMb2I/LkxPQklkO1xuICAgICAgICBpbml0aWFsTG9iU2VsZWN0ZWQgPSB0aGlzLmdldExvYkJ5SWQoXG4gICAgICAgICAgdGhpcy51c2VyTE9CTGlzdCxcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTE9CSWQsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyogRW1pdHRpbmcgMXN0IExPQiBmb3IgTE9CIExpc3QgaWYgbG9jYWxzdG9yYWdlIGhhdmUgbnVsbCBMT0IgZGV0YWlsc1xuICAgICAgICB0aGlzLnNlbGVjdGVkTE9CSWQgPSB0aGlzLnVzZXJMT0JMaXN0WzBdPy5sb2JJZDtcbiAgICAgICAgdGhpcy50ZW1wU2VsZWN0ZWRMT0JJZCA9IHRoaXMudXNlckxPQkxpc3RbMF0/LmxvYklkO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnWE9CJywgSlNPTi5zdHJpbmdpZnkoaW5pdGlhbExvYlNlbGVjdGVkKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmxvYlNlbGVjdGVkLmVtaXQoaW5pdGlhbExvYlNlbGVjdGVkKTtcbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8qIFNlbGVjdGVkIExPQiBlbWl0dGVyXG4gIG9uTG9iQ2hhbmdlRXZlbnQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRMT0JJZCA9IGV2ZW50LnZhbHVlO1xuICAgIHRoaXMub3BlbkNvbmZpcm0oZXZlbnQpO1xuICB9XG5cbiAgb3BlbkNvbmZpcm0oZXZlbnQ6IEV2ZW50KSB7XG4gICAgdGhpcy5jb25maXJtRGlhbG9nLm9wZW5Db25maXJtTW9kYWwoZXZlbnQpO1xuICB9XG5cbiAgbG9iQ2hhbmdlQ29uZmlybWF0aW9uKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMudGVtcFNlbGVjdGVkTE9CSWQgPSB0aGlzLnNlbGVjdGVkTE9CSWQ7XG4gICAgICBsZXQgc2VsZWN0ZWRMb2IgPSB0aGlzLmdldExvYkJ5SWQoXG4gICAgICAgIHRoaXMudXNlckxPQkxpc3QsXG4gICAgICAgIHRoaXMudGVtcFNlbGVjdGVkTE9CSWQsXG4gICAgICApO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ1hPQicsIEpTT04uc3RyaW5naWZ5KHNlbGVjdGVkTG9iKSk7XG4gICAgICB0aGlzLmxvYlNlbGVjdGVkLmVtaXQoc2VsZWN0ZWRMb2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTE9CSWQgPSB0aGlzLnRlbXBTZWxlY3RlZExPQklkO1xuICAgIH1cbiAgfVxuXG4gIHNldEN1c3RvbUxvYklkKGxvYklkOiBhbnkpIHtcbiAgICBpZiAodGhpcy51c2VyTE9CTGlzdCkge1xuICAgICAgbGV0IGZpbHRlcmVkTG9icyA9IHRoaXMuZ2V0TG9iQnlJZCh0aGlzLnVzZXJMT0JMaXN0LCBsb2JJZCk7XG4gICAgICBpZiAoT2JqZWN0LmtleXMoZmlsdGVyZWRMb2JzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMT0JJZCA9IGxvYklkO1xuICAgICAgICAvLyogSWYgdGhlIExPQiBpcyBmb3JjZWZ1bGx5IHNldCBmcm9tIHRoZSBwYXJlbnQgbW9kdWxlLCBDdXN0b21MT0JTZXRCeVBhcmVudCBpcyBzZXQgdG8gdHJ1ZTsgb3RoZXJ3aXNlLCBpdCBpcyBzZXQgdG8gZmFsc2UuXG4gICAgICAgIGZpbHRlcmVkTG9ic1snQ3VzdG9tTE9CU2V0QnlQYXJlbnQnXSA9IHRydWU7XG4gICAgICAgIHRoaXMubG9iU2VsZWN0ZWQuZW1pdChmaWx0ZXJlZExvYnMpO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnWE9CJywgSlNPTi5zdHJpbmdpZnkoZmlsdGVyZWRMb2JzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1zZ1NlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgJ1RoZSBMT0IgeW91IGFyZSB0cnlpbmcgdG8gc2V0IGlzIG5vdCBhdmFpbGFibGUuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyogSGVscGVyIGZ1bmN0aW9uIHRvIGdldCBzZWxlY3RlZCBMT0IgT2JqZWN0IGJ5IExvYklkXG4gIGdldExvYkJ5SWQobGlzdDogYW55LCBpZDogYW55KSB7XG4gICAgY29uc3QgaXRlbSA9IGxpc3QuZmluZCgoeDogYW55KSA9PiB4LmxvYklkID09PSBpZCk7XG4gICAgaWYgKCFpdGVtKSByZXR1cm4ge307XG4gICAgcmV0dXJuIHtcbiAgICAgIExPQklkOiBpdGVtLmxvYklkLFxuICAgICAgTE9CTmFtZTogaXRlbS5sb2JOYW1lLFxuICAgICAgQ3VzdG9tTE9CU2V0QnlQYXJlbnQ6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICAvLyogZ2V0IHRoZSBNYWlsIGNvdW50XG4gIC8vIGdldE1haWxDb3VudCgpIHtcbiAgLy8gICB0aGlzLmh0dHBDb21tb25TZXJ2aWNlXG4gIC8vICAgICAuZ2V0VW5yZWFkVXNlckVtYWlsc0NvdW50KClcbiAgLy8gICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlQVBJRXZlbnRMaXN0ZW5lckRhdGEpKVxuICAvLyAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gIC8vICAgICAgIHRoaXMudG90YWxFbWFpbHMgPSByZXN1bHQ7XG4gIC8vICAgICB9KTtcbiAgLy8gfVxuXG4gIC8vQWN0aW9uOiBVc2VkIHRvIEdldCBUb3RhbCBFdmVudHdpc2UgVXNlciBOb3RpZmljYXRpb24gQ291bnQgKi9cbiAgZ2V0RXZlbnR3aXNlTm90aWZpY2F0aW9uQ291bnQoKSB7XG4gICAgbGV0IHBheWxvYWQgPSB7XG4gICAgICBBcHBsaWNhdGlvbk5hbWU6IEdsb2JhbENvbnN0YW50cy5hcHBsaWNhdGlvbk5hbWUsXG4gICAgICBVc2VySWQ6IFN0cmluZyh0aGlzLnVzZXJJZCksXG4gICAgfTtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbkxvYWRkZXIgPSB0cnVlO1xuXG4gICAgdGhpcy5odHRwQ29tbW9uU2VydmljZVxuICAgICAgLmdldFdvcmtGbG93VGlja2V0RXZlbnR3aXNlQ291bnQocGF5bG9hZClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZUFQSUV2ZW50TGlzdGVuZXJEYXRhKSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4gKHRoaXMubm90aWZpY2F0aW9uTG9hZGRlciA9IGZhbHNlKSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgICB0aGlzLmlzRXJyb3JGb3VuZCA9IGRhdGEubGVuZ3RoID09IDA7XG4gICAgICAgICAgdGhpcy5ldmVudHdpc2VOb3RpZmljYXRpb25Db3VudCA9IGRhdGE7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0Vycm9yRm91bmQgPSB0cnVlO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICAvLyogR2V0IE1vZHVsZSBwcml2aWxlZ2UgbGlzdFxuICBnZXRVc2VyQXNzaWduZWRBcHAoKSB7XG4gICAgdGhpcy5MaXN0T2ZVc2VyUHJpdmlsbGVnZWRBcHAgPSBbXTtcblxuICAgIHRoaXMudXNlckFwcExvYWRlckxvYWRkZXIgPSB0cnVlO1xuICAgIHRoaXMuaHR0cENvbW1vblNlcnZpY2VcbiAgICAgIC5nZXRVc2VyQXNzaWduZWRBcHBzKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlQVBJRXZlbnRMaXN0ZW5lckRhdGEpKVxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMudXNlckFwcExvYWRlckxvYWRkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5MaXN0T2ZVc2VyUHJpdmlsbGVnZWRBcHAgPSByZXN1bHQ7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vKiBHZXQgVXNlciBkZXRhaWxzXG4gIGdldExvZ2dlZEludXNlckRldGFpbHMoKSB7XG4gICAgdGhpcy5odHRwQ29tbW9uU2VydmljZS5nZXRMb2dnZWRJblVzZXJEZXRhaWxzKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIHRoaXMudXNlckRldGFpbHNJbmZvID0gcmVzdWx0LnJlc3VsdDtcbiAgICAgIHRoaXMudXNlcmRpc3BsYXlOYW1lID0gdGhpcy51c2VyRGV0YWlsc0luZm9bJ3VzZXJEaXNwbGF5TmFtZSddO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZUFQSUV2ZW50TGlzdGVuZXJEYXRhLm5leHQodHJ1ZSk7XG4gICAgdGhpcy51bnN1YnNjcmliZUFQSUV2ZW50TGlzdGVuZXJEYXRhLmNvbXBsZXRlKCk7XG5cbiAgICB0aGlzLnVuc3Vic2NyaWJlU2lkZWJhckxpc3RlbmVyRGF0YS5uZXh0KHRydWUpO1xuICAgIHRoaXMudW5zdWJzY3JpYmVTaWRlYmFyTGlzdGVuZXJEYXRhLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxoZWFkZXIgY2xhc3M9XCJhcHAtaGVhZGVyIGV4dFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsb2dvIGdhcC00XCI+XHJcbiAgICAgICAgPGltZ1xyXG4gICAgICAgICAgKm5nSWY9XCJFbmFibGVMb2dvICYmIGhlYWRlckxvZ29cIlxyXG4gICAgICAgICAgY2xhc3M9XCJsb2dvLXNpemVcIlxyXG4gICAgICAgICAgdGl0bGU9XCJMb2dvXCJcclxuICAgICAgICAgIGFsdD1cIkxvZ29cIlxyXG4gICAgICAgICAgW3NyY109XCJoZWFkZXJMb2dvXCJcclxuICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxwLXNrZWxldG9uXHJcbiAgICAgICAgICAqbmdJZj1cIiFoZWFkZXJMb2dvXCJcclxuICAgICAgICAgIGhlaWdodD1cIjEuNXJlbVwiXHJcbiAgICAgICAgICB3aWR0aD1cIjVyZW1cIlxyXG4gICAgICAgID48L3Atc2tlbGV0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHJvak5hbWVcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibW9kbmFtZVwiPnt7IG1vZHVsZU5hbWUgfX08L2gxPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8IS0tdGltZXpvbmUtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkVuYWJsZVRpbWVab25lICYmIHVzZXJUaW1lWm9uZUFiYnJldmlhdGlvbnNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGltZXpvbmVcIj5cclxuICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgc3JjPVwiLi4vYXNzZXRzL2NvbW1vbi1oZWFkZXItbGliL2ltYWdlcy9zY2hlZHVsZS5zdmdcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1iLTFcIlxyXG4gICAgICAgICAgICBhbHQ9XCJJY29uXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWV6b25lLXRleHRcIlxyXG4gICAgICAgICAgICA+e3sgXCJHZW5lcmljX2xpYi5QcmVmZXJyZWRUaW1lem9uZVwiIHwgdHJhbnNsYXRlIH19IDpcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICpuZ0lmPVwidXNlclRpbWVab25lQWJicmV2aWF0aW9uc1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidXNlci10elwiXHJcbiAgICAgICAgICAgIFt0aXRsZV09XCJ1c2VyVGltZVpvbmVGdWxsRm9ybVwiXHJcbiAgICAgICAgICAgID57eyB1c2VyVGltZVpvbmVBYmJyZXZpYXRpb25zIH19PC9zcGFuXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPCEtLWxvYi0tPlxyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgKm5nSWY9XCJFbmFibGVMT0IgJiYgIXNob3dMb2JMb2FkZXI7IGVsc2UgTG9iTG9kZGVyQW5pbWF0aW9uXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWxlZnQgZC1mbGV4XCI+XHJcbiAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgIHNyYz1cIi4uL2Fzc2V0cy9jb21tb24taGVhZGVyLWxpYi9pbWFnZXMvbWFya2VyLXBpbi5zdmdcIlxyXG4gICAgICAgICAgICBhbHQ9XCJwZW4gSWNvblwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICAgPHAtZHJvcGRvd25cclxuICAgICAgICAgICAgZmlsdGVyUGxhY2Vob2xkZXI9XCJ7eyAnR2VuZXJpY19saWIuU2VhcmNoJyB8IHRyYW5zbGF0ZSB9fVwiXHJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cInVzZXJMT0JMaXN0XCJcclxuICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uTG9iQ2hhbmdlRXZlbnQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibG9iTmFtZVwiXHJcbiAgICAgICAgICAgIG9wdGlvblZhbHVlPVwibG9iSWRcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTE9CSWRcIlxyXG4gICAgICAgICAgICBbZmlsdGVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICBmaWx0ZXJCeT1cImxvYk5hbWVcIlxyXG4gICAgICAgICAgICBbc2hvd0NsZWFyXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cInsgd2lkdGg6ICcxNTBweCcsIGhlaWdodDogJzMwcHgnIH1cIlxyXG4gICAgICAgICAgICBbcmVzZXRGaWx0ZXJPbkhpZGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFt2aXJ0dWFsU2Nyb2xsXT1cInRydWVcIlxyXG4gICAgICAgICAgICBbbGF6eV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIG5hbWU9XCJsb2JcIlxyXG4gICAgICAgICAgICBbaXRlbVNpemVdPVwiMzBcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImxvYmxpc3QtZHJwZHduXCJcclxuICAgICAgICAgICAgcGFuZWxTdHlsZUNsYXNzPVwibG9ibGlzdC1kcnBkd24tcGFuZWxcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWxvYmxpc3QgcFRlbXBsYXRlPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiB0aXRsZT1cInt7IGxvYmxpc3QubG9iTmFtZSB9fVwiIGNsYXNzPVwiaGVhZGVyLWRycGR3blwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBsb2JsaXN0LmxvYk5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9wLWRyb3Bkb3duPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLXRlbXBsYXRlICNMb2JMb2RkZXJBbmltYXRpb24+XHJcbiAgICAgICAgPHAtc2tlbGV0b24gaGVpZ2h0PVwiMS41cmVtXCIgd2lkdGg9XCIxMHJlbVwiPjwvcC1za2VsZXRvbj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDwhLS1tYWlsYm94LS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0hlYWRlckNvbnRlbnRMb2FkZWQ7IGVsc2UgSGVhZGVyTG9hZGluZ1wiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJFbmFibGVNYWlsXCIgY2xhc3M9XCJoZWFkZXItbGVmdC1pY29uXCI+XHJcbiAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgIHNyYz1cIi4uL2Fzc2V0cy9jb21tb24taGVhZGVyLWxpYi9pbWFnZXMvbWFpbC1pY29uLnN2Z1wiXHJcbiAgICAgICAgICAgIGFsdD1cIm1haWwgSWNvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaGVhZGVyaWdodC1pY29uXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInNob3dNYWlsQm94U2NyZWVuKClcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRW5hYmxlTWFpbCAmJiB0b3RhbEVtYWlscy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXI+IC0tPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJhZGdlLW5vdGlmeVwiPlxyXG4gICAgICAgICAgICA8ZGl2IHBCYWRnZSBbdmFsdWVdPVwidG90YWxFbWFpbHNcIj48L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tbm90aWZpY2F0aW9uLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci1sZWZ0LWljb25cIiAqbmdJZj1cIkVuYWJsZU5vdGlmaWNhdGlvbnNcIj5cclxuICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgc3JjPVwiLi4vYXNzZXRzL2NvbW1vbi1oZWFkZXItbGliL2ltYWdlcy9iZWxsLWljb24uc3ZnXCJcclxuICAgICAgICAgICAgYWx0PVwibWFpbCBJY29uXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXJpZ2h0LWljb25cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiT3Blbk5vdGlmaWNhdGlvbk1vZGFsKClcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nSWY9XCJFbmFibGVOb3RpZmljYXRpb25zICYmIHVzZXJOb3RpZmljYXRpb25Db3VudC5sZW5ndGggPiAwXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFkZ2Utbm90aWZ5XCI+XHJcbiAgICAgICAgICAgIDxkaXYgcEJhZGdlIFt2YWx1ZV09XCJ1c2VyTm90aWZpY2F0aW9uQ291bnRcIj48L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tOSBEb3RzIC0tPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICpuZ0lmPVwiRW5hYmxlTW9yZUFwcHNcIlxyXG4gICAgICAgICAgY2xhc3M9XCJoZWFkZXItbGVmdC1pY29uXCJcclxuICAgICAgICAgIHRpdGxlPVwiQ29udHJvbCBDZW50ZXJcIlxyXG4gICAgICAgICAgYWx0PVwiYmVsbCBJY29uXCJcclxuICAgICAgICAgIChjbGljayk9XCJzaG93VXNlckFwcHNQYW5lbCgkZXZlbnQpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgIHNyYz1cIi4uL2Fzc2V0cy9jb21tb24taGVhZGVyLWxpYi9pbWFnZXMvYXBwcy0xLnN2Z1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYXBwcy1pY29uXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS11c2VyIGRpc3BsYXkgbmFtZSAtLT5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAqbmdJZj1cIkVuYWJsZVByb2ZpbGVcIlxyXG4gICAgICAgICAgY2xhc3M9XCJtYWluLXJpZ2h0XCJcclxuICAgICAgICAgIChjbGljayk9XCJzaG93VXNlckRldGFpbHNQYW5lbCgpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5pdGlhbC10ZXh0IG14LTFcIj5cclxuICAgICAgICAgICAgICB7eyB1c2VyZGlzcGxheU5hbWUgfCBzbGljZVRvVHdvIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlICNIZWFkZXJMb2FkaW5nPlxyXG4gICAgICAgIDxwLXNrZWxldG9uIHNoYXBlPVwiY2lyY2xlXCIgc2l6ZT1cIjEuM3JlbVwiIHN0eWxlQ2xhc3M9XCJteC0yXCI+PC9wLXNrZWxldG9uPlxyXG4gICAgICAgIDxwLXNrZWxldG9uIHNoYXBlPVwiY2lyY2xlXCIgc2l6ZT1cIjEuM3JlbVwiIHN0eWxlQ2xhc3M9XCJteC0yXCI+PC9wLXNrZWxldG9uPlxyXG4gICAgICAgIDxwLXNrZWxldG9uIHNpemU9XCIxLjVyZW1cIiBzdHlsZUNsYXNzPVwibXgtMlwiPjwvcC1za2VsZXRvbj5cclxuICAgICAgICA8cC1za2VsZXRvbiBzaGFwZT1cImNpcmNsZVwiIHNpemU9XCIycmVtXCIgc3R5bGVDbGFzcz1cIm14LTJcIj48L3Atc2tlbGV0b24+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9oZWFkZXI+XHJcblxyXG48IS0tTGlzdCBvZiBBcHBsaWNhdGlvbiA6IDkgZG90cyAtLT5cclxuPHAtb3ZlcmxheVBhbmVsICNBcHAgY2xhc3M9XCJwdC0wXCIgc3R5bGVDbGFzcz1cImFwcC1wYW5lbFwiPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdXNlckFwcExvYWRlckxvYWRkZXI7IGVsc2UgTG9hZGluZ1RlbXBsYXRlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLXBvcG92ZXItY29udGVudFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid2FmZmxlLWFsaWduXCI+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJ3YWZmbGUtcG9wdXBcIlxyXG4gICAgICAgICAgW3RpdGxlXT1cImFwcERldGFpbHNbJ2FwcGxpY2F0aW9uTmFtZSddXCJcclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBhcHBEZXRhaWxzIG9mIExpc3RPZlVzZXJQcml2aWxsZWdlZEFwcFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZ2V0Q29ubmVjdGlvbm9mQXBwbGljYXRpb24oYXBwRGV0YWlsc1snYXBwQ29kZSddKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAqbmdJZj1cImFwcERldGFpbHM/LmFwcENvZGVcIlxyXG4gICAgICAgICAgICBzcmM9XCIuLi9hc3NldHMvY29tbW9uLWhlYWRlci1saWIvaW1hZ2VzL3t7XHJcbiAgICAgICAgICAgICAgYXBwRGV0YWlscy5hcHBDb2RlXHJcbiAgICAgICAgICAgIH19LnN2Z1wiXHJcbiAgICAgICAgICAgIGFsdD1cIkFwcCBpY29uXCJcclxuICAgICAgICAgIC8+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndhZmZsZS10ZXh0XCI+e3sgYXBwRGV0YWlsc1tcImFwcGxpY2F0aW9uTmFtZVwiXSB9fTwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxuZy10ZW1wbGF0ZSAjTG9hZGluZ1RlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cImN1c3RvbS1wb3BvdmVyLWNvbnRlbnQgc2tlbGV0b24tcG9wb3ZlclwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJlcGVhdExvYWRlclwiPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8cC1za2VsZXRvbiBzaXplPVwiM3JlbVwiPjwvcC1za2VsZXRvbj5cclxuICAgICAgICAgIDxwLXNrZWxldG9uIGhlaWdodD1cIi4zcmVtXCIgd2lkdGg9XCIzNXB4XCI+PC9wLXNrZWxldG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvcC1vdmVybGF5UGFuZWw+XHJcblxyXG48IS0tbWFpbGJveCBkZXRhaWxzLS0+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93TWFpbGJveFNjcmVlbmZsYWdcIj5cclxuICA8ZGl2IGNsYXNzPVwiY2hhbmdpbmdDb250ZW50XCI+XHJcbiAgICA8YXBwLXVzZXItbWFpbGJveFxyXG4gICAgICAoY2xvc2VNYWlsRGlhbG9nQm94KT1cImhpZGVNYWlsQm94U2NyZWVuKClcIlxyXG4gICAgPjwvYXBwLXVzZXItbWFpbGJveD5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48IS0tIFVzZXJkZXRhaWxzIHByb2ZpbGUgcG9wIHVwIC0tPlxyXG48ZGl2IGNsYXNzPVwicHJvZmlsZS1zaWRlYmFyXCI+XHJcbiAgPGFwcC1zaWRlLXBvcHVwXHJcbiAgICAqbmdJZj1cImlzT3BlblNpZGVQb3B1cFwiXHJcbiAgICBbdmlzaWJsZV09XCJ0cnVlXCJcclxuICAgIFtwb3NpdGlvbl09XCIncmlnaHQnXCJcclxuICAgIChjbG9zZURpYWxvZ0JveCk9XCJjbG9zZVNpZGVQb3B1cCgpXCJcclxuICA+XHJcbiAgICA8YXBwLXVzZXItc2lkZWJhclxyXG4gICAgICAqbmdJZj1cInNob3dVc2VyRGV0YWlsc1wiXHJcbiAgICAgIChjbG9zZURpYWxvZ0JveCk9XCJjbG9zZVNpZGVQb3B1cCgpXCJcclxuICAgID48L2FwcC11c2VyLXNpZGViYXI+XHJcbiAgPC9hcHAtc2lkZS1wb3B1cD5cclxuPC9kaXY+XHJcblxyXG48IS0tIE5vdGlmaWNhdGlvbiBzaWRlIHBvcHVwICAtLT5cclxuPGRpdlxyXG4gIGNsYXNzPVwibW9kYWwgZmFkZSBjb21tb24tYWxlcnQtbW9kYWxcIlxyXG4gICNub3RpZnlNb2RhbFxyXG4gIGlkPVwiTm90aWZ5X1NpZGViYXJNb2RhbFwiXHJcbiAgdGFiaW5kZXg9XCItMVwiXHJcbiAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgc2lkZWJhci1vdXRlciB3aGl0ZS1iZ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNpZGViYXItY29udGFpbmVyIHdoaXRlLWJnXCI+XHJcbiAgICAgICAgPCEtLSBrZWVwIGV2ZXJ5dGhpbmcgaW5zaWRlIHRoaXMgY29udGVudCAtLT5cclxuXHJcbiAgICAgICAgPCEtLSBTaWRlYmFyIEhlYWRlciAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2lkZWJhci1oZWFkZXIgZ3JleS1iYWNrZ3JvdW5kXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2gtdG9wXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaC10b3AtbGVmdCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgbG9nLXRleHRcIj5cclxuICAgICAgICAgICAgICAgIHt7IFwiR2VuZXJpY19saWIuTm90aWZpY2F0aW9uXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaC10b3AtcmlnaHRcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29tbW9uLWJuIHRlcnRpYXJ5LWJ0blwiXHJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsb3NlTW9kYWwoKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvY29tbW9uLWhlYWRlci1saWIvaW1hZ2VzL2Nsb3NlLnN2Z1wiXHJcbiAgICAgICAgICAgICAgICAgIGFsdD1cIkNsb3NlXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbWdzIG1iLTFcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBTaWRlYmFyIEJvZHkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNpZGViYXItYm9keVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aS10ZXh0XCI+XHJcbiAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgIFwiR2VuZXJpY19saWIuWW91SGF2ZU5Ob3RpZmljYXRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgY291bnQ6IHVzZXJOb3RpZmljYXRpb25Db3VudCB9XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTEgcmVmcmVzaC1pY29uXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiZ2V0RXZlbnR3aXNlTm90aWZpY2F0aW9uKClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2NvbW1vbi1oZWFkZXItbGliL2ltYWdlcy9yZWZyZXNoLTEuc3ZnXCJcclxuICAgICAgICAgICAgICAgIGFsdD1cIlJlZnJlc2hcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlZnJlc2gtdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAge3sgXCJHZW5lcmljX2xpYi5SZWZyZXNoXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgIWlzRXJyb3JGb3VuZCAmJiAhbm90aWZpY2F0aW9uTG9hZGRlcjtcclxuICAgICAgICAgICAgICAgIGVsc2UgTm90aV9Mb2FkaW5nVGVtcGxhdGVcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJub3RpZnktYm9yZGVyXCJcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBldmVudCBvZiBldmVudHdpc2VOb3RpZmljYXRpb25Db3VudFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluaXRpYWwtdGV4dCBpbml0aWFsLXRleHQtMSBteC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2NvbW1vbi1oZWFkZXItbGliL2ltYWdlcy9ub3RpX3RpY2tldC5zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgYWx0PVwiSWNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VydmljZS1jb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID57eyBldmVudFtcIlBlbmRpbmdDb3VudFwiXSB9fSBOZXcgPC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICA+PHNwYW4gY2xhc3M9XCJzZXJ2aWNlLXJlcXVlc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+e3sgZXZlbnRbXCJFdmVudE5hbWVcIl0gfX0gRXZlbnQgcmVxdWVzdHM8L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmV5LWJvcmRlcnMgbXQtMlwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNOb3RpX0xvYWRpbmdUZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm90aWZpY2F0aW9uTG9hZGRlcjsgZWxzZSBlcnJvclRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJlcGVhdExvYWRlcjFcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cC1za2VsZXRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgc2hhcGU9XCJjaXJjbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIjYwcHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cIm15LTJcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1zLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIHdpZHRoPVwiMjAwJVwiIHN0eWxlQ2xhc3M9XCJtYi0yXCI+PC9wLXNrZWxldG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHAtc2tlbGV0b24gd2lkdGg9XCIxNTBweFwiIGhlaWdodD1cIjFyZW1cIj48L3Atc2tlbGV0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Vycm9yVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPGFwcC1uby1zZXJ2aWNlLW15LWFjY2Vzcy1wZ1xyXG4gICAgICAgICAgICAgICAgaGVhZGluZz1cInt7ICdHZW5lcmljX2xpYi5Db21tb25FcnJvcicgfCB0cmFuc2xhdGUgfX1cIlxyXG4gICAgICAgICAgICAgID48L2FwcC1uby1zZXJ2aWNlLW15LWFjY2Vzcy1wZz5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLSBOb3RpZmljYXRpb24gY29udGVudCAmIGxvYWRlcnMgcmVtYWluIGhlcmUgLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIGVuZCBvZiBzaWRlYmFyLWNvbnRhaW5lciAtLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSBlbmQgb2YgbW9kYWwtY29udGVudCAtLT5cclxuICA8L2Rpdj5cclxuICA8IS0tIGVuZCBvZiBtb2RhbC1kaWFsb2cgLS0+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBDb21tb24gQ29uaXJtYXRpb24gTW9kYWwgIC0tPlxyXG48Y29uZmlybS1kaWFsb2dcclxuICBjbGFzcz1cInJtLWludmFsaWQtYm9yZGVyXCJcclxuICAjY29uZmlybURpYWxvZ1xyXG4gIGhlYWRlcj1cInt7ICdHZW5lcmljX2xpYi5DaGFuZ2VMT0InIHwgdHJhbnNsYXRlIH19XCJcclxuICBtZXNzYWdlPVwie3sgJ0dlbmVyaWNfbGliLkRvWW91V2FudFRvQ2hhbmdlVGhlQ3VycmVudExPQicgfCB0cmFuc2xhdGUgfX1cIlxyXG4gIChyZXN1bHQpPVwibG9iQ2hhbmdlQ29uZmlybWF0aW9uKCRldmVudClcIlxyXG4+PC9jb25maXJtLWRpYWxvZz5cclxuXHJcbjwhLS0qIE5lZWQgdG8gdXNlIGNvbXBvbmVudCBiYXNlZCBub3RpZmljYXRpb24gVUkgYXMgYmVsb3cgLS0+XHJcbjwhLS0gTm90aWZpY2F0aW9uLVNpZGViYXIgU3RhcnRlZCAtLT5cclxuPCEtLSA8YXBwLW5vdGlmaWNhdGlvbi1zaWRlYmFyIFtpc0Vycm9yT2NjdXJlZF09XCJpc0Vycm9yRm91bmRcIiBbdXNlck5vdGlmaWNhdGlvbkNvdW50XT1cInVzZXJOb3RpZmljYXRpb25Db3VudFwiXHJcbiAgW3VzZXJOb3RpZmljYXRpb25Db3VudE9ial09XCJ1c2VyTm90aWZpY2F0aW9uQ291bnRPYmpcIiBbZXZlbnR3aXNlTm90aWZpY2F0aW9uQ291bnRdPVwiZXZlbnR3aXNlTm90aWZpY2F0aW9uQ291bnRcIlxyXG4gIChyZWZyZXNoTm90aWZpY2F0aW9uKT1cImdldEV2ZW50d2lzZU5vdGlmaWNhdGlvbkNvdW50KClcIlxyXG4gIFtub3RpZmljYXRpb25Mb2FkZGVyXT1cIm5vdGlmaWNhdGlvbkxvYWRkZXJcIj48L2FwcC1ub3RpZmljYXRpb24tc2lkZWJhcj4gLS0+XHJcbjwhLS0gTm90aWZpY2F0aW9uLVNpZGViYXIgRW5kZWQgLS0+XHJcbiJdfQ==
|