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.
Files changed (195) hide show
  1. package/README.md +24 -0
  2. package/assets/.gitkeep +0 -0
  3. package/assets/i18n/ar.json +83 -0
  4. package/assets/i18n/de.json +83 -0
  5. package/assets/i18n/en.json +83 -0
  6. package/assets/i18n/es.json +83 -0
  7. package/assets/i18n/fr.json +83 -0
  8. package/assets/i18n/hi.json +83 -0
  9. package/assets/i18n/ja.json +83 -0
  10. package/assets/i18n/ko.json +83 -0
  11. package/assets/images/APP019.svg +6 -0
  12. package/assets/images/APP020.svg +4 -0
  13. package/assets/images/APP021.svg +6 -0
  14. package/assets/images/APP022.svg +6 -0
  15. package/assets/images/APP023.svg +11 -0
  16. package/assets/images/APP024.svg +9 -0
  17. package/assets/images/APP025.svg +8 -0
  18. package/assets/images/APP026.svg +4 -0
  19. package/assets/images/APP027.svg +5 -0
  20. package/assets/images/APP028.svg +6 -0
  21. package/assets/images/APP029.svg +12 -0
  22. package/assets/images/APP030.svg +20 -0
  23. package/assets/images/APP031.svg +14 -0
  24. package/assets/images/APP032.svg +17 -0
  25. package/assets/images/Frame.svg +104 -0
  26. package/assets/images/apps-1.svg +22 -0
  27. package/assets/images/bell-icon.svg +3 -0
  28. package/assets/images/check_circle.svg +3 -0
  29. package/assets/images/close copy.svg +5 -0
  30. package/assets/images/close.svg +5 -0
  31. package/assets/images/copy-img.svg +3 -0
  32. package/assets/images/cross-search.svg +4 -0
  33. package/assets/images/domain_img.svg +3 -0
  34. package/assets/images/east.svg +3 -0
  35. package/assets/images/error.svg +3 -0
  36. package/assets/images/filepath.svg +8 -0
  37. package/assets/images/flag1.svg +3 -0
  38. package/assets/images/gc-mail.svg +3 -0
  39. package/assets/images/grey-arrow.svg +3 -0
  40. package/assets/images/info.svg +3 -0
  41. package/assets/images/local.svg +3 -0
  42. package/assets/images/lock-pass.svg +3 -0
  43. package/assets/images/lock1.svg +3 -0
  44. package/assets/images/login-bg/default_bg.svg +448 -0
  45. package/assets/images/login-bg/visibility.svg +3 -0
  46. package/assets/images/login-bg/visibility_off.svg +3 -0
  47. package/assets/images/logo.png +0 -0
  48. package/assets/images/logout.svg +3 -0
  49. package/assets/images/mail-icon.svg +3 -0
  50. package/assets/images/marker-pin.svg +4 -0
  51. package/assets/images/noti_ticket.svg +3 -0
  52. package/assets/images/pass-img.svg +3 -0
  53. package/assets/images/refresh-1.svg +3 -0
  54. package/assets/images/schedule.svg +1 -0
  55. package/assets/images/search-filter.svg +3 -0
  56. package/assets/images/search-icon.svg +3 -0
  57. package/assets/images/settings.svg +3 -0
  58. package/assets/images/successful.svg +10 -0
  59. package/assets/images/user-name.svg +3 -0
  60. package/assets/scss/_sidebar.scss +267 -0
  61. package/assets/scss/styles.scss +577 -0
  62. package/esm2020/common-header-lib.mjs +5 -0
  63. package/esm2020/lib/Validators/noSpaceAllowed.mjs +16 -0
  64. package/esm2020/lib/common-header-lib.component.mjs +612 -0
  65. package/esm2020/lib/common-header-lib.module.mjs +208 -0
  66. package/esm2020/lib/common-header-lib.service.mjs +200 -0
  67. package/esm2020/lib/components/confirm-dialog/confirm-dialog.component.mjs +49 -0
  68. package/esm2020/lib/components/general-configuration/general-configuration.component.mjs +402 -0
  69. package/esm2020/lib/components/general-configuration/landingpg-config/landingpg-config.component.mjs +124 -0
  70. package/esm2020/lib/components/general-configuration/timezone-configuration/timezone-configuration.component.mjs +138 -0
  71. package/esm2020/lib/components/grid-pagination/grid-pagination.component.mjs +39 -0
  72. package/esm2020/lib/components/ng-translation/ng-translation.component.mjs +65 -0
  73. package/esm2020/lib/components/no-service-my-access-pg/no-service-my-access-pg.component.mjs +19 -0
  74. package/esm2020/lib/components/notification-sidebar/notification-sidebar.component.mjs +40 -0
  75. package/esm2020/lib/components/side-popup/side-popup.component.mjs +34 -0
  76. package/esm2020/lib/components/user-mailbox/user-mailbox.component.mjs +173 -0
  77. package/esm2020/lib/components/user-sidebar/user-sidebar.component.mjs +279 -0
  78. package/esm2020/lib/components/viewpassword-popup/viewpassword-popup.component.mjs +196 -0
  79. package/esm2020/lib/model/data_model.mjs +217 -0
  80. package/esm2020/lib/pipes/custome-dateformat.pipe.mjs +27 -0
  81. package/esm2020/lib/pipes/date-diff.pipe.mjs +56 -0
  82. package/esm2020/lib/pipes/slice-to-two.pipe.mjs +34 -0
  83. package/esm2020/lib/services/EncrypDecryp_RSA.service.mjs +100 -0
  84. package/esm2020/lib/services/async-passwordcheck.service.mjs +72 -0
  85. package/esm2020/lib/services/cookie-storage-manager.service.mjs +78 -0
  86. package/esm2020/lib/services/encrpdata.service.mjs +55 -0
  87. package/esm2020/lib/services/encrydecrydata.service.mjs +207 -0
  88. package/esm2020/lib/services/event.service.mjs +133 -0
  89. package/esm2020/lib/services/http/http-common.service.mjs +216 -0
  90. package/esm2020/lib/services/http/http-general-config.service.mjs +84 -0
  91. package/esm2020/lib/services/rest-login-form.service.mjs +296 -0
  92. package/esm2020/lib/services/rest-signalr.service.mjs +100 -0
  93. package/esm2020/lib/services/storage.service.mjs +33 -0
  94. package/esm2020/lib/services/toast-msg.service.mjs +95 -0
  95. package/esm2020/lib/services/vapt-validation.service.mjs +31 -0
  96. package/esm2020/public-api.mjs +13 -0
  97. package/fesm2015/common-header-lib.mjs +4165 -0
  98. package/fesm2015/common-header-lib.mjs.map +1 -0
  99. package/fesm2020/common-header-lib.mjs +4146 -0
  100. package/fesm2020/common-header-lib.mjs.map +1 -0
  101. package/index.d.ts +5 -0
  102. package/lib/Validators/noSpaceAllowed.d.ts +2 -0
  103. package/lib/common-header-lib.component.d.ts +148 -0
  104. package/lib/common-header-lib.module.d.ts +43 -0
  105. package/lib/common-header-lib.service.d.ts +25 -0
  106. package/lib/components/confirm-dialog/confirm-dialog.component.d.ts +13 -0
  107. package/lib/components/general-configuration/general-configuration.component.d.ts +86 -0
  108. package/lib/components/general-configuration/landingpg-config/landingpg-config.component.d.ts +37 -0
  109. package/lib/components/general-configuration/timezone-configuration/timezone-configuration.component.d.ts +38 -0
  110. package/lib/components/grid-pagination/grid-pagination.component.d.ts +20 -0
  111. package/lib/components/ng-translation/ng-translation.component.d.ts +22 -0
  112. package/lib/components/no-service-my-access-pg/no-service-my-access-pg.component.d.ts +8 -0
  113. package/lib/components/notification-sidebar/notification-sidebar.component.d.ts +16 -0
  114. package/lib/components/side-popup/side-popup.component.d.ts +14 -0
  115. package/lib/components/user-mailbox/user-mailbox.component.d.ts +40 -0
  116. package/lib/components/user-sidebar/user-sidebar.component.d.ts +61 -0
  117. package/lib/components/viewpassword-popup/viewpassword-popup.component.d.ts +47 -0
  118. package/lib/model/data_model.d.ts +184 -0
  119. package/lib/pipes/custome-dateformat.pipe.d.ts +8 -0
  120. package/lib/pipes/date-diff.pipe.d.ts +9 -0
  121. package/lib/pipes/slice-to-two.pipe.d.ts +7 -0
  122. package/lib/services/EncrypDecryp_RSA.service.d.ts +15 -0
  123. package/lib/services/async-passwordcheck.service.d.ts +18 -0
  124. package/lib/services/cookie-storage-manager.service.d.ts +16 -0
  125. package/lib/services/encrpdata.service.d.ts +12 -0
  126. package/lib/services/encrydecrydata.service.d.ts +33 -0
  127. package/lib/services/event.service.d.ts +30 -0
  128. package/lib/services/http/http-common.service.d.ts +30 -0
  129. package/lib/services/http/http-general-config.service.d.ts +15 -0
  130. package/lib/services/rest-login-form.service.d.ts +39 -0
  131. package/lib/services/rest-signalr.service.d.ts +23 -0
  132. package/lib/services/storage.service.d.ts +11 -0
  133. package/lib/services/toast-msg.service.d.ts +21 -0
  134. package/lib/services/vapt-validation.service.d.ts +7 -0
  135. package/package.json +49 -0
  136. package/public-api.d.ts +8 -0
  137. package/src/assets/i18n/ar.json +83 -0
  138. package/src/assets/i18n/de.json +83 -0
  139. package/src/assets/i18n/en.json +83 -0
  140. package/src/assets/i18n/es.json +83 -0
  141. package/src/assets/i18n/fr.json +83 -0
  142. package/src/assets/i18n/hi.json +83 -0
  143. package/src/assets/i18n/ja.json +83 -0
  144. package/src/assets/i18n/ko.json +83 -0
  145. package/src/assets/images/APP019.svg +6 -0
  146. package/src/assets/images/APP020.svg +4 -0
  147. package/src/assets/images/APP021.svg +6 -0
  148. package/src/assets/images/APP022.svg +6 -0
  149. package/src/assets/images/APP023.svg +11 -0
  150. package/src/assets/images/APP024.svg +9 -0
  151. package/src/assets/images/APP025.svg +8 -0
  152. package/src/assets/images/APP026.svg +4 -0
  153. package/src/assets/images/APP027.svg +5 -0
  154. package/src/assets/images/APP028.svg +6 -0
  155. package/src/assets/images/APP029.svg +12 -0
  156. package/src/assets/images/APP030.svg +20 -0
  157. package/src/assets/images/APP031.svg +14 -0
  158. package/src/assets/images/APP032.svg +17 -0
  159. package/src/assets/images/Frame.svg +104 -0
  160. package/src/assets/images/apps-1.svg +22 -0
  161. package/src/assets/images/bell-icon.svg +3 -0
  162. package/src/assets/images/check_circle.svg +3 -0
  163. package/src/assets/images/close copy.svg +5 -0
  164. package/src/assets/images/close.svg +5 -0
  165. package/src/assets/images/copy-img.svg +3 -0
  166. package/src/assets/images/cross-search.svg +4 -0
  167. package/src/assets/images/domain_img.svg +3 -0
  168. package/src/assets/images/east.svg +3 -0
  169. package/src/assets/images/error.svg +3 -0
  170. package/src/assets/images/filepath.svg +8 -0
  171. package/src/assets/images/flag1.svg +3 -0
  172. package/src/assets/images/gc-mail.svg +3 -0
  173. package/src/assets/images/grey-arrow.svg +3 -0
  174. package/src/assets/images/info.svg +3 -0
  175. package/src/assets/images/local.svg +3 -0
  176. package/src/assets/images/lock-pass.svg +3 -0
  177. package/src/assets/images/lock1.svg +3 -0
  178. package/src/assets/images/login-bg/default_bg.svg +448 -0
  179. package/src/assets/images/login-bg/visibility.svg +3 -0
  180. package/src/assets/images/login-bg/visibility_off.svg +3 -0
  181. package/src/assets/images/logo.png +0 -0
  182. package/src/assets/images/logout.svg +3 -0
  183. package/src/assets/images/mail-icon.svg +3 -0
  184. package/src/assets/images/marker-pin.svg +4 -0
  185. package/src/assets/images/noti_ticket.svg +3 -0
  186. package/src/assets/images/pass-img.svg +3 -0
  187. package/src/assets/images/refresh-1.svg +3 -0
  188. package/src/assets/images/schedule.svg +1 -0
  189. package/src/assets/images/search-filter.svg +3 -0
  190. package/src/assets/images/search-icon.svg +3 -0
  191. package/src/assets/images/settings.svg +3 -0
  192. package/src/assets/images/successful.svg +10 -0
  193. package/src/assets/images/user-name.svg +3 -0
  194. package/src/assets/scss/_sidebar.scss +267 -0
  195. 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==